Ankündigung

Einklappen
Keine Ankündigung bisher.

http-Binding - Rückgabewert 0/1 nach OFF/ON für Switch-Item konvertieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    http-Binding - Rückgabewert 0/1 nach OFF/ON für Switch-Item konvertieren

    Hallo,

    ich möchte gerne wissen, ob bei meiner Webcam der Mailversand bei Alarm aktiviert ist und diesen Zustand in Openhab weiterverarbeiten. Ich rufe hierzu eine URL der Webcam auf, die folgende Werte als flachen Text zurückgibt, wobei ich nur am Wert von "alarm_mail" interessiert bin

    Code:
     ...
    var alarm_motion_armed=1;
    var alarm_motion_sensitivity=5;
    var alarm_motion_compensation=0;
    var alarm_input_armed=0;
    var alarm_ioin_level=0;
    var alarm_sounddetect_armed=0;
    var alarm_sounddetect_sensitivity=5;
    var alarm_iolinkage=0;
    var alarm_preset=0;
    var alarm_ioout_level=0;
    var alarm_mail=0;
    var alarm_upload_interval=0;
    var alarm_http=1;
    ...

    Die folgende Item-Definition extrahiert sich schon mal exakt den Wert von "alarm_mail" per REGEX und gibt diesen zurück:
    Code:
    Switch Webcam1AlarmMailStatus   "Webcam 1 Alarmmailstatus"      <siren>         (Bewegung, Cameras, Alarmanlage)        { http="<[http://webcam1.xxxxx.de/get_params.cgi?user=yyyyyy&pwd=xxxxxxx:6000:REGEX(.*var alarm_mail=(.);.*)]" }

    Das funktioniert soweit, nur leider sind 0 bzw 1 keine gültigen Werte für ein Switch-Item. Lässt sich das 0/1 irgendwie direkt nach OFF/ON konvertieren? Mit Mappings scheint das wohl nicht zu gehen - oder ich hab mich zu blöde angestellt. Von XSLT hab ich keine Ahnung - weiß aber auch nicht, ob es damit ginge.

    Die Möglichkeit mit einem zweiten Item und dieses dann per Rule auf "Off" bzw "ON" zu setzen, sobald das erste Item den Zustand 0 oder 1 bekommt, ist mir bekannt. Diese Lösung gefällt mir aber nicht, da ich dann wieder zwei zusätzliche Rules benötige (und natürlich auch ein zus. Item).

    Wäre für Tipps äußerst dankbar

    Viele Grüße,
    thoern
    Zuletzt geändert von thoern; 21.11.2015, 18:15.

    #2
    Beispiel:
    Code:
    Switch PingedItem { exec="<[/bin/sh@@-c@@ping -c 1 192.168.0.1 | grep "packets transmitted" | sed -e "s/.*1 received.*/ON/" -e "s/.*0 received.*/OFF/":30000:REGEX((.*))]" }
    hier wird auch nach ON oder OFF gemappt. Geht allerdings nur mit einer Linux Maschine mit sed.
    Zuletzt geändert von milymat; 21.11.2015, 19:55.

    Kommentar


      #3
      Hallo milymat,

      danke für die Antwort. Leider löst sie mein Problem nicht. Würde ich mit dem exec-Binding arbeiten, könnte ich gleich ein externes Skript basteln, das die URL aufruft und ON/OFF zurückgibt. Ich möchte es aber mit dem http-Binding und möglichst mit OpenHAB-Bordmitteln lösen. Hintergrund ist, dass ich die Alarmmailaktivierung mithilfe der Outgoing-Variante (>) auch setzen möchte - was bereits funktioniert. Das Gesamte Item sieht dann so aus:

      Code:
      Switch Webcam1AlarmMail         "Webcam 1 Alarmmail"    <siren>         (Bewegung, Cameras, Alarmanlage)        { http=">[ON:GET:http://webcam1.xxx.de/set_alarm.cgi?mail=1&user=xxxxx&pwd=yyyyy] >[OFF:GET:http://webcam1.xxx.de/set_alarm.cgi?mail=0&user=xxxx&pwd=yyyy] <[http://webcam1.xxxxx.de/get_params.cgi?user=xxxx&pwd=yyyy:6000:REGEX(.*var alarm_mail=(.);.*)]" }
      Nur die Incoming-Variante (<) funktioniert nicht, da 0/1 keine gültigen Switch-Werte sind. Diese müssten also nach ON/OFF konvertiert werden. Die Frage ist nur, wie?


      Gruß,
      thoern
      Zuletzt geändert von thoern; 21.11.2015, 22:06.

      Kommentar


        #4
        HI,
        der Beitrag ist zwar schon älter aber hier ne Idee zum Problem

        du könntest dir ein Number Item anlegen welches die Daten vom HTTP Binding bekommt, und das ganze dann über eine Rule mit dem Item received Update Trigger dann einfach auf das Switch Item mappen

        Code:
        rule "Number to Switch MAP"
        when
            Item num_item received update
        then
            if(num_item == 0)
            {
                sendCommand(switch_item, OFF) 
            }
            else if(num_item == 1)
            {
                sendCommand(switch_item, ON)
            }
           else 
            {
                //was auch immer passieren soll wenn keine gültigen daten vorhanden sind ;o)
            }
        end
        Mfg
        Sven

        Kommentar


          #5
          Vermutlich geht das eher mit dem transformationservice ,und zwar mit der javascript-variante, in dem Fall könnte das Script auch das parsen des Wertes übernehmen.

          Kommentar

          Lädt...
          X