Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. LUPUSEC Alarmanlage einbinden

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    LUPUSEC Alarmanlage einbinden

    This topic has been deleted. Only users with topic management privileges can see it.
    • Schubi
      Schubi last edited by Schubi

      Ich arbeite gerade daran den Status der Sensoren einer LUPUSEC XT2Plus Alarmanalge in iOBroker zu erfassen.

      Die wesentlichen Schritte habe ich bereits erledigt. Da ich aber in Javascript null Ahnung habe ist die Fertigstellung

      ein schwieriges Unterfangen.

      Daher bitte ich euch um Mithilfe. - Vielleicht könnte daraus auch mal ein Adaper entstehen.

      Zuerst mal zum Ablauf:

      Meines Wissens gibt es keine Möglichkeit seitens Lupusec die Statusänderungen der Sensoren direkt (live) an ein anderes System weiterzuleiten.

      Daher habe ich folgende Möglichkeit gefunden:

      Über die URL: http://192.168.0.xxx/action/deviceListGet kann man den Status aller am System angeschlossenen Geräte ermitteln.

      Nun könnte man alle x-Sekunden eine Abfrage auslösen - damit verpasst man aber kurzfristige Änderungen und erhöht unnötig den Traffic.

      Man kann aber, sobald sich der Status eines Sensors ändert in der Lupusec eine sog. Action-URL aufrufen.

      Die habe ich so definiert, dass bei jedem Öffnen/Schließen folgende URL aufgerufen wird:

      http://192.168.0.xxx:1880/StateChange?value=1 (wird in Node-Red verarbeitet)

      Wen jemand Interesse daran hat wie man das auf der Lupusec einrichtet dann kann ich das noch genauer beschreiben!

      Das funktioniert auch wunderbar - dann habe ich in Node-Red die oben erwähnte URL aufgerufen und die aktuellen Zustände abgefragt.

      In meinem Node-Red Node komme ich bis zu diesem Punkt (Es muss noch ein wenig an dem String manipuliert werden, aber dann bekomme ich ein JSON-Objekt in Node-Red)

      Das Ergebnis noch ohne Änderungen direkt von Lupusec bei mir:

      {
        "senrows": [
      {"area": 1, "zone": 7, "type": 37, "type_f": "{D_TYPE_37}", "name": "Keypad", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_NA}", 
      "resp_mode": [0,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "", "sid": "RF:00352770", "su": 0, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 21, "type": 46, "type_f": "{D_TYPE_46}", "name": "Außensirene", 
      "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:006a9cb0", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 5, "type": 4, "type_f": "{D_TYPE_4}", "name": "K_Terrasse", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG}	6", 
      "resp_mode": [97,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01c70c10", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 17, "type": 4, "type_f": "{D_TYPE_4}", "name": "E_WZ-Wagsi", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG}	9", 
      "resp_mode": [3,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01c93b10", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 16, "type": 4, "type_f": "{D_TYPE_4}", "name": "E_Türe-Teich", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG}	9", 
      "resp_mode": [3,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01cc0b10", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 12, "type": 4, "type_f": "{D_TYPE_4}", "name": "E_Küche-Ibsi", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG}	9", 
      "resp_mode": [3,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01cc5410", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 14, "type": 4, "type_f": "{D_TYPE_4}", "name": "E_WZ-Ibsi", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG}	9", 
      "resp_mode": [3,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01cd5010", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 13, "type": 4, "type_f": "{D_TYPE_4}", "name": "E_Küche-Straße", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG}	9", 
      "resp_mode": [3,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01cdab10", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 2, "type": 4, "type_f": "{D_TYPE_4}", "name": "K_Eingang", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG}	6", 
      "resp_mode": [3,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01ce2210", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 6, "type": 4, "type_f": "{D_TYPE_4}", "name": "K_Werkbank", 
      "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,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01ceb310", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 4, "type": 4, "type_f": "{D_TYPE_4}", "name": "K_Fitness", 
      "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,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01ceca10", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 15, "type": 4, "type_f": "{D_TYPE_4}", "name": "E_Türe-Terrasse", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG}	7", 
      "resp_mode": [3,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01cee610", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 3, "type": 4, "type_f": "{D_TYPE_4}", "name": "K_Heizraum", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_GOOD}	5", 
      "resp_mode": [97,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01d46210", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 20, "type": 4, "type_f": "{D_TYPE_4}", "name": "E_Eingang", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG}	9", 
      "resp_mode": [0,1,1,1,1,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01d47d10", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 18, "type": 4, "type_f": "{D_TYPE_4}", "name": "E_WZ_Garten", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG}	9", 
      "resp_mode": [3,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01ea0010", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 1, "type": 4, "type_f": "{D_TYPE_4}", "name": "K_Waschküche", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_WEAK}	3", 
      "resp_mode": [97,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01ea1a10", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 19, "type": 4, "type_f": "{D_TYPE_4}", "name": "E_Klo", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG}	9", 
      "resp_mode": [3,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:01ea6010", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 8, "type": 9, "type_f": "{D_TYPE_9}", "name": "E_Vorzimmer", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG}	9", 
      "resp_mode": [0,4,4,4,4,0], "ammeter": "0", "ver": "", 
      "status": "", "sid": "RF:02febe30", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 11, "type": 4, "type_f": "{D_TYPE_4}", "name": "E_Glasbruch", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG}	9", 
      "resp_mode": [3,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "{WEB_MSG_DC_CLOSE}", "sid": "RF:673a0510", "su": 1, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 9, "type": 16, "type_f": "{D_TYPE_16}", "name": "", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_NA}", 
      "resp_mode": [0,5,5,5,5,0], "ammeter": "0", "ver": "", 
      "status": "", "sid": "RF:6e09d570", "su": 0, "alarm_status": "", "status_ex": "0"},
      {"area": 1, "zone": 10, "type": 2, "type_f": "{D_TYPE_2}", "name": "", 
      "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1", 
      "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_NA}", 
      "resp_mode": [0,0,0,0,0,0], "ammeter": "0", "ver": "", 
      "status": "", "sid": "RF:e2420300", "su": 0, "alarm_status": "", "status_ex": "0"}]
      }
      
      

      Ich habe es in Node-Red mittlerweilen geschafft auf die einzelnen Objekt/Variablen zugreifen zu können:

      (bis zum JSON-Node ist es noch sinnvoll - dann Müll :-))

      `[
          {
              "id": "ed82466e.73d74",
              "type": "debug",
              "z": "ac4d2b3b.cf9c48",
              "name": "",
              "active": false,
              "console": "false",
              "complete": "false",
              "x": 649,
              "y": 201,
              "wires": []
          },
          {
              "id": "4b4f602.be9552",
              "type": "http in",
              "z": "ac4d2b3b.cf9c48",
              "name": "StateChange",
              "url": "/StateChange",
              "method": "get",
              "swaggerDoc": "",
              "x": 160,
              "y": 105,
              "wires": [
                  [
                      "ed82466e.73d74",
                      "e4844154.287208",
                      "2056fc56.0d3e74"
                  ]
              ]
          },
          {
              "id": "e4844154.287208",
              "type": "http response",
              "z": "ac4d2b3b.cf9c48",
              "name": "OK",
              "x": 575,
              "y": 97,
              "wires": []
          },
          {
              "id": "ba5a2910.37104",
              "type": "debug",
              "z": "ac4d2b3b.cf9c48",
              "name": "",
              "active": true,
              "console": "false",
              "complete": "payload",
              "x": 1136,
              "y": 346.7054138183594,
              "wires": []
          },
          {
              "id": "2056fc56.0d3e74",
              "type": "http request",
              "z": "ac4d2b3b.cf9c48",
              "name": "Lupusec",
              "method": "GET",
              "ret": "txt",
              "url": "http://LOGIN:PASSWORD@192.168.0.248/action/deviceListGet",
              "tls": "",
              "x": 339.00006103515625,
              "y": 414.87206268310547,
              "wires": [
                  [
                      "3fa0d4fd.d9cd1c"
                  ]
              ]
          },
          {
              "id": "db9b3cae.775c8",
              "type": "inject",
              "z": "ac4d2b3b.cf9c48",
              "name": "",
              "topic": "",
              "payload": "",
              "payloadType": "date",
              "repeat": "",
              "crontab": "",
              "once": false,
              "x": 159.00006103515625,
              "y": 425.23873138427734,
              "wires": [
                  [
                      "2056fc56.0d3e74"
                  ]
              ]
          },
          {
              "id": "644968d2.709558",
              "type": "json",
              "z": "ac4d2b3b.cf9c48",
              "name": "",
              "x": 532.0000305175781,
              "y": 412.02208709716797,
              "wires": [
                  [
                      "444300f2.921b88",
                      "a97785be.999bb"
                  ]
              ]
          },
          {
              "id": "3fa0d4fd.d9cd1c",
              "type": "function",
              "z": "ac4d2b3b.cf9c48",
              "name": "Remove_TAB",
              "func": "var re = /\\t/g;\nmsg.payload = msg.payload.toString().replace(re, \"\");\nmsg.payload = msg.payload.toString().slice(0, - 1);\nreturn msg;",
              "outputs": 1,
              "noerr": 0,
              "x": 355.0000305175781,
              "y": 529.4220504760742,
              "wires": [
                  [
                      "644968d2.709558"
                  ]
              ]
          },
          {
              "id": "444300f2.921b88",
              "type": "function",
              "z": "ac4d2b3b.cf9c48",
              "name": "",
              "func": "var outputMsgs = [];\nvar Objekte = msg.payload.senrows.length\nvar newMsg = { payload: msg.payload.senrows.length};\n// msg.payload = msg.payload['senrows'][5]['name'];\n//outputMsgs[0]= msg.payload['senrows'][5]['name'];\n//outputMsgs[1]= msg.payload['senrows'][6]['name'];\n//outputMsgs[2]= msg.payload['senrows'][7]['name'];\n//outputMsgs.push({payload:(msg.payload['senrows'][5]['name'])});\n//outputMsgs.push({payload:(msg.payload['senrows'][6]['name'])});\n//return Elemente;\nfor (i =0 ; i< Objekte;i++) {\n    outputMsgs[i]={ payload:msg.payload.senrows[i].name};\n}\n\nreturn outputMsgs;\n\n//",
              "outputs": "30",
              "noerr": 0,
              "x": 858,
              "y": 502.3054733276367,
              "wires": [
                  [
                      "ba5a2910.37104",
                      "95c1028.31386"
                  ],
                  [
                      "c71ed8b9.814748"
                  ],
                  [
                      "bc7059ae.d7342"
                  ],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  [],
                  []
              ]
          },
          {
              "id": "a97785be.999bb",
              "type": "debug",
              "z": "ac4d2b3b.cf9c48",
              "name": "",
              "active": false,
              "console": "false",
              "complete": "false",
              "x": 708.171630859375,
              "y": 369,
              "wires": []
          },
          {
              "id": "bc7059ae.d7342",
              "type": "debug",
              "z": "ac4d2b3b.cf9c48",
              "name": "",
              "active": true,
              "console": "false",
              "complete": "payload",
              "x": 1140,
              "y": 393,
              "wires": []
          },
          {
              "id": "95c1028.31386",
              "type": "ioBroker out",
              "z": "ac4d2b3b.cf9c48",
              "name": "Bezeichnung",
              "topic": "Lupusec/A",
              "ack": "true",
              "autoCreate": "true",
              "x": 1142,
              "y": 243,
              "wires": []
          },
          {
              "id": "c71ed8b9.814748",
              "type": "ioBroker out",
              "z": "ac4d2b3b.cf9c48",
              "name": "Bezeichnung",
              "topic": "Lupusec/B",
              "ack": "true",
              "autoCreate": "true",
              "x": 1144,
              "y": 299,
              "wires": []
          }
      ]`
      Nun bin ich aber am Ende - wie kann ich die Daten sinvoll weiterverarbeiten?
      
      Die Struktur ist ja bereits im JSON-Objekt vorhanden - ich schaffe es nicht dies sinnvoll/effizient in iOBroker abzubilden.
      
      Bitte um eure Hilfe
      
      LG Schubi.[/i][/i]
      
      H 1 Reply Last reply Reply Quote 0
      • Stuebi
        Stuebi last edited by

        Vielleicht hilft Dir folgendes JavaScript in ioBroker unten. Damit lese ich regelemäßig den Status der Lupusec XT2 Plus aus. Wenn Du es erstmalig startest werden verschieden Objkete unter javascript.0.lupusec. angelegt die Du dann abfragen kannst.

        ! ```
        `var instanz = 'javascript.0.';
        var request = require('request');
        ! // *******************************************************************************
        // Folgende Variablen anpassen
        // *******************************************************************************
        var ipLupusec = "https://192.168.x.y"; // IP Adresse oder Hostname von der Lupusec XT2
        var username = "user"; // Lupusec Benutzername (Admin Benutzer)
        var password = "xxxxx"; // Lupusec Passwort
        var pollSec = 10; // Alle x Sekunden Status bei der Alarmanlage abfragen
        ! // *******************************************************************************
        // Sonstige Variablen
        // *******************************************************************************
        var urlDeviceList = ipLupusec + "/action/deviceListGet";
        var urlDevicePSSList = ipLupusec + "/action/deviceListPSSGet";
        var urlPanelCond = ipLupusec + "/action/panelCondGet";
        var urlDeviceSwitch = ipLupusec + "/action/deviceSwitchPSSPost";
        var urlPanelCondPost = ipLupusec + "/action/panelCondPost";
        ! var auth = "Basic " + new Buffer(username + ":" + password).toString("base64");
        ! // *******************************************************************************
        // Sonderzeichen, wie tabs, LF etc. aus String entfernen
        // *******************************************************************************
        function delSonderzeichen(text) {

            text =  text.replace(/\r/g,'');
            text =  text.replace(/\n/g,'');
            text =  text.replace(/\t/g,' ');
            text =  text.replace(/\f/g,'');
            return text;  
        

        }

        ! // *******************************************************************************
        // Liefert den Zustand der Lupusec Zentrale
        // *******************************************************************************
        function lupusPanelCondGet() {

        if (lupusPanelCondGet.running === undefined) {  lupusPanelCondGet.running = false; }
        
        function parse(body) {
        
            body =  delSonderzeichen(body);
            var j = JSON.parse(body);
        
            var updates = j.updates;
            Object.keys(updates).forEach(function(key) {
        
                var id        = "lupusec.panelcond." + "updates." + key;
                var value     = updates[key];
                var type      =  typeof value;
        
                if(getState(id).notExist === true) {
        
                    log("Create State: " + id + " (" + value + ")");
        
                    createState(id, value, {
                        name: '',
                        desc: '',
                        role: 'state',
                        type: type
                    });
        
                } else {
        
                    // log("Id: " + id + " (" + value +")");
                    if(getState(id).val != value) {  setState(id, value, true); }
                    // setState(id, value, true); 
        
                }
        
            });
        
            var forms = j.forms;
            Object.keys(forms.pcondform1).forEach(function(key) {
        
                var id        = "lupusec.panelcond." + "forms.pcondform1." + key;                
                var value     = forms.pcondform1[key];
                var type      =  typeof value;
        
                if(getState(id).notExist === true) {
        
                    log("Create State: " + id + " (" + value + ")");
        
                    createState(id, value, {
                        name: '',
                        desc: '',
                        role: 'state',
                        type: type
                    });
        
                } else {
        
                    // log("Id: " + id + " (" + value +")");
                    if(getState(id).val != value) {  setState(id, value, true); }
                    // setState(id, value, true); 
        
                }
        
            });
        
             Object.keys(forms.pcondform2).forEach(function(key) {
        
                var id        = "lupusec.panelcond." + "forms.pcondform2." + key;                
                var value     = forms.pcondform2[key];
                var type      =  typeof value;
        
                if(getState(id).notExist === true) {
        
                    log("Create State: " + id + " (" + value + ")");
        
                    createState(id, value, {
                        name: '',
                        desc: '',
                        role: 'state',
                        type: type
                    });
        
                } else {
        
                    // log("Id: " + id + " (" + value +")");
                    if(getState(id).val != value) {  setState(id, value, true); }
                    // setState(id, value, true); 
        
                }
        
            });
        
        }
        

        !
        function getRequest() {

            if(lupusPanelCondGet.running === false) {
        
                lupusPanelCondGet.running = true;
        

        ! request({ url : urlPanelCond,
        rejectUnauthorized: false,
        headers : { "Authorization" : auth }
        },
        function (error, response, body) {
        // log("Starting funciton lupusPanelCondGet");
        if(error) {
        log("Fehler in funciton lupusPanelCondGet: " + error);
        } else if(body) {
        parse(body);
        }
        });
        ! lupusPanelCondGet.running = false;

            }
        
        }
        
        getRequest();
        

        }

        ! // *******************************************************************************
        // Liefert eine Liste aller angelernten Funkschalter / Aktoren der Lupusec Zentrale
        // *******************************************************************************
        function lupusecDeviceListPSSGet() {

        if (lupusecDeviceListPSSGet.running === undefined) {  lupusecDeviceListPSSGet.running = false; }
        
        function parse(body) {
        
            body =  delSonderzeichen(body);
            var j = JSON.parse(body).pssrows;
        
            for(var i=0; i < j.length; i++) {
        
                var sensor = j[i];
        
                Object.keys(sensor).forEach(function(key) {
        
                    var id        = "lupusec.devicelist.area" + sensor.area + ".zone" + sensor.zone + "." + key;
                    var value     = sensor[key];
                    var type      =  typeof value;
        
                    if(getState(id).notExist === true) {
        
                        log("Create State: " + id + " (" + value + ")");
        
                        createState(id, value, {
                            name: sensor.name + " " + key,
                            desc: '',
                            role: 'state',
                            type: type
                        });
        
                    } else {
        
                        // Um den Zustand resp_mode müssen wir uns noch kümmern
                        if(key != "resp_mode") { 
        
                            // log("Id: " + id + " (" + value +")");
                            if(getState(id).val != value) {  setState(id, value, true); }
                            // setState(id, value, true); 
        
                        }
        
                    }
        
                });
        
            }
        
        }
        
        function getRequest() {
        
            if(lupusecDeviceListPSSGet.running === false) {
        
                lupusecDeviceListPSSGet.running = true;
        

        ! request({ url : urlDevicePSSList,
        rejectUnauthorized: false,
        headers : { "Authorization" : auth }
        },
        function (error, response, body) {
        // log("Starting funciton lupusecDeviceListGet");
        if(error) {
        log("Fehler in funciton lupusecDeviceListGet: " + error);
        } else if(body) {
        parse(body);
        }
        });
        ! lupusecDeviceListPSSGet.running = false;

            }
        
        }
        
        getRequest();
        

        }

        ! // *******************************************************************************
        // Liefert eine Liste aller Sensoren der Lupusec Zentrale
        // *******************************************************************************
        function lupusecDeviceListGet() {

        if (lupusecDeviceListGet.running === undefined) {  lupusecDeviceListGet.running = false; }
        
        function parse(body) {
        
            body =  delSonderzeichen(body);
            var j = JSON.parse(body).senrows;
        
            for(var i=0; i < j.length; i++) {
        
                var sensor = j[i];
        
                Object.keys(sensor).forEach(function(key) {
        
                    var id        = "lupusec.devicelist.area" + sensor.area + ".zone" + sensor.zone + "." + key;
                    var value     = sensor[key];
                    var type      =  typeof value;
        
                    if(getState(id).notExist === true) {
        
                        log("Create State: " + id + " (" + value + ")");
        
                        createState(id, value, {
                            name: sensor.name + " " + key,
                            desc: '',
                            role: 'state',
                            type: type
                        });
        
                    } else {
        
                        // Um den Zustand resp_mode müssen wir uns noch kümmern
                        if(key != "resp_mode") { 
        
                            // log("Id: " + id + " (" + value +")");
                            if(getState(id).val != value) {  setState(id, value, true); }
                            // setState(id, value, true); 
        
                        }
        
                    }
        
                });
        
            }
        
        }
        
        function getRequest() {
        
            if(lupusecDeviceListGet.running === false) {
        
                lupusecDeviceListGet.running = true;
        

        ! request({ url : urlDeviceList,
        rejectUnauthorized: false,
        headers : { "Authorization" : auth }
        },
        function (error, response, body) {
        // log("Starting funciton lupusecDeviceListGet");
        if(error) {
        log("Fehler in funciton lupusecDeviceListGet: " + error);
        } else if(body) {
        parse(body);
        }
        });
        ! lupusecDeviceListGet.running = false;

            }
        
        }
        
        getRequest();
        

        }

        ! // *******************************************************************************
        // Schaltet Steckdosen, Relais und Rolladenrelas der Lupusec
        // *******************************************************************************
        function lupusDeviceSwitchPost() {

        var selectorLupusecType =  $('state[state.id=javascript.0.lupusec.devicelist.*.zone*.id]');
        
        if (lupusDeviceSwitchPost.subcriber === undefined) {  lupusDeviceSwitchPost.subcriber = []; }
        
        function findNewSwitches() {
        
            selectorLupusecType.each(function(id,i) {
        
                var valueId     = getState(id).val;
                var idParent    = id.split(".").slice(0,-1).join(".");
                var idStatusEx  = idParent + ".status_ex";
                var idLevel     = idParent + ".level";
                var newEvent    = true;
        

        ! for (i=0; i<lupusdeviceswitchpost.subcriber.length; i++)/{/if(lupusdeviceswitchpost.subcriber[i]="=" idparent)/newevent="false;" }/if(newevent)/lupusdeviceswitchpost.subcriber.push(idparent);/subscribebyid(idstatusex);/subscribebyid(idlevel);/});/function/subscribebyid(id)/on({id:/id,/change:/'ne'},/(data)/var/value="data.state.val;" oldvalue="data.oldState.val;" lasttime="data.state.lc;" if(value/!="oldValue)" log("change/status/for/"/+/id);/idparent="id.split(".").slice(0,-1).join(".");" idsid="idParent" ".id";/valuesid="getState(idSid).val;" idlevel="idParent" ".level";/valuelevel="getState(idLevel).val;" idswitch="idParent" ".status_ex";/valueswitch="getState(idSwitch).val;" request.post({/url/:/urldeviceswitch,/rejectunauthorized:/false,/headers/"authorization"/auth/},/form/id:/valuesid,/switch:/valueswitch,/level:/(error,/response,/body)/if(error)/log("fehler/in/funciton/lupuspanelcondget:/error);/else/if(body)/findnewswitches();/****************************************************************************/schaltet/zustände/der/zentrale/lupusec/lupuspanelcondpost()/if/(lupuspanelcondpost.subscriber="==" undefined)/lupuspanelcondpost.subcriber="false;" findnewswitches()/if(lupuspanelcondpost.subcriber="==" false)/subscribebyid("javascript.0.lupusec.panelcond.forms.pcondform1.mode");/subscribebyid("javascript.0.lupusec.panelcond.forms.pcondform2.mode");/area="idParent.substr(idParent.length-1,1);" to/area);/urlpanelcondpost,/area:/area,/mode:/log("starting/lupuspanelcondget");/log(body);/);/start/aller/komponenten/start()/lupusecdevicelistget();/lupusecdevicelistpssget();/lupuspanelcondget();/lupusdeviceswitchpost();/lupuspanelcondpost();/alle/x/sekunden/sensoren/auslesen/schedule("/pollsec//",/()/start();/<e=""></lupusdeviceswitchpost.subcriber.length;>`[/i][/i][/i]

        1 Reply Last reply Reply Quote 0
        • Schubi
          Schubi last edited by

          Super! 😄

          Tausend Dank!!!

          Objekte wurden angelegt - jetzt muss ich mal sehen was da alles steht.

          Hab im Moment leider nicht viel Zeit - schaut aber sehr sehr brauchbar aus.

          LG Schubi

          1 Reply Last reply Reply Quote 0
          • Stuebi
            Stuebi last edited by

            Um s.g. Cross-Site-Request-Forgery Attacken entgegen zu wirken, müssen auf der Lupusec XT 2 Plus mit Firmware 0.0.2.19E jetzt bei einem Post-Befehl im Header als Headerfield "X-Token" ein Token gesendet werden. Das Token erhält man mit der API /action/tokenGet . Ich habe das Lupusec Skript deshalb angepasst.

            ! ```
            `// *******************************************************************************
            // Beschreibung: Skript und die Lupusec Geräte anzuglegen und diese in
            // regelmäßigen auszulesen. Weiterhin kann die Alarmanlage und
            // die Steckdosen geschaltet werden
            // Voraussetzung, Firmware 0.0.2.19E
            //
            // Version: 1.1 (Abfrage von Token für Post APIs)
            //
            // *******************************************************************************
            ! var instanz = 'javascript.0.';
            var request = require('request');
            ! // *******************************************************************************
            // Folgende Variablen anpassen
            // *******************************************************************************
            var ipLupusec = "https://192.168.x.y"; // IP Adresse oder Hostname von der Lupusec XT2
            var username = "user"; // Lupusec Benutzer
            var password = "xxxxx!"; // Lupusec Passwort
            var pollSec = 10; // Alle x Sekunden Status bei der Alarmanlage abfragen
            ! // *******************************************************************************
            // Sonstige Variablen
            // *******************************************************************************
            var urlDeviceList = ipLupusec + "/action/deviceListGet";
            var urlDevicePSSList = ipLupusec + "/action/deviceListPSSGet";
            var urlPanelCond = ipLupusec + "/action/panelCondGet";
            var urlDeviceSwitch = ipLupusec + "/action/deviceSwitchPSSPost";
            var urlPanelCondPost = ipLupusec + "/action/panelCondPost";
            var urlTokenGet = ipLupusec + "/action/tokenGet";
            ! var auth = "Basic " + new Buffer(username + ":" + password).toString("base64");
            var debug = false;
            ! // *******************************************************************************
            // sind die Strings a und b identisch
            // *******************************************************************************
            function logging(text, deb = false) {

            if(deb === true) {
            
                if(debug === true) { console.log("Debug: " + text) }
            
            } else {
            
                console.log(text);
            
            }
            

            }

            ! // *******************************************************************************
            // sind die Strings a und b identisch
            // *******************************************************************************
            function aContainsB (a, b) {
            return a.toLowerCase().indexOf(b.toLowerCase()) >= 0;
            }
            ! // *******************************************************************************
            // Neues Objekt anlegen wenn nicht vorhanden
            // *******************************************************************************
            function newStat(id, type, value) {

            if(getState(id).notExist === true) {
            
                createState(id, value, {
                    name: '',
                    desc: '',
                    role: 'state',
                    type: type
                });
            
            }
            

            }

            ! // *******************************************************************************
            // Sonderzeichen, wie tabs, LF etc. aus String entfernen
            // *******************************************************************************
            function delSonderzeichen(text) {

                text =  text.replace(/\r/g,'');
                text =  text.replace(/\n/g,'');
                text =  text.replace(/\t/g,' ');
                text =  text.replace(/\f/g,'');
                return text;  
            

            }

            ! // *******************************************************************************
            // Liefert den Zustand der Lupusec Zentrale
            // *******************************************************************************
            function lupusPanelCondGet() {

            if (lupusPanelCondGet.running === undefined) {  lupusPanelCondGet.running = false; }
            
            function parse(body) {
            
                logging("Starting Parsing in lupusPanelCondGet", true);
            
                body =  delSonderzeichen(body);
                logging("lupusPanelCondGet : " + body,true);
                 try {
                    var j = JSON.parse(body);
                } catch(e) {
                    console.error("lupusPanelCondGet : " + e); // error in the above string (in this case, yes)!
                    return;
                }
                logging("lupusPanelCondGet (JSON.parse) : "  + JSON.stringify(j), true);
            
                var updates = j.updates;
                Object.keys(updates).forEach(function(key) {
            
                    var id        = "lupusec.panelcond." + "updates." + key;
                    var value     = updates[key];
                    var type      =  typeof value;
            
                    if(getState(id).notExist === true) {
            
                        logging("Create State: " + id + " (" + value + ")");
            
                        createState(id, value, {
                            name: '',
                            desc: '',
                            role: 'state',
                            type: type
                        });
            
                    } else {
            
                        // log("Id: " + id + " (" + value +")");
                        if(getState(id).val != value) {  setState(id, value, true); }
                        // setState(id, value, true); 
            
                    }
            
                });
            
                var forms = j.forms;
                Object.keys(forms.pcondform1).forEach(function(key) {
            
                    var id        = "lupusec.panelcond." + "forms.pcondform1." + key;                
                    var value     = forms.pcondform1[key];
                    var type      =  typeof value;
            
                    if(getState(id).notExist === true) {
            
                        logging("Create State: " + id + " (" + value + ")");
            
                        createState(id, value, {
                            name: '',
                            desc: '',
                            role: 'state',
                            type: type
                        });
            
                    } else {
            
                        // log("Id: " + id + " (" + value +")");
                        if(getState(id).val != value) {  setState(id, value, true); }
                        // setState(id, value, true); 
            
                    }
            
                });
            
                 Object.keys(forms.pcondform2).forEach(function(key) {
            
                    var id        = "lupusec.panelcond." + "forms.pcondform2." + key;                
                    var value     = forms.pcondform2[key];
                    var type      =  typeof value;
            
                    if(getState(id).notExist === true) {
            
                        logging("Create State: " + id + " (" + value + ")");
            
                        createState(id, value, {
                            name: '',
                            desc: '',
                            role: 'state',
                            type: type
                        });
            
                    } else {
            
                        // log("Id: " + id + " (" + value +")");
                        if(getState(id).val != value) {  setState(id, value, true); }
                        // setState(id, value, true); 
            
                    }
            
                });
            
            }
            

            !
            function getRequest() {

                if(lupusPanelCondGet.running === false) {
            
                    logging("Starting Request in lupusPanelCondGet", true);
            
                    lupusPanelCondGet.running = true;
            

            ! request({ url : urlPanelCond,
            rejectUnauthorized: false,
            headers : { "Authorization" : auth }
            },
            function (error, response, body) {
            // log("Starting funciton lupusPanelCondGet");
            if(error) {
            console.error("Fehler in funciton lupusPanelCondGet: " + error);
            } else if(body) {
            parse(body);
            }
            });
            ! lupusPanelCondGet.running = false;

                }
            
            }
            
            getRequest();
            

            }

            ! // *******************************************************************************
            // Lupusec Get Token for Post calls
            // *******************************************************************************
            function lupusecTokenGet(callback) {

            logging("Starting Request in lupusecTokenGet", true);

            ! lupusecTokenGet.running = true;
            ! request({ url : urlTokenGet,
            rejectUnauthorized: false,
            headers : { "Authorization" : auth }
            },
            function (error, response, body) {

                     if (error || response.statusCode !== 200) {
            
                        console.error("Fehler in funciton lupusecTokenGet: " + error);
                        return callback(error || {statusCode: response.statusCode});
            
                    } else if(body) {
            
                        body =  delSonderzeichen(body);
                        logging("lupusecTokenGet : " + body,true);
                         try {
                            var j = JSON.parse(body);
                        } catch(e) {
                            console.error("lupusecTokenGet : " + e); // error in the above string (in this case, yes)!
                            return;
                        }
                        logging("lupusecTokenGet (JSON.parse) : "  + JSON.stringify(j),true);
                        callback(null, j.message);  
            
                    }
            
            });
            

            ! }
            ! // *******************************************************************************
            // Liefert eine Liste aller angelernten Funkschalter / Aktoren der Lupusec Zentrale
            // *******************************************************************************
            function lupusecDeviceListPSSGet() {

            if (lupusecDeviceListPSSGet.running === undefined) {  lupusecDeviceListPSSGet.running = false; }
            
            function parse(body) {
            
                logging("Starting Parsing in lupusecDeviceListPSSGet", true);
            
                body =  delSonderzeichen(body);
                logging("lupusecDeviceListPSSGet : " + body,true);
                 try {
                    var j = JSON.parse(body).pssrows;
                } catch(e) {
                    console.error("lupusecDeviceListPSSGet : " + e); // error in the above string (in this case, yes)!
                    return;
                }
                logging("lupusecDeviceListPSSGet (JSON.parse) : "  + JSON.stringify(j), true);
            
                for(var i=0; i < j.length; i++) {
            
                    var sensor = j[i];
            
                    Object.keys(sensor).forEach(function(key) {
            
                        var id        = "lupusec.devicelist.area" + sensor.area + ".zone" + sensor.zone + "." + key;
                        var value     = sensor[key];
                        var type      =  typeof value;
            
                        if(getState(id).notExist === true) {
            
                            logging("Create State: " + id + " (" + value + ")");
            
                            createState(id, value, {
                                name: sensor.name + " " + key,
                                desc: '',
                                role: 'state',
                                type: type
                            });
            
                        } else {
            
                            // Um den Zustand resp_mode müssen wir uns noch kümmern
                            if(key != "resp_mode") { 
            
                                // log("Id: " + id + " (" + value +")");
                                if(getState(id).val != value) {  setState(id, value, true); }
                                // setState(id, value, true); 
            
                            }
            
                        }
            
                    });
            
                }
            
            }
            
            function getRequest() {
            
                if(lupusecDeviceListPSSGet.running === false) {
            
                    logging("Starting Request in lupusecDeviceListPSSGet", true);
            
                    lupusecDeviceListPSSGet.running = true;
            

            ! request({ url : urlDevicePSSList,
            rejectUnauthorized: false,
            headers : { "Authorization" : auth }
            },
            function (error, response, body) {
            // log("Starting funciton lupusecDeviceListGet");
            if(error) {
            console.error("Fehler in funciton lupusecDeviceListGet: " + error);
            } else if(body) {
            parse(body);
            }
            });
            ! lupusecDeviceListPSSGet.running = false;

                }
            
            }
            
            getRequest();
            

            }

            ! // *******************************************************************************
            // Liefert eine Liste aller Sensoren der Lupusec Zentrale
            // *******************************************************************************
            function lupusecDeviceListGet() {

            if (lupusecDeviceListGet.running === undefined) {  lupusecDeviceListGet.running = false; }
            
            function parse(body) {
            
                logging("Starting Parsing in lupusecDeviceListGet", true);
            
                body =  delSonderzeichen(body);
                logging("lupusecDeviceListGet : " + body,true);
                try {
                    var j = JSON.parse(body).senrows;
                } catch(e) {
                    console.error("lupusecDeviceListGet : " +  e); // error in the above string (in this case, yes)!
                    return;
                }
                logging("lupusecDeviceListGet (JSON.parse) : "  + JSON.stringify(j), true);
            
                for(var i=0; i < j.length; i++) {
            
                    var sensor = j[i];
            
                    Object.keys(sensor).forEach(function(key) {
            
                        var id        = "lupusec.devicelist.area" + sensor.area + ".zone" + sensor.zone + "." + key;
                        var value     = sensor[key];
                        var type      =  typeof value;
            
                        if(getState(id).notExist === true) {
            
                            log("Create State: " + id + " (" + value + ")");
            
                            createState(id, value, {
                                name: sensor.name + " " + key,
                                desc: '',
                                role: 'state',
                                type: type
                            });
            
                        } else {
            
                            // Um den Zustand resp_mode müssen wir uns noch kümmern
                            if(key != "resp_mode") { 
            
                                // log("Id: " + id + " (" + value +")");
                                if(getState(id).val != value) {  setState(id, value, true); }
                                // setState(id, value, true); 
            
                            }
            
                        }
            
                    });
            
                }
            
            }
            
            function getRequest() {
            
                if(lupusecDeviceListGet.running === false) {
            
                    logging("Starting Request in lupusecDeviceListGet", true);
            
                    lupusecDeviceListGet.running = true;
            

            ! request({ url : urlDeviceList,
            rejectUnauthorized: false,
            headers : { "Authorization" : auth }
            },
            function (error, response, body) {

                            if(error) {
                                console.error("Fehler in funciton lupusecDeviceListGet: " + error);
                            } else if(body) {
                                parse(body);
                            }
                    });
            

            ! lupusecDeviceListGet.running = false;

                }
            
            }
            
            getRequest();
            

            }

            ! // *******************************************************************************
            // Schaltet Steckdosen, Relais und Rolladenrelas der Lupusec
            // *******************************************************************************
            function lupusDeviceSwitchPost() {

            var selectorLupusecType =  $('state[state.id=javascript.0.lupusec.devicelist.*.zone*.id]');
            
            if (lupusDeviceSwitchPost.subcriber === undefined) {  lupusDeviceSwitchPost.subcriber = []; }
            
            function findNewSwitches() {
            
                logging("Starting find new switch in lupusDeviceSwitchPost", true);
            
                selectorLupusecType.each(function(id,i) {
            
                    var valueId     = getState(id).val;
                    var idParent    = id.split(".").slice(0,-1).join(".");
                    var idStatusEx  = idParent + ".status_ex";
                    var idLevel     = idParent + ".level";
                    var newEvent    = true;
            

            ! for (i=0; i<lupusdeviceswitchpost.subcriber.length; i++)/{/if(lupusdeviceswitchpost.subcriber[i]="=" idparent)/newevent="false;" }/if(newevent)/lupusdeviceswitchpost.subcriber.push(idparent);/subscribebyid(idstatusex);/subscribebyid(idlevel);/});/function/subscribebyid(id)/on({id:/id,/change:/'ne'},/(data)/var/value="data.state.val;" oldvalue="data.oldState.val;" lasttime="data.state.lc;" if(value/!="oldValue)" log("change/status/for/"/+/id);/idparent="id.split(".").slice(0,-1).join(".");" idsid="idParent" ".id";/valuesid="getState(idSid).val;" idlevel="idParent" ".level";/valuelevel="getState(idLevel).val;" idswitch="idParent" ".status_ex";/valueswitch="getState(idSwitch).val;" lupusectokenget(function(err,/token)/if/(!err)/request.post({/url/:/urldeviceswitch,/rejectunauthorized:/false,/headers/"authorization"/auth,/"x-token"/token/},/form/id:/valuesid,/switch:/valueswitch,/level:/(error,/response,/body)/if(error)/console.error("fehler/in/funciton/lupuspanelcondget:/error);/else/if(body)/findnewswitches();/****************************************************************************/schaltet/zustände/der/zentrale/lupusec/lupuspanelcondpost()/(lupuspanelcondpost.subscriber="==" undefined)/lupuspanelcondpost.subcriber="false;" findnewswitches()/logging("starting/find/new/switch/lupuspanelcondpost",/true);/if(lupuspanelcondpost.subcriber="==" false)/subscribebyid("javascript.0.lupusec.panelcond.forms.pcondform1.mode");/subscribebyid("javascript.0.lupusec.panelcond.forms.pcondform2.mode");/area="idParent.substr(idParent.length-1,1);" logging("lupuspanelcondpost:/change/to/area,/debug);/urlpanelcondpost,/area:/mode:/);/start/aller/komponenten/start()/lupusecdevicelistget();/lupusecdevicelistpssget();/lupuspanelcondget();/lupusdeviceswitchpost();/lupuspanelcondpost();/alle/x/sekunden/sensoren/auslesen/schedule("/pollsec//",/()/start();/<e=""></lupusdeviceswitchpost.subcriber.length;>`
            ! ~~[b]~~Bitte statt Script jetzt den Lupusec Adapter nutzen.[/b] ( https://github.com/schmupu/ioBroker.lupusec )[/i][/i][/i]

            1 Reply Last reply Reply Quote 0
            • T
              Tagiwara last edited by

              Hallo,

              für mich ein sehr interessantes Thema, da ich auch eine XT2 Plus im Einsatz habe. Toll wäre es wenn ich die Stati der Tür-/Fensterkontakte im IoBroker hätte und weiterverarbeiten könnte.

              Wo genau muss ich denn dein Script einfügen? Kannst du mir da kurz auf die Sprünge helfen?

              Vielen Dank

              Frank

              1 Reply Last reply Reply Quote 0
              • T
                Tagiwara last edited by

                mmmh, also ich habe das Script jetzt angepasst und gestartet. In den Objekten sind folgende Einträge hinzugekommen, allerdings leer.

                sh. Bild
                4855_bildschirmfoto_2018-03-11_um_20.55.18.jpg

                1 Reply Last reply Reply Quote 0
                • T
                  Tagiwara last edited by

                  ok, alles gut. Anscheinend ist ein Neustart de IoB notwendig. Hab ich gemacht und jetzt sehe ich meine Lupusec Sensoren auch unter den Objekten.

                  Das ist Very Nice 🙂

                  Ich bin schwer begeistert.

                  Gleich mal was rumexperimentieren 🙂

                  1 Reply Last reply Reply Quote 0
                  • T
                    Tagiwara last edited by

                    Jetzt brauche ich doch mal kurz eure Hilfe.

                    Ich wollte jetzt über ein Script meine Terrassenbeleuchtung einschalten, wenn ich meine Schiebetüre öffne.

                    An der Türe hägt ein Fensterkontakt. Wenn ich sie öffne, ändert sich der Wert "status_ex" auf "1", wenn ich sie schließe auf den Wert "0".

                    Wenn ich das richtig verstehe müsste der Wert 1 = unwahr und der Wert 0 = wahr sein.

                    Damit könnte man ja arbeiten.

                    Wenn ich jetzt folgendes Script mit Blockly schreibe, funktioniert es leider nicht.

                    Hab ich nen Denkfehler? Oder funktioniert es nur mit node red und nicht über die Cloud?

                    LG Frank
                    4855_unbenannt.jpg

                    1 Reply Last reply Reply Quote 0
                    • T
                      Tagiwara last edited by

                      Ich wäre wirklich dankbar für ein wenig Hilfe 🙂 Also mit Blockly geht es nicht, da ich hier nur "wahr" und "unwahr" angeben kann, der Datenpunkt beim Fensterkontakt aber nicht true/false auswirft, sondern 0=geschlossen und 1=offen.

                      Und mit Node Red komm ich auf keinen grünen Zweig. Da peile ich überhaupt nicht was ich wie machen muss. 😞

                      Hätte jemand Zeit mir da mal kurz nen Anstupser zu geben? GErne per PN, dann würde ich mal genau schildern was ich machen möchte.

                      LG

                      Frank

                      1 Reply Last reply Reply Quote 0
                      • Schubi
                        Schubi last edited by

                        Hab gerade nix zum testen - probier mal in diese Richtung (is nicht fertig und auch noch nicht vollständig)

                        Bin auch kein Blockly Experte :?
                        1904_unbenannt.png

                        1 Reply Last reply Reply Quote 0
                        • T
                          Tagiwara last edited by

                          :roll: Ich glaube ich hab noch ne Menge zu lernen.

                          Ich habe dein "Script" jetzt mal nachgebaut und beim Zusammenstellen erschlägt mich die Logik des Systems. Ich glaube ich denke viel zu kompliziert.

                          Auf jeden Fall danke für die Hilfe… es funktioniert nämlich jetzt 🙂

                          LG

                          Frank

                          1 Reply Last reply Reply Quote 0
                          • Stuebi
                            Stuebi last edited by

                            Ich habe das Lupusec Script für die XT2 Plus nochmals angepaßt. Achtung die Namen der Objekte habe ich angepaßt! Daher einmal den Baum mit allen Objekten unter javascript.0.lupusec löschen.

                            ! ```
                            `// *******************************************************************************
                            // Beschreibung: Script und die Lupusec Geräte anzuglegen und diese in
                            // regelmäßigen auszulesen. Weiterhin kann die Alarmanlage und
                            // die Steckdosen geschaltet werden
                            // Voraussetzung, Firmware 0.0.2.19E
                            //
                            // Version: 1.1 - Abfrage von Token für Post APIs
                            // Version: 1.2 - Logout hinzugefügt
                            // Version: 1.3 - Objektstruktur geändert auf lupusec.devices.<id>.
                            // *******************************************************************************
                            ! var instanz = 'javascript.0.';
                            var request = require('request');
                            ! // *******************************************************************************
                            // Folgende Variablen anpassen
                            // *******************************************************************************
                            var ipLupusec = "https://192.168.20.x"; // IP Adresse oder Hostname von der Lupusec XT2
                            var username = "user"; // Lupusec Benutzername (Benutzer mit Schreibberechtigung, bei Steckdosen)
                            var password = "xxxxx!"; // Lupusec Passwort
                            var pollSec = 10; // Alle x Sekunden Status bei der Alarmanlage abfragen
                            ! // *******************************************************************************
                            // Sonstige Variablen
                            // *******************************************************************************
                            var urlDeviceList = ipLupusec + "/action/deviceListGet";
                            var urlDevicePSSList = ipLupusec + "/action/deviceListPSSGet";
                            var urlPanelCond = ipLupusec + "/action/panelCondGet";
                            var urlDeviceSwitch = ipLupusec + "/action/deviceSwitchPSSPost";
                            var urlPanelCondPost = ipLupusec + "/action/panelCondPost";
                            var urlTokenGet = ipLupusec + "/action/tokenGet";
                            var urlLogoutPost = ipLupusec + "/action/logout";
                            var urlDeviceEditGet = ipLupusec + "/action/deviceEditGet"; // nicht implementiert
                            var urlDeviceEditPost = ipLupusec + "/action/deviceEditPost"; // nicht
                            ! var auth = "Basic " + new Buffer(username + ":" + password).toString("base64");
                            var debug = false;
                            ! // *******************************************************************************
                            // sind die Strings a und b identisch
                            // *******************************************************************************
                            function logging(text, deb = false) {

                            if(deb === true) {
                            
                                if(debug === true) { console.log("Debug: " + text) }
                            
                            } else {
                            
                                console.log(text);
                            
                            }
                            

                            }

                            ! // *******************************************************************************
                            // sind die Strings a und b identisch
                            // *******************************************************************************
                            function aContainsB (a, b) {

                            if(a === null || b === null) { return 0; }
                            return a.toLowerCase().indexOf(b.toLowerCase()) >= 0;
                            

                            }

                            ! // *******************************************************************************
                            // Neues Objekt anlegen wenn nicht vorhanden
                            // *******************************************************************************
                            function newStat(id, type, value) {

                            if(getState(id).notExist === true) {
                            
                                createState(id, value, {
                                    name: '',
                                    desc: '',
                                    role: 'state',
                                    type: type
                                });
                            
                            }
                            

                            }

                            ! // *******************************************************************************
                            // Sonderzeichen, wie tabs, LF etc. aus String entfernen
                            // *******************************************************************************
                            function delSonderzeichen(text) {

                                text =  text.replace(/\r/g,'');
                                text =  text.replace(/\n/g,'');
                                text =  text.replace(/\t/g,' ');
                                text =  text.replace(/\f/g,'');
                                return text;  
                            

                            }

                            ! // *******************************************************************************
                            // Lupusec Logout
                            // *******************************************************************************
                            function lupusecLogout() {

                            logging("Starting Request in lupusecLogout", true);
                            

                            ! request({ url : urlLogoutPost,
                            rejectUnauthorized: false
                            },
                            function (error, response, body) {

                                     if (error || response.statusCode !== 200) {
                            
                                        console.error("Fehler in funciton lupusecLogout: " + error);
                            
                                    } else if(body) {
                            
                                        body =  delSonderzeichen(body);
                                        logging("lupusecLogout : " + body,true);
                                        try {
                                            var j = JSON.parse(body);
                                            logging("lupusecLogout (JSON.parse) : "  + JSON.stringify(j),true);
                                            logging("lupusecLogout : " + j.message, true);  
                                        } catch(e) {
                                            console.error("lupusecLogout : " + e); // error in the above string (in this case, yes)!
                                            return; 
                                        }
                            
                                    }
                            
                            });
                            

                            ! }
                            ! // *******************************************************************************
                            // Liefert den Zustand der Lupusec Zentrale
                            // *******************************************************************************
                            function lupusPanelCondGet() {

                            if (lupusPanelCondGet.running === undefined) {  lupusPanelCondGet.running = false; }
                            
                            function parse(body) {
                            
                                logging("Starting Parsing in lupusPanelCondGet", true);
                            
                                body =  delSonderzeichen(body);
                                logging("lupusPanelCondGet : " + body,true);
                                try {
                                    var j = JSON.parse(body);
                                } catch(e) {
                                    console.error("lupusPanelCondGet : " + e); // error in the above string (in this case, yes)!
                                    return;
                                }
                                logging("lupusPanelCondGet (JSON.parse) : "  + JSON.stringify(j), true);
                                setLupusStatus(j, "lupusec.panelcond", "");
                            
                            }
                            

                            !
                            function getRequest() {

                                if(lupusPanelCondGet.running === false) {
                            
                                    logging("Starting Request in lupusPanelCondGet", true);
                            
                                    lupusPanelCondGet.running = true;
                            

                            ! request({ url : urlPanelCond,
                            rejectUnauthorized: false,
                            headers : { "Authorization" : auth }
                            },
                            function (error, response, body) {
                            ! if(error) {
                            console.error("Fehler in funciton lupusPanelCondGet: " + error);
                            } else if(body) {
                            parse(body);
                            }
                            });
                            ! lupusPanelCondGet.running = false;

                                }
                            
                            }
                            
                            getRequest();
                            

                            }

                            ! // *******************************************************************************
                            // Lupusec Get Token for Post calls
                            // *******************************************************************************
                            function lupusecTokenGet(callback) {

                            logging("Starting Request in lupusecTokenGet", true);
                            

                            ! request({ url : urlTokenGet,
                            rejectUnauthorized: false,
                            headers : { "Authorization" : auth }
                            },
                            function (error, response, body) {

                                     if (error || response.statusCode !== 200) {
                            
                                        console.error("Fehler in funciton lupusecTokenGet: " + error);
                                        return callback(error || {statusCode: response.statusCode});
                            
                                    } else if(body) {
                            
                                        body =  delSonderzeichen(body);
                                        logging("lupusecTokenGet : " + body,true);
                                        try {
                                            var j = JSON.parse(body);
                                            logging("lupusecTokenGet (JSON.parse) : "  + JSON.stringify(j),true);
                                            callback(null, j.message);  
                                        } catch(e) {
                                            console.error("lupusecTokenGet : " + e); // error in the above string (in this case, yes)!
                                            return callback(e);
                                        }
                            
                                    }
                            
                            });
                            

                            ! }
                            ! // *******************************************************************************
                            // Liefert eine Liste aller angelernten Funkschalter / Aktoren der Lupusec Zentrale
                            // *******************************************************************************
                            function lupusecDeviceListPSSGet() {

                            if (lupusecDeviceListPSSGet.running === undefined) {  lupusecDeviceListPSSGet.running = false; }
                            
                            function parse(body) {
                            
                                logging("Starting Parsing in lupusecDeviceListPSSGet", true);
                            
                                body =  delSonderzeichen(body);
                                logging("lupusecDeviceListPSSGet : " + body,true);
                                 try {
                                    var j = JSON.parse(body).pssrows;
                                } catch(e) {
                                    console.error("lupusecDeviceListPSSGet : " + e); // error in the above string (in this case, yes)!
                                    return;
                                }
                                logging("lupusecDeviceListPSSGet (JSON.parse) : "  + JSON.stringify(j), true);
                            
                                for(var i=0; i < j.length; i++) {
                            
                                    var sensor = j[i];
                                    setLupusStatus(sensor, "lupusec.devices." + sensor.id + ".info", sensor.name);
                            

                            ! }

                            }
                            
                            function getRequest() {
                            
                                if(lupusecDeviceListPSSGet.running === false) {
                            
                                    logging("Starting Request in lupusecDeviceListPSSGet", true);
                            
                                    lupusecDeviceListPSSGet.running = true;
                            

                            ! request({ url : urlDevicePSSList,
                            rejectUnauthorized: false,
                            headers : { "Authorization" : auth }
                            },
                            function (error, response, body) {
                            ! if(error) {
                            console.error("Fehler in funciton lupusecDeviceListPSSGet: " + error);
                            } else if(body) {
                            parse(body);
                            }
                            });
                            ! lupusecDeviceListPSSGet.running = false;

                                }
                            
                            }
                            
                            getRequest();
                            

                            }

                            ! // *******************************************************************************
                            // Liefert eine Liste aller Sensoren der Lupusec Zentrale
                            // *******************************************************************************
                            function lupusecDeviceListGet() {

                            if (lupusecDeviceListGet.running === undefined) {  lupusecDeviceListGet.running = false; }
                            
                            function parse(body) {
                            
                                logging("Starting Parsing in lupusecDeviceListGet", true);
                            
                                body =  delSonderzeichen(body);
                                logging("lupusecDeviceListGet : " + body,true);
                                try {
                                    var j = JSON.parse(body).senrows;
                                } catch(e) {
                                    console.error("lupusecDeviceListGet : " +  e); // error in the above string (in this case, yes)!
                                    return;
                                }
                                logging("lupusecDeviceListGet (JSON.parse) : "  + JSON.stringify(j), true);
                            
                                for(var i=0; i < j.length; i++) {
                            
                                    var sensor = j[i];
                            
                                    setLupusStatus(sensor, "lupusec.devices." + sensor.sid + ".info", sensor.name);
                            
                                }
                            
                            }
                            
                            function getRequest() {
                            
                                if(lupusecDeviceListGet.running === false) {
                            
                                    logging("Starting Request in lupusecDeviceListGet", true);
                            
                                    lupusecDeviceListGet.running = true;
                            

                            ! request({ url : urlDeviceList,
                            rejectUnauthorized: false,
                            headers : { "Authorization" : auth }
                            },
                            function (error, response, body) {

                                            if(error) {
                                                console.error("Fehler in funciton lupusecDeviceListGet: " + error);
                                            } else if(body) {
                                                parse(body);
                                            }
                                    });
                            

                            ! lupusecDeviceListGet.running = false;

                                }
                            
                            }
                            
                            getRequest();
                            

                            }

                            ! // *******************************************************************************
                            // Lupus Status setzen // json, pfad in Instanzen, Device Name
                            // *******************************************************************************
                            function setLupusStatus(jsonobject, objektverz, devicename) {
                            ! Object.keys(jsonobject).forEach(function(key) {
                            ! var value = jsonobject[key];
                            var type = typeof value;
                            ! if(Object.prototype.toString.call(value) === '[object Object]') {

                                     if(objektverz.length >0) { key = objektverz + "." + key; }
                                     setLupusStatus(value, key, devicename);
                            

                            ! } else {
                            ! var vdevicename = "";
                            var id;
                            ! if(devicename.length > 0) { vdevicename = devicename + " " + key; } else { vdevicename = ""; }
                            if(objektverz.length > 0) { id = objektverz + "." + key; } else { id = key; }

                                    if(getState(id).notExist === true) {
                            
                                        logging("Create State: " + id + " (" + value + ")");
                            

                            ! createState(id, value, {
                            name: vdevicename,
                            desc: '',
                            role: 'state',
                            type: type
                            });

                                        // für Key alarm_status legen wir zusätzlichen key an
                                        if(key == "alarm_status") { 
                            
                                            key = "alarm_status_ex"; 
                            
                                            if(devicename.length > 0) { vdevicename = devicename + " " + key; } else { vdevicename = ""; }
                                            if(objektverz.length > 0) { id = objektverz + "." + key; } else { id = key; }
                            
                                            if(value == "") { value = 0; } else { value = 1; }
                            
                                            logging("Create State: " + id + " (" + value + ")");
                            
                                            createState(id, value, {
                                                name: vdevicename,
                                                desc: '',
                                                role: 'state',
                                                type: 'number'
                                            });
                            
                                        }
                            
                                    } else {
                            
                                        if(key == "resp_mode") { value = "[" + value + "]"; }
                            
                                        logging("setLupusStatus : id = " + id + " = " + value, true);
                                        if(getState(id).val != value) {  setState(id, value, true); }
                            
                                        // für Key alarm_status gibt es einen  zusätzlichen Wert
                                        if(key == "alarm_status") { 
                            
                                            key = "alarm_status_ex";
                            
                                            if(devicename.length > 0) { vdevicename = devicename + " " + key; } else { vdevicename = ""; }
                                            if(objektverz.length > 0) { id = objektverz + "." + key; } else { id = key; }
                            
                                            if(value == "") { value = 0; } else { value = 1; }
                            
                                            logging("setLupusStatus : id = " + id + " = " + value, true);
                                            if(getState(id).val != value) {  setState(id, value, true); }
                            
                                        }
                            
                                    }
                            
                                }
                            

                            ! });
                            ! }
                            ! // *******************************************************************************
                            // Liefert eine Liste aller Sensoren der Lupusec Zentrale
                            // *******************************************************************************
                            function lupusecDeviceEditGet() {

                            if (lupusecDeviceEditGet.running === undefined) {  lupusecDeviceEditGet.running = false; }
                            
                            function parse(sid, name, body) {
                            
                                logging("Starting Parsing in lupusecDeviceEditGet", true);
                            
                                body =  delSonderzeichen(body);
                                logging("lupusecDeviceEditGet : " + body,true);
                                try {
                                    var j = JSON.parse(body);
                                } catch(e) {
                                    console.error("lupusecDeviceEditGet : " +  e); // error in the above string (in this case, yes)!
                                    return;
                                }
                                logging("lupusecDeviceEditGet (JSON.parse) : "  + JSON.stringify(j), true);
                                setLupusStatus(j, "lupusec.devices." + sid + ".edit", name);
                            
                            }
                            
                            function getRequest() {
                            
                              var selectorLupusecType =  $('state[state.id=' + instanz + 'lupusec.devices.*.info.sid]');
                            
                                if(lupusecDeviceEditGet.running === false) {
                            
                                    logging("Starting Request in lupusecDeviceEditGet", true);
                            
                                    lupusecDeviceEditGet.running = true;
                            

                            ! selectorLupusecType.each(function(id,i) {
                            ! var valueId = getState(id).val;
                            var idParent = id.split(".").slice(0,-1).join(".");
                            var idName = idParent + ".name";
                            var valueName = getState(idName).val;

                                        request.post({ url : urlDeviceEditGet, 
                                                  rejectUnauthorized: false,
                                                  headers : { "Authorization" : auth },
                                                  form :    { id: valueId }
                                                },
                                                 function (error, response, body) {
                            
                                                if(error) {
                                                    console.error("Fehler in funciton lupusecDeviceEditGet: " + error);
                                                } else if(body) {
                                                    parse(valueId,valueName,body);
                                                }
                                        });
                            

                            ! });

                                    lupusecDeviceEditGet.running = false;
                            
                                }
                            
                            }
                            
                            getRequest();
                            

                            }

                            ! // *******************************************************************************
                            // Schaltet Steckdosen, Relais und Rolladenrelas der Lupusec
                            // *******************************************************************************
                            function lupusDeviceSwitchPost() {

                            var selectorLupusecType =  $('state[state.id=' + instanz + 'lupusec.devices.*.info.id]');
                            
                            if (lupusDeviceSwitchPost.subcriber === undefined) {  lupusDeviceSwitchPost.subcriber = []; }
                            
                            function findNewSwitches() {
                            
                                logging("Starting find new switch in lupusDeviceSwitchPost", true);
                            
                                selectorLupusecType.each(function(id,i) {
                            
                                    var valueId     = getState(id).val;
                                    var idParent    = id.split(".").slice(0,-1).join(".");
                                    var idStatusEx  = idParent + ".status_ex";
                                    var idLevel     = idParent + ".level";
                                    var newEvent    = true;
                            

                            ! for (i=0; i<lupusdeviceswitchpost.subcriber.length; 1/i++)/{/if(lupusdeviceswitchpost.subcriber[i]="=" idparent)/newevent="false;" }/if(newevent)/lupusdeviceswitchpost.subcriber.push(idparent);/subscribebyid(idstatusex);/subscribebyid(idlevel);/});/function/subscribebyid(id)/on({id:/id,/change:/'ne'},/(data)/var/value="data.state.val;" oldvalue="data.oldState.val;" lasttime="data.state.lc;" if(value/!="oldValue)" logging("change/status/for/"/+/true);/idparent="id.split(".").slice(0,-1).join(".");" idsid="idParent" ".id";/valuesid="getState(idSid).val;" idlevel="idParent" ".level";/valuelevel="getState(idLevel).val;" idswitch="idParent" ".status_ex";/valueswitch="getState(idSwitch).val;" lupusectokenget(function(err,/token)/if/(!err)/request.post({/url/:/urldeviceswitch,/rejectunauthorized:/false,/headers/"authorization"/auth,/"x-token"/token/},/form/id:/valuesid,/switch:/valueswitch,/level:/(error,/response,/body)/if(error)/console.error("fehler/in/funciton/lupuspanelcondget:/error);/else/if(body)/findnewswitches();/****************************************************************************/schaltet/zustände/der/zentrale/lupusec/lupuspanelcondpost()/(lupuspanelcondpost.subscriber="==" undefined)/lupuspanelcondpost.subcriber="false;" findnewswitches()/logging("starting/lupuspanelcondpost",/if(lupuspanelcondpost.subcriber="==" false)/subscribebyid(instanz/"lupusec.panelcond.forms.pcondform1.mode");/"lupusec.panelcond.forms.pcondform2.mode");/area="idParent.substr(idParent.length-1,1);" logging("lupuspanelcondpost:/change/to/area,/urlpanelcondpost,/area:/mode:/);/start/aller/komponenten/start()/lupusecdevicelistget();/lupusecdevicelistpssget();/lupusecdeviceeditget();/lupuspanelcondget();/lupusdeviceswitchpost();/lupuspanelcondpost();/alle/x/sekunden/sensoren/auslesen/schedule("/pollsec//",/()/minuten/lupuseclogout();/start();/<e=""></lupusdeviceswitchpost.subcriber.length;></id>`
                            ! ~~[b]~~Bitte statt Script jetzt den Lupusec Adapter nutzen.[/b] ( https://github.com/schmupu/ioBroker.lupusec )[/i][/i][/i]

                            1 Reply Last reply Reply Quote 0
                            • D
                              defrostx last edited by

                              Aktuelle Firmware:HPGW-G 0.0.2.19E

                              Gerätemodell:XT2 Plus

                              Installierte Version:0.0.2.19E

                              XT2 Plus

                              20:07:47.098	[error]	javascript.0 TypeError: Cannot read property 'length' of null at script.js.common.Lupusec:375:26 at Array.forEach (native) at setLupusStatus (script.js.common.Lupusec:360:29) at parse (script.js.common.Lupusec:461:9) at Request._callback (script.js.common.Lupusec:492:29) at Request.self.callback (/opt/iobroker/node_modules/request/request.js:186:22) at emitTwo (events.js:106:13) at Request.emit (events.js:191:7) at Request. (/opt/iobroker/node_modules/request/request.js:1163:10) at emitOne (events.js:96:13)
                              20:07:47.160	[error]	Caught by controller[0]: at script.js.common.Lupusec:375:26
                              20:07:47.160	[error]	Caught by controller[0]: at setLupusStatus (script.js.common.Lupusec:360:29)
                              20:07:47.160	[error]	Caught by controller[0]: at parse (script.js.common.Lupusec:461:9)
                              20:07:47.161	[error]	Caught by controller[0]: at Request._callback (script.js.common.Lupusec:492:29)
                              
                              

                              Ich hab nur die IP angepasst, user+passwort.

                              Was muss ich noch ändern?

                              Er legt zwar die Objekte an, aber keine Werte dazu. Also muss doch der Zugriff erstein mal funktioniert haben oder?

                              Wäre ein Traum wenn das funktionieren würde.

                              1 Reply Last reply Reply Quote 0
                              • D
                                defrostx last edited by

                                mhh, nach einem Reboot hat er die Werte ausgelesen…

                                Das ist voll Irre ! Das wäre doch nur noch kein kleiner Schritt zu einem echten "Adapter" 🙂

                                Ich teste ein wenig rum und berichte.

                                1 Reply Last reply Reply Quote 0
                                • D
                                  defrostx last edited by

                                  Für alle die noch basteln habe ich für mich einen gangbaren Weg gefunden.

                                  In der Lupusec muss an jedem Sensor ein Sensoevent eingestellt werden.

                                  https://ibb.co/cUAchH ~~damit lässt sich dann eine Regel bei "Automatisierung" starten die dann eine Action URL auslöst und dann im ioBroker das .js triggert.

                                  https://ibb.co/hjx7hH ~~````
                                  http://ip_iobroker:1880/lupusec?Status=script_laden

                                  Regelwerk: Wenn der Sensor auf Bypass steht muss jeweils eine eigene Regel erstellt werden. offen_Bypass , geschlossen Bypass.
                                  
                                  Bei „scharfen“ Sensoren ist das nicht nötig. Für die Erkenntnis hats ein wenig gebraucht :-)
                                  
                                  nun sollte die URL angetriggert werden. Dies kann man mit einem netcat in der console leicht überprüfen.
                                  
                                  Im node-red des iobrokers gibt es dann ein kleines script welches das obere JS zum auslesen ermutigt. (javascript.0.scriptEnabled.common.Lupusec) muss natürlich an eure speicherposition angepasst werden.
                                  
                                  

                                  [{"id":"ec85eb23.a98858","type":"debug","z":"5dc650a8.915b7","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":430,"y":300,"wires":[]},{"id":"8e592a08.8f6ef8","type":"http in","z":"5dc650a8.915b7","name":"","url":"/lupusec","method":"get","upload":false,"swaggerDoc":"","x":170,"y":360,"wires":[["ec85eb23.a98858","76e429bc.3db278","dbb500c7.4f64e"]]},{"id":"76e429bc.3db278","type":"template","z":"5dc650a8.915b7","name":"page","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"\n \n \n

                                  OK

                                  \n \n","x":350,"y":400,"wires":[["a6458a79.81edd8"]]},{"id":"a6458a79.81edd8","type":"http response","z":"5dc650a8.915b7","name":"","statusCode":"","headers":{},"x":530,"y":380,"wires":[]},{"id":"dbb500c7.4f64e","type":"ioBroker out","z":"5dc650a8.915b7","name":"scriptEnabled.common.Lupusec","topic":"javascript.0.scriptEnabled.common.Lupusec","ack":"false","autoCreate":"false","x":450,"y":200,"wires":[]}]

                                  
                                  Mit dem Zusatz
                                  

                                  var polling = 0; //zeitliche Abfrage aktivieren 0,1

                                  
                                  im variablenteil uns einem
                                  
                                  

                                  if(polling == true) {
                                  }

                                  
                                  in der Funktion start() wird der automatische Start aller 10 Sekunden verhindert.
                                  
                                  Ob es irgendwie einfacher geht kann ich nicht sagen, aber man hat beim Schaltvorgang ca 1 sekunde Verzögerung bis es auf dem Tablet sichtbar wird.
                                  
                                  Damit kann ich ganz gut leben.
                                  
                                  Viel Spass~~~~
                                  1 Reply Last reply Reply Quote 0
                                  • Stuebi
                                    Stuebi last edited by

                                    @defrostx:

                                    mhh, nach einem Reboot hat er die Werte ausgelesen…

                                    Das ist voll Irre ! Das wäre doch nur noch kein kleiner Schritt zu einem echten "Adapter" 🙂

                                    Ich teste ein wenig rum und berichte. `

                                    Ich bin gerade dabei einen Adapter für die Lupusec Alarmanlage zu erstellen. Du kannst gerne einmal testen. Es ist aber ein Alpha, Alpha, Alpha Version!

                                    https://github.com/schmupu/ioBroker.lupusec

                                    VG

                                    1 Reply Last reply Reply Quote 0
                                    • Schubi
                                      Schubi last edited by

                                      @tstueben:

                                      Vielen Dank für deine Arbeit!

                                      Hab leider im Moment keine Zeit zum Testen. Dein Script funktioniert ja schon wunderbar! 😄

                                      Ich werde den Adapter bald installieren und berichten.

                                      LG!

                                      1 Reply Last reply Reply Quote 0
                                      • Stuebi
                                        Stuebi last edited by

                                        @Schubi:

                                        @tstueben:

                                        Vielen Dank für deine Arbeit!

                                        Hab leider im Moment keine Zeit zum Testen. Dein Script funktioniert ja schon wunderbar! 😄

                                        Ich werde den Adapter bald installieren und berichten.

                                        LG! `
                                        Super Danke! Ich bin gespannt, was Du dann erzählst.

                                        1 Reply Last reply Reply Quote 0
                                        • N
                                          nousefor82 last edited by

                                          Hallo,

                                          ich in absoluter IO Neuling. Habe mir gestern den Adapter geladen. Die Werte meiner Aktoren wurden alle ausgelesen. Beim Test jedoch, ob sich die Variablen ändern bei Türöffnung hat sich nichts geändert. Also der Türöffner hat nicht den „State“ von CLOSE auf OPEN gewechselt.

                                          Muss ich hierzu an der XT2+ noch was zusätzlich einstellen?

                                          VG

                                          1 Reply Last reply Reply Quote 0
                                          • Stuebi
                                            Stuebi last edited by

                                            @nousefor82:

                                            Hallo,

                                            ich in absoluter IO Neuling. Habe mir gestern den Adapter geladen. Die Werte meiner Aktoren wurden alle ausgelesen. Beim Test jedoch, ob sich die Variablen ändern bei Türöffnung hat sich nichts geändert. Also der Türöffner hat nicht den „State“ von CLOSE auf OPEN gewechselt.

                                            Muss ich hierzu an der XT2+ noch was zusätzlich einstellen?

                                            VG `
                                            Hallo,

                                            hast Du auch den Adapter den Lupusec Adapter installiert oder nutzt das Skript aus dem Thread hier? Bitte nutze den Lupusec Adapter. Das Skript passe ich nicht mehr an.

                                            Adapter: https://github.com/schmupu/ioBroker.lupusec

                                            Welche Aktoren besitzt Du denn? Ich benötige einmal die Werte die in den Feldern type unter Objekte (Bsp. lupusec.0.devices.RFxxxxxx.type). Ist im Logfile ein Fehler zu erkennen? Der Status der Sensoren (Typ 4, Türsensoren) steht im Feld status (OPEN oder CLOSE) und status_ex (true oder false).

                                            Ein Screenshot kann ich leider nicht hochladen, da ich den Fehler "Das Kontingent für Dateianhänge ist bereits vollständig ausgenutzt." erhalte.

                                            VG

                                            Stübi

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            478
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            21
                                            192
                                            38415
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo