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!

f.f

Hi,

habe auch eine XT2 und nachdem ich heute den ganzen Abend dummys und schalter eingerichtet habe, dachte ich ich greife deine Ideemal auf. Hab also die neue Firmware auf die XT2 und zwei Action-Codes für Aktionen vergeben.
Was muss ich jetzt noch im Router durchwinken? Meine xt2 läuft auf xxx.xxx.xxx.100 und mein fhem auf xxx.xxx.xxx.110
habe auf den lokalen host xxx.xxx.xxx. 110 einen lokalen Port 8088 freigeschaltet.  Was muss ich im Remote-Portnummernbereich angeben bzw. muss ich einen Remote-Host angeben?   

Gruss

Jogi

Hallo,
ich bin auch kein Profi und bastel mich teilweise auch durch, aber meine Wissens musst Du am Router nichts mehr freigeben, wenn Du im selben Netz schalten willst.
Ich habe bei mir in FHEM die Eingaben vorgenommen, die im letzten Post stehen und in der XT2 den URL wie aus dem Post vom 26. Juli. Damit läuft es.
Du darfst natürlich nicht vergessen in der XT2 die Regeln freizugeben. Es darf kein rotes Ausrufezeichen davor stehen.


f.f

Hallo Jogi,

koennest du mir eventuell im detail erläutern, wie du das gemacht hast?

Ich habe es so probiert, wie es ein paar beiträge vorher erklärt war also:
eine regel erstellt und diese wie beschrieben mit : http://192.xxx.xxx.XX:8083/fhem?cmd=set%20Haustuer%20on&XHR=1 (wieso ist hier bei dir der port 8088?..oder muss das so sein und hat mit dem standardport von fhem nix zu tun??)
in fhem habe ich auch mal "Haustuer" als dummy erstellt. Welche attr muss ich dem geben??

Gruss

Kenneth

Hi f.f

er nimmt 8088 weil er ihn extra dafür angelegt hat und hier explizit csrfToken deaktiviert hat und den Zugriff nur von zwei bestimmten IPs zulässt

define WEBapi FHEMWEB 8088 global
attr WEBapi allowfrom 192.xxx.xxx.xx|127.0.0.1
attr WEBapi csrfToken none


ich hab zwar keine Ahnung wieso ihr eure internen IPs verixst aber schaut erstma gut aus [emoji6]

Grüße


Gesendet von iPhone mit Tapatalk
Intel NUC @Ubuntu > FHEM 5.8
HM-LAN, NanoCul, Signalduino
EchoDot, Gardena Sileno, XT1, Somfy RTS
TabletUI

f.f

#19
hi,

ich glaub das hab ich jetzt verstanden :)

allerdings versteh ich den localhost 127.0.0.1 hier nicht so ganz. ich will doch nur die 192.168.1.100 durchwinken und nicht den aufrufenden an sich "selber" durchstellen?

ich hab im router wieder die portweiterleitung rausgenommen.
die aktion an der alarmanlage kann ich auslösen. kann ich irgendwie monitoren wo der aktion-code der alarmanlage

" http://192.168.0.110:8088/fhem?cmd=set%20Haustuer%20on&XHR=1"

stecken bleibt, bzw. ob es überhaupt bei fhem "anklopft" und da evtl. abgewiesen wird?

oder ist "Haustuer" evtl. in fhem nur falsch konfiguriert? Welche atrribute muss ich setzen, damit das "set%" auch irgendwo was setzten kann?

gruss

f.f

edit: es funktioniert ;) :)...danke

Jogi

Zitat von: Kenneth am 09 September 2017, 20:22:53

er nimmt 8088 weil er ihn extra dafür angelegt hat und hier explizit csrfToken deaktiviert hat und den Zugriff nur von zwei bestimmten IPs zulässt
Genau so ist es!

Schön dass es jetzt funktioniert!

is2late

#22
Zitat von: Jogi am 08 August 2017, 09:47:39
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

Ich bin totaler Anfänger. Vielleicht kann mich jemand erleuchten?
Auf "define WEBapi ...." bekomme ich gleich mal eine gewatscht: Befehl nicht gefunden.
Bin aber im Verzeichnis /fehm.  Was mache ich falsch?

Vielen Dank im Voraus!

Jogi

Zitat von: is2late am 29 November 2017, 17:17:48
Ich bin totaler Anfänger. Vielleicht kann mich jemand erleuchten?
Auf "define WEBapi ...." bekomme ich gleich mal eine gewatscht: Befehl nicht gefunden.
Bin aber im Verzeichnis /fehm.  Was mache ich falsch?

Vielen Dank im Voraus!
Vielleicht verstehe ich die Frage nicht, aber bei mir steht es genau so in der FHEM.cfg.
Wenn Du es dort einträgst müsste es funktionieren.

Gruß,
Jogi

is2late

Vielen Dank, Jogi. Hab's blöderweise im Terminal versucht...

is2late

#25
@Jogi, könntest Du mir bitte die Action-URL erklären? Ich will erreichen, dass bei Alarm die Rolläden hochgehen. Der Namen jedes Rollladen besteht aus mehreren Begriffen, zB "SZ M Gartenseite". Davor steht in FHEM noch - automatisch eingetragen - "ExteriorVenetianBlind". Ich weiß nun nicht, ob anstelle von "Haustür" in Deiner URL nur "SZ M Gartenseite" oder auch "Exterior...." einzutragen ist und mit/ohne Unterstrich....oder stattdessen der tahoma-Name.... Hab alle Varianten durchprobiert, aber nichts klappt.
Letzter Versuch war:
http://192.168.178.90:8088/fhem?cmd=set%tahoma_161732%dim50&XHR=1

Der Logeintrag lautet:
2017.11.30 14:51:51 3: tahoma1: tahoma_getEvents took 620.66388130188 ms

Die interne IP der XT3 stimmt.

Den Inhalt des command verstehe ich leider komplett nicht - set%20...

Die WEBapi ist jetzt richtig angelegt, denke ich:

Internals
CFGFN
CONNECTS 7
DEF    8088 global
FD 11
NAME WEBapi
NR 76
NTFY_ORDER 50-WEBapi
PORT 8088
STATE Initialized
TYPE FHEMWEB
 
Attributes
allowfrom 192.168.178.82|127.0.0.1
csrfToken none


is2late

Hi,

nach hartnäckigem unbedarftem Probieren ist Folgendes herausgekommen:

192.168.178.90:8088/fhem?cmd=set%20tahoma_161732%20setClosure&XHR=1

öffnet den Rolladen.  :-* Yeah!

Jetzt würde ich noch gern wissen, wie man mehrere Devices gleichzeitig anspricht - werden die durch ein Komma getrennt?
%20 sind scheinbar wie Anführungszeichen zu verstehen, oder?

Jogi

Zitat von: is2late am 30 November 2017, 17:04:43
Hi,

nach hartnäckigem unbedarftem Probieren ist Folgendes herausgekommen:

192.168.178.90:8088/fhem?cmd=set%20tahoma_161732%20setClosure&XHR=1

öffnet den Rolladen.  :-* Yeah!

Jetzt würde ich noch gern wissen, wie man mehrere Devices gleichzeitig anspricht - werden die durch ein Komma getrennt?
%20 sind scheinbar wie Anführungszeichen zu verstehen, oder?
Am einfachsten ist es, wenn du nur einen Action-url aus der XT2 verschickst und dann in Fhem mit Dummies und/oder notifys arbeitest.
Darin kannst du dann mehrer Geräte durch Komma getrennt ansprechen.

Viel Erfolg,
Jogi

elektrikpe2

Hallo Alle, mein erster Beitrag und Frage. Habe Dank des Forums den EInstieg in FHEM gefunden, nachdem mir mein Sohn zu Weihnachten einen Raspberry geschenkt hat. Bisher habe ich mit JBMedia und dem LM Air diverse (billige) Aktoren ohne Rückkanel damit gesteuert. Ist ein gutes Gerät aber Nachteil keine Unterstützung von MAC OS und zwangsweise ein Windows-PC für Netzkonnektion und Konfigurationsprogramm. Inzwischen nutze ich den Air als CUL-Ersatz für die 433 Aktoren, weil die über HTTP-Request gesteuert werden können. Die Türen und Fenster habe ich alles mit LUPUSEC-Sensoren ausgestattet und bin nun schon in der Lage, die Daten mit Action-URL von LUPUSEC an FHEM zu übertragen (noch ein Hinweis: Die Automationsregeln müssen unbedingt in ein Profil/Gruppe eingebettet werden sonst werden sie nicht ausgeführt - entweder hab ich das überlesen - hat mich jedenfalls ne Menge Zeit gekostet).

Jetzt die Frage: Habe auch Lupusec Thermostate und würde natürlich gerne die Werte in FHEM übernehmen. Muss ich nun parallel zur Action-URL doch auch auslesen?

Grüße

Jogi

Zitat von: elektrikpe2 am 03 Januar 2018, 19:17:38
Hallo Alle, mein erster Beitrag und Frage. Habe Dank des Forums den EInstieg in FHEM gefunden, nachdem mir mein Sohn zu Weihnachten einen Raspberry geschenkt hat. Bisher habe ich mit JBMedia und dem LM Air diverse (billige) Aktoren ohne Rückkanel damit gesteuert. Ist ein gutes Gerät aber Nachteil keine Unterstützung von MAC OS und zwangsweise ein Windows-PC für Netzkonnektion und Konfigurationsprogramm. Inzwischen nutze ich den Air als CUL-Ersatz für die 433 Aktoren, weil die über HTTP-Request gesteuert werden können. Die Türen und Fenster habe ich alles mit LUPUSEC-Sensoren ausgestattet und bin nun schon in der Lage, die Daten mit Action-URL von LUPUSEC an FHEM zu übertragen (noch ein Hinweis: Die Automationsregeln müssen unbedingt in ein Profil/Gruppe eingebettet werden sonst werden sie nicht ausgeführt - entweder hab ich das überlesen - hat mich jedenfalls ne Menge Zeit gekostet).

Jetzt die Frage: Habe auch Lupusec Thermostate und würde natürlich gerne die Werte in FHEM übernehmen. Muss ich nun parallel zur Action-URL doch auch auslesen?

Grüße
Hallo,
um es vorab zu schreiben, leider habe ich die Antwort auf Deine Frage nicht, möchte mich aber dennoch kurz melden.
1. Das mit den Automationsregeln, die einem Profil zugeordnet werden müssen ist kein FHEM-Thema, sondern Lupus-spezifisch. Das gilt für alle Regeln dort.
2. Ich habe einige Geräte von Lupus, allerdings nur die, von denen ich glaube, dass es deren Kernkompetenz ist, Alarmanlagen und Videoüberwachung. Das funktioniert super und zuverlässig.
Die Komponenten zur Hausautomation habe ich teilweise auch ausprobiert, war aber oft enttäuscht, weil die Funktion nicht zuverlässig war. Das betraf ausschließlich die Komponenten, die ein Zigbee-Protokoll haben. Die Komponenten, die über die Frequenz 868Mhz arbeiten habe ich als sehr zuverlässig erlebt.
Auch das Thermostatventil arbeitet über ZigBee. Wenn Du damit zufrieden bist, möchte ich nichts gesagt haben, leider weiß ich aber auch nicht, wie man es in FHEM einbindet.
Ich würde eher ein Thermostatventil einer anderen Marke wählen, z.B. Homematic oder Max. Die funktionieren wunderbar und lassen sich problemlos in FHEM einbinden. Zudem sind sie deutlich günstiger!



elektrikpe2

#30
Hallo, danke für die schnelle Antwort. Ja, die Thematik der Heizungssensoren von Lupusec sind mir bekannt und ich habe die in die Version 2017 umgetauscht bekommen. Sie machen jetzt das, was sie sollen. Soweit Aktionen in der Lupusec greifbar sind, mache ich das mit Aktion-URL. Für die Temperatursensoren-Werte zu erhalten muss ich also auslesen. Ich bin den Weg gegangen, der von @Kenneth skizziert wurde. Leider erhalte ich aber keine Werte. Das mag daran liegen, dass ich tatsächlich die Werte hinter dem status brauch die sich nach dem "{WEB_MSG_TS_DEGREE}   23.5 "brauche, bzw. auch den Wert {WEB_MSG_TRV_AUTO} und {WEB_MSG_TRV_SETPOINT} 23.0. Das ist der tatsächlich gemessene Wert, die Stellung des Thermostates und der gewählte Wert. Ich habe den folgenden Code benutzt, bekomme aber keine Werte. Ist m.E. für einen Newbie ziemlich tricki. Vielleicht kann mir jemand helfen. Code und Werte:
define Temperatur_Sensoren HTTPMOD http://user:password@xxx.xxx.xxx.xx/action/deviceListGet 60

attr Temperatur_Sensoren userattr reading01Map reading01Name reading01Regex
attr Temperatur_Sensoren enableControlSet 1
attr Temperatur_Sensoren event-on-change-reading Temperatur_Bad
attr Temperatur_Sensoren reading01Name Temperatur_Bad
attr Temperatur_Sensoren reading01Regex (HeizBadFenster)", attr : \"([^,]*)", (status) : \"([^,]*)"


{"area": 1, "zone": 25, "type": 79, "type_f": "{D_TYPE_79}", "name": "HeizMT",  "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": "TRV_00.00.03.02TC",  "hue": "-1", "sat": "-1",  "status": "{WEB_MSG_TS_DEGREE} 23.5 {WEB_MSG_TRV_MANUAL} {WEB_MSG_TRV_SETPOINT} 22.0", "sid": "ZS:8e9501", "su": 1, "alarm_status": "", "status_ex": "0"},

{"area": 1, "zone": 27, "type": 79, "type_f": "{D_TYPE_79}", "name": "HeizBadFenster",  "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": "TRV_00.00.03.02TC",  "hue": "-1", "sat": "-1",  "status": "{WEB_MSG_TS_DEGREE} 22.0 {WEB_MSG_TRV_AUTO} {WEB_MSG_TRV_SETPOINT} 23.0", "sid": "ZS:57df01", "su": 1, "alarm_status": "", "status_ex": "0"}


Schonmal Danke.

LG Peter

elektrikpe2

Hallo,

habe mich heute mal an die Regex für meine Zwecke gemacht. Rausgekommen ist das:


attr Temperatur_Sensoren reading01Name BadIstTemp
attr Temperatur_Sensoren reading01Regex (HeizBadFenster)+.*({WEB_MSG_TS_DEGREE)\}\t([^ }]*)
attr Temperatur_Sensoren reading02Name BadSollTemp
attr Temperatur_Sensoren reading02Regex
(HeizBadFenster)+.*({WEB_MSG_TRV_SETPOINT)\}\t([^ "]*)


Ich habe aber Probleme mit dem Httmod (s.o). Gebe ich den Befehl in den Browser ein bekomme ich einen JSON Error. Nehme ich die Rohdaten, um die regulären Ausdrücke in regex zu checken bekomme ich je nach Anbieter auch unterschiedliche Werte zurückgeliefert. Mit den Rohdaten funktionieren die Regex. Evtl. müssten meine Fragen in den HTTMOD Thread. Aber hier ist bestimmt auch jemand, der Bescheid weiß



elektrikpe2

Hallo, ich schon wieder, aber ein Stück weiter. Der HTTPMOD funktioniert jetzt. Er ging nicht, weil der reg. Ausdruck, den ich vorher erstellt hatte, keine Antwort brachte. Jetzt habe ich den abgeändert und es kommt jetzt auch ein Wert attr OG_Temperaturen reading01Regex DEGREE\}\t([^ }]*)
attr OG_Temperaturen reading01Name IstTemp

In der Aufgabenstellung habe ich 4 Thermostate die mir die Werte aus Lupusec liefern. Teste ich den reg. Ausdruck mit den Online regexe Tester bekomme ich natürlich immer die 4 Temperaturwerte der 4 Thermostate. Jetzt hänge ich wieder im Verständnisproblem, wie ich das in FHEM abbilde. Der reg.Ausdruck bringt mir immer nur den ersten Wert. Bitte um Hilfe.

elektrikpe2

#33
Hallo,

habe mal weitergearbeitet und bin jetzt für mein Problem zu einer Lösung gekommen und falls jemand das auch benötigt stelle ich die hier ein. Zunächst lass ich mir per Action-URL von der Lupusec die Zustände senden. Hat den Vorteil, dass die nur kommen, wenn sich auch was auf der Alarmanlage tut.

Für die Werte der Thermostate mache ich einen HTTPMOD und lese mittels regex aus. Habe mich dazu etwas mit regex befasst und über das Forum herausgefunden, wie man modifier für einen regex syntaktisch dazufügt. Ob das regex jetzt wirklich sehr elegant ist, kann ich noch nicht einmal sagen, aber es holt aus dem entsprechenden Thermostat die Ist- und Sollwerte. Ich hatte beim regex das Problem, dass immer ein Wert am Ende der Gesamt-Device-List abgeholt wurde. Um dies einzugrenzen musste ich mit der "sid" string-Suche in dem jeweiligen Gerät (hier das Thermostat) den regex abschließen. Leider kann man im Moment den Modifier "g" nicht setzen. Hierbei wäre der regexe etwas einfacher gewesen. Bei den readings ist dann immer im *Tmp-3 der Wert, den ich brauche. Für den regex brauchte ich zwingend Modifier "s". Übrigens konnte ich mit dem regex von Kenneth meine XT2 plus nicht mehr auslesen, da sich der gesamte Inhalt der Device-List der XT2 plus anders darstellte (Ausschnitt der device-List einige Antworten vorher). Hier also meine Lösung:

define OG_Temperaturen HTTPMOD http://user:password@xxx.xxx.xxx.xx/action/deviceListGet 3600

attr OG_Temperaturen userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex

attr OG_Temperaturen enableControlSet 1

attr OG_Temperaturen event-on-change-reading BadIstTemp, BadSollTemp, MTIstTemp, MTSollTemp, NoahIstTemp, NoahSollTemp

attr OG_Temperaturen reading01Name BadIstTemp
attr OG_Temperaturen reading01Regex (?s)(HeizBadFenster)+.*({WEB_MSG_TS_DEGREE})([^ }]*) +.*("sid": "ZS:57df01)
attr OG_Temperaturen reading02Name BadSollTemp
attr OG_Temperaturen reading02Regex
(?s)(HeizBadFenster)+.*({WEB_MSG_TRV_SETPOINT})([^ ]*) +.*("sid": "ZS:57df01)
attr OG_Temperaturen reading03Name MTIstTemp
attr OG_Temperaturen reading03Regex (?s)(HeizMT)+.*({WEB_MSG_TS_DEGREE})([^ }]*) +.*("sid": "ZS:8e9501)
attr OG_Temperaturen reading04Name MTSollTemp
attr OG_Temperaturen reading04Regex (?s)(HeizMT)+.*({WEB_MSG_TRV_SETPOINT})([^ ]*) +.*("sid": "ZS:8e9501)
attr OG_Temperaturen reading05Name NoahIstTemp
attr OG_Temperaturen reading05Regex (?s)(HeizNoah)+.*({WEB_MSG_TS_DEGREE})([^ }]*) +.*("sid": "ZS:d3ae01)
attr OG_Temperaturen reading06Name NoahSollTemp
attr OG_Temperaturen reading06Regex (?s)(HeizNoah)+.*({WEB_MSG_TRV_SETPOINT})([^ ]*) +.*("sid": "ZS:d3ae01)


Die Readings dazu:
READINGS:
     2018-01-24 13:13:53   BadIstTemp-1    HeizBadFenster
     2018-01-24 13:13:53   BadIstTemp-2    {WEB_MSG_TS_DEGREE}
     2018-01-24 13:13:53   BadIstTemp-3    22.5
     2018-01-24 13:13:53   BadIstTemp-4    "sid": "ZS:57df01
     2018-01-24 13:13:53   BadSollTemp-1   HeizBadFenster
     2018-01-24 13:13:53   BadSollTemp-2   {WEB_MSG_TRV_SETPOINT}
     2018-01-24 13:13:53   BadSollTemp-3    19.0",
     2018-01-24 13:13:53   BadSollTemp-4   "sid": "ZS:57df01
     2018-01-24 13:13:53   MTIstTemp-1     HeizMT
     2018-01-24 13:13:53   MTIstTemp-2     {WEB_MSG_TS_DEGREE}
     2018-01-24 13:13:53   MTIstTemp-3      22.0
     2018-01-24 13:13:53   MTIstTemp-4     "sid": "ZS:8e9501
     2018-01-24 13:13:53   MTSollTemp-1    HeizMT
     2018-01-24 13:13:53   MTSollTemp-2    {WEB_MSG_TRV_SETPOINT}
     2018-01-24 13:13:53   MTSollTemp-3    22.0",
     2018-01-24 13:13:53   MTSollTemp-4    "sid": "ZS:8e9501
     2018-01-24 13:13:53   NoahIstTemp-1   HeizNoah
     2018-01-24 13:13:53   NoahIstTemp-2   {WEB_MSG_TS_DEGREE}
     2018-01-24 13:13:53   NoahIstTemp-3    19.5
     2018-01-24 13:13:53   NoahIstTemp-4   "sid": "ZS:d3ae01
     2018-01-24 13:13:53   NoahSollTemp-1  HeizNoah
     2018-01-24 13:13:53   NoahSollTemp-2  {WEB_MSG_TRV_SETPOINT}
     2018-01-24 13:13:53   NoahSollTemp-3  18.5",
     2018-01-24 13:13:53   NoahSollTemp-4  "sid": "ZS:d3ae01


So jetzt geht es an einen DOIF mit sunset/sunrise und was weiß ich noch für Zeiten um bei Alarm alle Rollos hochzufahren und Lichter anzumachen und bei Abschaltung des Alarms wieder alles zurück. Die einfache Form (also immer hoch/an) funktioniert schon.

VG Peter

elektrikpe2

#34
Es endet nun hier. Dank der Hilfe zum Thema Modifier dem Regex mitgeben habe ich nun doch zur einfacheren Lösung gefunden.
Zitathttps://forum.fhem.de/index.php/topic,83205.msg754658.html#msg754658
. Den "g" Modifier muss mit dem attr readingXXRegOpt mitgegeben werden. So habe ich nun meine elegante Lösung:
attr OG_Temperaturen userattr reading01Name reading01Regex reading02Name reading02Regex
attr OG_Temperaturen reading01Name IstTemp
attr OG_Temperaturen reading01RegOpt g
attr OG_Temperaturen reading01Regex DEGREE}([^ }]*)
attr OG_Temperaturen reading02Name SollTemp
attr OG_Temperaturen reading02RegOpt g
attr OG_Temperaturen reading02Regex SETPOINT}([^ "]*)


Die Readings: 2018-01-24 14:57:40   IstTemp-1        22.5
     2018-01-24 14:57:40   IstTemp-2        22.25
     2018-01-24 14:57:40   IstTemp-3        19.25
     2018-01-24 14:57:40   IstTemp-4        22.75


Ich hoffe das wars. VG Peter

Herry-77

Hallo

ich versuche gerade ebenfalls die Sensorliste meine XT1 per HTTPMOD auszulesen und hab mal eine grundsätzliche Anfängerfrage.

Wie stelle ich den Output meines HTTPMOD da um dann die Readings mit Name und RegEx zu erstellen?
1.
Der HTTPMOD ist eingerichtet und hat auch Verbindung.

define XT1_sensorlist HTTPMOD http://user:pw@MeneIP/action/sensorListGet 60

2.
Wie bekomme ich aber nun die Ausgabe wie hier im Beispiel von Gerd zu sehen ist.


/*-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"}]
}
*/



3.
Jetzt würde ich gerne eine Reading erstellen was mir zum Beispiel den Zustand (cond :) vom No13 Türkontakt  anzeigt.




Jochen1977

Hallo,

ich hatte auch die XT1 im Einsatz und war somit nicht in der Lage mit Action URL zu arbeiten. Diese Zentrale ist seitens Lupus nun durch die neue XT1 plus ersetzt worden und diese kann Action URLs.

Ohne hier Werbung treiben zu wollen ein Hinweis an die XT1 Besitzer: Es gibt gerade eine Austauschaktion von Lupus. Bei Rückgabe der XT1 bekommt man die XT1plus zum Sonderpreis. Evtl. hilft das dem Einen oder Anderen hier.

Gruß Jochen