HTTP Request

  • Da ich mich primär mit dem Thema Hausautomation und der Homematic beschäftige, würde ich gerne eine Aktion vorschlagen, mit der man einen HTTP Request absenden kann. So könnte man bei der Homematic dann wenn eine Klingel gedrückt worden ist Aktionen auslösen, wie Licht an etc.
    Beispiel:
    http://192.168.178.200/config/…?ise_id=12345&new_value=1


    Wenn Ihr da mehr Infos zu braucht oder jemanden zum testen kann ich da weiterhelfen.

  • Danke aber die Arbeit und ehre liegt wohl mehr bei den Programierern....
    zu
    1: bei mir nicht. könnte man einschalten auf der Homematic... würde erst mal sagen OHNE
    2: Fire&Forget...
    3: Keine Rückantwort, was sollte auch door PI machen .... warten und noch mal eine Anfrage starten... macht bei Echtzeitabläufen keinen sinn, jedenfals versteht das der Paketbote nicht bei mir, das er nur einmal drücken brauchen und nicht wie ein Kranker dauerklingeln....

    • Offizieller Beitrag

    Den folgenden Quellcode bitte speichern unter:
    /usr/local/lib/python2.7/dist-packages/doorpi/action/SingleActions/url_call.py



    Testszenarien:

    • nicht existierende URL aufrufen
    • URL mit falschen Parametern aufrufen
    • URL richtig aufrufen


    Danke...

  • Ich habe es erst mal eingefügt, kann es aber erst morgen testen, will um diese Zeit nicht das ganze Haus terrorisieren. Muss eh neustarten, da ich den 2. Call Funktion abgeschaltet habe. Der Postbote hat einen zu nervösen Zeigefinger....Bring durch den 2. Call immer die ELCOM APP zum abstürtzen....


    Dazu habe ich noch ein Frage. Kann ich die Aktion auch bei betätigung der Klingel (INPUT PIN) nutzen, und kann ich hinter einen eingang (Pin 1 ) 2 Aktionen legen,


    Beispiel:
    1 = call:6000;url_call:http://192.168.178.200/config/…?ise_id=12345&new_value=1

    • Offizieller Beitrag


    Der Postbote hat einen zu nervösen Zeigefinger....Bring durch den 2. Call immer die ELCOM APP zum abstürtzen....


    Thema bouncetime für GPIO bzw. PiFace


    Oder geht es um mehrere Taster hintereinander, die der Bote drückt?



    Kann ich die Aktion auch bei betätigung der Klingel (INPUT PIN) nutzen, und kann ich hinter einen eingang (Pin 1 ) 2 Aktionen legen,


    Ich greife jetzt schon mal den Anleitungen vorweg, die noch kommen werden. Ja, das geht über die Reaktion auf Events.


    Ein ungetestetes Beispiel für PiFace:


    Es wird also der Input-Pin 1 initialisiert und sleep:0 ausgeführt, sobald dieser gedrückt wird.


    Danach werden die Events in der Reihenfolge gefeuert (Taste wird gedrückt):

    • OnKeyDown
    • OnKeyDown_1
    • OnKeyDown_prod.1
    • OnKeyPressed
    • OnKeyPressed_1
    • OnKeyPressed_prod.1


    Taste wird wieder los gelassen:

    • OnKeyUp
    • OnKeyUp_1
    • OnKeyUp_prod.1


    An jedes dieser Events kannst Du beliebig viele Aktionen hängen, die dann jeweils (alle Aktionen innerhalb eines Events) sequenziell abgearbeitet werden.


    Richtig tricksen kannst Du, wenn Du url_call und call aufteiles:

    Code
    [EVENT_OnKeyDown_prod.1]
    10 = url_call:http://192.168.178.200/config/xmlapi/statechange.cgi?ise_id=12345&new_value=1
    
    
    [EVENT_OnKeyPressed_prod.1]
    10 = call:6000


    Somit wird nicht auf url_call gewartet, da die Events parallel ablaufen.

  • Sehr schöne Lösung. Das probiere ich heute Abend auch mal aus.


    Aktuell habe ich nämlich eine Lösung umgesetzt, bei der bei Betätigung der Klingel der Open-Collector-Ausgang 2 des PiFace-Moduls für eine Sekunde durchgeschaltet wird, um ein daran angeschlossenes HomeMatic 3-Kanal-Funk-Schließerkontakt-Interface, HM-SCI-3-FM, anzusteuern. Allerdings fließt da immer ein gewisser Kriechstrom, der die LED des Open-Collector-Ausgangs leicht zum glimmen bringt. Hinzu kommt, dass das Schließerkontakt-Interface bei jedem Schaltimpuls Strom für den Sendevorgang verbraucht. Also insgesamt zwar eine funktionelle, aber verbesserungswürdige Lösung.


    Hier mal die entsprechenden Codezeilen in meiner doorpi.ini


    Da gefällt mir die Lösung über den url_call schon deutlich besser.


    Gruß,


    Thorsten

  • Hach, mit Frau und zwei kleinen Kindern ist es mitunter gar nicht so einfach, einen Zeitslot zum Testen zu finden. :rolleyes:


    Der folgende Befehl setzt, direkt in einem Browser eingegeben, einen virtuellen Taster mit der Bezeichnung "EG Briefkasten VT Klingel" in meiner HomeMatic-CCU:


    Code
    http://192.168.0.20:8181/rega.exe?x=dom.GetObject("EG Briefkasten VT Klingel").DPByHssDP("PRESS_SHORT").State(1)


    Wenn ich dies aber nun zu einem Event hinzufüge in der Form


    Code
    10 = url_call:http://192.168.0.20:8181/rega.exe?x=dom.GetObject("EG Briefkasten VT Klingel").DPByHssDP("PRESS_SHORT").State(1)


    passiert leider nichts. Oder hätte ich den DoorPi bzw. den Raspi vorher neu starten müssen, damit die Datei url_call.py eingebunden ist?


    Gruß,


    Thorsten

  • Hi,


    anbei eine Version von url_call.py, die auch Usernamen und Passwort nimmt - habe sie mit meiner fhem-Installation und dem aktuellen doorpi getestet.
    Usage wie von motom001 beschrieben, Username und Passwort wie üblich inline in der Url also zb http://user:passwort@http://www.test.com
    ACHTUNG: Da es bei https-Seiten zu Zertifikatsfehlern kommen kann (bei meinem fhem passiert), habe ich die Zertifikatsprüfung in der Routine deaktiviert! Wer das als Sicherheitsrisiko sieht, bitte diese Routine nicht benutzen!


    Cheers,


    Pula

  • Kurze Frage. Gibt es einen Vorteil des Aufrufs per call_url.py gegenüber dem Aufruf eines entsprechenden Shellskripts per os_execute? Ich habe mich mittlerweile für Letzteres entschieden, da ich so auch die doorpi.ini etwas übersichtlicher halten kann und sie nicht mit zig HTTP-Requests zum Aufruf diverser Funktionen meiner HomeMatic überfrachten muss. Zudem kann ich den Inhalt eines Shellskripts ändern, ohne jedes Mal den DoorPi neu starten zu müssen, damit er die doorpi.ini einliest.


    Gruß,


    Thorsten


  • Kurze Frage. Gibt es einen Vorteil des Aufrufs per call_url.py gegenüber dem Aufruf eines entsprechenden Shellskripts per os_execute? Ich habe mich mittlerweile für Letzteres entschieden, da ich so auch die doorpi.ini etwas übersichtlicher halten kann und sie nicht mit zig HTTP-Requests zum Aufruf diverser Funktionen meiner HomeMatic überfrachten muss. Zudem kann ich den Inhalt eines Shellskripts ändern, ohne jedes Mal den DoorPi neu starten zu müssen, damit er die doorpi.ini einliest.


    Gruß,


    Thorsten


    Naja, ich sehe es schon als Vorteil, das nativ in python zu machen - man ist einfach flexibler für zukünftige Erweiterungen.


    Aber das mit doorpi neu starten bringt mich auf etwas, was ich Thomas sowieso schon die ganze Zeit fragen wollte. Ist eigentlich eine Möglichkeit geplant, die doorpi.ini im laufenden Betrieb neu einzulesen, anstatt doorpi neu starten zu müssen?


    cheers,


    Pula

  • Geplant war so etwas, ab wann dies implementiert wird weiß ich selbst nicht. Thomas arbeitet aber fieberhaft an DoorPi V3.0. Mal sehen was da so schönes dabei ist. Lasst Euch überaschen.

  • Hallo,
    habe bzgl. url_call ein Problem.


    Wenn ich im Browser :
    http://192.168.x.xxx/config/xm…?ise_id=16956&new_value=1
    Eingebe, funktionier der Befehl.


    In der doorpi.ini mit folgender Struktur funktioniert es leider nicht.


    [EVENT_OnKeyPressed_onboardpins.1]
    10 = url_call:http://192.168.x.xxx/config/xm…?ise_id=16956&new_value=1


    Logfile hat folgenden Inhalt:


    2016-08-09 13:12:19,729 [INFO] [doorpi.doorpi] Weburl is http://raspberrypi/
    2016-08-09 13:12:23,994 [TRACE] [doorpi.action.handler] fire Event OnKeyDown from doorpi.keyboard.from_piface asyncron
    2016-08-09 13:12:23,997 [TRACE] [doorpi.action.handler] fire Event OnKeyDown_1 from doorpi.keyboard.from_piface asyncron
    2016-08-09 13:12:23,998 [DEBUG] [doorpi.action.handler] no actions for event OnKeyDown - skip fire_event OnKeyDown from doorpi.keyboard.from_piface
    2016-08-09 13:12:24,001 [TRACE] [doorpi.action.handler] fire Event OnKeyDown_onboardpins.1 from doorpi.keyboard.from_piface asyncron
    2016-08-09 13:12:24,001 [DEBUG] [doorpi.action.handler] no actions for event OnKeyDown_1 - skip fire_event OnKeyDown_1 from doorpi.keyboard.from_piface
    2016-08-09 13:12:24,004 [TRACE] [doorpi.action.handler] fire Event OnKeyPressed from doorpi.keyboard.from_piface asyncron
    2016-08-09 13:12:24,005 [DEBUG] [doorpi.action.handler] no actions for event OnKeyDown_onboardpins.1 - skip fire_event OnKeyDown_onboardpins.1 from doorpi.keyboard.from_piface
    2016-08-09 13:12:24,007 [TRACE] [doorpi.action.handler] fire Event OnKeyPressed_1 from doorpi.keyboard.from_piface asyncron
    2016-08-09 13:12:24,008 [DEBUG] [doorpi.action.handler] no actions for event OnKeyPressed - skip fire_event OnKeyPressed from doorpi.keyboard.from_piface
    2016-08-09 13:12:24,010 [TRACE] [doorpi.action.handler] fire Event OnKeyPressed_onboardpins.1 from doorpi.keyboard.from_piface asyncron
    2016-08-09 13:12:24,011 [DEBUG] [doorpi.action.handler] no actions for event OnKeyPressed_1 - skip fire_event OnKeyPressed_1 from doorpi.keyboard.from_piface
    2016-08-09 13:12:24,013 [DEBUG] [doorpi.action.handler] [JGXKCM] fire for event OnKeyPressed_onboardpins.1 this actions [<doorpi.action.SingleActions.url_call.UrlCallAction instance at 0x744c6f80>, <doorpi.action.SingleActions.sleep.SleepAction instance at 0x744ca030>]
    2016-08-09 13:12:24,014 [TRACE] [doorpi.action.handler] [JGXKCM] try to fire action UrlCallAction with args () and kwargs {'url': 'http://192.168.x.xxx/config/xmlapi/statechange.cgi?ise_id=16956&new_value=1'}
    2016-08-09 13:12:24,014 [TRACE] [doorpi.action.base] run UrlCallAction with args () and kwargs {'url': 'http://192.168.x.xxx/config/xmlapi/statechange.cgi?ise_id=16956&new_value=1'}
    2016-08-09 13:12:24,015 [TRACE] [doorpi.action.handler] [JGXKCM] try to fire action SleepAction with args (0.0,) and kwargs {}
    2016-08-09 13:12:24,016 [TRACE] [doorpi.action.base] run SleepAction with args (0.0,) and kwargs {}
    2016-08-09 13:12:24,017 [TRACE] [doorpi.action.handler] [JGXKCM] finished fire_event for event_name OnKeyPressed_onboardpins.1


    Was mache ich hier verkehrt? ?(


    Vielen Dank im Voraus für eine Antwort.


    Gruß Hans

    Hardware: Raspi 3,PiFace 2,NoIrCam
    Software: 2016-05-27-raspbian-jessie.img, DoorPi 2.5.1, asterisk auf Raspi, Elcom App