Zwei FHEM-Server verbinden: FritzBox-Anwesenheitserkennung auf dem Raspberry Pi nutzen

Loxone im Einsatz? Dann schau dir unseren LoxKurs an und profitiere von unserem Wissen!

Die quelloffene Hausautomation-Serversoftware FHEM kann grunds√§tzlich auf unterschiedlichen Hardware-Systemen betrieben werden. Meistens wird FHEM auf Grund der g√ľnstigen Hardware auf einem Raspberry Pi (Affiliate-Link) betrieben. Auch AVM FritzBoxen (z.B. die FritzBox 7390 (Affiliate-Link)) sind eine beliebte Server-Hardware zum Betrieb von FHEM. Verwendet man zwei verschiedene FHEM-Server, so gibt es die M√∂glichkeit, diese in Kombination miteinander zu betreiben. Dieser Artikel zeigt, wie von einem FHEM-Server auf einem Raspberry Pi¬†Daten eines FHEM-Servers auf einer FritzBox 7390¬†abgefragt werden.

Fhem2Fhem verbindet Systeme

Das Helper-Module Fhem2Fhem (Standardkomponente von FHEM) beabsichtigt genau den hier beschriebenen Zweck: Es verbindet zwei separate FHEM-Installationen miteinander. Dabei existieren zwei verschiedene Modi: RAW und LOG.

  • Der RAW-Modus erm√∂glicht es, eine Remote-Installation von einer Hauptinstallation zu steuern (z.B. einen am Remoteserver angeschlossenen CUL). Hierauf wird in diesem Artikel nicht weiter eingegangen.
  • Der LOG-Modus erm√∂glicht es, s√§mtliche Events (z.B. Zustands√§nderungen) von Ger√§ten auf dem Remoteserver im Hauptserver zu erfassen, um beispielsweise davon abh√§ngige Steuerungen zu generieren.

Die Verbindung der Systeme ist relativ simpel umzusetzen. Der Hauptserver erhält dazu lediglich die IP-Adresse des neu einzubindenden Remoteservers in folgender Form:

define Remoteserver FHEM2FHEM 192.168.178.1:7072 LOG:.*

Name (hier: Remoteserver) und IP-Adresse m√ľssen dabei individuell angepasst werden. Diese Definition ist bereits ausreichend, um beide Instanzen zu verbinden. Der Status von Remoteserver sollte nun bereits auf „connected“ stehen (siehe Screenshot).

Anwesenheitserkennung: Fhem auf Raspberry Pi mit Fhem auf FritzBox verbinden

Um eine Anwesenheitserkennung zu Hause umzusetzen, gibt es mehrere M√∂glichkeiten. Neben der Verwendung eines Bluetooth-Sticks (Affiliate-Link) am Raspberry Pi¬†(Anleitung: Howto: Mit FHEM Push-Nachrichten aufs iPhone schicken (Update)) und einer Standard-Lan-Ping-Methode (absolut nicht zuverl√§ssig), bietet die AVM FritzBox (z.B. die 7390 (Affiliate-Link)) die M√∂glichkeit, √ľber besondere Bordmittel den Online-Status von Ger√§ten sehr gut zu ermitteln. Daraus l√§sst sich f√ľr FritzBox-Besitzer hervorragend eine Anwesenheitserkennung in FHEM realisieren, die es erm√∂glicht, z.B. Heizungen, Lichter oder Beschattung in Abh√§ngigkeit anwesender Personen zu steuern.

Viele Nutzer (und auch ich) besitzen zwar eine FritzBox, nutzen FHEM allerdings auf einem separaten Raspberry Pi. Hier soll nun gezeigt werden, wie die „Fritzbox“-Anwesenheitserkennung f√ľr eine FHEM-Installation auf einem Raspberry Pi¬†genutzt werden kann. Zun√§chst wird FHEM auf der FritzBox installiert und an den Haupt-FHEM-Server angebunden.

  • Die Installation muss mit dem von FHEM bereitgestellten Fritzbox Image (Informationen und Direktdownload) bewerkstelligt werden. Das Image-File wird dabei im Webinterface der FritzBox als „manuelles“ Update hochgeladen. Nach einem Reboot der Box ist FHEM √ľber den Port 8083 erreichbar (http://fritz.box:8083/fhem).
  • Anschlie√üend ben√∂tigt FHEM Root-Rechte. Dazu wird eine Telnet-Verbindung mit der FritzBox hergestellt und in den Ordner „/var/media/ftp/fhem/“ gewechselt, wo die Datei „startfhem“ ge√§ndert wird. Anschlie√üend wird ALLES zwischen den Zeilen „## START:fhem-user“ und „## END:fhem-user“ durch wiederholtes Dr√ľcken der Taste „D“ gel√∂scht. Anschlie√üend ESC und „:wq!“:
    Рcd /var/media/ftp/fhem/
    Рvi  startfhem
    – L√∂schen mit „D“
    – [ESC] und „wq!“
  • Der neue FHEM-Server auf der FritzBox wird jetzt mit dem Hauptserver, wie oben beschrieben, mit Fhem2Fhem gekoppelt. (Anmerkung: Der nachfolgende Eintrag muss in die fhem.cfg des Raspberry Pi eingetragen werden.)

B003108AZI

Hauptserver: define Remoteserver FHEM2FHEM 192.168.178.1:7072 LOG:.*

Nun kann damit begonnen werden, auf dem FritzBox-Server (Remoteserver) die Anwesenheitserkennung umzusetzen. (Anmerkung: Der nachfolgende Eintrag muss in die fhem.cfg der FritzBox eingetragen werden.)

Remoteserver: define Christoph PRESENCE fritzbox iPhone5Christoph 10 30

Dieser Befehl installiert eine neue Presence-Instanz, der meine Anwesenheit an Hand meines Mobiltelefone pr√ľft. Wichtig ist dabei, dass der Mobiltelefon-Name dem aus dem FritzBox-Webinterface exakt entspricht. Die beiden Zahlen (10 30) am Ende der Definition geben die Pr√ľf-Zeitintervalle an (hier 10 und 30 Sekunden). Damit erfolgt eine Abfrage alle 10 Sekunden bei Abwesenheit und danach alle 30 Sekunden, sobald das Smartphone anwesend ist. Je h√∂her die gew√§hlten Werte, desto weniger wird am Akku gezerrt. Je geringer die Werte, desto genauer (Zeitbezug) ist die Erkennung. Hier empfielt es sich, einen Watchdog einzusetzen, welcher erst nach einigen Minuten „erkannter“ Abwesenheit den Status auf absent √§ndert, um kurzfristige Empfangsprobleme zu kompensieren. Wie das genau funktioniert, wird u.A. im Artikel Howto: Mit FHEM Push-Nachrichten aufs iPhone schicken (Update) beschrieben. Zur Kontrolle sollte die Definition im Anschluss gepr√ľft werden. Sie sollte entweder „present“ oder „absent“ als Status besitzen.

Jetzt soll dieser Status alle 10 Sekunden an den Raspberry Pi (Affiliate-Link) (Haupt-Server) √ľbertragen werden. Daher wird dort zun√§chst einmal ein Dummy angelegt:

Hauptserver: define ChrisAnwesend dummy

Dieser Dummy soll den Status der Presence-Definition auf der FritzBox erhalten. Dazu wird wie folgt vorgegangen: Auf dem Hauptserver wird ein Notify angelegt, der auf ein Dummy (DummyA) am Remoteserver reagiert und mit dem Befehl fhem „%“ ALLES genauso in den Hauptserver schreibt, wie es im Remoteserver geschrieben wird.

Hauptserver (ab Version 5.7): define Datentransfer notify DummyA { fhem „%“ }¬†define Datentransfer notify DummyA { fhem „$EVENT“ }
(Danke Tim & Pascal f√ľr den Hinweis!)

Remoteserver: define DummyA dummy

Jetzt wird lediglich noch ein Notify am Remoteserver angelegt, welches den aktuellen Status der Anwesenheitserkennung nimmt, als Variable speichert und in folgender Form an das Dummy „DummyA“ √ľbermittelt, welches dann wiederum den relevanten Befehl ausf√ľhrt, der das Dummy „ChrisAnwesend“ auf dem Hauptserver aktualisiert.

Remoteserver: define ChrisNotiPresence notify Christoph {my $chrisstate=ReadingsVal(„Christoph“,“state“,0) fhem („set DummyA set ChrisAnwesend $chrisstate“)}

Der Zusammenhang ist also wie folgt. Der Dummy (DummyA) fungiert hier quasi als Befehlstr√§ger, indem er den Status „set ChrisAnwesend $chrisstate“ erh√§lt. Sein Status, der ja eigentlich ein Befehl ist, wird dank des auf dem Hauptserver eingerichteten Notifies mit „%“ √ľbernommen, also dort als Befehl umgesetzt. Um es zusammenzufassen: Die Anwesenheitserkennung auf der FritzBox 7390 (Affiliate-Link)¬†schreibt einen „set“-Befehl in einen Dummy auf der FritzBox, der √ľber ein Notify vom Raspberry Pi¬†√ľbernommen wird und daraufhin einen Dummy auf dem Raspberry Pi¬†mit dem Anwesenheitsstatus beschreibt.

Erfahrungswerte haben gezeigt, dass eine Anwesenheit nach etwa einer Minute erkannt wird und Abwesenheit nach etwa 5 Minuten einsetzt. Diese Form der Anwesenheitserkennung eignet sich daher NICHT f√ľr beispielsweise T√ľr√∂ffnung mit dem KeyMatic Set aus der HomeMatic-Serie, da eben erst mit einer gewissen Verz√∂gerung reagiert wird. Hier reagiert die Bluetooth-Variante insgesamt schneller.

Aus meinem täglichen Leben

Die Anwesenheitserkennung der FritzBox eignet sich hervorragend f√ľr unterschiedliche Szenarien. Ich nutze diese z.B. um bei Abwesenheit alle Lichter und Verbraucher im Haushalt auszuschalten. Der Verbund zweier FHEM-Instanzen (eine auf dem Raspberry Pi¬†und eine auf FritzBox 7390) funktioniert dabei reibungslos. K√ľnftig m√∂chte ich auf diese Weise auch weitere Daten der FritzBox nutzen, um sie in meinem Haupt-Server einzubinden (z.B. Telefondaten der FritzBox etc.)

Affiliate-Links

[easyazon_image align=“none“ height=“81″ identifier=“B003108AZI“ locale=“DE“ src=“https://www.meintechblog.de/wordpress/wp-content/uploads/2015/06/41tx6bHWSUL.SL110.jpg“ tag=“meintechblog-131130-21″ width=“110″][easyazon_image align=“none“ height=“73″ identifier=“B00LPESRUK“ locale=“DE“ src=“https://www.meintechblog.de/wordpress/wp-content/uploads/2015/06/51dkukLk3UL.SL110.jpg“ tag=“meintechblog-131130-21″ width=“110″]

 

Loxone im Einsatz? Dann schau dir unseren LoxKurs an und profitiere von unserem Wissen!

Verpasse keine Inhalte mehr! Trage dich in den Newsletter ein und folge uns auf Facebook.

Was ist ein Affiliate-Link? Wenn du auf einen Affiliate-Link klickst und √ľber diesen Link einkaufst, bekomme ich vom betreffenden Online-Shop oder Anbieter eine Provision, was mich u.A. bei den laufenden Kosten den Blogs unterst√ľtzt. F√ľr dich ver√§ndert sich der Preis nicht.

Christoph

berichtet seit Juni 2012 auf meintechblog.de √ľber seine Erfahrungen zu Smart Home und Hausautomation und besch√§ftigt sich au√üerdem mit Smart Grids. Mehr Infos

20 Gedanken zu „Zwei FHEM-Server verbinden: FritzBox-Anwesenheitserkennung auf dem Raspberry Pi nutzen“

  1. Hallo Christoph,
    sehr sch√∂ne L√∂sung – nur funktioniert sie bei mir leider nicht. Ich bekomme zwar auf der FB ein „present“ – abder der DummyA hat als status immer nur „???“ – wenn ich es richtig verstehe, bedeutet dies, dass der Presence Wert nicht an DummyA √ľbergeben wird und damit dann nicht an den Hauptserver (Rasp).

    Ich habe zuerst mit einem eigenen Namen probiert – hat nicht funktioniert – dann habe ich deine L√∂sung 1:1 mittel√∂s copy&paste √ľbertragen – trotzdem ist dummyA immer noch „???“ auf der FB

    1. Ich habe es auch nach der Anleitung gemacht, und habe es hinbekommen,
      es funktioniert.
      Du hast bestimmt einmal Remote und Hauptserver verwechselt, ggf IP √ľberpr√ľfen.

  2. Hallo Christoph,
    heute las ich deinen Beitrag zur Verbindung zweier fhems.
    Evtuell kannst du mir helfen:
    hab‘ eine Fritzbox und ein Raspi in Betrieb – beide mit fhem. F√ľr das fhem auf der Fritzbox ben√∂tige ich eine Temperaur von der Raspi-fhem.
    Hierf√ľr steht das Modul fhemtofhem zur Verf√ľgung.
    Beide wurden verbunden mit folgender Definition – define ds1 FHEM2FHEM 192.168.10.42:7072 LOG:.*
    Auf der Telnet-Seite (FritzBox mit putty) sind sogleich alle Werte beider fhem-Programme sichtbar.

    Problem: wie lautet die Syntax f√ľr die Abfrage in fhem? Wenn ich in fhem auf der FritzBox z.B. get Trphs (eine 1wire Temperatur auf dem Raspi) eingebe – kommt die Botschaft „define Trphs first“.
    Letztendlich möchte ich den Wert in einer PID-Reglung als Istwert verwenden.
    Hat jemand eine Lösung?

    Gr√ľ√üe

    1. Hallo Miro,

      getestet habe ich es mit FRITZ!OS 06.00. Da es allerdings nicht um FritzOS-Spezifika geht, sondern um FHEM, sollte es auch mit V 6.1 funktionieren.

      VG
      CHristoph

    1. Hallo Miro,

      auf fhem.de findest Du direkt alle Images, die du ben√∂tigst. Hier ist auch ein Image direkt f√ľr die FritzBox dabei. Die Version (aktuell 5.5) ist die Nummer von FHEM und hat mit der Version von FritzOS nichts zu tun.

      Viele Gr√ľ√üe
      Christoph

  3. Hallo Christoph,

    vielen Dank f√ľr die Anleitung! Hat soweit funktioniert…

    Nur eines funktioniert nicht => notify. Ich komme nicht auf die L√∂sung. Und hoffe Du kannst mir evtl helfen…

    Wenn ich {my $chrisstate=ReadingsVal(„Christoph“,“state“,0);; fhem („set DummyA set ChrisAnwesend $chrisstate“)} in dem Eingabefeld auf der FHEM Seite eingebe (nat√ľrlich auf meine Ger√§te und Umgebung angepassst) wird der Status auf der FritzBox und auf dem Hauptserver ge√§ndert. Nur macht der FHEM es selber nicht wenn sich der Status des Telefons √§ndert.

    Hast du vielleicht ein Ansatz?

    Vielen Dank im Voraus!

    MfG

    Anatoli

  4. Echt toller Blogpost! Hab hier schon verdammt viel aufgeschnappt :-D
    Nun meine Frage, ich habe deine „FHEM-NUC“ Anleitung umgesetzt, da mir der Raspi zu langsam ist. Ist es m√∂glich √ľber die hier beschriebene Variante den RPI als eine Art CUL zu nutzen? Habe bereits einen HMlan Adapter und m√∂chte lediglich das 433MHz Bereich (Funksteckdose, etc) damit ansprechen.

    Ein Tipp wäre toll!

    ps. √ľber CUL + Culfw bin ich mir bewusst, trotzdem w√§re eine preisg√ľnstige Variante eine tolle Sache ^^

    Liebe Gr√ľ√üe

    1. Hi, wie soll der RPI denn mit den 433ern kommunizieren? Hast du einen Sender √ľber GPIO dran?
      VG
      Christoph

  5. Hallo Christoph,
    ich habe es erfolgreich nach Deiner Anleitung umgesetzt, scheitere aber daran dass es anscheinend Probleme gibt wenn man einen Repeater (bei mir FRITZ!WLAN Repeater 300E) im Einsatz hat…
    ich werde weiter testen..

    Gr√ľ√üe,
    Carsten

  6. Hallo Christoph,
    auch ich bin gerade ein blutiger Anfänger in sachen Raspi + mit Cul 868, 433 inkl. Fritz 7390 an Fritz 6360.
    Ich habe alles nach deiner Anleitung oben gemacht und 3 mal kontrolliert.
    Leider ist auch bei mir bei Werner_Anwesend auf dem HauptFhem und auf der Fritzbox 7390 der DummyA ein ??? gesetzt.
    Was kann ich machen um diesen Fehler zu beheben ??
    Gruß Werner

  7. Moin Moin,

    Erstmal vielen Dank f√ľr all die tollen Tutorials! Habe mir auch das eBook gekauft von dem ich sehr begeistert bin.

    Ich habe das Tutorial zur WLAN-Anwesnheitserkennung umgesetzt jedoch wird der Status auf meinem Raspi nicht gesetzt. Ich habe lediglich den Hostname meines Smartphones angepasst.

    Raspi fhem.cfg:
    define FritzBox FHEM2FHEM picloud:7072 LOG:.*
    define ChrisAnwesend dummy
    define Datentransfer notify DummyA { fhem „%“ }

    Fritzbox fhem.cfg:
    define Christoph PRESENCE fritzbox android-c9cab0d8fd29416 10 30
    define DummyA dummy
    define ChrisNotiPresence notify Christoph {my $chrisstate=ReadingsVal(„Christoph“,“state“,0);; fhem („set DummyA set ChrisAnwesend $chrisstate“)}

    Der Status wird in der Fritzbox richtig angezeigt, DummyA ist gleich „set ChrisAnwesend present“, ChrisNotiPresence ist active.
    Auf dem Raspi wird die FritzBox als connected angezeigt, Datentransfer ist active jedoch ist ChrisAnwesend = ???

    Kann mir jemand den Fehler aufzeigen?

    Gruß
    Wolfgang

    1. Hallo Wolfgang,

      eigentlich ist das so alles richtig. Hast du das Problem mittlerweile lösen können?
      Ich w√ľrde sonst versuchen, an beiden FHEM-Systemen noch einem ein „update“ durchzuf√ľhren.

      Gib noch einmal Bescheid!
      Viele Gr√ľ√üe
      Christoph

    2. Hach wie peinlich…

      Der Fehler lag in der Zeile
      define FritzBox FHEM2FHEM picloud:7072 LOG:.*

      Nat√ľrlich muss sie
      define FritzBox FHEM2FHEM fritz.box:7072 LOG:.*
      lauten.

      Danke f√ľr die Hilfsbereitschaft!

    3. Hallo Wolfgang,

      ich dachte mir schon, dass es dann an dieser einen Zeile liegen muss, die Du verändert hast. Viel Spaß mit der Anwesenheitserkennung.

      Viele Gr√ľ√üe
      Christoph

  8. Hi,

    nach etwas rumwurschteln muss der Datentransfer Dummy seit FHEM Version 5.7 jetzt folgendermaßen definiert werden:

    define Datentransfer notify DummyA { fhem „$EVENT“ }

    Vielleicht kann das aktualisiert werden und es m√ľssen nicht andere so lange suchen wie ich :)

    Gruß Pascal

  9. Hallo Christoph,

    danke f√ľr die tolle Anleitung. Bei mir wird der Presence Status von Christoph richtig angezeigt, aber f√ľr das dummy „DummyA“ wird auf dem Remoteserver nur „???“ ausgegeben. Die Verbindung vom Hauptserver zum Remoteserver ist „connected“.
    Wo kann der Fehler liegen, habe es zuerst mit eigenen Namen probiert und dann mit den Vorgaben (copy+paste). Nachfolgend die Eintragungen aus den Config Dateien:
    1.) Remoteserver FritzBox 7390 fhem.cfg:

    define Christoph PRESENCE fritzbox 12-Detlef-Handy-Note1 10 30
    define DummyA dummy
    define ChrisNotiPresence notify Christoph {my $chrisstate=ReadingsVal(„Christoph“,“state“,0) fhem („set DummyA set ChrisAnwesend $chrisstate“)}

    2.) und hier die fhem.cfg von dem Raspi:
    define Remoteserver FHEM2FHEM 192.168.66.1:7072 LOG:.*
    define ChrisAnwesend dummy
    define Datentransfer notify DummyA { fhem „$EVENT“ }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert