
Home Assistant ist eine beliebte Open Source-Anwendung zum Organisieren eines Smart Homes. Die ersten Erfahrungen des Autors mit dem Home Assistant basieren auf dem Versuch, einen intelligenten Reiskocher in ihn zu integrieren. Der Autor wird versuchen, die Hauptkomponenten und Merkmale dieser Anwendung zu beschreiben, die er Schritt für Schritt kennenlernen durfte. Der Artikel ist in gewisser Weise eine Rezension, in gewisser Weise ein Leitfaden für diejenigen, die ihre Bekanntschaft mit Home Assistant beginnen möchten.
Für diejenigen, die wenig Freizeit haben, empfehle ich Ihnen, das Sprichwort - das erste Kapitel - zu überspringen und direkt zum zweiten zu gehen. Sie müssen nur wissen, dass wir mit einem intelligenten chinesischen Reiskocher von Xiaomi zusammenarbeiten werden.
Intelligenter Reiskocher
Ein Reiskocher ist offensichtlich ein Reiskocher. Das Wiki zeigt uns Reisdampfer aus Keramik aus dem British Museum aus dem Jahr 1250 v 1945 wurde Mitsubishi Japans erste hausgemachte Firma für elektrischen Reiskocher. Unser Modell - Rice Cooker von Xiaomi - kann nicht nur Reis kochen. „Dies ist ein großartiges Gerät, um nicht nur Reis, sondern auch andere Arten von Gerichten zuzubereiten. Es kann Suppen, Gebäck und vieles mehr kochen “, heißt es in der Werbung. Das Wichtigste ist jedoch das Vorhandensein eines Wi-Fi-Moduls, einer Software mit Automatisierungsfunktionen und mehr als 200 von der Software installierten Rezepten. "Der Weg zu einem Smart Home durch den Magen ist richtig", dachte der Autor und entschied.
Xiaomi Rice Cooker ist, wie es sich für ein digitales Gerät gehört, äußerlich sehr attraktiv und erfreut sich durch seine runde Form und den allgemeinen Minimalismus. Zur Konfiguration und Verwendung bietet der Hersteller die Mi Home-Anwendung an. Nach der Registrierung des Mi-Kontos findet das Programm leicht ein neues Gerät und Sie registrieren es in Ihrem lokalen Netzwerk. Die Anwendungsschnittstelle ist nicht die schlechteste, bietet grundlegende Automatisierungstools und kann Benachrichtigungen von Geräten empfangen. Es gibt jedoch erhebliche Nachteile. Nicht jeder kann glücklich sein, dem Entwickler Informationen über jeden Benutzerklick zu senden. Und ein unangenehmer Ausdruck findet sich heute oft in der Nationalfarbe. Anstelle von mehr als 200 Rezepten werden nur vier übersetzt und sind in Fremdsprachen verfügbar. Der Rest ist ausschließlich für das chinesische Volk. Wenn Ihr „intelligenter“ Reiskocher nicht in der Lage ist, alle versprochenen kulinarischen Pflichten zu erfüllen, wird es traurig. Nachdem er einige Zeit im Internet gewandert war, stieß ein trauriger Autor auf das nächste interessante
Projekt (ewige Vorteile für den Autor). Es stellte sich heraus, dass dies der Entwicklung eines Moduls für einen bestimmten Heimassistenten gewidmet war.
Heimassistent
Zunächst einige allgemeine Informationen. Auf
der HA-Homepage heißt es: „Dies ist eine Open-Source-Software für die Smart-Home-Automatisierung, die sich auf lokales Management und Datenschutz konzentriert. Es wurde von einer offenen Community von Enthusiasten entwickelt und eignet sich hervorragend für die Arbeit an einem Raspberry Pi oder einem lokalen Server. “ Das Projekt ist mehr als fünf Jahre alt und verwendet Python und eine Apache 2.0-Lizenz. Die Release-Version zum Zeitpunkt des Schreibens dieser Zeilen ist 0.99.3.
HA verwendet separate Module (Integrationen oder Komponenten), um Geräte zu verwalten. Eine zu erstellen ist ziemlich einfach. Auf der Website finden Sie einen Katalog der
wichtigsten (von der Community genehmigten und unterstützten) Module. Unter ihrer Gesamtzahl (1485 Stück) gibt es völlig unterschiedliche, die Namen amazon, google, xiaomi und sogar einmal yandex sind im Katalog aufgeführt.
Versuchen wir, HA in einer virtuellen Umgebung auf dem Linux-Desktop zu
installieren . Wir benötigen Python3 und Pip Package Manager.
python3 -m venv homeassistant
Danach wird die HA-
GUI unter
http: // localhost: 8123 verfügbar . Wenn Sie sich zum ersten Mal anmelden, müssen Sie ein Benutzerkonto erstellen. Das HA-Webinterface ist ziemlich umfangreich. Einige wichtige Elemente, die am Anfang erwähnenswert sind, sind die Registerkarte Konfiguration → Allgemein, auf der Sie die Konfigurationsdateien oder den Server selbst problemlos neu laden können. Sowie die Info-Seite in der Liste der Entwicklertools, auf der Sie die Fehlerprotokolle sehen können.
HA speichert bei Linux alle erforderlichen Benutzerdaten im Einstellungsordner „~ / .homeassistant“. Die Konfigurationsdateien sind im
YAML- Format geschrieben, und die Hauptdatei ist "configuration.yaml". Es kombiniert die Daten von Modulen, Automatisierung usw. Mit der Importfunktion können Sie die Einstellungen in separate logisch organisierte Dateien aufteilen. Module werden in den Unterordnern "Komponenten" (integriert) und "Benutzerdefinierte_Komponenten" gespeichert.
Dieses Wissen sollte ausreichen, um ein neues Modul zu installieren. Kopieren Sie den Ordner "xiaomi_cooker" aus unserem Repository in unsere "~ / .homeassistant / custom_components". Fügen Sie gemäß der Beschreibung die Moduleinstellungen zur Datei "configuration.yaml" hinzu:
Fertig. Nach dem HA-Neustart wird im Abschnitt Allgemein → Integrationen der Weboberfläche ein neuer Moduleintrag angezeigt.
Jedes Modul ist eine bestimmte Menge von Objekten (Entitäten) und Diensten (Dienste im Wesentlichen - Funktionen). Objekte speichern verschiedene von Geräten empfangene Daten. Zum Beispiel ist sensor.xiaomi_cooker_temperature die Temperatur des Reiskochers, sun.sun ist der Sonnenstand. Die Daten eines Objekts werden durch einen Grundwert ausgedrückt - Status (Status) und einen beliebigen Satz zusätzlicher Attribute (Attribute). Dienste werden verwendet, um Befehle und Werte auf Geräte zu übertragen. Beispiel: xiaomi_cooker.start - der Befehl zum Starten des Reiskochers oder homeassistant.check_config - die Initialisierung der Suche nach Fehlern in den HA-Einstellungsdateien. Die Liste der Entwicklertools der Weboberfläche enthält den Abschnitt Dienste, in dem Sie die Liste der verfügbaren Dienste anzeigen und mit ihren Anrufen spielen können. In der Nähe befindet sich der Abschnitt Status, in dem Sie die Werte von Objekten anzeigen und ändern können. Es ist zu beachten, dass Änderungen der Werte von Objekten im Abschnitt "Zustände" einseitig sind. Das heißt, Wenn Sie beispielsweise den Status des Lights.state-Objekts hier von Aus auf Ein ändern, hat dies keine Auswirkungen auf den tatsächlichen Status des Geräts. Wenn die Daten vom Gerät das nächste Mal aktualisiert werden, wird der Wert des Objekts in Real überschrieben.
Automatisierung
Das Hauptverwaltungstool für ein Smart Home ist die
Automatisierung . Sie können sie über die grafische Oberfläche im Abschnitt Allgemein → Automatisierung oder direkt in der Datei „automations.yaml“ hinzufügen und bearbeiten. Die Hauptfunktion der Automatisierung besteht darin, Dienste aufzurufen, wenn bestimmte Bedingungen erfüllt sind. Grundlegende Werkzeuge zum Festlegen der Bedingungen für das Aufrufen des Werts von Objekten, inkl. Zeitdaten. Es gibt etwas spezifischere Lösungen, wie z. B. Ereignisse. Als einfaches Automatisierungsbeispiel geben wir einen Code an, der die Plus-Daten des Autors innerhalb von 15 Minuten aktualisiert:
Es sollte beachtet werden, dass bisher nicht alle verfügbaren Automatisierungsfunktionen (z. B. die oben genannten) konfiguriert werden können, ohne den Yaml-Code über die grafische Oberfläche zu bearbeiten. Die Entwickler geben jedoch an, dass sie aktiv daran arbeiten, diesen Nachteil zu beseitigen.
Vorlagen
Nach der Automatisierung ist es Zeit, über
Vorlagen (Template) zu sprechen. Verschiedene Einstellungselemente in yaml-Dateien ermöglichen die Verwendung von Einfügungen in
der Skriptsprache jinja2 . Viele dieser Elemente werden durch den allgemeinen Namen 'Templates' vereint, z. B. service_template oder trigger_template. Mithilfe von Vorlagen erhalten wir Zugriff auf die Werte von
Objekten in HA und die Möglichkeit, diese Daten in komplexen mathematischen und logischen Ausdrücken zu verwenden, was unser Potenzial erheblich erweitert. Nehmen wir als Beispiel einen etwas komplizierteren Code von sensor.umpiro_charge, der in "configuration.yaml" geschrieben ist. Dies ist
template_sensor , dh "ein Sensor, der Daten basierend auf den Werten anderer Objekte bildet". Unser Sensor wird ein Analogon einer allmählich entladenen Batterie sein:
Wir haben entity_id leer gelassen, da wir bereits eine Automatisierung hinzugefügt haben, die unabhängig die Aktualisierung der Objektdaten bewirkt.
Python-Skripte
Python-Skripte sind wiederum ein einfaches Werkzeug zum Erstellen neuer Dienste. Nach dem Hinzufügen der Zeile "python script:" zu "configuration.yaml" werden alle Dateien mit der Erweiterung ".py", die wir in den Ordner "~ / .homeassistant / python_scripts" gestellt haben, als Dienste mit den Namen "python_scripts" verfügbar Dateiname> ”. Ihr Code wird in einer vordefinierten Umgebung ausgeführt, in der die Daten- und Hassvariablen uns Zugriff auf die Argumente für den Serviceaufruf sowie auf HA-Objekte und -Dienste geben. Als Beispiel geben wir den Code der Datei "charge_set.py "für den Dienst" python_scripts.charge_set "an. Seine Funktion wird darin bestehen, die Ladung unserer Batterie einzustellen:
python_scripts / fee_set.py Integration schaffen
Alles, was wir mit Hilfe von Vorlagen und Python-Skripten gemacht haben, wäre vielleicht einfacher, dies zu tun, indem wir ein separates Modul schreiben. Wie bereits erwähnt, werden inoffizielle Module im Ordner "custom_components" gespeichert. In Zukunft benötigen wir ein Objekt, in dem Informationen zum aktuellen Rezept für unseren Reiskocher gespeichert sind, und einen Dienst, mit dem Sie diese Daten ändern können. Anhand eines
Beispiels aus der Dokumentation erstellen wir hierfür ein neues Modul, "overmind". Der erste Schritt ist die Datei custom_components / overmind / __ init__.py:
custom_components / overmind / __ init__.py Danach melden wir das neue Modul in der Konfigurationsdatei "configuration.yaml" und fügen eine Zeile mit dem Modulnamen "overmind:" hinzu. Das Problem ist gelöst.
Lovelace ui
Dies ist der Name des verwendeten
Front-End- HA. Diese grafische Oberfläche, über die ein normaler Benutzer aufgefordert wird, ein Smart Home zu steuern, ist die Startseite der HA-Weboberfläche. Die LUI-Schnittstelle besteht aus Karten verschiedener Typen, die die Werte von Objekten widerspiegeln können und zum Aufrufen von Funktionen und anderen Aufgaben dienen. Karten können analog zu Browser-Lesezeichen auf Seiten (Ansicht) verteilt werden. Das Setup ist bequem über dieselbe grafische Oberfläche organisiert, kann aber auch über den Yaml-Code aufgerufen werden, für den auch ein integrierter Texteditor vorhanden ist. Ich empfehle, dass Sie sich die Seite
https://demo.home-assistant.io/ ansehen, auf der es verschiedene Beispiele für LUI-Einstellungen gibt und auf denen Sie sie leicht sehen, klicken und ändern können.
GUI-Setup-BeispielIn Bezug auf die Mängel der Benutzeroberfläche geben die Entwickler leider selbst zu, dass das Projekt versucht, gleichzeitig auf den Stühlen des Desktops und des Smartphones zu sitzen. Standardmäßig bestimmt LUI die Position und Größe von Karten unabhängig voneinander, wodurch eine Seite, die auf dem Monitor normal aussieht, manchmal auf dem Smartphone-Bildschirm in Unordnung gerät und umgekehrt. Es gibt einige einfache Tools, um die Benutzeroberfläche zu optimieren, aber meiner Erfahrung nach sind sie nicht immer effektiv.
Ich denke, es ist nicht sehr sinnvoll, die Erstellung der Benutzeroberfläche mit grafischen Werkzeugen zu beschreiben. Daher werde ich einige Beispiele in Form des von mir verwendeten Yaml-Codes geben. Nachdem wir eine separate Seite (Ansicht) für unseren Reiskocher erstellt haben, werden wir versuchen, diese mit den wichtigsten Elementen zu füllen, damit sie bei Verwendung des Smartphone-Bildschirms nicht abgelehnt werden.
Hier werden wir diese sehr einfachen Schnittstellen-Bestellwerkzeuge ausprobieren, die horizontal und vertikal gestapelt sind. Erstellen Sie zunächst einen vertikalen Stapel aus Karten vom Typ Entity-Button und Sensor. Der erste dient zum Starten unseres Reiskochers, der zweite zum Anzeigen der Temperatur:
Der Home Assistant enthält ein Archiv von
Material Design Icons , das über entsprechende Namen (z. B. mdi: selection) in Einstellungselementen verwendet werden kann. Das Skript (in diesem Fall nicht Python-, sondern Yaml-), mit dem wir den Dienst aufgerufen haben, ist ein weiteres praktisches HA-Tool.
Kombinieren Sie nun den obigen vertikalen Stapel mit unserer Porträtkarte im jetzt horizontalen Stapel. Alles wird genauso einfach sein:
Hier müssen Sie die Zeile 'Bild:' markieren. Alle Dateien, die wir in den Ordner '~ / .homeassistant / www' legen, werden unter dem Link
http: // localhost / local / filename verfügbar.
Der nächste Schritt besteht darin, ein wenig an der von uns erstellten Schaltfläche für Serviceanrufe zu arbeiten. Es wäre für uns praktisch, wenn es als Kippschalter funktionieren würde, d.h. Ein / Aus und nicht so, wie es jetzt gemacht wird. Dies kann durch die Verwendung einer bedingten Karte erreicht werden, deren Anzeige auf dem Bildschirm durch Einstellen bestimmter Bedingungen angepasst werden kann. Unten finden Sie den Code für die Karte, mit der der Reiskocher ausgeschaltet wird und der nur sichtbar ist, wenn der Reiskocher gerade das Gericht zubereitet:
Wenn Sie den zuvor erstellten Power-Button-Code auf ähnliche Weise umschreiben und damit kombinieren, erhalten Sie eine Taste, die sowohl ein- als auch ausgeschaltet ist.
Wir ergänzen unser Interesse mit einer weiteren Karte - mit der Zeit bis zum Ende des Garvorgangs (ähnlich der Temperaturkarte) und einer weiteren mit den Details des Rezepts (benutzerdefiniert: Rezeptkarte). Als Ergebnis erhalten wir ungefähr Folgendes:
Benutzerdefinierte Karten
Home Assistant bietet neben der Fülle der integrierten Kartentypen natürlich auch die Möglichkeit, eigene Karten zu erstellen. Solche Karten werden als benutzerdefinierte Karten bezeichnet und mit Javascript erstellt.
Hier sind zwei einfache Codebeispiele. Es ist einfach, vorgefertigte Karten zu finden, die von verschiedenen
Enthusiasten im Netzwerk erstellt wurden. Wenn Sie selbst experimentieren möchten, sollten Sie herausfinden, dass spezielle
js-Module erstellt wurden, um das Schreiben neuer
Karten zu vereinfachen. Meine Erfahrung mit Javascript will immer weniger, daher werde ich als Beispiel nur einen kleinen Teil des Kartencodes angeben, der zur Auswahl und Anzeige des aktuellen Rezepts verwendet wird.
www / prescription-card.js Um die neue Karte zu verwenden, müssen Sie am Anfang der LUI-Einstellungsdatei den folgenden Code hinzufügen:
Rezeptkarte resources:
und unter der Liste der Karten:
- type: 'custom:recipe-card'
Benachrichtigungen
Ein notwendiger Bestandteil eines Smart Homes ist das Senden von Nachrichten an den Benutzer. In HA werden diese Nachrichten als Benachrichtigungen bezeichnet, und es gibt zwei grundlegende Arten von Benachrichtigungen. Das erste sind dauerhafte Benachrichtigungen. Zum Senden wird der integrierte Dienst "persistent_notification.create" verwendet. Eine Liste solcher Nachrichten ist über das Glockensymbol in der grafischen Oberfläche verfügbar. Sie verwenden Markdown-Markups und sind im Wesentlichen recht einfach.
Ein weiteres, interessanteres Tool ist das integrierte Benachrichtigungsmodul, mit dem Sie durch die Installation zusätzlicher Module Nachrichten über
Plattformen von
Drittanbietern senden können. Betrachten Sie als Beispiel ein
Modul für ein Telegramm .
Um das Modul nutzen zu können, müssen wir zunächst einen Tel im Telegramm selbst erstellen. Beim Einrichten benötigen wir die chat_id unseres Benutzers und die Token-Bot-API. Wie Sie diese Daten erhalten - ausführlich beschrieben unter dem obigen Link, gehen wir davon aus, dass wir bereit sind. Um direkt mit der Installation des Moduls fortzufahren, kopieren Sie zunächst wie bereits zuvor den Quellcode in den Komponentenordner und fügen Sie dann die Einstellungen zur Datei "configuration.yaml" hinzu:
configuration.yaml telegram_bot:
Plus-Einstellungen für das Benachrichtigungsmodul:
notify:
Mit dem Telegrammmodul können wir Nachrichten, Bilder oder Videos senden. Als Beispiel erstellen wir eine Automatisierung, um eine Nachricht mit einem Bild zu senden und uns über das Ende des Kochvorgangs zu informieren.
Nachwort
Home Assistant kann für diejenigen von Interesse sein, die versuchen möchten, die lokale Verwaltung eines Smart Homes zu organisieren. Dies ist ein breites, interessantes, offen und aktiv entwickeltes Projekt, das sich aufgrund der Bemühungen der Community entwickelt. Die Vielfalt der Home Assistant-Tools kann sich nur freuen (ich hatte keine Zeit, einige wichtige zu erwähnen). Als Minus kann man die relative Komplexität und Unvollständigkeit der Dokumentation erwähnen.
PS
Vor kurzem, am 10. Oktober, gab es, ich weiß nicht, ob dies als Release bezeichnet werden kann, den Übergang des Projekts von Version 0.99 auf Version 0.100.
Zitat aus den Versionshinweisen:
Willkommen zu den Versionshinweisen einer weiteren wundervollen Veröffentlichung! Nein, wir wollen nicht 1.0, wir machen 0.100! Wir haben das Gefühl, dass wir mit unseren Zielen für 1.0 noch nicht fertig sind, aber wir machen jeden Tag Fortschritte. In unserem Blog Simple Mode in Home Assistant 1.0 finden Sie einen kurzen Überblick über unsere Überlegungen .