Telefonsteuerung

Smart-Home-Steuerung mit FHEM: Notzugang per Telefon

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

Ein FHEM-basiertes Smart Home vernetzt und automatisiert eine Vielzahl von GerĂ€ten zu Komfort-, Sicherheits- oder Energiesparzwecken. Dabei agiert das Smart Home meist autark auf Basis von durch den Nutzer eingestellten Regeln und AblĂ€ufen. Ein fernsteuerndes Eingreifen z.B. per Smartphone App ist jedoch hĂ€ufig trotzdem notwendig, um bestimmte Wunschszenarien zu aktivieren. Beispielsweise kann eine Anwesenheitssimulation je nach Bedarf per Smartphone App gestartet, die Heizung bereits vor Ankunft zuhause aktiviert oder einer bestimmter Verbraucher von unterwegs abgeschaltet werden. Das alles funktioniert ĂŒber eine App auf dem Smartphone hervorragend, solange eine Internet-Verbindung besteht. Gerade im Urlaub ist diese Verbindung jedoch nicht immer gegeben, sodass ein dauerhafter Zugriff auf das Smart Home nicht möglich ist. Eine alternative, wenn auch stark beschrĂ€nkte Zugriffsmöglichkeit, bietet das Telefon. Dieser Artikel erklĂ€rt, wie unter der Verwendung einer Fritz!Box, wie der Fritz!Box 7490 (Affiliate-Link), eine kostenlose, telefongesteuerte Smart-Home-Regelung fĂŒr spezielle Einzelszenarien möglich ist.

Telefon per FritzBox in FHEM anbinden

Wer einen gĂ€ngigen DSL-Tarif besitzt, hat heute meist eine digitale VoIP-Telefon-Leitung, die dann beispielsweise ĂŒber die Fritz!Box 7490 (Affiliate-Link) eingebunden ist. Mit Hilfe des FHEM-Moduls „FB_CALLMONITOR“ kann FHEM sĂ€mtliche Meta-Daten der TelefonaktivitĂ€ten einer Fritz!Box mitlesen. 

Damit dieses Modul verwendet werden kann, muss zunĂ€chst der Callmonitor der Fritz!Box aktiviert werden. Dazu wird auf einem an die Box angeschlossenen Telefon, z.B. einem „einfachen“ Schnurlostelefon wie dem Bestseller Gigaset A415 (Affiliate-Link), die folgende „Telefonnummer“ angerufen.

#96*5*

Aktivieren des Callmonitors

Darauf folgend kann das Telefon als Objekt in FHEM angelegt werden. Dies geschieht ĂŒber den folgenden „define“-Ausdruck in der FHEM-Kommandozeile am oberen Bildrand.

define Telefon FB_CALLMONITOR 192.168.178.1

Hierdurch wird das Objekt „Telefon“ (Name frei wĂ€hlbar) angelegt, welches unter der IP-Adresse der FritzBox (hier: 192.168.187.1) zu finden ist. ZusĂ€tzlich wird dem Telefon mit Hilfe des „attr“-Ausdrucks noch ein Attribut vergeben, damit FHEM im weiteren Verlauf lediglich bei einer StatusĂ€nderung des Wertes „event“ eine Aktion auslöst.

attr Telefon event-on-change-reading event

Nach einem Klick auf „Everything“ in FHEM, sollte das Telefon auffindbar sein und in der Detailansicht etwa wie folgt aussehen.

FB_Callmonitor in FHEM

In den Readings sind bei eingehenden oder ausgehenden Anrufen alle wichtigen Informationen zu finden. Die direction zeigt die Richtung des Anrufes an, wÀhrend external und internal number die Telefonnummern des Anrufers und des Angerufenen anzeigen. Die interne Nummer kann dabei auch unterschiedlich sein, wenn in der FritzBox mehr als eine Telefonnummer hinterlegt ist (z.B. bei Tarifen mit mehreren Inklusiv-Telefonnummern).

Bei Anruf Licht

Um nun mit dem Telefon allein durch das eingehende Anrufsignal eine gewisse Aktion umzusetzen, ist ein klein wenig Programmcode in Form eines Notify nötig. Im nachfolgenden Beispiel wird per Anruf eine Anwesenheitssimulation aktiviert, die gerade jetzt in der dunklen Jahreszeit Einbrecher bei Abwesenheit abschrecken soll. Um das Beispiel möglichst einfach zu halten, wird hier nur eine Lichtquelle fĂŒr eine gewisse Zeit aktiviert werden.

Das Licht kann mittels diverser Schaltaktoren in FHEM angelernt sein, wie z.B. dem HomeMatic Unterputz-Schaltaktor fĂŒr Markenschalter (Affiliate-Link) oder der HomeMatic Funk-Steckdose mit Leistungsmessung (Affiliate-Link).

Mit dem folgenden Code, der ĂŒber „Edit files“ in die Datei „fhem.cfg“ eingetragen wird, wird das Licht (hier: Wz.Licht) bei einem eingehendes Anruf einer bestimmten externen Nummer (hier: 01519876543) an eine bestimmte interne Nummer (hier: 9876543) fĂŒr eine bestimmte Zeit (hier: 900 Sekunden = 15 Minuten) aktiviert.

define not_TelefonAnwesenheitssimulation notify Telefon {fhem ("set Wz.Licht on-for-timer 900") if (ReadingsVal("Telefon","internal_number","") eq "9876543" && ReadingsVal("Telefon","external_number","") eq "01519876543")}

Die Schaltung erfolgt dabei ausschliesslich auf Basis des eingehenden Anrufs, ohne dass eine GesprÀchsverbindung aufgebaut werden muss. Das demonstrierte Beispiel funktioniert mit jedem in FHEM gÀngigen Befehl, also z.B. auch dem Aktivieren einer Heizung.

Aus meinem tÀglichen Leben

Ich habe eine „Doppel-Flat“ von 1&1, bei der ich gleich drei Inklusiv-Telefonnummern erhalten habe. FĂŒr das tatsĂ€chliche Telefonieren nutze ich nur eine der Nummern, sodass die beiden Übrigen von mir fĂŒr den Zugriff auf FHEM verwendet werden. Da in der Kombination aus externer und interner Nummer, wie im Beispiel oben gezeigt, immer nur das Hinterlegen einer einzelnen Aktion möglich ist, muss die Telefonsteuerung eher als eine Art Notzugang verstanden werden. Ich nutze die Anwesenheitssimulation mit der einen Nummer, wĂ€hrend ich auf der anderen einen Push-Service hinterlegt habe, der mir die IP-Adresse meiner FritzBox per Pushover auf das Smartphone sendet. Letzt genannte Funktion nutze ich fĂŒr den Fall, dass der DynDNS-Dienst einmal ausfĂ€llt (leider schon vorgekommen). Die Anbindung meiner Fritz!Box 7490 (Affiliate-Link) in FHEM als Notzugang ist zwar einfach aber in vielen FĂ€llen Ă€ußerst effektiv!

Affiliate-Links

[easyazon_image align=“none“ height=“48″ identifier=“B00EO777DI“ locale=“DE“ src=“https://www.meintechblog.de/wordpress/wp-content/uploads/2015/06/41GaaoN9IKL.SL1101.jpg“ tag=“meintechblog-141231-21″ width=“110″][easyazon_image align=“none“ height=“110″ identifier=“B00EDQ4IMS“ locale=“DE“ src=“https://www.meintechblog.de/wordpress/wp-content/uploads/2015/06/412Bn5TPMwVL.SL110.jpg“ tag=“meintechblog-141231-21″ width=“60″][easyazon_image align=“none“ height=“102″ identifier=“B00GHDNWF4″ locale=“DE“ src=“https://www.meintechblog.de/wordpress/wp-content/uploads/2015/06/21cuU8XAQsL.SL1101.jpg“ tag=“meintechblog-141231-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

12 Gedanken zu „Smart-Home-Steuerung mit FHEM: Notzugang per Telefon“

  1. Hallo Christoph
    Wie genau hast du Push service eingerichtet, der dir die IP deiner Fritzbox meldet, hatte nÀmlich schon etliche Male das gleiche Problem.
    Gruss Richi

  2. Hallo Christoph
    Da ich bis anhin nicht von dir gehört habe, habe ich ich selber einige Versuche mit:
    „wget -q -O – http://checkip.dyndns.org | sed -e ’s/.*: //‘ -e ’s/<.*$//'"
    unternommen. Die IP wird zwar im log File angezeigt, aber ich kriege diese nicht als Wert in mein
    define meineIP dummy
    rein.
    Hast du mir einen Rat?
    GrĂŒsse Richi

    1. Hallo Richi,

      sorry, dass wir es aktuell nicht mehr schaffen, tĂ€glich auf Kommentare zu antworten. Was ich gemacht habe, ist Folgendes. Im Ordner /opt/fhem habe ich ein Unix-Skript angelegt („ippush.sh). Der Inhalt ist wie folgt:

      #!/bin/bash

      ip=$(ip -f inet -o addr show eth0|cut -d\ -f 7 | cut -d/ -f 1)
      #echo "ip: $ip"

      curl -s -F "token=aoA123456789m72g4wrBatE9Tk" -F "user=u12345678912345u1ad2YBRpkn" -F "message=IP-Adresse: $ip" https://api.pushover.net/1/messages.json

      Das Skript muss mit „sudo chmod +x ippush.sh“ ausfĂŒhrbar gemacht werden. Dann kann fhem das Skript starten.
      VG
      Christoph

  3. Hallo Christoph,

    Herzlichen Dank fĂŒr deinen Anstoss, hat perfekt geklappt, habe das Skript wenig geĂ€ndert, jetzt krieg ich die IP von meinen beiden Fritzboxen via push gemeldet.

    Gruss Richi

  4. auch hier wieder eine schöne Sache :)

    Ich hab nach dem oben erklĂ€rten Muster ein notify eingerichtet, welches bei jeglichem eingehenden Anruf (event=ring) ein Licht am Telefon aktiviert … nun muss man nicht mehr im Halbdunkel hinstolpern ;-)

  5. Hallo,

    erstmal vielen Dank fĂŒr diesen Blog. Ich wĂ€re ohne mit meiner FHEM-Installation definitiv nicht so weit wie ich jetzt bin. Die ‚Trockner fertig‘-Aktion ist z. B. etwas worauf ich nie gekommen wĂ€re, und das im Alltag wirklich praktisch ist.
    Da auch in den Kommentaren immer mal wieder etwas hilfreiches dabei ist, möchte ich auch mal meinen Senf dazugeben.
    Bei dieser Aktion kam mir gleich die Idee, dass wenn ich sowieso die Anrufe aus der Fritzbox auslese, ich mir ja bei entgangenen Anrufen auch gleich eine Pushnachricht zukommen lassen kann. Das ganze sieht jetzt wie folgt aus:

    define FritzBox FB_CALLMONITOR 192.168.178.1
    attr FritzBox event-on-change-reading event
    attr FritzBox room Technik
    attr FritzBox group Fritzbox
    define TelefonAnruf notify FritzBox {SCR_TelefonAnruf}
    attr TelefonAnruf room Ereignisse
    attr TelefonAnruf group notify Fritzbox

    define FritzboxStatus dummy
    attr FritzboxStatus room Technik
    attr FritzboxStatus group Fritzbox

    sub SCR_TelefonAnruf()
    {
    my $NummerIntern = ReadingsVal(‚FritzBox‘, ‚internal_number‘, „“);
    my $InternCon = ReadingsVal(‚FritzBox‘, ‚internal_connection‘, „“);
    my $NummerExtern = ReadingsVal(‚FritzBox‘, ‚external_number‘, „“);
    my $NummerMissed = ReadingsVal(‚FritzBox‘, ‚missed_call‘, „“);
    my $Status = ReadingsVal(‚FritzBox‘, ‚event‘, „“);
    my $LeereNummer = „empty“;
    fhem( „set FritzboxStatus $Status“ );

    if($Status eq „disconnect“)
    {
    if($NummerIntern eq „09999999“ && $NummerExtern eq „0888888888“)
    {
    fhem( „set STR_Heizungen desired-temp 20.0“ );
    fhem („setreading FritzBox missed_call $LeereNummer“);
    fhem („setreading FritzBox internal_connection $LeereNummer“);
    }
    elsif($InternCon eq „Answering_Machine_1“)
    {
    fhem(„set PushoverTerk msg ‚FHEM Entgangener Anruf‘ ‚Anruf von $NummerExtern. Nachricht auf AB.‘ “ 0 ““);
    fhem („setreading FritzBox internal_connection $LeereNummer“);
    }
    elsif($NummerMissed ne „empty“)
    {
    fhem(„set PushoverTerk msg ‚FHEM Entgangener Anruf‘ ‚Anruf von $NummerMissed. Keine Nachricht hinterlassen.‘ “ 0 ““);
    fhem („setreading FritzBox missed_call $LeereNummer“);
    }
    }
    }

    Da die Fritzbox nicht immer alle readings setzt und sie gar nicht leert, musste ich da selbst Hand anlegen. Das ganze geht vielleicht noch eleganter, aber es funktioniert jedenfalls.Der FritzboxStatus-Dummy wird nicht benötigt. Den habe ich nur fĂŒr Anzeigezwecke eingerichtet.

    mfg
    Tom

  6. Hallo Christoph,

    Irgendetwas funktioniert da bei mir nicht. Ich erhalte folgende Fehlermeldung nach dem Sichern der fhem.cfg:

    Unknown command &, try help. Unknown command ReadingsVal(„Telefon“,“external_number“,““), try help.

    Was ist falsch? Vielen Dank und beste GrĂŒĂŸe

    Maria

    1. Hallo Maria,

      ich habe den Code gerade eben noch einmal auf einem „frischen“ FHEM-Server in die Kommandozeile am oberen Bildrand eingefĂŒgt und abgesendet – ohne Fehlermeldung. Hast du den gesamten Code kopiert oder vielleicht nur einen Teil davon?

      Viele GrĂŒĂŸe
      Christoph

  7. ich hatte die fehlermeldungen auch bei folgendem Syntax:
    define not_TelefonAnwesenheitssimulation notify Telefon {fhem („set Wz.Licht on-for-timer 900„) if (ReadingsVal(„Telefon“,“internal_number“,““) eq „9876543“ && ReadingsVal(„Telefon“,“external_number“,““) eq „01519876543„)}

    habe die string sachen entfernt und seit dem klappt es. bsp:

    #schaltet heizung auf automatik wenn anruf 01745… an 22472
    define not_TelefonAnwesenheitssimulation notify Telefon {fhem („set HCAutomatik on“) if (ReadingsVal(„Telefon“,“internal_number“,““) eq „22472“ && ReadingsVal(„Telefon“,“external_number“,““) eq „01745214“)}

  8. #schaltet heizung auf automatik wenn anruf 01745… an 22472
    define not_TelefonAnwesenheitssimulation notify Telefon {fhem („set HCAutomatik on“) if (ReadingsVal(„Telefon“,“internal_number“,““) eq „22472“ && ReadingsVal(„Telefon“,“external_number“,““) eq „01745214“)}

    Ich habe die Nummern mal durch mmeine ersetzt und das set einfach mal meine Steckerleiste anschalten lassen. Allerdings beim Anruf klappt das nicht. Das set in der Kommandozeile funtioniert, auch der FB Callmontior klappt. Nur das Zusammenspiel nicht.

  9. Hallo zusammen,

    wenn jemand mich anruft, dann wird das Event zweimal aufgerufen! Dadurch bekomme ich zwei Benachrichtigungen!?! Wie kann ich es verhindern, dass das Event nur einmal ausgelöst wird bzw. nur eine Benachrichtigung rausgeschickt wird?

    define Anrufer notify Anrufliste {\
    my $extNr = ReadingsVal(„Anrufliste“,“external_number“,““);;\
    fhem („set PushService send $extNr“);;\
    }

    Vielen Dank im Voraus. :)

Schreibe einen Kommentar

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