Homematic Anwesenheit per Smartphone oder iPhone prüfen

© crissxcross
Homematic Anwesenheits anhand des iPhone WLAN Status prüfen
Geschrieben von crissxcross

Die Heizung automatisch herunter regeln sobald man das Haus verlässt oder automatisch alle schaltbaren Steckdosen abschalten wenn ausser Haus geht. Wäre es nicht toll, wenn mein Zuhause wüsste wann ich weg bin?Das Licht automatisch einschalten sobald man zur Haustür herein kommt, oder schon mal die Heizung auf Wohlfühltemperatur einstellen. Das alles mit der Homematic zu automatisieren war mein Ziel.

Anwesenheit per Geofencing prüfen

Ist doch einfach werden viele jetzt denken, das geht doch mit der Geofencing Funktion. Ich hatte letztens in meinem Beitrag Neue pocket control HM Version 4.2 für Homematic mit Geofencing Funktion darüber berichtet. Im Alltag allerdings gestaltet sich diese Lösung als völlig unbrauchbar. Wer ein iPhone hat weiss um die Akku-Problematik. Mit aktivierter "Home Zone" in der pocket Control App ist das iPhone damit maximal 1/2 Stunde dein Begleiter.  Statt die Position über das Mobilfunknetz zu bestimmen, was deutlich shonender für den Akku ist, wurde es in der "pocket Control App" über das GPS gelöst.

Anwesenheit im SmartHome per GeoFencing prüfen

Anwesenheit im SmartHome per GeoFencing prüfen

Anwesenheit per Bewegungsmelder prüfen

Ok, dann prüfe die Anwesenheit doch über Bewegungsmelder werden jetzt einige sagen. Ja das geht auch, wenn man nicht wie wir eine Katze hat. Der Homematic Bewegungsmelder hat für den Sicherheitsbereich einen "Unterkriechschutz". Dieser erfasst also auch alles was "unterhalb" des Bewegungsmelder passiert. Daher stellte dies keine Alternative für mich da. Ausserdem, was ist wenn ich Mittags auf der Couch ein kleines Nickerchen halte? Geht dann das Licht aus und es wird kalt? Alles keine Lösung!

Anwesenheit per Smartphone im WLAN

Was ist also eine Konstante wenn ich zu Hause bin, bzw. wie verändert sich diese wenn ich nicht zu Hause bin? Inzwischen ist das Smartphone zum ständigen Begleiter geworden. Warum also nicht anhand des Smartphone prüfen ob ich zu  Hause bin? Bin ich zu Hause anwesend, ist mein Smartphone im WLAN. Daher möchte ich euch in diesem Beitrag zwei Wege zeigen, wie man mit der Homematic ein Smartphone anpingt und die Antwort auswertet. Das iPhone ist hierbei eine Besonderheit, welche man jedoch auch lösen kann - aber dazu später in dem Beitrag mehr.

Smartphone feste IP Adresse vergeben

Fritz Box Netzwerk Einstellungen

Smartphone im WLAN feste IP Adresse vergeben

In jedem Fall muss sichergestellt werden, das der WLAN Router dem Smartphone immer die gleiche IP Adresse vergibt. Nur so kann es später per PING erreicht werden. In der Fritzbox ist dies relativ einfach lösbar über eine kleine Checkbox. Hierzu einfach im Menü der Fritzbox auf den Menüpunkt Heimnetz > Netzwerk gehen und das entsprechende Mobilgerät auswählen, welches später angepingt werden soll. In der folgenden Ansicht wird bereits die aktuell vergebene IP Adresse des Gerätes angezeigt. Hier kann nun die Checkbox "Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen" aktiviert werden. Die Fritzbox wird damit in Zukunft anhand der MAC Adresse erkennen welches Gerät in das WLAN kommt und vergibt nun immer die gleiche iP Adresse.

Smartphone mithilfe CUX-Daemon anpingen

Nun könnte man bereits den Netzwerkstatus von Smartphones oder Tablets abfragen, sofern es kein iPhone oder iPad ist. Dies lässt sich mithilfe des CUX-Daemon auf der Homematic realisieren. Eine Anleitung findest du hier.

Besonderheit iPhone

Du hast ein iPhone? Dann müssen wir etwas anders vorgehen. Hintergrund ist, dass dein iPhone im Sperrbildschirm das WLAN abschaltet, um so Strom zu sparen. Demzufolge ist es per PING im Netzwerk nicht erreichbar. Aber auch das ist lösbar indem wir vor dem versenden eines PING das iPhone aus dem Lockscreen "aufwecken". Den Antwort-Wert des PING schreiben wir dann in eine Systemvariable.

Homematic Systemvariable anlegen

Es empfiehlt sich den Zustand der An- oder Abwesenheit einer Person in eine Systemvariable zu speichern. Dies hat den charmanten Vorteil das man später in verschiedenen Programmen mit diesem Wert arbeiten kann und ihn in Wenn > Dann Funktionen verwenden kann. Wohnt man im Haushalt nicht alleine, so muss man die Anwesenheit aller Personen prüfen bevor man im ganzen Haus das Licht  der die Heizung ausmacht. Eine Systemvariable kann in der Homematic ganz einfach über den Menüpunkt Einstellungen > Systemvariable erstellt werden. In meinem Beispiel habe ich die Logikwert Variable als iPhoneChris benannt. Eine Logikwert Variable kann genau zwei Zustände annehmen. 0 oder 1 oder anders gesprochen falsch oder wahr. In unserem Fall heißt das dann anwesend oder abwesend.

Systmvariable Homematic

Systemvariable in der Homematic anlegen

iPhone wecken

Wie können wir beim iPhone verhindern, das es das WLAN im Lockscreen ausschaltet ? Verhindern kannst du das nicht. Hierzu gibt es keine Einstellung (Alternativ geht es wohl per Jailbreak). Wir können jedoch das iPhone aus dem Lockscreen "wecken" bevor der PING gesendet wird. Dies erfolgt über eine kleine APP namens Prowl. Eigentlich ist diese um über den kostenlosen Prowl Account Push Nachrichten auf das iPhone zu senden. Durch die Pushnachricht welche über das 3G Netz vom iPhone empfangen wird, "wacht" dieses aus dem Lockscreen auf.

1) App installieren

Zunächst brauchst du dafür die APP Prowl welche auf dem iPhone die Push Nachrichten empfangen wird. Sie kostet zwar ein paar Euro - aber es lohnt sich! [app url="https://itunes.apple.com/de/app/prowl-growl-client/id320876271?mt=8"]

2) kostenlosen Prowl Account erstellen

Danach benötigt ihr einen kostenlosen Prowl Account an welchen später eure Homematic die Nachrichten sendet. Den Account könnt ihr hier erstellen.

3) API Key generieren

Damit wir im nächsten Schritt die Push Nachricht versenden können, benötigen wir einen API Key - quasi den Schlüssel zum Account. Dieser kann ebenfalls kostenfrei im Prowl Account, rechts oben über den Tab "API Keys" generiert werden. Vergebt einen Namen für den Schlüssen - ich habe hier kreativer Weise "Homematic" genommen, weil der Key für die Homematic ist.

API Key Prowl Account

API Key Prowl Account

4) Homematic Script zum Nachrichten versenden

Nun benötigen wir ein kleines effektives Script, welches wir ausführen um eine Push Nachricht zu versenden. Diese Nachricht weckt das iPhone aus dem Lockscreen auf. Danach kann ein PING abgesetzt werden. Befindet sich dein iPhone im WLAN wird es auf den PING antworten. Wie der PING gesendet wird, erkläre ich gleich in diesem Beitrag. Das Script kann in der Homematic per Programm & Zentralenverknüpfung ausgeführt werden.

 

Den API Key musst du natürlich mit deinem generierten Key ersetzen. Bitte ersetze auch den Namen der Application im Script, durch den Namen welchen du beim anlegen des Keys vergeben hast.

Ping senden per Script

Nun prüfen wir ob das iPhone im WLAN erreichbar ist. Auch dies kann in der Homematic per Programm & Zentralenverknüpfung in einem Script geschehen, welches die IP Adresse des Smartphones anpingt. Dies kann mit dem folgenden Befehl ausgeführt werden: [blockquote]system.Exec("ping -c 1 192.168.2.xxx",&stdout, &stderr);[/blockquote]  Die IP Adresse ist an dieser Stelle natürlich mit der IP Adresse eures Smartphones zu ersetzen. Wir erinnern uns, diese können wir in der Fritz!Box auslesen.

Homematic Anwesenheitsprüfung

Script zur Anwesenheitsprüfung in der Homematic

Die Antwort wird dann wie folgt ausgewertet und in unsere angelegte Systemvariable geschrieben. In meinem Beispiel ist die Variable "iPhoneChris" Den Namen der Systemvariable müsst ihr dann natürlich durch den Namen eurer angelegten Variable ersetzen.

 

Im Gesamten sieht das dann so aus:

 

Frage mich ob ich da bin, wenn die Haustür aufgeht

Es würde ziemlich nervig sein, wenn man alle 5 Minuten eine Push Nachricht aufs iPhone bekommt. Auch der Akku wäre innerhalb weniger Stunden durch das PING - Pong Spiel leer gesaugt. Daher habe ich mir einen Homematic Fenster-/ Tür Kontakt an meine Haustür angebaut. Sobald dieser öffnet, wird per Zentralenprogramm in der Homematic die Nachricht versendet und im Anschluss ein PING an mein iPhone gesendet. Zwei mal - davon einmal zeitversetzt. Warum? Das erste Mal erfolgt sofort Nachricht und PING falls ich die Tür öffne und nach Hause komme, damit sofort das Licht angeht. Der zweite PING ist für den Fall das ich das Haus beim öffnen der Tür verlassen habe. Zeitversetzt deshalb, weil ich ein paar Minuten benötige um die Treppe herunter zu gehen  (wir wohnen ganz oben ;-) ) und bis ich aus der Reichweite des WLAN Netzwerks bin. So einfach lässt sich eine Anwesenheitsprüfung durchführen. Ach ja übrigens: für die Sparfüchse - ihr solltet das WLAN des Routers dauerhaft eingeschaltet lassen - denn kommt ihr mal Nachts von Party nach Hause und das WLAN ist aus, geht das Licht nicht automatisch an und es bleibt kalt - denkt mal darüber nach :-)

Diesen Blogpost hat geschrieben ...

crissxcross

Chris, Gründer und Blogger von siio.
Gelernter IT-Systemelektroniker, seit vielen Jahren beruflich als Produktmanager im Smart Home unterwegs. Technikverliebter Familienvater, Apple Fan. Nach einigen Jahren Stadtleben wieder froh auf dem Land zu sein.

80 Kommentare

  • Hi,
    also abPunkt 4) komme ich nciht mehr mit. Es ist mir klar, dass Skripte angelegt werden müssen. Allerdings ist mir nicht klar, wo genau. Ist es Dir möglich, dies vielleicht etwas ausführlicher und per Bebilderung auszuführen. Wäre Dir sehr dankbar, da Dein Ansatz sehr vielversprechend aussieht.

    gruss,

    matthias

    • Hi Matthias,

      du gehts auf der Homematic Weboberfläche auf den Menüpunkt: "Programme und Verknüpfungen" dann auf den Unterpunkt "Programme und Zentralenverknüpfung" Dort kannst du eine neue Verknüpfung anlegen (NEU) . Das Zentralenprogramm macht nichts weiter als eine WENN - DANN Funktion, also was soll passieren wenn X passiert wird. In der Dann Funktion kannst du im Dropdown "Script" auswählen. In dieses Fenster kopierst du mein Beispiel Script und ersetzt die Variablen.

      Im Prinzip sind es zwei getrennt laufende Vorgänge. Der eine schickt deinem iPhone eine Pushnachricht um es aus dem Screenlock zu holen. Das zweite Script führt ein Ping auf die IP des Smartphone aus um zu prüfen ob es im Netz erreichbar ist und schreibt das Ergebniss in eine Systemvariable (welche zuvor angelegt wurde)

      bei Fragen melde dich!
      Gruß Chris

      • Hallo zusammen,

        das ganze funktioniert wunderbar, bis auf kleine Ausnahmen:
        Ich habe nun länger danach gesucht um zu verstehen wann die Variable nicht korrekt gesetzt wird.
        Ich habe ein iPhone. Nun weiß ich, wenn man die nicht stören Funktion verwendet, die ich Nachts eingeschaltet habe, wird das iPhone durch die Push Nachricht nicht aufgeweckt, ergo bleibt die Variable auf nicht anwesend stehen, obwohl ich da bin...
        Hat jemand irgendeine Idee was man hier tun könnte, außer auf die nicht stören Funktion zu verzichten natürlich.

        Gruß Christian

  • Hi Chris,

    ich brauch noch einmal deine Hilfe,

    kannst du mir mal ein Besipiel posten, wie ich das Programm schreibe ?
    Ich lass deine Idee mit ner Keymatic bei Schlossstellung entriegelt ausführen, nur mir fehlt das nötige Know How für die Skripte.

    Ich habe alle Lücke mit meinen Daten gefüllt.

    Danke =)

    • Hi Freddy,

      dann lass doch mal zusammen schauen.
      Hast du die nötigen Variablen angelegt wie oben beschrieben?
      Danach gehst du auf: “Programme und Verknüpfungen” dann auf den Unterpunkt “Programme und Zentralenverknüpfung”

      Als WENN Funktion müsstest du Geräteauswahl > Keymatic “bei Schlossstellung entriegelt” – bei aktualisierung prüfen.
      In der DANN Funktion wählst du statt Geräteauswahl den Punkt “Script” aus. In das neue leere Feld kopierst du das Script Beispiel von oben und ergänzt deine API Daten ect..

      Freu mich auf dein Feedback.

  • Hi Chris,
    ja genau so habe ich es gemacht, nur wenn ich dieses skript eingebe:

    string stderr;
    string stdout;
    integer Auslese;
    system.Exec(“ping -c 1 192.168.1xx.xx“,&stdout, &stderr);
    Auslese = stdout.Find(“ms”);
    if ( Auslese == -1 )
    {
    dom.GetObject(‘iPhoneFreddy‘).State(0);
    }
    if ( Auslese > 0)
    {
    dom.GetObject(‘iPhoneFreddy‘).State(1);
    }

    Dann erscheint kein Script bzw. wenn ich das Skript überprüfen lasse, erhalt eich eine Fehlermeldung.

    PS: (ip Adresse habe ich absichtlich so geschrieben)

    hast du mir ne email Adresse, dann schick ich dir mal die bilder meiner ccu2

    • Hey,
      arbeite dich mal Stück für Stück vor um zu schauen, welcher Teil nicht funktioniert bei dir.
      Mein Vorschlag, du baust ein neues Programm.
      In der WENN Bedingung würde ich zum Test eine Zeitsteuerung (Intervall alle 1 Minuten) verwenden.
      Bei der Bedingung DANN stellst du das Dropdown auf Script.

      Dort fügst du deinen Code von oben ein.
      Dann teste ob die Variablen aktualisiert werden.
      Schalte das WLAN von deinem Handy ein und aus uns schau was passiert.
      Wenn du ein iPhone hast, pass auf das es nicht in Screenlock geht denn dann ist das WLAN aus
      Das wollen wir mit dem anderen Script ja umgehen in einem workaround.

      Bei dir steht in der Übersicht auch Script eingeben, als wenn es nicht gespeichert wurde.

  • Hi Chris,

    das skript scheint jetzt gespeichert zu werden.
    Frage: wie mach ich das mit einem Andoid? Mein Sohn nutzt ein Xperia

    Danke für deine Geduld ;)

    • Kein Problem ;-)
      Gleiches Prinzip - noch einfacher.
      Denn bei Android bleibt das Wlan immer an,
      nur bei dem iphone musst du vorher eine Push Nachricht senden um es aufzucken bevor du es im WLAN anpingst.

      Du solltest am besten an der Stelle wo das Event passiert, zum Beispiel Haustür wird geöffnet, die Scripte ausführen.
      Beide in einem Programm am besten.
      Wenn du es per Zeitintervall machst frisst es dir die Akkus der Handys leer.

      Mit den Variablen kannst du dann in allen anderen Programmen weiterarbeiten um zum Beispiel die heizung herunterzu regeln wenn "FreddyiPhone" = abwesend UND "AndroidSohn" = abwesend
      Die UND Verknüpfung machts, sonst muss einer frieren ;-)

  • HI, danke für die tolle anleitung aber ich bekomme beim Prowl skript eine felermeldung.

    Error 1 at row 1 col 52 near ^“aufwachen”; system.Exec(“wget -q -O /dev/null ‘http://prowl.weks.net/pu
    Parse following code failed:
    string stdout; string stderr; string text; text = “aufwachen”; system.Exec(“wget -q -O /dev/null ‘http://prowl.weks.net/publicapi/add?apikey= a0647b765d55e6dd4cf905a1ba7c385e88c9b867&application=homematic&priority=1\&description=sendet%20uns%20″ # text # “‘ “, &stdout, &stderr);

    was leuft da schief?
    Danke

  • Hallo Chris,

    Habe das gleiche Problem, wie Freddy. Habe Programm neu gemacht neue systemvariable angelegt funkt trotzdem nicht. kann das was mit der ganz neuen Firmware zu tun haben?

    LG

    Jürgen

  • Hi Chris,

    ja, wenn ich copy paste mache, und auf ok klicke steht nichts drinnen???
    Nehme ich aber ein anderes Skript funktioniert es.
    Führe ich dein Skript zum testen aus, tuts sich auch nichts bei der Variable, obwohl mein iphone erreichbar ist(pingbar)

    hab ein anderes Skript gefunden auf homematic-forum, da funktioniert, aber nur mit meiner varibale "juergen".

    hier dein Skript, welches bei mir leider nicht geht:

    string stderr;
    string stdout;
    integer Auslese;
    system.Exec(“ping -c 1 192.168.178.56“,&stdout, &stderr);
    Auslese = stdout.Find(“ms”);
    if ( Auslese ==-1 )
    {
    dom.GetObject(‘juergen‘).State(0);
    }
    if ( Auslese > 0)
    {
    dom.GetObject(‘juergen‘).State(1);
    }

    Beim Skript test bekomme ich diese Fehler:

    Error 1 at row 4 col 21 near ^“ping -c 1 192.168.178.56“,&stdout, &stderr);
    Auslese = stdout.Find(“msâ€
    Parse following code failed:
    string stderr;
    string stdout;
    integer Auslese;
    system.Exec(“ping -c 1 192.168.178.56“,&stdout, &stderr);
    Auslese = stdout.Find(“ms”);
    if ( Auslese ==-1 )
    {
    dom.GetObject(‘juergen‘).State(0);
    }
    if ( Auslese > 0)
    {
    dom.GetObject(‘juergen‘).State(1);
    }
    Was mach ich falsch?

    LG

    Jürgen

    • hi Jürgen,

      wenn ich deinen Code verwende erhalte ich den gleichen Error. Scheint als wenn ein Zeichen mitkopiert wird bei Copy & paste was dort nicht hingehört. Leerzeichen sind nicht gleich Leerzeichen in der Programmierung ;-)
      Ich habe die Scripte im Artikel mal etwas anders formatiert. Versuch es bitte damit. Ich sende dir auch gleich mal das Script per Mail. Kopier es mal dort heraus.
      Gruß Chris

  • Hallo Chris,

    Ich werd nicht schlau draus. Kannst du mir bitte alle notwendigen Skripts zusenden incl. der Verzögerung Zusätzlich wäre ein Bildschirmfoto des geöffneten Programmes wäre sehr hilfreich.

    Ich habe an meiner Haustür einen Türkontakt und bereits die Variable Zone iPhone durch die in pocket control aktivierte Home Zone. Soll ich für dein Skript eine neue anlegen?

    Danke und Grüße, Hary

    • Du kannst auch die Variable "Zone iPhone" befüllen. Dies musst du nur in deinem Script anpassen.
      Ich empfehle dir aber die Anleitung Schritt für Schritt nachzuvollziehen und auch eine eigene / neue Variable anzulegen.

      Die Verzögerung hinterlegst du im neu erstellten Programm indem du einfach das Dropdown auf "verzögert um" wählst.
      Siehe: Screenshot - Verzögerung

      Das Script zum versenden einer Message, sowie zum pingen deines Smartphones findest du oben im Artikel. Die Formatierung ist inzwischen korrekt:
      Screenshot - Ping Smartphone

  • Guten Morgen Chris,

    vielen Dank, oh - ich bin davon ausgegangen, dass immer eine "Bedingung" vorabstehen muss. Das eröffnet neue Dimensionen. :-) Ich werde gleich ausprobieren.

    Bzgl. Prowl - Ich erhalte von mehreren CCUs Alarmmeldungen per Prowl mit Prio 2 Ton Bidi (ist grass - da wird's du definitiv wach)
    Wenn ich jetzt diese Meldung mit Prio -2 ohne Ton einstelle bekomme ich aber trotzdem den Banner auf Display. Kann man auch dies abstellen?

    Danke und Grüße, Hary

  • Hallo Cris,
    vielen lieben Dank für die ausführliche Programmieranleitung!!
    Bei mir funktioniert es schon mal soweit:
    Wenn Haustürkontakt durch mich und Iphone geöffnet wird, bekomme ich die Nachricht über Prowl.
    Das heißt ja dann, dass ich "anwesend" bin, oder?
    Wenn ich jetzt noch das Licht anhaben möchte, welches Programm muss ich dann schreiben?

    Wenn "Andy" anwesend "nur prüfen"
    Dann " Licht" sofort an"

    oder wie?
    Stehe gerade mächtig auf der Leitung!
    ( ist ja auch schon spät :-)) )
    Viele Grüße
    Andy

    • Hey,

      Wenn du die Variable angelegt hast und diese durch das Script entsprechend befüllt wird mit an- oder abwesend, kannst du diese in jedem beliebigen Programm verwenden. Zum Beispiel: WENN Variable Andy = anwesend (auslösen bei Änderung) DANN Licht = an

      ;) gute Nacht

  • Moin Chris,
    vielen Dank für die schnelle Antwort.
    Ich habe heute morgen nochmal schnell was ausprobiert, leider jedoch ohne Erfolg!
    folgendes Programm:

    Wenn: Licht Flur aus
    und: Anwesenheit Andy "war" "auf Veränderung prüfen"
    dann Licht Flur Einschaltdauer 240s.
    -------------------------------------------------
    In der Systemvariable habe ich entsprechend die Anwesenheitssimulation Andy Handy erstellt
    Und als Aktor (Handy Andy) habe ich einen Schalter so wie du gewählt! (mit den Werten wie sie auf deinem Screenshot waren, natürlich mit meiner IP vom Handy)

    Leider tut sich überhaupt nichts!
    Den Haustürkontakt habe ich ja, wie gestern schon erwähnt, programmiert. Das funktioniert auch super. Das Handy bekommt eine Weckmail von Prowl.
    Kann ich dir vielleicht mal ein paar Screenshots via Mail zuschicken??
    oder ich lösche alles nochmal und fang von vorne an....
    Viele Grüße
    Andy

    Ich

  • Moin Chris,
    vielen Dank für die schnelle Antwort.
    Ich habe heute morgen nochmal schnell was ausprobiert, leider jedoch ohne Erfolg!
    folgendes Programm:

    Wenn: Licht Flur aus
    und: Anwesenheit Andy "war" "auf Veränderung prüfen"
    dann Licht Flur Einschaltdauer 240s.
    -------------------------------------------------
    In der Systemvariable habe ich entsprechend die Anwesenheitssimulation Andy Handy erstellt
    Und als Aktor (Handy Andy) habe ich einen Schalter so wie du gewählt! (mit den Werten wie sie auf deinem Screenshot waren, natürlich mit meiner IP vom Handy)

    Leider tut sich überhaupt nichts!
    Den Haustürkontakt habe ich ja, wie gestern schon erwähnt, programmiert. Das funktioniert auch super. Das Handy bekommt eine Weckmail von Prowl.
    Kann ich dir vielleicht mal ein paar Screenshots via Mail zuschicken??
    oder ich lösche alles nochmal und fang von vorne an....
    Irgendwo habe ich da Mist gebaut...
    Viele Grüße
    Andy

    Ich

    • Hi Andy

      Hast du auch das Script kopiert, welches die Systemvariable ändert? Wenn du ein iPhone hast, dann mach es über das Script (siehe oben, Script zum Ping des IPhone)
      Dort musst du natürlich auch ip und Name der Variable editieren.

  • Moin moin Chris,

    Ich hab´s!
    Funktioniert bestens!! Ich hatte nur meine Systemvariable falsch angesprochen, sprich, ich hatte den "Namen" warum auch immer falsch im Skript stehen gehabt. grrrrr.....
    Vielen Dank für das tolle Programm und deine Hilfe!!!

    PS: Den Feuchtigkeitsmesser/ Regensensor baue ich mir jetzt auch von dir nach!!
    SUPER IDEE! Und so simpel!!
    Viele Grüße
    Andy

  • Hi Chris,
    ich könnte auch einen kleinen Tip gebrauchen.
    Bei mir hat deine tolle Lösung eigentlich auf Anhieb geklappt.
    Die Einschränkung "eigentlich" bezieht sich auf folgende Problematik.
    Dein Script setzt die Systemvariable beim 1-ten Mal direkt nach der Prowl-Meldung richtig und wie gewünscht auf "anwesend"

    Bei der anschließenden verzögerten Script-/Ping-Ausführung wird die Variable aber auf "abwesend" gesetzt obwohl ich im WLAN bin.
    Ich vermute es liegt an den IOS-Einstellungen irgendwo.
    Vermutlich ist mein I-Phone nach der Verzögerung von 1 Minute (analog zu deinem Script) schon wieder im Sperrbildschirm!
    Hast du einen Tipp?

    • hi, dann verkürze doch einfach die Dauer zwischen der Pushnachricht und dem Ping.
      In Programme kannst du doch als "Aktivität DANN ->
      Script (Push) ,
      Script (Ping) verzögert um 10sek.

      So würde er den Ping 10sek nach der Pushnachricht senden. Da dürfte dein iPhone noch nicht zurück in den Lockscreen gefallen sein.

  • Beim Kopieren von Skripten von hier oder anderen Internet-Quellen achtet auf die Anführungszeichen! Diese werden im Internet anders dargestellt/codiert und werden im Skript nicht erkannt. Es müssen alle Anführungszeichen durch das "normale" Anführungszeichen (Shift+2) ersetzt werden. Auch andere Sonderzeichen wie Hochkommas stellen da ein Problem dar.

  • Hallo,
    erstmal danke für die tolle Erklärung, das funktioniert soweit wunderbar. Nur verstehe ich grad etwas nicht ganz, oder ich stehe vor einem Problem.

    Beispiel: Ich komme nach Hause und mein Handy wählt sich ins WLAN ein. Meine CCU merkt das und macht das Licht an.
    Soweit so gut.

    Nun bin ich zu Hause und das Licht ist an. Ich bleibe zu Hause aber nutze mein iPhone nicht. Nach ca. 30 min steigt mein iPhone aus dem WLAN aus und meine CCU denkt ich bin nicht mehr da und macht das Licht wieder aus.

    Wie umgehe ich denn das Problem ?

    Über Antwort würde ich mich freuen.

    • ist es wirklich erst nach 30min das, dass iphone aus dem WLAN aussteigt? Oder führst du den Ping aller >30min aus. Hast du beachtet, das dass iPhone im Screenlock das WLAN abschaltet und daher vor dem Ping einen Push benötigt um "aufgeweckt" zu werden?

  • Ob das genau 30 min. sind kann ich nicht sagen, aber ist ja auch "Wurscht" wie lange das dauert.

    Den Ping führe ich alle 60 Sekunden aus, damit das Licht sofort angeht, wenn ich nach Hause komme. Wenn ich das Haus verlasse, soll das Licht aber ja wieder ausgehen.

    Es geht aber ja schon vorher aus, wenn er mein Handy dank Lockscreen nicht mehr erreicht. Ich müsste somit ja alle 50 Sekunden erstmal ne Push Nachricht schicken und dann erst den Ping, oder verstehe ich da was falsch.

    Mir ist nicht ganz klar, wie ich das Lockscreen Problem umgehen soll, ohne mir ein Android Handy zu kaufen :)

    • hey,
      daher mein Tipp an der Tür einen Tür-/ Fensterkontakt zu intallieren und diesen als Trigger zu nutzen. Geht die Tür auf dann zeitverzögert pushnachricht, danach ping.
      Eigentlich müsste man mindestens noch eine weitere Variable finden, an welcher man die Anwesenheit definiert. Im Forum hat Daniel eine Logik für Fibaro gebaut - welche sich aber vielleicht auf Homematic adaptieren lässt: Anwesenheits Check mit Motion Sensor & Türsensor

      Per Ping ließe sich auch prüfen ob der Fernseher an ist, zum Beispiel ....

  • Danke Dir für die Antworten.

    Das mit dem Türkontakt ist super und das setze ich auch um, aber das löst ja nicht das "Anwesenheitsproblem".

    Man bräuchte einen WLAN Schlüsselanhänger der immer auf einen Ping antwortet. Gibt es sowas nicht ? Ich finde leider nichts in der Richtung.
    Oder ein Android Telefon als Schlüsselanhänger :)

    • @Ralf

      Ich habe die Anwesenheitsteuerung mit Hilfe eines G-Tag von Gigaset gelöst.
      Kleiner Bluetooth-Schlüsselanhänger, dessen Batterie ca. 1 Jahr halten soll.
      FHEM-Server auf Raspberry eingerichtet, dauert ca. 1 Stunde.
      Funkioniert bei mir zuverlässiger als per Wlan oder Bluetooth über`s Handy.
      Beste Grüße,
      Daniel

  • Hallo,
    leider gibt oder läuft Prowl nur noch ab iOS8 wie ich gerade feststelle. Da bleiben wir iPhone 4 Oldies wohl auf der Strecke :-(
    Schade!

  • Hallo und nochmal Danke für Deine Anleitung. Ich komme Schritt für Schritt immer weiter. Ich habe nun den Türkontakt und es funktioniert auch soweit.

    Ich öffne die Tür, mein Handy wird angepushed und prüft dann per Ping ob es da ist. Dann wird meine Variable auf 1 gesetzt. Die Variable bleibt aber nun ja immer auf 1. Wie bekomme ich sie denn automatisch für die nächste Prüfung wieder auf 0 ?

    Bei der nächsten Türöffnung passiert ja nichts mehr, weil die Variable ja schon auf 1 ist.

    Verstehst Du mich ?

    • Hi,

      natürlich, solange dein Smartphone erreichbar ist wird die "1" gesetzt. Im Script findest du folgendes:
      Auslese = stdout.Find("ms");
      if ( Auslese == -1 )
      {
      dom.GetObject('iPhoneChris').State(0);
      }
      if ( Auslese > 0)
      {
      dom.GetObject('iPhoneChris').State(1);
      }

      Also: Wenn der Ping nicht erfolgreich, das Smartphone nicht erreichbar ist dann wird es auf 0 gesetzt, wenn es erreichbar ist dann auf 1. Schalte doch mal dein WLAN vom Smartphone ab und öffne die Tür. Dann muss es auf 0 springen. Für den Praxiseinsatz musst du den Ping entsprechend Zeitverzögern, so das er erst ausgeführt wird wenn du dich weit genug von deinem WLAN Netz entfernt hast.

  • Der von dir genannte Ansatz lässt sich einwandfrei nachstellen und lieferte einen guten Ausgangspunkt zum Basteln :) In deiner Konstellation müsste es doch aber auch möglich sein, den Status des iPhone per SNMP von der FritzBox abzufragen? Das würde den Umweg über Prowl sparen. Ich habe leider keine FB, sondern so einen dämlichen Speedport, der kann sowas nicht.

    Ich habe den von dir beschriebenen Weg mit Prowl nachgestellt und parallel dazu einen über OpenHAB und Twitter (direct messages) - denn alles, was das iPhone im Sperrbildschirm "weckt" schaltet das WLAN wieder an, so lange das iPhone entsprechend konfiguriert ist. Da gibt es noch viel auszuprobieren, ich stehe ganz am Anfang.

    Vielen Dank für deinen Artikel :)

  • Hallo Chris,
    vielen Dank für dein tolles Script - klappt mit meinem Androiden wunderbar.
    Nun würde ich jedoch gern in einem Script zwei Handys abfragen und dementsprechend
    eine Variable füllen.
    Wenn Handy A oder/und Handy B anpingbar dann Variable = true
    Kannst du mir da weiterhelfen?
    VG

    • Hi,
      das macht so keinen Sinn. Die Entscheidung ob die Bedingung "True" ist, wenn beide Handys nicht da sind ist an dieser Stelle falsch.
      Fülle einfach zwei verschiedene Variablen. Die eine Varibale ist HandyICH und die zweite ist HandyFREUNDIN.
      Die Abfrage und das Script ist das gleich, nur das du jeweils unterschiedliche Variablen füllst.
      Diese Beiden Variablen kannst du dann in Programmen verwenden. Beispiel: Schalte das Licht aus WENN HandyICH abwesend UND HandyFREUNDIN abwesend.

      Die Eintscheidung ob eine Bedinung erfüllt ist wird vor dem Auslösen der Aktion getroffen.
      Nicht vorher in irgendwelchen Variablen.
      Variablen speichern den Zustand, nicht die Entscheidung.

  • Hallo und danke für deine Anleitungen!

    Ich muss mal blöd fragen:

    Du nutzt immer das normale system.exec.
    Ich lese überall, dass dieses undokumentiert ist und gerne Abstürze verursacht.
    Daher soll man das system.exec aus dem CUxD nehmen.

    Ist diese Info veraltet und kann ignoriert werden oder gilt dies nur für die CCU1?

    Danke und Gruß

    Rene

    • Hi,

      ja das habe ich auch gelesen, natürlich kannst du auch den CuXDaemon nehmen. Dennoch muss ich sagen ist meine Zentrale bisher noch nicht einmal abgestürzt. Von daher bleibe ich bei dieser Funktion ;-)

      • Hi Chris,

        ich bin zufällig auf dein Beitrag gestoßen und habe folgende Frage.
        Kann ich dein eingänglichen Skript auch dazu nehmen um lediglich Push Nachrichten für bestimmte Zustände der Homematic zu versenden und dazu folgenden Skript für die Benutzung von Prowl anwenden?

        string stdout;
        string stderr;
        string text;
        text = "aufwachen";
        system.Exec("wget -q -O /dev/null 'http://prowl.weks.net/publicapi/add?apikey=xxxxxxxxxxxxxxxxxxxxxxxx&application=HomeMatic&priority=1\&description=sendet%20uns%20" # text # "' ", &stdout, &stderr);

        Muss an dieser Stelle:
        ">xxxxxxxxxxxxxxxxxxxxxxxx der generierte Key eingesetzt werden?

        Und welcher Name soll vergeben werden, beim generieren des Keys muss ich kein Name bei Prowl anlegen?

        Vielen Dank für deine Unterstützung
        Gruß
        Daniel

        • Hallo,

          der Teil des Scripts welcher eine Pushnachricht versent, kann natürlich in jeder beliebigen Programmverknüpfung genutzt werden. Du musst lediglich den Teil Der Nachricht “test=”hier den Text” ersetzen.

          • Halo Chris,

            es funktioniert. Ich hatte beim kopieren des Skript Fehler mit kopiert.
            Pushnachricht kommt an.

            Danke
            Gruß
            Daniel

            P.S. meinen unteren Beitrag kannst löschen, der war doppelt geschrieben...

  • Hallo Chris,

    kann ich mit deinem ersten Befehl oben auch nur SMS Nachrichten bei bestimmten Zuständen aus der Zentrale über Prowl verschicken?
    Ich meine diesen Parameter:

    string stderr;
    string text;
    text = "aufwachen";
    system.Exec("wget -q -O /dev/null 'http://prowl.weks.net/publicapi/add?apikey=xxxxxxxxxxxxxxxx&application=HomeMatic&priority=1\&description=sendet%20uns%20" # text # "' ", &stdout, &stderr);

    An dieser Stelle folgt der Key von Prowl, richtig?
    ">xxxxxxxxxxxxxxxx???????&application=Homemati
    Parse following code failed:

    Den Key habe ich hier geändert.

    Kannst du mir weiterhelfen?

    Danke vorab
    Gruß
    Daniel

  • Also deine Idee ist richtig gut. Ich nutze das mit zwei Android Handys und habe somit nicht die I-Phone Probleme und es klappt absolut super. Ich habe den Ping sogar auf 20 sec heruntergesetzt. Bei mir ist der Weg von der Haustür in die Wohnung kurz.
    Wenn ich die Alarmanlage nicht ausschalte und das Fenster öffne geht direkt der Alarm los. Ist schon öffters passiert. Darum den Ping alle 20 sec. Sobald eines meiner Handys im W-Lan ist schaltet sich die Alarmanlage ab und ich kann das Fenster öffnen.
    Wircklich Super.
    Vielen Dank

  • Hey Chris,
    abermals allerbesten Dank für deine ausführliche Programmieranleitung, dank derer ich das doch tatsächlich auf Anhieb hinbekommen habe.
    Als "Nichtprogrammierer" wäre ich ohne solche Anleitungen und die beigefügten Scripte absolut aufgeschmissen!

    Ich bin gespannt, was ich noch so alles auf deiner Seite hier an nützlichen Ideen, umgesetzt in Programme, für mich und Freunde / Bekannte entnehmen kann.

    Mach weiter so ;-]

  • Hallo,
    habe deinen Skript fürs iPhone zum Senden von Nachrichten übernommen und das funktioniert super nun würde ich das Ganze auch fürs Windows Phone nutzen nur gibt es da die Prowl App nicht habe eine alternative App gefunden Pushalot aber da ich keine Ahnung habe einen passenden Skript zuschreiben wollte ich dich mal fragen ob du mir helfen kannst
    MFG Steffen

  • Hallo,

    Was mich betrifft, bin ich was Homematic betrifft Neuling. Die skripte etc. prowl hab ich alles gemacht. Die funktionieren auch. Der Türkontakt ich angebracht. Nur wie schreib ich das Programm? Wenn Türkontakt "offen" "bei Änderung auslösen" und oder????

    Ich blicke es einfach nicht. Kannst Du mir vielleicht nochmal helfen.

    LG Manfred

  • hallöchen ... bin auch ein neuling ;) und habe diese anleitung so gut es ging verfolgt allerdings habe ich das problem dass ich mein handy zwar anpinge aber nix mit dieser information anstellen kann

    ich würde gerne dass wenn ich zu haus ankomme und wlan eingeschaltet ist, die ccu2 nach ca 30 sek wie eingestellt auch mein handy erkennt und die heizungen auf boost stellt es ist mir aber nicht möglich das virtuelle gerät dafür zu verwenden .. bei änderung auslösen etc steht nur zur auswahl

  • Hallo,

    auch ich bin ein Neuling habe zwar die Rollladensteuerung hinbekommen, komme zwar aus der EDV aber nur von der Therie her nicht von der Praxis, kann keine Programmiersprache und kein Scripting. Habe die LOgik wie man das iPhone im WLAN erkennt verstanden, weiß aber folgendes nicht:

    Wie binde ich die SCripts ein?
    WIe setze ich die Variabelen ANwesend und Abwesend in ABhägigkeit des Ping?
    SInd Deine Scrips komplett also kann ich die direkt einbinden, wenn ich weiß wie?
    Wäre toll wenn ich hier weitere hinweise bekomme eh ich mich nun ans Werk mache

    Danke und Gruß

    Peter

    • ich muss mich noch präzisieren, also Systemvariable erstellen OK aber jetzt gehts los
      wie erstelle ich ein scrip
      wie starte ich es in ABhängigkeit des Türkontaktes
      wie setzte ich dann die Systemvariable
      HAst Du evtl einen kompletten detaillierten ABlauf Deines Programmes für die "Anwesenheit" der iPhones im Wlan?

      Nochmals Danke

      Peter

  • Zur Info. Ab Android 7 wird auch hier nach einer gewissen Zeit der Ping nicht mehr beantwortet, wenn das Handy nicht verwendet wird.
    Es gibt wohl mit Nougat (Android 7) zwei Doze-Stufen.
    1. Stufe (wird bei Display aus aktiviert) hier wird der Ping noch beantwortet
    2. Stufe (wird bei nicht bewegen und nach Zeit x aktiviert) hier wird der Ping nicht mehr beantwortet.

    Das Smartphone wacht jedoch zu unbekannten Zeiten nochmals auf und prüft auch neue Nachrichten etc.
    Wenn man den Ping auf eine "krumme" Sekundenzahl setzt z.B. 73 Sek, dann trifft man früher oder Später auf den Zeitpunkt, wo das Handy auch wieder antwortet.
    Ich habe bei mir eine Verzögerung für den "Schaltzustand: aus" von 30 Minuten programmiert, bisher ist die Erkennung zuverlässig. Der Schaltzustand wechselt zwar auf "Aus" und der UNREACH_CTR läuft hoch, aber bei mir nur bisher bis zu 12 (14,6 Minuten)

    Durch die Verzögerung von 30min bleibt die Anwesenheit dauerhaft erhalten.

  • Hallo Chris,
    bin völliger Anfänger auf dem Gebiet. Mit der Erklärung ab Punkt 4 habe ich Porbleme wie folgt:
    1. Was ist die Bedingung "Wenn"?
    2. Was ist die Bedingung "Wenn" für das Versenden der Push-Nachricht. Gibt es irgendwo eine echte Schritt für Schritt-Anleitung, die die einzelnen Programme, am besten auch per Bilder genau darstellt?

  • Hallo Chriss.
    Ich bekomme das einfach mit Prowl nicht hin. Irgendwo muss ich im skript einen Fehler haben.
    Es geht keine Meldung raus.
    Kannst Du mir helfen?

  • Hallo Chriss,

    nur zur Info. Deine Screenshots im Artikel sind ins Nichts verlinkt. Im Artikel selbst kann man leider nicht viel sehen.
    Liebe Grüße Uli

Gib deinen Senf dazu!

Cookie Consent mit Real Cookie Banner