Yandex: ein Smart Home fĂŒr Erwachsene



Vor kurzem hat Yandex sein Smart-Home-System auf den Markt gebracht. Es wird angeboten, kostengĂŒnstige Wi-Fi-GerĂ€te zu kaufen: einen Adapter in einer Steckdose, eine GlĂŒhbirne und eine IR-Fernbedienung. Es ist interessant, dass die Entwickler von „intelligenten“ GerĂ€ten die Möglichkeit haben, ihre „intelligenten“ FĂ€higkeiten zu entwickeln. Auf diese Weise können Sie GerĂ€te mit dem Yandex-System verbinden und ihre Stimme ĂŒber Alice verwalten. Immer mehr neue Marken erscheinen auf Skill-Listen. Alice versteht die russische Sprache perfekt, was sie zur unbestrittenen FĂŒhrungspersönlichkeit unter den Sprachassistenten auf dem russischen Markt macht.
Allerdings ist nicht alles so glatt ...

Erstes Minus: GrundsĂ€tzlich sind alle vorgeschlagenen Systeme „bewölkt“. Ihre ZuverlĂ€ssigkeit ist manchmal zweifelhaft, da ihre Leistung direkt von der QualitĂ€t der Verbindung mit den Servern des Herstellers abhĂ€ngt. Und wenn Sie das Internet ausschalten, verwandeln sich die GerĂ€te vollstĂ€ndig in einen „KĂŒrbis“.

Zweites Minus: Skriptsystem. Ein wichtiger Bestandteil eines Smart Homes sind die Skripte. Und hier sind sie sehr primitiv: Wenn "der Ausdruck so und so ist", dann aktivieren Sie "das GerĂ€t ist so und so". FĂŒr mein Smart Home war das zu wenig.

Die Nachteile enden nicht dort, aber der Rest hĂ€ngt eher mit der Unreife des Systems zusammen. Das Yandex-Entwicklungsteam fĂŒgt weiterhin aktiv verschiedene Funktionen und zu bearbeitende Fehler hinzu, wofĂŒr wir uns sehr bedanken!

Nachdem ich die Dokumentation studiert hatte, entschied ich mich, die Yandex UD-FĂ€higkeit zu erstellen und den Smart Home-Controller daran anzuschließen. Auf diese Weise können Sie sich nicht auf Cloud-Server verlassen, Skripts lokal auf dem Controller implementieren und gleichzeitig das System per Spracheingabe ĂŒber Alice steuern. DafĂŒr habe ich das Plugin "yandex2mqtt" auf Node.js geschrieben.

Ein bisschen Theorie


- Alice, mach das Licht an.
Nach diesem Satz geschieht Magie und das Licht geht an. Aber was ist hinter den Kulissen? Lassen Sie uns herausfinden, wie das alles funktioniert.

Nachdem die Yandex-Station einen vertrauten Befehl gehört hat, sendet sie Daten an den Yandex-Server, an den wir im Voraus die Adresse unseres Controllers angegeben haben. Der Server verarbeitet die Informationen und leitet sie in Form einer Post-Anfrage an den Controller weiter. Auf dem Controller verarbeitet die Zwischen-API (in unserem Fall das yandex2mqtt-Plugin) die Anforderung und leitet sie an das MQTT-Thema weiter. Als nÀchstes wird das Skript im Node-Red-Programm verarbeitet.

Node-Red entscheidet, was als nĂ€chstes zu tun ist. Wenn das Skript dies vorsieht, sendet er einen Befehl zum Einschalten des Lichts im entsprechenden MQTT-Thema. Der wb-mqtt-serial-Treiber sendet daraufhin einen Modbus-Befehl an das Relaismodul, das das Relais schaltet. Und schließlich geht das Licht an! Ja, der Pfad ist nicht eng, aber ein Bruchteil eines zweiten Durchgangs fĂŒr den Benutzer.

Schauen wir uns das yandex2mqtt-Plugin genauer an. Das erste, was Yandex benötigt, damit die FĂ€higkeit funktioniert, ist der oAuth-Dienst zum BĂŒndeln von Konten in der Yandex-Anwendung. Nachdem Yandex das Autorisierungstoken vom oAuth-Dienst erhalten hat, fordert es eine Liste der GerĂ€te an. Das yandex2mqtt-Plugin antwortet mit einer Liste von GerĂ€ten mit allen Eigenschaften im JSON-Format. Dann erscheinen sie in der Liste der zur Steuerung verfĂŒgbaren GerĂ€te (im sogenannten Quasar). Wenn Sie Alice nun anweisen, ein GerĂ€t aus der Liste einzuschalten, sendet Yandex eine Post-Anfrage mit den Daten des GerĂ€ts, das er einschalten möchte, an den Controller. Als Antwort bestĂ€tigt das Plugin die Aufnahme und schreibt den neuen Status in das in den Einstellungen desselben Plugins angegebene mqtt-Thema. Wenn das GerĂ€t seinen Status ohne die Teilnahme von Yandex geĂ€ndert hat, sendet das Plug-In, das die neuen Daten im Thema mqtt sieht, diese an Yandex, wenn es den Status anfordert. Dies geschieht jetzt nur, wenn Sie das GerĂ€t selbst in Quasar aufrufen. In anderen FĂ€llen fragt Yandex den Status nicht ab.
Jetzt werde ich ĂŒber einige Eigenschaften von Yandex UD-GerĂ€ten sprechen.

GerÀtetyp


FĂŒr eine korrekte Anzeige im „Quasar“ und eine genauere Definition der Befehle durch Alice schlĂ€gt Yandex vor, GerĂ€ten verschiedene GerĂ€tetypen zuzuweisen. Gesamttypen 10:

  • GerĂ€te.Typen.Licht - Jede Lampe, Kronleuchter, GlĂŒhbirne usw.
  • GerĂ€te.Typen.Socket - Outlet
  • GerĂ€te.Typen.Schalter - Schalter
  • GerĂ€te.Typen.Thermostat - Thermostat
  • GerĂ€te.Typen.Thermostat.ac - Klimaanlage
  • device.types.media_device - MediengerĂ€t
  • device.types.media_device.tv - TV
  • GerĂ€te.Typen.Kochen - KĂŒchengerĂ€te
  • GerĂ€te.Typen.Kochen.Kessel - Hersteller
  • device.types.other - Alles andere, was nicht zu den vorherigen AbsĂ€tzen passte.

FĂ€higkeit

Außerdem muss jedes GerĂ€t mindestens eine Funktion haben .

Insgesamt verfĂŒgt Yandex UD ĂŒber 5 Arten von FĂ€higkeiten. Jede FĂ€higkeit hat eine andere Funktion (Instanz) , und einige FĂ€higkeiten haben mehrere solche Funktionen, was die FlexibilitĂ€t bei der Konfiguration von GerĂ€ten erhöht.

FĂ€higkeiten:

1. device.capabilities.on_off - Ein- und ausschalten.

Instanz:

  • auf

2. GerÀte.FÀhigkeiten.Farbeinstellung - Farbmanagement.

Instanz:

  • rgb
  • hsv
  • Temperatur_k

3. GerÀte.FÀhigkeiten.Modus - Modus wechseln.

Instanz:

  • Thermostat
  • fan_speed

4. GerÀte.FÀhigkeiten.Bereich - Bereichssteuerung.

Instanz:

  • Helligkeit
  • Temperatur
  • LautstĂ€rke
  • Kanal

5. device.capabilities.toggle - Stumm.

Instanz:

  • stumm schalten


Mit der richtigen Kombination aller Eigenschaften des GerĂ€ts versteht Alice problemlos alle Befehle, die ihr zur Verwaltung des Smart Home gegeben wurden. Hier gibt es natĂŒrlich einige Schwierigkeiten beim Kombinieren von FĂ€higkeiten. Die Dokumentation gibt eindeutig nicht an, welche FĂ€higkeiten kombiniert werden können und welche nicht. Aber die "wissenschaftliche Poke-Methode" wird uns dabei helfen.

So fand ich zum Beispiel heraus, dass die Klimaanlage vier FÀhigkeiten enthÀlt:

GerÀtetyp:

GerÀte.Typen.Thermostat.ac

FĂ€higkeitstyp:

GerÀte.FÀhigkeiten.on_off

Instanz:

  • auf

GerÀte.FÀhigkeiten.Bereich
Instanz:

  • Temperatur

GerÀte.KapazitÀten.Modus
Instanz:

  • Thermostat

GerÀte.KapazitÀten.Modus
Instanz:

  • fan_speed

Ich werde die restlichen Eigenschaften nicht beschreiben, dort ist alles ganz einfach.

Damit es funktioniert, benötigen Sie:

  • Controller
  • Beliebige Domain
  • SSL-Zertifikat
  • Node.js
  • Yandex2mqtt Plugin
  • MQTT-Broker
  • Knotenrot

Controller


Meine „intelligente“ Wohnung wird vom Wiren Board 6 gesteuert. Sie können jedoch jeden anderen Linux-Controller verwenden, der Node.js und Node-Red abruft. Zum Beispiel Raspberry Pi oder PC.

Domain


NatĂŒrlich ist es wĂŒnschenswert, eine weiße IP-Adresse zu haben und eine Domain zu kaufen, aber dies ist nicht notwendig. Sie können DDNS verwenden, z. B. www.noip.com .

Hier ist alles einfach: Registrieren, kostenlosen Hostnamen erstellen, IP-Adresse eingeben. Einige Router verfĂŒgen ĂŒber eine spezielle DDNS-Einstellung, in die Sie noip.com-Daten eingeben können. Der Router sendet automatisch eine IP-Adresse, wenn diese geĂ€ndert wird. Wenn im Router keine solche Einstellung vorhanden ist, können Sie das Noip-Programm auf dem Controller installieren und zur automatischen AusfĂŒhrung hinzufĂŒgen. Das Programm macht genau das Gleiche wie ein Router mit speziellen DDNS-Einstellungen - aktualisieren Sie Ihre IP-Adresse in der Datenbank noip.com

Daher haben wir eine statische Adresse, die alle Anforderungen an unseren Controller umleitet.

Ports 443 und 80


Jetzt hat fast jeder zu Hause einen Router. ZusĂ€tzlich zu seinen offensichtlichen Funktionen ist es auch ein Hindernis fĂŒr das lokale Netzwerk durch unerwĂŒnschte GĂ€ste von außen. In bestimmten FĂ€llen benötigen wir jedoch von außen Zugriff auf das interne Netzwerk. Routerhersteller stellten sich dies vor und fĂŒgten die NAT-Funktion (Network Address Translation) hinzu.

Ich werde den Zeitpunkt der Einrichtung des Routers nicht beschreiben, da er fĂŒr jeden Hersteller unterschiedlich ist. Lesen Sie dazu die Anweisungen fĂŒr Ihren Router. Google-SchlĂŒsselwörter: Portweiterleitung, Portzuordnung, NAT.

Es ist erforderlich, den Port fĂŒr den Zugriff auf yandex2mqtt (es kann jeder sein, ich habe 443 gewĂ€hlt) und Port 80 weiterzuleiten (nur erforderlich, um ein SSL-Zertifikat zu erhalten. Nach Erhalt des Zertifikats kann Port 80 geschlossen werden).

SSL-Zertifikat


Setzen Sie sofort alle Punkte auf das "und": Selbstsignierte Zertifikate funktionieren nicht.
Die meisten Domain-Registrare (z. B. reg.ru) geben ihren Kunden kostenlose SSL-Zertifikate fĂŒr die Hauptdomain (www.IhreDomain.ru). Wenn Sie eine Domain speziell fĂŒr Alice gekauft haben, können Sie das bereitgestellte SSL-Zertifikat verwenden.

Wenn Sie keine eigene Domain haben oder Alice eine andere Subdomain zugewiesen ist (z. B. alice.yourdomain.ru), benötigen Sie ein Zertifikat fĂŒr diese Subdomain oder fĂŒr die vom DDNS-Dienst angegebene Adresse.

Zu diesem Zweck schlage ich vor, den kostenlosen Dienst zu verwenden, um ein SSL-Zertifikat von letsencrypt.org zu erhalten.

Um ein Zertifikat zu erhalten, mĂŒssen Sie das certbot-Programm installieren, alle angeforderten Daten ausfĂŒhren und angeben. Gleichzeitig sollte Port 80 frei und von außen zugĂ€nglich sein. Ich rate Ihnen, die Anweisungen von letsencrypt sorgfĂ€ltig zu lesen.

Installieren und konfigurieren Sie certbot
apt-get update apt-get install certbot 


Stoppen Sie die Watchdog- und Nginx-Dienste.

 service watchdog stop service nginx stop 

Wir leiten den 80. Port im Router weiter.

FĂŒhren Sie das certbot-Programm aus:

 certbot certonly --standalone 

Nach dem Start stellt das Programm einige einfache Fragen.

1. Ihre E-Mail. Geben Sie einfach die Adresse ein und drĂŒcken Sie die Eingabetaste



2. Sie werden aufgefordert, die Benutzervereinbarungen zu lesen. Wenn Sie mit allem einverstanden sind, geben Sie einfach "A" ein, was "zustimmen" bedeutet, dh ich stimme zu.



3. Das Programm bittet um die Erlaubnis, Ihre E-Mail-Adresse an die Entwickler zu senden. Geben Sie N ein.



4. Geben Sie Ihre Domain ein, fĂŒr die Sie ein Zertifikat erhalten möchten (Sie können die Domain eingeben, die wir zuvor in noip erhalten haben). Hier gebe ich ein Beispiel fĂŒr fehlerhafte Eingaben. Das PrĂ€fix http: // ist nicht erforderlich.



Wenn Sie alles richtig gemacht haben, sehen Sie Folgendes:



Dies bedeutet, dass das Zertifikat erfolgreich empfangen wurde. Denken Sie an den Pfad zum Zertifikat und SchlĂŒssel, der bei der Konfiguration des yandex2mqtt-Plugins erforderlich ist. Schließen Sie aus SicherheitsgrĂŒnden Port 80 in den Router-Einstellungen. Dies ist nicht mehr sinnvoll.

Wir schalten die Watchdog- und Nginx-Dienste ein.

 service nginx start service watchdog start 

Das Zertifikat von letsencrypt wird fĂŒr 3 Monate ausgestellt. Vergessen Sie nicht zu aktualisieren.


Node.js und das yandex2mqtt-Plugin


Installation
Konfigurieren des Repositorys node.js.

 curl -sL https://deb.nodesource.com/setup_10.x | bash - 

Installieren oder aktualisieren Sie anschließend alle erforderlichen Komponenten

 apt-get install -y nodejs git make g++ gcc build-essential 

Kopieren Sie nach erfolgreicher Installation das yandex2mqtt-Repository auf den Controller.

 git clone https://github.com/munrexio/yandex2mqtt.git /mnt/data/root/yandex2mqtt 

Wir setzen die Rechte.

 chown -R root:root /mnt/data/root/yandex2mqtt 

Wir gehen zum Ordner.

 cd /mnt/data/root/yandex2mqtt 

Wir starten die Installation.

 npm install 

Installation abgeschlossen.

Autostart
Erstellen Sie eine systemd-Einheit:

Wechseln Sie in den Ordner / etc / systemd / system / auf dem Controller und erstellen Sie eine Datei mit dem Namen yandex2mqtt.service . Kopieren Sie Folgendes hinein:

 [Unit] Description=yandex2mqtt After=network.target [Service] ExecStart=/usr/bin/npm start WorkingDirectory=/mnt/data/root/yandex2mqtt StandardOutput=inherit StandardError=inherit Restart=always User=root [Install] WantedBy=multi-user.target 

Speichern Sie danach die Änderungen und schließen Sie die Datei.

Geben Sie den Befehl in die Konsole ein, um das GerÀt zu aktivieren:

 systemctl enable yandex2mqtt.service 


Jetzt können Sie das Plugin mit Befehlen starten und stoppen

 service yandex2mqtt start service yandex2mqtt stop service yandex2mqtt restart 


Einrichtung:

Alle erforderlichen Plug-In-Einstellungen befinden sich in der Datei /mnt/data/root/yandex2mqtt/config.js
Bearbeiten Sie diese Datei gemĂ€ĂŸ Ihren Parametern.
Das SSL-Zertifikat muss vollstÀndig verkettet sein .

FĂŒhren Sie nach der Konfiguration yandex2mqtt mit dem folgenden Befehl aus:

 service yandex2mqtt start 

Nach dem Einrichten und Starten der Bridge empfehle ich Ihnen, das Zertifikat auf dieser Site zu ĂŒberprĂŒfen.

Geben Sie einfach Ihre Domain ein, mit der Sie auf Alice zugreifen möchten. FĂŒr einen ordnungsgemĂ€ĂŸen Betrieb muss das Zertifikat alle PrĂŒfungen bestehen. Sonst funktioniert nichts.

FĂ€higkeit Yandex UD


FĂ€higkeitserstellung
1. Gehen Sie zur Seite dialogs.yandex.ru/developer
2. Melden Sie sich mit Ihrem Konto an.
3. Klicken Sie auf "Dialog erstellen".
4. WĂ€hlen Sie "Smart Home"
5. Geben Sie die erforderlichen Parameter ein:

  • Name - Beliebiger Name.
  • Endpunkt-URL - eine Adresse vom Typ Ihrer DomĂ€ne / Ihres Anbieters , wobei anstelle von " Ihre DomĂ€ne" die Adresse von noip oder Ihrer DomĂ€ne ist, fĂŒr die ein SSL-Zertifikat empfangen wird.



  • Datenschutz - WĂ€hlen Sie "Nicht im Katalog anzeigen" (Erforderlich! Andernfalls besteht die Fertigkeit keine sofortige Moderation.)
  • Name und E-Mail-Adresse des Entwicklers - Geben Sie Ihre Daten an.
  • Beschreibung - beliebiger Text
  • Symbol - ein beliebiges Symbol.



6. Kontopaket:



Klicken Sie auf "Neu hinzufĂŒgen".
  • Die ersten beiden Punkte - Geben Sie die Daten aus config.js / clients an :

1. Die Anwendungskennung lautet clientId

2. Anwendungsgeheimnis - clientSecret




7. Speichern Sie die Fertigkeit



8. Klicken Sie auf "Moderation".



9. Klicken Sie auf "Veröffentlichen".



HinzufĂŒgen von GerĂ€ten zu Yandex UD.
1. Rufen Sie die Yandex-Anwendung auf dem Telefon auf



2. WĂ€hlen Sie im MenĂŒ GerĂ€te / Smart Home



3. Klicken Sie auf "GerĂ€t hinzufĂŒgen".



4. WĂ€hlen Sie Ihre FĂ€higkeiten



5. Klicken Sie auf "Konten zusammenfĂŒhren".



6. Die Autorisierungsseite wird geöffnet

Login und Passwort eingeben (in der Datei config.js im Benutzerblock festgelegt)



7. Klicken Sie auf "Zulassen".



8. Klicken Sie auf "GerÀteliste aktualisieren".



Jetzt kann Alice Befehle zum Verwalten der hinzugefĂŒgten GerĂ€te erhalten. Entsprechende Teams kommen zu den von mqtt angegebenen Themen.

Es bleibt noch einige Aktionen an diese Themen zu binden.

Knotenrot


FĂŒr das Automatisierungssystem wurde Node-Red ausgewĂ€hlt. Dies ist ein großartiges visuelles Programmierwerkzeug. Das Installations- und Konfigurationsverfahren finden Sie hier .

Beim Einrichten und Automatisieren eines Smart Homes wird ein oder sogar zwei Artikel in Anspruch genommen. Und es gibt bereits viele solcher Artikel. Stattdessen - ein kleines Beispiel fĂŒr die Verwendung des Plugins, wie die GlĂŒhbirnenstimme eingeschaltet wird.

Der Einfachheit halber erstellen wir ein virtuelles GerÀt auf dem Wiren Board 6-Controller in der WeboberflÀche.
In der wb-rules- Regel-Engine mĂŒssen Sie eingeben

 defineVirtualDevice("yandex", { title: "yandex controls", cells: { light1: { type: "switch", value: false }, } }); 




Wir werden die MQTT-Themen dieses virtuellen GerĂ€ts in config.js fĂŒr den Skill-Typ "on" des "Light" -GerĂ€ts schreiben :

  devices: [ //_______________   ______________// { name: '', room: '', type: 'devices.types.light', mqtt: [ { type: 'on', set: '/devices/yandex/controls/light1/on', //   stat: '/devices/yandex/controls/light1' //   }, ], capabilities: [ { type: 'devices.capabilities.on_off', retrievable: true, state: { instance: 'on', value: true } }, ] }, //_______________   _______________// ] 

Mit dem Satz „Alice, schalte das Licht ein / aus“ schaltet das virtuelle GerĂ€t.

Gehen wir zu Node-Red, das gemĂ€ĂŸ den Anweisungen installiert wurde.

FĂŒr eine bequeme Arbeit mit Wiren Board 6 können Sie auch das zusĂ€tzliche „Node“ Node-Red-Contrib-Wirenboard verwenden .

Das WBE2R-R-ZIGBEE- Erweiterungsmodul ist in der Steuerung installiert, wodurch eine Verbindung mit der IKeevskaya-Smart-Lampe der TRODFRY-Serie ĂŒber das ZigBee-Protokoll möglich wurde.

Jetzt liegt es an den Kleinen. Werfen Sie einige Blöcke in den Node-Red-Arbeitsbereich, verbinden Sie sie mit „Zeichenfolgen“ und klicken Sie auf Bereitstellen.



Die ikeevsky-GlĂŒhbirne ist ĂŒber das Plugin zigbee2mqtt verbunden, daher muss in mqtt das Thema der GlĂŒhbirne zur Steuerung an json gesendet werden. Dazu fĂŒgen wir eine einfache Funktion zwischen dem virtuellen WB-GerĂ€t und dem Thema mqtt bulb ein.



Klicken Sie auf Bereitstellen. Wir prĂŒfen.

Alice, mach das Licht an!

Heute haben wir gelernt, wie man Alice mit einem Automatisierungssystem verbindet. Vielleicht ist es in einigen FĂ€llen zu kompliziert, es ist einfacher, eine normale Wi-Fi-GlĂŒhbirne zu kaufen, und das ist genug. Aber wenn Sie vorhaben, sich ein wirklich intelligentes Zuhause zu bauen, können einfache Wege hier nicht funktionieren. Aber lohnt es sich oder nicht, jeder wird fĂŒr sich selbst entscheiden. Vielen Dank fĂŒr Ihre Aufmerksamkeit!

Source: https://habr.com/ru/post/de465537/


All Articles