Lupusec Alarmanlage XT2

Begonnen von horni, 05 Dezember 2016, 13:13:18

Vorheriges Thema - Nächstes Thema

horni

Habe eine Lupusec Alarmanlage und wollte diese eigentlich mit Fhem verknüpfen.. Hab dazu leider nichts gefunden ausser einen PHP-Code der angeblich es möglich
machen soll auch die Fensterkontakte dazu auszulesen bzw ein Ereigniss auszulösen
Ich habs leider nicht geschafft da ich absolut kein Programmierer bin und schon 4 Stunden alleine an der ersten Zeile mit meinen Logindaten gescheitert

$username     = GetValue(35633 /*[Alarmanlage\Daten\Benutzer]*/);

keine Ahnung wie ich da mein Login Admin einfüge
Aber ich poste mal den ganzen PHP-Code (Nicht das dieser mal verloren geht) .. Vielleicht sucht ja irgendwann dann doch mal einer auch irgendwie sowas in der Richtung der sich mit programmieren auskennt.
Ich wollte eigentlich nur den Status ob meine Alarmanlage scharf oder unscharf ist auslesen..
Anlage soll angeblich eine API haben...

<?
// Dieses Script liest die Sensoren und deren Daten aus einer Lupus XT2 Plus aus und stellt die Stati in einer Tabelle im Webfront dar

// Variablen definieren
$username     = GetValue(35633 /*[Alarmanlage\Daten\Benutzer]*/);
$password     = GetValue(46457 /*[Alarmanlage\Daten\Passwort]*/);
$ip            = GetValue(55395 /*[Alarmanlage\Daten\IP-Adresse]*/);
$url             = 'http://'.$ip.'/';
$id_html     = 44077 /*[Alarmanlage\Sensoren\Sensoren]*/; // String-Variable mit Profil "~HTML-Box" für die Anzeigen im Webfront

// Gerätetypen
$typen         = array("4" => "Türkontakt", "16" => "Tag Reader", "37" => "Keypad", "46" => "Sirene");

// -----------------------------------------------------------------------------
// ab hier ist nichts mehr anzupassen

// Login
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
//$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$result=curl_exec ($ch);


// Sensorliste lesen
$sensorliste = "http://".$ip."/action/deviceListGet";
curl_setopt($ch, CURLOPT_URL,$sensorliste);
$result=curl_exec ($ch);
//echo $result;
curl_close ($ch);


// Umwandeln von JSON in ein Array
$result = str_replace("\t", "", $result);
$json = json_decode($result, true);
//print_r($json);


// jeweilge Zone als Index des neuen Arrays $sensoren verwenden und dieses nach Index (=Zone) sortieren
foreach ($json['senrows'] as $sensor)
    {
    $zone = $sensor['zone'];
   $sensoren[$zone] = $sensor;
     }
ksort($sensoren);
//print_r($sensoren);


// HTML-Ausgabe erstellen
$html = "<table width='90%' align='left'>"; // Farbe anpassen oder style entfernen
$html .= "<tr><td><b>Area</b></td><td><b>Zone</b></td><td><b>Typ</b></td><td><b>SID</b></td><td><b>Name</b></td><td><b>Zustand</b></td><td><b>Batterie</b></td><td><b>Stärke</b></td></tr>";

foreach ($sensoren as $sensor)
    {
    // Daten aus Array zur besseren Anzeige bearbeiten
    $status = @GetTextBetween($sensor['status'], '{WEB_MSG_DC_', '}');
    $status = str_replace("CLOSE", "Geschlossen", $status);
    $status = str_replace("OPEN", "Geöffnet", $status);
    $rssi = substr($sensor['rssi'], -1);
    $name =  utf8_decode($sensor['name']);
    $battery = str_replace("0", "Schwach", $sensor['battery_ok']);
    $battery = str_replace("1", "OK", $sensor['battery_ok']);
     
    // Zeilen mit Daten befüllen
    $html .= "<tr>";
    $html .= "<td>" . $sensor['area'] . "</td>";        // area
    $html .= "<td>" . $sensor['zone'] . "</td>";        // zone
    $html .= "<td>" . $typen[$sensor['type']] . "</td>";        // typ
    $html .= "<td>" . $sensor['sid'] . "</td>";        // sid
    $html .= "<td>" . $name . "</td>";        // name
    $html .= "<td>" . $status . "</td>";        // status
    $html .= "<td>" . $battery . "</td>";        // battery_ok
    $html .= "<td>" . $rssi . "</td>";        // rssi
    $html .= "</tr>";
    }

$html .= "</table>";
SetValue($id_html ,$html);


// -----------------------------------------------------------------------------
function GetTextBetween($string, $start, $end)
    {
   preg_match_all( "/$start(.*)$end/U", $string, $match );
   return $match[1][0];
    }
?>



<?
// Dieses Script liest die Sensoren und deren Daten aus einer Lupus XT2 Plus aus und stellt die Stati in einer Tabelle im Webfront dar
// Variablen anpassen
// $id_html: String-Variable mit Profil "~HTML-Box" für die Anzeigen im Webfront (ins WF verlinken)
// $LupuInst: Dummy Modul anlegen und die ID hinterlegen; unter diesem Dummy-Modul werden die Variablen = Sensoren (NUR Türkontakte!!!) angelegt. Neue Türkontakte werden automatisch hinzugefügt. (ins WF verlinken)
// $id_wf: ID des Links im Webfront auf das Dummy-Modul $LupuInst

// -----------------------------------------------------------------------------
// Variablen definieren
$username     = GetValue(35633 /*[Alarmanlage\Daten\Benutzer]*/);
$password     = GetValue(46457 /*[Alarmanlage\Daten\Passwort]*/);
$ip            = GetValue(55395 /*[Alarmanlage\Daten\IP-Adresse]*/);
$url             = 'https://'.$ip.'/';
$id_html     = 44077 /*[Alarmanlage\Sensoren\Alle Sensoren - Tabelle\Sensoren]*/; // String-Variable mit Profil "~HTML-Box" für die Anzeigen im Webfront
$LupuInst = 30713 /*[Alarmanlage\Sensoren\Tür-/Fensterkontakte]*/; ## Dummy Modul für die Lupusec, Es muss ein Dummy Modul angelegt werden, darunter werden die Variablen abgelegt. Neue Sensoren werden automatisch hinzugefügt
$id_wf = 56541 /*[Webfront\Home\Sicherheit\Alarmanlage\Tür-/Fensterkontakte - Stand: 19.12.2015 22:10]*/ ;

// Gerätetypen
$typen = array("4" => "Türkontakt", "9" => "IR", "33" => "Funk Binaereingang", "27" => "PIR Kamera", "16" => "Tag Reader", "37" => "Keypad", "46" => "Sirene");



// -----------------------------------------------------------------------------
// ab hier ist nichts mehr anzupassen

// Login
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_exec ($ch);

// Sensorliste lesen
$sensorliste = "https://".$ip."/action/deviceListGet";
curl_setopt($ch, CURLOPT_URL,$sensorliste);
$result=curl_exec ($ch);
//echo $result;
curl_close ($ch);


// Umwandeln von JSON in ein Array
$result = str_replace("\t", "", $result);
$json = json_decode($result, true);
//print_r($json);


// jeweilge Zone als Index des neuen Arrays $sensoren verwenden und dieses nach Index (=Zone) sortieren
foreach ($json['senrows'] as $sensor)
    {
    $zone = $sensor['zone'];
   $sensoren[$zone] = $sensor;
     }
ksort($sensoren);
//print_r($sensoren);


// -----------------------------------------------------------------------------

IPS_SetName($id_wf, IPS_GetName($LupuInst)." - Stand: ".date("d.m.Y H:i"));

# hier wird pro Sensor eine Statusvariable erzeugt
foreach ($sensoren as $sensor)
    {
    # füllt die Variablen
    $status = @GetTextBetween($sensor['status'], '{WEB_MSG_DC_', '}');
    # initialisiere mit false, fall aktor keinen Status hat
    $status_bol = false;

    IF ($status == "CLOSE") $status_bol = false;
    IF ($status == "OPEN")     $status_bol = true;
    $zone = $sensor['zone'];
    $name =  utf8_decode($sensor['name']);
    $zone = $sensor['zone'];
    $VariableName = "Zone ".$zone.": ".$name;
    $typ = $sensor['type'];
    GetSetZone($VariableName, $status_bol, $LupuInst, $typ);
   }


// -----------------------------------------------------------------------------

// HTML-Ausgabe im Webfront erstellen
$html = CreateHtml($sensoren, $typen);
SetValue($id_html ,$html);


// -----------------------------------------------------------------------------
// Funktionen

function GetTextBetween($string, $start, $end)
    {
   preg_match_all( "/$start(.*)$end/U", $string, $match );
   return $match[1][0];
    }

// -----------------------------------------------------------------------------

function GetSetZone($Zone,$State_bol,$LupuInst, $typ)
    {
    ##baut den variablennamen zusammen
    #     $ZoneVarName = $Zone;
    #    echo $ZoneVarName;
    # Sucht nach der Zone und legt falls nciht vorhanden eine Variable an und schreibt $State als Status

    if ($typ == 4) // nur eine Variable anlegen, wenn der Sensor = Type 4 ist (-> Türkontakt)
       {
        $VariablenID = @IPS_GetVariableIDByName($Zone, $LupuInst);
        if ($VariablenID === false)
            {
          $VarID_NewZone = IPS_CreateVariable(0);
            #function CreateVariableByName($ParentID, $VarName, $VarTyp, $VarProfile = "", $VarActionScript = "") {
         IPS_SetName($VarID_NewZone,$Zone); // Variable benennen#
         IPS_SetVariableCustomProfile($VarID_NewZone,"~Window");
         IPS_SetInfo($VarID_NewZone, "This variable was created by script #".$_IPS["SELF"]);
         IPS_SetParent($VarID_NewZone, $LupuInst); // Variable einsortieren unter dem Objekt mit der ID "12345"
         #echo "Variable nicht gefunden!";
         setValue($VarID_NewZone, $State_bol);
         }
        else
            {
            # echo "Die Variablen-ID lautet: ". $VariablenID;
          setValue($VariablenID, $State_bol);
          }
         }
    }


function CreateHtml($sensoren, $typen)
    {
    // HTML-Ausgabe erstellen und zurückgeben

    $html = "<table width='90%' align='left'>"; // Farbe anpassen oder style entfernen
    $html .= "<tr><td><b>Area</b></td><td><b>Zone</b></td><td><b>Typ</b></td><td><b>SID</b></td><td><b>Name</b></td><td><b>Zustand</b></td><td><b>Batterie</b></td><td><b>Stärke</b></td></tr>";

    foreach ($sensoren as $sensor)
        {
        // Daten aus Array zur besseren Anzeige bearbeiten
        $status = @GetTextBetween($sensor['status'], '{WEB_MSG_DC_', '}');
        $status = str_replace("CLOSE", "Geschlossen", $status);
        $status = str_replace("OPEN", "Geöffnet", $status);
        $rssi = substr($sensor['rssi'], -1);
        $name =  utf8_decode($sensor['name']);
        $battery = str_replace("0", "Schwach", $sensor['battery_ok']);
        $battery = str_replace("1", "OK", $sensor['battery_ok']);

        // Zeilen mit Daten befüllen
        $html .= "<tr>";
        $html .= "<td>" . $sensor['area'] . "</td>";        // area
        $html .= "<td>" . $sensor['zone'] . "</td>";        // zone
        $html .= "<td>" . $typen[$sensor['type']] . "</td>";        // typ
        $html .= "<td>" . $sensor['sid'] . "</td>";        // sid
        $html .= "<td>" . $name . "</td>";        // name
        $html .= "<td>" . $status . "</td>";        // status
        $html .= "<td>" . $battery . "</td>";        // battery_ok
        $html .= "<td>" . $rssi . "</td>";        // rssi
        $html .= "</tr>";
        }

    $html .= "</table>";
    return $html;
     }


?>



Gerd

Hallo,
ich habe eine XT1 und die lese ich einfach per HTTPMOD aus.

zb.
http://admin:passwort@"ipadresse_der Anlage"/action/sensorListGet

Dann bekomme ich das:
/*-secure-
{ senrows : [
{no : "1", type : "Rauchmelder", zone : "1", name : "Unten-SZ", attr : "",cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "2", type : "Fernbedienung", zone : "2", name : "FB Anita", attr : "Med. Notfall", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "3", type : "Rauchmelder", zone : "3", name : "K_FLUR", attr : "",cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "4", type : "Rauchmelder", zone : "4", name : "K_EDV", attr : "",cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "5", type : "Wassermelder", zone : "5", name : "Waschküche", attr : "",cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "6", type : "Rauchmelder", zone : "6", name : "K_Dustin", attr : "",cond : "Außer Betrieb", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "7", type : "Rauchmelder", zone : "7", name : "Unten_Dust", attr : "",cond : "Außer Betrieb", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "8", type : "Rauchmelder", zone : "8", name : "Unten_WZ", attr : "",cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "9", type : "Rauchmelder", zone : "9", name : "Anita_Flur", attr : "",cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "10", type : "Rauchmelder", zone : "10", name : "Anita_SZ", attr : "",cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "11", type : "Fernbedienung", zone : "11", name : "FB UNTEN", attr : "Med. Notfall", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "12", type : "Türkontakt", zone : "12", name : "Terasse", attr : "Home Modus", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "13", type : "Türkontakt", zone : "13", name : "Schlaf_F", attr : "Einbruch", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "14", type : "Funksteckdose Plus", zone : "14", name : "Steckdose ", attr : "",cond : "An, 140.0W", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "15", type : "Wassermelder", zone : "15", name : "Aquarium", attr : "",cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "16", type : "Rauchmelder", zone : "16", name : "Gas", attr : "",cond : "", battery : "", tamp : "", bypass : "Inaktiv"}]
}
*/


und lese das per regex aus

Vielleicht hilft Dir das ja weiter.


horni

Ja hilft mir sehr weiter.. Ist schon mal super..
Mhmm.. Aber eine Frage.. Ob die Anlage jetzt scharf ist oder nicht kann ich da leider nicht rauslesen oder ?? Die Fensterkontakte funktionieren ja schon mal super...

Besten Dank

rubinho

Ich muss mich hier auch mal einklinken,
Den Status (Scharf/Unscharf) bekommst du bei der XT2 mittels folgender url raus...
/action/panelCondGet

Dabei wird folgender Content angezeigt...
{
  "updates" : {
    "mode_a1" : "{AREA_MODE_0}",
    "mode_a2" : "{AREA_MODE_0}",
    "dc_ex" : "1",
    "alarm_ex" : "0",
    "battery_ex" : "1",
    "battery_ok" : "1",
    "battery" : "{WEB_MSG_NORMAL}",
    "tamper_ok" : "1",
    "tamper" : "{WEB_MSG_NA}",
    "interference_ok" : "1",
    "interference" : "{WEB_MSG_NORMAL}",
    "ac_activation_ok" : "1",
    "ac_activation" : "{WEB_MSG_NORMAL}",
    "sys_in_inst": "",
    "rssi" : "1",
    "sig_gsm_ok" : "1",
    "sig_gsm" : "{WEB_MSG_NA}"
  },
  "forms" : {
    "pcondform1" : {
      "mode" : "0",
      "f_arm" : "0"
    },
    "pcondform2" : {
      "mode" : "0",
      "f_arm" : "0"
    }
  }
}


Nun will ich mit den Werten gerne was anfangen.
Wie schreibe ich die passende Readingsregex damit die Werte verwertbar dargestellt werden.

Gruß
Rubinho
Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

horni

#4
Also ich habe es so gemacht. Bei mir sieht das mit der XT1 leider ein wenig anders aus.. Aber erst mal Danke für die Info


/*-secure-
{ updates : {
mode_st : "Disarm",
alarm_ex : "Normal",
battery : "Normal",
battery_ex : "Normal",
dc_ex : "Geschlossen",
tamper : "Geschlossen",
interference : "Normal",
ac_activation : "Normal",
rssi : "1"
},
forms : {
pcondform : {
mode : "2"
}
}
}
*/


define Alarmanlage HTTPMOD http://admin:passwort@"ipadresse_der Anlage"/action/panelCondGet 60
attr enableControlSet 1
attr userattr reading01Name reading01Regex
attr reading01Name Alarmscharf
attr reading01Regex mode_st : "([^,]*)"
attr event-on-change-reading Alarmscharf

Gibt mit Sicherheit bessere Lösung funktioniert aber genau so wie es sein soll. Im reading steht dann "Alarmscharf" und der jeweilige Zustand. Wird alle 60 Sekunden neu abgefragt. Falls mehr sachen abgefragt werden sollen einfach die Zeile "attr userattr reading01Name reading01Regex reading02Name reading02Regex" und so erweitern.

Weiß eigentlich jemand ob es möglich ist den Login das Passwort da irgendwie zu verschlüsseln und er trotzdem die Seite abfragt ? Ist irgendwie ein wenig doof da das Passwort ja unverschlüsselt dort steht.




rubinho

Zitat von: horni am 19 Januar 2017, 06:50:47Weiß eigentlich jemand ob es möglich ist den Login das Passwort da irgendwie zu verschlüsseln und er trotzdem die Seite abfragt ? Ist irgendwie ein wenig doof da das Passwort ja unverschlüsselt dort steht.

Ja das ist blöd, aus diesem Grund habe ich den Benutzerzugang meiner XT2 genommen und nicht den Adminzugang.
Der Benutzerzugang hat nur Leserechte und ist von daher unkritisch. Ob die XT1 mehrere Zugänge hat, weiß ich allerdings nicht.
Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

rubinho

So ich hab mal was für die XT2 gebastelt.
Momentan sehe ich den Status welche Zone Scharf bzw Unscharf ist und ob ein Alarm aktiv ist oder eben nicht.
Des Weiteren sehe ich die Zustände der Fensterkontakte und eines Bewegungsmelder

Nur zur Info, ich beherrsche die Regulären Ausdrücke nicht besonders, von daher habt ein wenig Nachsicht mit mir.
Da steckt mit Sicherheit noch Verbesserungspotential, somal ich nicht in der Lage bin einen Regex über mehrere Zeilen suchen zu lassen.

Aber hier erstmal meine Ergebnisse....

define lupusec HTTPMOD http://user:pass@<ip_adresse>/action/panelCondGet 30
attr lupusec userattr get04Name get04Poll:0,1 get04PollDelay get04PollDelay:0,1 get04URL reading01Map reading01Name reading01Regex reading02Map reading02Name reading02Regex reading03Map reading03Name reading03Regex reading04Map reading04Name reading04Regex reading05Map reading05Name reading05Regex reading06Map reading06Name reading06Regex reading07Map reading07Name reading07Regex reading08JSON reading08name
attr lupusec get01Name Devices_States
attr lupusec get01Poll 1
attr lupusec get01PollDelay 30
attr lupusec get01URL http://user:pass@<ip_adresse>/action/deviceListGet
attr lupusec reading01Map 0:Aus, 1:Ein
attr lupusec reading01Name Zone_1
attr lupusec reading01Regex mode_a1" :.*(\d)
attr lupusec reading02Map 0:Aus, 1:Ein
attr lupusec reading02Name Zone_2
attr lupusec reading02Regex mode_a2" :.*(\d)
attr lupusec reading03Map 0:OK, 1:Alarm
attr lupusec reading03Name State
attr lupusec reading03Regex alarm_ex" : .*(\d)
attr lupusec reading04Name Fensterkontakt1
attr lupusec reading04Regex status":.*WEB_MSG_DC_(.*)}", "sid": "RF:<ID>"
attr lupusec reading05Name Fensterkontakt2
attr lupusec reading05Regex status":.*WEB_MSG_DC_(.*)}", "sid": "RF:<ID>"
attr lupusec reading06Name Fensterkontakt3
attr lupusec reading06Regex status":.*WEB_MSG_DC_(.*)}", "sid": "RF:<ID>"
attr lupusec reading07Map "DOORBELL":active, "":inactive
attr lupusec reading07Name Bewegungsmelder1
attr lupusec reading07Regex RF:<ID>".*"alarm_status": (".*"),
attr lupusec reading08name Test
attr lupusec room Lupus
attr lupusec set0Map 0:Aus, 1:Ein
attr lupusec stateFormat Zone1: Zone_1 Zone2: Zone_2 Status: State



Hier noch der Auszug der Deviceliste, hier müsse ich über mehrere Zeilen bzw. innerhalb einer Geschwungenen Klammer auswerten können....

{
  "senrows": [
{"area": 1, "zone": 13, "type": 33, "type_f": "{D_TYPE_33}", "name": "Kontakt Balkontür",
"cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1",
"tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG} 7",
"resp_mode": [97,5,1,0,0,0], "ammeter": "0", "ver": "",
"status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:<ID>", "su": 1, "alarm_status": "", "status_ex": "0"},
{"area": 1, "zone": 80, "type": 45, "type_f": "{D_TYPE_45}", "name": "Sirene",
"cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1",
"tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG} 9",
"resp_mode": [0,5,5,5,5,0], "ammeter": "0", "ver": "",
"status": "", "sid": "RF:<ID>", "su": 1, "alarm_status": "", "status_ex": "0"},
{"area": 1, "zone": 12, "type": 4, "type_f": "{D_TYPE_4}", "name": "Tür Garage",
"cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1",
"tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_GOOD} 5",
"resp_mode": [0,0,0,0,0,0], "ammeter": "0", "ver": "",
"status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:<ID>", "su": 1, "alarm_status": "", "status_ex": "0"},
{"area": 1, "zone": 10, "type": 4, "type_f": "{D_TYPE_4}", "name": "Haustür",
"cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1",
"tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG} 8",
"resp_mode": [97,2,1,1,1,0], "ammeter": "0", "ver": "",
"status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:<ID>", "su": 1, "alarm_status": "", "status_ex": "0"},
{"area": 1, "zone": 11, "type": 4, "type_f": "{D_TYPE_4}", "name": "Fenster Arbeitszimmer",
"cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1",
"tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG} 9",
"resp_mode": [0,0,0,0,0,0], "ammeter": "0", "ver": "",
"status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:<ID>", "su": 1, "alarm_status": "", "status_ex": "0"},
{"area": 1, "zone": 20, "type": 9, "type_f": "{D_TYPE_9}", "name": "Kellerraum Groß",
"cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1",
"tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG} 9",
"resp_mode": [97,1,2,0,0,0], "ammeter": "0", "ver": "",
"status": "", "sid": "RF:<ID>", "su": 1, "alarm_status": "", "status_ex": "0"},
{"area": 1, "zone": 1, "type": 16, "type_f": "{D_TYPE_16}", "name": "Reader Keller",
"cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1",
"tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG} 6",
"resp_mode": [0,5,5,5,5,0], "ammeter": "0", "ver": "",
"status": "", "sid": "RF:<ID>", "su": 0, "alarm_status": "", "status_ex": "0"}]
}
Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

Kenneth

Zitat von: Gerd am 03 Januar 2017, 18:41:59

und lese das per regex aus

Vielleicht hilft Dir das ja weiter.

Hey Gerd,

könntest du mir vll. deinen RegEx dazu zeigen bzw. mir beim erstellen helfen?
Ich würde gerne für jeden Sensoren jeweils ein Reading für alle Zustände (cond, battery, tamp, bypass) anlegen aber RegEx ist nicht so meins.

/*-secure-
{ senrows : [
{no : "1", type : "T�rkontakt", zone : "1", name : "Stall FE", attr : "Einbruch", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "2", type : "T�rkontakt", zone : "2", name : "Gartent�r", attr : "Einbruch", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "3", type : "T�rkontakt", zone : "3", name : "T�r Stra�e", attr : "Eingangsbereich", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "4", type : "T�rkontakt", zone : "4", name : "Haust�r", attr : "Eingangsbereich", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "5", type : "T�rkontakt", zone : "5", name : "Waschk�che", attr : "Einbruch", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "6", type : "T�rkontakt", zone : "6", name : "B�ro re FE", attr : "Einbruch", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "7", type : "T�rkontakt", zone : "7", name : "B�ro li FE", attr : "Einbruch", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "8", type : "T�rkontakt", zone : "8", name : "KiZi_West", attr : "Einbruch", cond : "", battery : "", tamp : "Offen", bypass : "Inaktiv"},
{no : "9", type : "T�rkontakt", zone : "9", name : "SZ Eltern", attr : "Einbruch", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "10", type : "T�rkontakt", zone : "10", name : "KiZi_Sued", attr : "Einbruch", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "11", type : "T�rkontakt", zone : "11", name : "Bad FE", attr : "Einbruch", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "12", type : "T�rkontakt", zone : "12", name : "Veranta FE", attr : "Einbruch", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "13", type : "T�rkontakt", zone : "13", name : "WG li FE", attr : "Home Entry", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "14", type : "T�rkontakt", zone : "14", name : "WG re FE", attr : "Einbruch", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "15", type : "Fernbedienung", zone : "15", name : "FB01", attr : "Pers. Bedrohung", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "16", type : "Fernbedienung", zone : "16", name : "FB02", attr : "Pers. Bedrohung", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "17", type : "Innensirene", zone : "17", name : "Sirene IN", attr : "",cond : "Au�er Betrieb", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "18", type : "T�rkontakt", zone : "18", name : "Gaeste Bad", attr : "Einbruch", cond : "", battery : "", tamp : "", bypass : "Inaktiv"},
{no : "19", type : "Keypad", zone : "19", name : "Keypad", attr : "",cond : "", battery : "", tamp : "", bypass : "Inaktiv"}]
}
*/


Grüße
Intel NUC @Ubuntu > FHEM 5.8
HM-LAN, NanoCul, Signalduino
EchoDot, Gardena Sileno, XT1, Somfy RTS
TabletUI

Gerd

Ich muß sagen ich bin auch ein absoluter Laie was RegEx angeht.

Man muss glaube ich für jeden Sensor und jeden Wert ein Reading anlegen.
RegEx testen habe ich hier mit gemacht https://regex101.com/



Kenneth

#9
Zitat von: Gerd am 20 Juli 2017, 07:43:37
Ich muß sagen ich bin auch ein absoluter Laie was RegEx angeht.

Man muss glaube ich für jeden Sensor und jeden Wert ein Reading anlegen.
RegEx testen habe ich hier mit gemacht https://regex101.com/

Dachte, du sagtest du verarbeitest das ganze bereits via RegEx und du kannst mir deinen RegEx mal zeigen..
Schade..
Danke für den Link, kenn ich bereits..
Intel NUC @Ubuntu > FHEM 5.8
HM-LAN, NanoCul, Signalduino
EchoDot, Gardena Sileno, XT1, Somfy RTS
TabletUI

Kenneth

#10
sodale. habs hinbekommen mit folgendem RegEx

(NameSensor)", attr : \"(Name_SensorTyp)\", (cond) : \"(.{0,7})\", (battery) : \"(.{0,7})\", (tamp) : \"(.{0,7})\", (bypass) : \"(.{0,7})


sieht dann vorerst für einen Sensor wie folgt aus:
define Alarmanlage_Sensoren HTTPMOD http://USER:PW@IP-Adresse/action/sensorListGet 60
attr Alarmanlage_Sensoren userattr reading01Name reading01Regex
attr Alarmanlage_Sensoren enableControlSet 1
attr Alarmanlage event-on-change-reading Waschkueche
attr Alarmanlage_Sensoren reading01Name Waschkueche
attr Alarmanlage_Sensoren reading01Regex (Wa_kueche)", attr : \"(Einbruch)\", (cond) : \"(.{0,7})\", (battery) : \"(.{0,7})\", (tamp) : \"(.{0,7})\", (bypass) : \"(.{0,7})
attr Alarmanlage_Sensoren room Alarm
attr Alarmanlage_Sensoren stateFormat Waschkueche: Waschkueche-4



Grüße Mat
Intel NUC @Ubuntu > FHEM 5.8
HM-LAN, NanoCul, Signalduino
EchoDot, Gardena Sileno, XT1, Somfy RTS
TabletUI

Kenneth

hab den RegEx jetzt nochmal etwas abgeändert.

Filter auf den Sensortyp raus und die Länge der einzelnen Stati ist nicht wichtig bzw. kann sich ja auch ändern ..

(Name_Sensor)", attr : \"([^,]*)", (cond) : \"([^,]*)", (battery) : \"([^,]*)", (tamp) : \"([^,]*)", (bypass) : \"([^,]*)"
Intel NUC @Ubuntu > FHEM 5.8
HM-LAN, NanoCul, Signalduino
EchoDot, Gardena Sileno, XT1, Somfy RTS
TabletUI

Jogi

#12
Ich habe auch eine XT2, lese diese aber nicht aus, sondern lasse mir bei einem Ereignis einen Action-Code senden, den ich dann mit FHEM empfange.
Das ist total einfach und funktioniert sehr zuverlässig.
Dadurch kann ich in FHEM alle Kontakte signalisieren und Aktionen auslösen (siehe Anhang).

So habe ich es gemacht:
In der XT2 unter Smarthome-Automation pro Kontakt zwei Regeln erstellen, eine für ZU und eine für OFFEN.
Und dann bei Aktion einen Action-URL anlegen.
Beispiel:
http://192.XXX.XXX.XX:8088/fhem?cmd=set%20Haustuer%20on&XHR=1


Kenneth

#13
Zitat von: Jogi am 26 Juli 2017, 11:19:30
Ich habe auch eine XT2, lese diese aber nicht aus, sondern lasse mir bei einem Ereignis einen Action-Code senden, den ich dann mit FHEM empfange.
Das ist total einfach und funktioniert sehr zuverlässig.
Dadurch kann ich in FHEM alle Kontakte signalisieren und Aktionen auslösen (siehe Anhang).

So habe ich es gemacht:
In der XT2 unter Smarthome-Automation pro Kontakt zwei Regeln erstellen, eine für ZU und eine für OFFEN.
Und dann bei Aktion einen Action-URL anlegen.
Beispiel:
http://192.XXX.XXX.XX:8088/fhem?cmd=set%20Haustuer%20on&XHR=1

Auch sehr nett!
Hab leider nur die XT1 und da kann man unter Automation noch keine deartigen Einstellungen/Regeln erstellen.
Wäre auch toll wenn du hier alle nötigen Informationen zu deiner Umsetzung posten könntest, weil wie ich sehen konnte muss man ja noch einige andere Einstellungen in FHEM vornehmen damit FHEM überhaupt auf die "Action-URL" reagiert bzw. sie annimmt.


VG

die ReadingsGroup nimmt langsam gestalt an :)
Intel NUC @Ubuntu > FHEM 5.8
HM-LAN, NanoCul, Signalduino
EchoDot, Gardena Sileno, XT1, Somfy RTS
TabletUI

Jogi

Zitat von: Kenneth am 26 Juli 2017, 12:05:59
Wäre auch toll wenn du hier alle nötigen Informationen zu deiner Umsetzung posten könntest, weil wie ich sehen konnte muss man ja noch einige andere Einstellungen in FHEM vornehmen damit FHEM überhaupt auf die "Action-URL" reagiert bzw. sie annimmt.
Ansonsten ist nicht viel notwendig.
Um die Alarmanlage für FHEM freizugeben muss nur noch folgendes eingegeben werden:
define WEBapi FHEMWEB 8088 global
attr WEBapi allowfrom 192.xxx.xxx.xx|127.0.0.1
attr WEBapi csrfToken none


Das war´s!

Funktioniert bei mir bestens!