Anbindung des Xiaomi Mi Robot Roborock S50 an Alexa

Benutzeravatar

Themenstarter
Fonzo
Beiträge: 1690
Registriert: Fr 24. Feb 2017, 00:06

Do 12. Apr 2018, 16:26

Mr.Fisch hat geschrieben:
Do 12. Apr 2018, 14:52
Ich krümel demonstrativ ein wenig rum, zeige dann mit dem Finger auf die Krümel und sage "Alexa, mach hier sauber".
Das ist nicht ganz so banal wie Du Dir das vorstellst. Die Phrase kannst Du so in einem normalen SmartHomeSkill mit dem Du ein Gerät ansprichst so nicht nutzen. Bei einem Gerät musst Du so was sagen wie ein/ aus oder ähnliches. Ein Custom Skill kommt für so eine Phrase auch nicht in Frage da kein Invocationname enthalten ist. Es bleibt also nur die Möglichkeit eine Alexa Routine zu nutzen. Du legst also eine Szene an mit dem Befehl die Zone zu reinigen, wenn das Gerät mal da ist. Am Beispiel von IP-Symcon legst Du ein Skript mit dem Befehl an die Zone zu reinigen. Diese Szene bindest Du dann in die Alexa Routine ein. Ob das überhaupt so funktioniert kannst Du ja einfach testen in dem Du eine Routine anlegst die genau so lautet und da momentan etwas anderes drauf legst wie den Wetterbericht. Dann wirst Du dann ja sehen ob die Routine auf so eine Phrase reagiert. Wie man eine Szene aus ioBroker in eine Alexa Routine einbindet kann Dir wohl Nick oder andere besser erläutern, die das System nutzen.

Wenn Du Deine „Show“ noch ausbauen willst dann musst Du zusätzlich noch einen Custom Skill für den Roborock erstellen. Dann kannst Du auch Fragen stellen. Dazu müsstest Du zunächst ein Array anlegen mit Zonenname und Koordinaten. Anhand der tatsächlichen Position des Saugers kannst Du dann den Raumnamen bestimmen und Dir ansagen lassen.

Dann kannst Du so was bauen wie:
Alexa, frage Roborock nach dem Standort.
Antwort:
Ich bin gerade in der Küche.
Komm hier her, hier ist Dreck und mache sauber.
Antwort:
Bin schon unterwegs Meister.

Deine ‚Show‘ kannst Du dann beliebig theatralisch nach Deinem belieben und Deinen Dialogen aufbauen.
0 x
Benutzeravatar

theNick
Beiträge: 136
Registriert: So 29. Jan 2017, 18:11
Vorhandene Echo Dots: 2

Do 12. Apr 2018, 16:53

Fonzo, das klingt sehr vielversprechend :-) Werde mich wohl mal mit Custom Skills befassen müssen!
Fonzo hat geschrieben:
Mi 11. Apr 2018, 15:46
...mich schreckt aber halt nach wie vor ab, das der Sauger dafür gerootet sein muss um die Karte auszulesen.
was hält Dich eigentlich vom Rooten ab, wenn ich fragen darf?
0 x
TV: Samsung Plasma PS506970YS / Receiver: Onkyo TX-NR646 / HTPC: MediaPortal, IR605A/Q, IMON / Fire TV Stick / Raspberry PI 2 / Raspberry PI 3 / Harmony 650 / Harmony Elite/Hub / Hue Bridge + 4 Lampen / Echo Dot 2x
Benutzeravatar

Themenstarter
Fonzo
Beiträge: 1690
Registriert: Fr 24. Feb 2017, 00:06

Do 12. Apr 2018, 19:19

theNick hat geschrieben: was hält Dich eigentlich vom Rooten ab, wenn ich fragen darf?
Mich persönlich hält da nichts ab. Ich möchte das nur so einfach wie möglich halten für jemand der mit Computern nicht so viel am Hut hat bzw. eine Einrichtung sollte möglichst intuitiv sein, ohne einen SSH Zugang zum Sauger zu benötigen. Das erspart auch das ausführliche dokumentieren und reduziert einfach Nachfragen. Aber fürs erste reicht es mir erst mal das alles funktioniert den Setupprozess insgesamt noch zu vereinfachen kann gemacht werden wenn mal Zeit dazu da ist. Leute die so ein Gerät erwerben sollten wissen das sie sich auf Bastelei einlassen, dafür haben sie im Anschaffungspreis gespart. Deutlich teuerere Geräte lassen sich auch wesentlich einfacher in eine Hausautomation einbinden bzw. lassen sich deutlich mit weniger Aufwand per Sprache steuern, dafür sind diese aber auch in der Anschaffung teurer.
0 x
Benutzeravatar

theNick
Beiträge: 136
Registriert: So 29. Jan 2017, 18:11
Vorhandene Echo Dots: 2

Do 12. Apr 2018, 19:30

Alles klar, hatte mich etwas gewundert...

Verhält sich Dein Sauger innerhalb der Zonenreinigung auch weniger intelligent beim Überwinden von Hindernissen? Im Vergleich zur normalen Komplettreinigung? Also z.B. wenn er eine Kante erklimmen muss?
0 x
TV: Samsung Plasma PS506970YS / Receiver: Onkyo TX-NR646 / HTPC: MediaPortal, IR605A/Q, IMON / Fire TV Stick / Raspberry PI 2 / Raspberry PI 3 / Harmony 650 / Harmony Elite/Hub / Hue Bridge + 4 Lampen / Echo Dot 2x
Benutzeravatar

Themenstarter
Fonzo
Beiträge: 1690
Registriert: Fr 24. Feb 2017, 00:06

Do 12. Apr 2018, 20:00

theNick hat geschrieben:
Do 12. Apr 2018, 19:30
Verhält sich Dein Sauger innerhalb der Zonenreinigung auch weniger intelligent beim Überwinden von Hindernissen? Im Vergleich zur normalen Komplettreinigung? Also z.B. wenn er eine Kante erklimmen muss?
Ja das Phänomen ist mir auch schon aufgefallen, das tritt aber auch auf wenn man den Sauger zu einem Punkt fahren lässt, dann stellt er sich auch an.
0 x
Benutzeravatar

theNick
Beiträge: 136
Registriert: So 29. Jan 2017, 18:11
Vorhandene Echo Dots: 2

Do 12. Apr 2018, 20:02

da wird Xiaomi hoffentlich noch etwas dran ändern...
0 x
TV: Samsung Plasma PS506970YS / Receiver: Onkyo TX-NR646 / HTPC: MediaPortal, IR605A/Q, IMON / Fire TV Stick / Raspberry PI 2 / Raspberry PI 3 / Harmony 650 / Harmony Elite/Hub / Hue Bridge + 4 Lampen / Echo Dot 2x
Benutzeravatar

Themenstarter
Fonzo
Beiträge: 1690
Registriert: Fr 24. Feb 2017, 00:06

Fr 13. Apr 2018, 00:13

theNick hat geschrieben:
Do 12. Apr 2018, 17:59
Fonzo, das klingt sehr vielversprechend :-) Werde mich wohl mal mit Custom Skills befassen müssen!
Das ist nicht so schwer, Du musst Dir nur einen Developeraccount bei Amazon anlegen, dann erstellst Du einen Custom Skill.

Als Interaction Modell hast Du im simpelsten Fall so was wie

Code: Alles auswählen

{
    "interactionModel": {
        "languageModel": {
            "invocationName": "roborock",
            "intents": [
                {
                    "name": "AMAZON.CancelIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.HelpIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.StopIntent",
                    "samples": []
                },
                {
                    "name": "Roborock",
                    "slots": [
                        {
                            "name": "RoborockState",
                            "type": "RoborockState"
                        }
                    ],
                    "samples": [
                        "Wie ist der {RoborockState}",
                        "{RoborockState}",
                        "Wie ist die {RoborockState}"
                    ]
                }
            ],
            "types": [
                {
                    "name": "RoborockState",
                    "values": [
                        {
                            "id": "volume",
                            "name": {
                                "value": "Lautstärke"
                            }
                        },
                        {
                            "id": "state",
                            "name": {
                                "value": "Status"
                            }
                        },
                        {
                            "id": "fanlevel",
                            "name": {
                                "value": "Lüfterleistung"
                            }
                        },
                        {
                            "id": "batterylevel",
                            "name": {
                                "value": "Batterieleistung"
                            }
                        }
                    ]
                }
            ]
        }
    }
}
Das Interaction Modell kannst Du dann beliebig komplex bauen, soll ja nur ein einfaches Beispiel sein.

Dann brauchst du einen Endpunkt der über ein zertifizierte SSL Zertifikat verfügt. Ich selber nutzte dazu IP-Symcon Connect.
Am Endpunkt wertest Du dann die Daten aus und sendest den Response. Ich nutzte dafür das Patami Framework. Wenn Du kein Framework nutzten willst, musst Du dann die Daten von Alexa halt selbstständig auswerten und dann den Response schicken.

Der Response sieht dann im einfachsten Fall beim Patami Framework so aus.

Code: Alles auswählen

<?
function Execute(Request $request)
{
	if($request->IsLaunchRequest())
	{
		$text = 'Ich kann Dir Daten von dem Roborock sagen wie aktueller Status oder Batterieleistung. Zu was willst Du Informationen haben?';
		return AskResponse::CreatePlainText(
                    $text
                )->SetRepromptPlainText(
                    'Was hast Du gesagt?'
                );
	}
	
	switch (strtolower($request->slots->RoborockState))
	    {
			  case 'status':
                $text = sprintf('Der momentane Status ist %s .', GetState());
                break;
			case 'batterieleistung':
                $text = sprintf('Die Batterieleistung beträgt  %s .', GetBatteryLevel());
                break;							
            case '':
                return AskResponse::CreatePlainText(
                    'Hallo. Ich konnte Dich leider nicht verstehen. Du kannst mich zum Beispiel nach der Batterieleistung oder dem Status fragen. Für weitere Informationen sage Hilfe. Zu welchem Wert willst Du Informationen haben?'
                )->SetRepromptPlainText(
                    'Was hast Du gesagt?'
                );
            default:
                return AskResponse::CreatePlainText(
                    'Diesen Wert kenne ich nicht. Zu welchem Art von Wert willst Du Informationen haben?'
                )->SetRepromptPlainText(
                    'Was hast Du gesagt?'
                );
        }
	return TellResponse::CreatePlainText($text)->SetSimpleCard('Roborock', $text);
	
}



function GetBatteryLevel()
{
	$volume = GetValueFormatted(18629 /*[Geräte\Roborock Xiaomi\Roborock\Batterie]*/);
	return $volume;
}


function GetState()
{
	$volume = GetValueFormatted(34928 /*[Geräte\Roborock Xiaomi\Roborock\Status]*/);
	return $volume;
}
Damit wird in dem Beispiel der Status des Roborock oder der Batteriestand zurückgegeben bzw. in der Alexa App auf der Card bzw. einem Echo Show auf dem Display angezeigt. Was man dann zurückgeben will und wie die Formulierungen lauten bzw. wie man die Dialoge baut ist einem komplett selber überlassen.
Zuletzt geändert von Fonzo am Fr 13. Apr 2018, 00:13, insgesamt 1-mal geändert.
1 x
Benutzeravatar

haz
Beiträge: 14
Registriert: Fr 4. Nov 2016, 12:28

Fr 13. Apr 2018, 10:41

theNick hat geschrieben:
Do 12. Apr 2018, 15:40
ach so, Du musst den Token des Robis auslesen. Das funktioniert nur noch in Verbindung mit einer älteren Mi Home App!

Die bekommst Du hier:

https://drive.google.com/drive/folders/ ... SEHTLg9XGj

Beste Grüße

Nick
Leider funktioniert es auch nicht mehr mit der alten App. Xiaomi hat den Token auf die eigenen Server ausgelagert. Sehr ärgerlich, habe ausgerechnet heute ein Update gemacht ohne zu bedenken, dass ein neuer Token vergeben wird. Ich hoffe, dass es bald wieder eine Lösung gibt. Bis dahin saugt meine Alexa erst einmal nicht mehr :(
0 x
Benutzeravatar

theNick
Beiträge: 136
Registriert: So 29. Jan 2017, 18:11
Vorhandene Echo Dots: 2

Fr 13. Apr 2018, 11:29

@haz oh was, bist Du Dir sicher? Höre bzw. lese ich gerade das erste mal! Woher stammt Deine Info, hast Du eine Quelle für mich?

Danke Dir Fonzo, das mit dem Custom Rom sind noch Bömische Wälder für mich. Werde mich beizeiten damit befassen :-) Erstmal muss ich nun mit ioBroker vertrauter werden. Würde gerne meine Xiaomi Temperatur- und Feuchtigkeitssensoren mit ioBroker abfragen können. Weiß nur noch nicht, wo ich da ansetzen soll. Habe noch nichts an Anleitung gefunden, an der ich mich langhangeln kann.
Zuletzt geändert von theNick am Fr 13. Apr 2018, 11:44, insgesamt 1-mal geändert.
0 x
TV: Samsung Plasma PS506970YS / Receiver: Onkyo TX-NR646 / HTPC: MediaPortal, IR605A/Q, IMON / Fire TV Stick / Raspberry PI 2 / Raspberry PI 3 / Harmony 650 / Harmony Elite/Hub / Hue Bridge + 4 Lampen / Echo Dot 2x
Benutzeravatar

Themenstarter
Fonzo
Beiträge: 1690
Registriert: Fr 24. Feb 2017, 00:06

Fr 13. Apr 2018, 11:46

haz hat geschrieben:
Fr 13. Apr 2018, 10:41
Sehr ärgerlich, habe ausgerechnet heute ein Update gemacht ohne zu bedenken, dass ein neuer Token vergeben wird. Ich hoffe, dass es bald wieder eine Lösung gibt. Bis dahin saugt meine Alexa erst einmal nicht mehr :(
In dem Fall musst Du Dich halt entscheiden wie Du den Roborock steuern willst. Wenn es sich nicht aus einem Backup auslesen lässt, dann auf alle Fälle im unprovisioned mode. Dann bekommst Du den Token zugewiesen und kannst das mit Mitteln deiner Wahl nutzten. Was dann aber nicht mehr geht ist die Mi Home App zu nutzten, da diese das Gerät selber in den unprovisioned mode setzt um initial selber einen Token zu beziehen. In dem Moment wenn du dann also die Mi App in Betrieb nimmst ist der Token den Du vorher gewonnen hast wieder ungültig. Den Token kannst Du per Skript mit jeder Sprache Deiner Wahl bzw. einer Hausautomationssoftware auslesen. Wenn Du keine Hausautomationssoftware nutzt ist der gängigste Weg dies über Python zu machen. Wenn Du den Token abholst musst Du dann halt sämtliche Funktionen, die die Mi App abbildet per Skript bzw. Hausautomation abbilden, da Du die MI App ja nicht gleichzeitig nutzten kannst. Wenn Du die Karten Daten brauchst, die sonst nur in der MI App zur Verfügung stehen, musst Du das Gerät zusätzlich rooten. Für IP-Symcon ist hier beschrieben wie man die Kartendaten ausliest bzw. dann visualisiert.
0 x
Antworten

Zurück zu „Sonstige Komponenten und Steuerungsmöglichkeiten“

  • Information