Zum Inhalt springen

PHP / HTML & Co

FRITZ!Box AHA (AVM Home Automation) mit Google Home steuern

FRITZBox AHA AVM Home Automation mit Google Home steuern
Ein benötigtes GitHub Projekt wurde eingestellt. Eine neuere, günstigere und deutlich einfachere Lösung gibt es hier!

Seit dem 08.08.2017 ist der Google Home mit seinem Google Assistant nun auch in Deutschland erhältlich. Da AVM leider noch immer nicht plant Google Home oder Amazon Echo offiziell zu unterstützen, habe ich nach einem eigenen Weg gesucht um meine Smart Home Geräte von AVM per Sprache zu steuern.

AVM Tweet

Da ich es praktisch finde das keine weitere Basis benötigt wird wenn man eine FRITZ!Box verwendet und ich grundsätzlich die Hardware von AVM sehr mag, finde ich deren Einstellung beziehungsweise Entscheidungen diesbezüglich sehr schade. Abgesehen davon stellt sich mir auch die Frage wie gut man sich auf einem so stark wachsenden Markt behaupten kann wenn man solche Dinge nicht anbietet.

Doch kommen wir nun zu dem eigentlichen Thema: Die Steuerung von FRITZ!DECT 200 und FRITZ!DECT 300 Geräten mithilfe des Google Home. Das ganze funktioniert natürlich auch mit anderen AVM Geräten wie beispielsweise dem FRITZ!DECT 210. Aufgrund der langen Wege die zurück gelegt werden müssen gibt es jedoch eine recht hohe Verzögerung von im Schnitt etwa 5 Sekunden. Sollte jemand damit Probleme haben empfehle ich an dieser Stelle abzubrechen. Technisches Verständnis ist für diese Anleitung sehr empfehlenswert.

Vorgehensweise

Sprachkommando → Google Home → IFTTT (Google Assistent Service) → IFTTT (Maker Webhooks Service) → Aufruf einer URL → DDNS DynDNS Dienst → Raspberry Pi Webserver → fritzctl console → FRITZ!Box → FRITZ!Box AHA Gerät → Schalten

Hardware & Software

Hardware die ich verwendet habe:

  • FRITZ!Box 6490 Cable mit neuster Firmware 6.83
  • Raspberry PI 3 Modell B
  • Diverse FRITZ!DECT 200 und FRITZ!DECT 300 Geräte
  • Google Home
Google Home

Software die ich verwendet habe:

Dienste die ich verwendet habe:

FRITZ!Box vorbereiten

Die FRITZ!Box sollte auf dem neusten Stand sein und somit über das aktuellste FRITZ!OS verfügen. Empfehlenswert wäre es zudem einen extra Benutzer für die Smart-Home Steuerung anzulegen. Um aus dem Internet über eure FRITZ!Box auf den Raspberry Pi zugreifen zu können, müsst ihr neben einem DynDNS Account auch eine Portfreigabe (HTTPS/443) in den Einstellungen hinterlegt haben. Als DynDNS Anbieter empfehle ich euch den kostenlosen und zuverlässigen DynDNS Service. Wie das alles in eurer FRITZ!Box eingerichtet wird, erfahrt ihr online im Service-Bereich von AVM.

Raspberry PI vorbereiten

Auf meinem Raspberry Pi läuft die neuste Version von Raspbian Stretch Lite, Apache sowie PHP. In diesem Howto werde ich aber nicht weiter auf die Grundeinrichtung eines Raspberry Pi und der bekannten Software eingehen. Alle benötigen Anleitungen und Informationen dazu findet ihr schnell über Google. Um jegliche Kommunikation verschlüsselt zu übertragen ist mein Webserver mit einem kostenlosen Let´s Encrypt SSL-Zertifikat ausgestattet. Wie ihr das schnell und einfach einrichten könnt erfahrt ihr hier.

Um unsere AVM Smart-Home Geräte zu steuern muss auf dem Raspberry Pi zusätzlich fritzctl verfügbar sein. Für die Installation fügen wir dem Betriebssystem das benötigte Repository sowie den dazugehörigen Signaturschlüssel hinzu.

echo "deb *ungültiger Link entfernt* stretch main" | sudo tee -a /etc/apt/sources.list
wget -qO - *ungültiger Link entfernt* | sudo apt-key add -

Anschließend aktualisieren wir unser lokales Repository und installieren fritzctl.

sudo apt update
sudo apt install fritzctl

Über den folgenden Befehl wird die Einrichtung des Scriptes gestartet:

sudo fritzctl configure

Sobald alle benötigten Informationen bereitgestellt wurden, könnt ihr eure Smart-Home Geräte bereits über die Kommandozeile steuern. Weitere Informationen dazu erhaltet ihr über den folgenden Befehl:

fritzctl --help

Zwischenstand kontrollieren

  • Ist der Webserver auf eurem Raspberry Pi über die DynDNS Domain erreichbar?
  • Funktioniert die Steuerung eurer Smart Home Geräte über die Kommandozeile?

Wenn alles bisher eingerichtete funktioniert kann sofort es weiter gehen. Andernfalls empfehle ich euch zuerst die Fehler zu beheben.

Script anpassen

Auch wenn das von mir erstellte Script nicht wirklich schön ist funktioniert es zuverlässig und ist sicher. ? Ladet euch das ZIP-Archiv mit den benötigten Dateien hier herunter (Version 1.1) und entpackt diese. Anschließend öffnet ihr die Datei „fritz-aha-connect.php“ und nehmt die nachfolgend genannten und notwendigen Anpassungen vor.

// Erlaubte Geräte
$erlaubtegeraete = array(
  "Geraetename1",
  "Geraetename2",
  "Thermostate",
  "GutenMorgen",
  "GuteNacht",
);

Hier wird festgelegt welche Geräte durch dieses Script gesteuert werden dürfen. Die Namen müssen 1:1 aus der FRITZ!Box übernommen werden. Erlaubt sind jedoch nur Großbuchstaben, Kleinbuchstaben und Zahlen. Unter Umständen müsst ihr die Gerätenamen vorher in der FRITZ!Box diesbezüglich anpassen. „Thermostate“ ist ein Platzhalter der es ermöglicht das alle Heizkörperregler gleichzeitig gesteuert werden können. Die beiden Platzhalter „GutenMorgen“ und „GuteNacht“ können dafür verwendet werden um mehrere Steckdosen gleichzeitig zu schalten. Sollten die Platzhalter nicht benutzt oder benötigt werden, könnt ihr diese einfach entfernen.

// Erlaubte Schlüssel
$erlaubteschluessel = array(
  "KEYEINFÜGEN",
);

Um die Sicherheit zu erhöhen wird im Script ein Schlüssel hinterlegt. Dieser muss bei jeder Anfrage übertragen und abgeglichen werden. Ersetzt „KEYEINFÜGEN“ hier auf jeden Fall durch einen selbst erstellen Schlüssel der aus ca. 30 Zeichen besteht. Erlaubt sind hierbei Großbuchstaben, Kleinbuchstaben und Zahlen.

// Geräte abschalten verhindern
$abschaltenverhindern = array(
  "Geraetename2",
);

Wenn bestimmte Geräte nicht ausgeschaltet werden dürfen müsst ihr sie hier auflisten. Beispiel: Server & Computer

// Geräte umschalten verhindern
$umschaltenverhindern = array(
  "Geraetename2",
);

Wenn bestimmte Geräte nicht umgeschaltet werden dürfen müsst ihr sie hier auflisten. Beispiel: Server & Computer

// Befehl ausführen - Temp
elseif( $typ == "300" && $geraet == "Thermostate" ) {
  shell_exec("fritzctl temperature '$status' Geraetename3 Geraetename4 Geraetename5 Geraetename6");
}

Solltet ihr den Platzhalter „Thermostate“ benötigen beziehungsweise verwenden, könnt ihr an dieser Stelle die anzusteuernden FRITZ!DECT 300 Geräte mit Ihren Namen auflisten. Das selbe gilt für die Platzhalter „GutenMorgen“ und „GuteNacht“ im Bereich „Befehle ausführen“ mit ihren FRITZ!DECT 200 Geräten.

Die Dateien müssen nach dem speichern in das Hauptverzeichnis des Webservers hochgeladen werden. Bei mir ist das „/var/www/html/“.

IFTTT vorbereiten

In eurem IFTTT Account benötigt ihr die aktivierten Services Google Assistant und Maker Webhooks.

Verwendete IFTTT Google Home Services

Da es für unsere Zwecke keine passenden Applets gibt müssen wir uns diese selber erstellen. Hierfür gehen wir in den Maker Bereich der IFTTT Plattform und klicken unter „Applets“ – „Private“ auf den „New Applet“ Button. Bei einfachem ein-, aus- oder umschalten müssen die grünen Optionen mit dem entsprechenden Status „on“, „off“ oder „toggle“ verwendet werden. Für mehrere Thermostate oder zum Übergeben eines Wertes sind es die blauen Optionen (Beispiele):

if

Trigger: Google Assistent
„Say a simple phrase“/„Say a phrase with a number“
What do you want to say (Value): Licht/Temperatur auf # Grad einstellen
What do you want the Assistant to say in response? (Value): Ok
Language (Value): German

then

Add action
Action: Webhooks
„Make a web request“
URL (Value): https:// Eure-DynDNS-Adresse .tld/fritz-aha-connect.php
Method (Value): POST
Content Type (Value): application/x-www-form-urlencoded
Body (Value): schluessel=KEYEINFÜGEN&geraet=Geraetename1&typ=200/300&status=toggle/{{NumberField}}
Applet title: Licht/Heizung
Applet description: Licht/Heizung

Nach dem speichern des Applets könnt ihr auf „Want to test or use this Applet yourself? Enable it on IFTTT“ klicken um es zu aktivieren. Wenn ihr alles richtig gemacht habt sollte es auf dieser Seite zu sehen sein. Wenn das der Fall ist könnt ihr ab sofort den von euch eingerichteten Sprachbefehl nutzen. Bitte beachtet das es bei einigen Kombinationen von Wörtern Probleme geben kann da diese teilweise nicht von Google akzeptiert werden. Um solche Fehler auszuschließen empfehle ich, wie in den Beispielen, ganz einfach anzufangen. Solltet ihr ein Applet bearbeiten müsst ihr es unter Umständen erneut aktivieren.

Fertigstellung

Da solche Sachen immer zuverlässig, ohne Probleme und auf Anhieb funktionieren (?) gehe ich davon aus das alles bestens geklappt hat. Somit könnt ihr nun mit der finalen Einrichtung beginnen und euch alle benötigten Applets erstellen und gegebenenfalls Anpassungen am Script vornehmen.

Über euer Feedback in den Kommentaren würde ich mich freuen.

Minuten in Dezimal / Dezimal in Minuten

Minuten in Dezimal / Dezimal in Minuten

Heute möchte ich euch einen kleinen Rechner vorstellen den ich in der Skriptsprache PHP geschrieben habe. Mit diesem kann man Minuten (Zeit) in eine Dezimalzahl umrechnen (Industrieminute). Auch in die andere Richtung ist das rechnen möglich.

>>> Hier kommt ihr zum Rechner (öffnet im neuem Tab / Fenster) <<<

Um den Rechner schnell und unkompliziert (ohne scrollen oder ähnliches) nutzen zu können habe ich ihn nicht in das Layout der Webseite eingebaut sondern in eine extra Datei ausgelagert.

Umlaute in HTML schreiben

Umlaute in HTML schreiben

Da ich immer mal wieder im Internet suchen muss wie man bestimmte Sonderzeichen oder Umlaute in HTML schreibt, wollte ich das mal kurz an dieser Stelle festhalten. Vielleicht hilft es ja dem einen oder anderen.

  •    — erzwungenes Leerzeichen — &nbsp;
  • Ä — A Umlaut groß — &Auml;
  • ä — a Umlaut klein — &auml;
  • Ö — O Umlaut groß — &Ouml;
  • ö — o Umlaut klein — &ouml;
  • Ü — U Umlaut groß — &Uuml;
  • ü — u Umlaut klein — &uuml;
  • ß — scharfes S bzw. Esszett — &szlig;
  • & — Und-Zeichen bzw. Ampersand — &amp;
  • < — einfacher Pfeil link — &lt;
  • > — einfacher Pfeil rechts — &gt;
  • « — doppelter Pfeil links — &laquo;
  • » — doppelter Pfeil rechts — &raquo;
  • “ — Anführungszeichen oben — &quot;
  • © — Copyright-Zeichen — &copy;
  • • — großer, dicker Punkt — &bull;
  • · — kleiner Punkt — &middot;
  • | — gerader Strich — &#124;