Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. simple-api abfrage: alle offenen Türen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    simple-api abfrage: alle offenen Türen

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

      Hallo zusammen

      Wie kann ich mit einer Simple-API-Abfrage die Namen aller offenen Türen erhalten?

      deconz.0.Sensors.X.open = true
      und den Namen dazu deconz.0.Sensors["Name"]

      Zusatzfrage: Ist es möglich, über simple-api ein eigenes script auszuführen und werte zurückzugeben?

      Danke, Sven

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Dominic Reber last edited by

        @Dominic-Reber sagte:

        Wie kann ich mit einer Simple-API-Abfrage die Namen aller offenen Türen erhalten?

        Gar nicht, es sei denn, es gibt einen Datenpunkt, der die Namen aller offen Türen enthält.

        Dominic Reber 1 Reply Last reply Reply Quote 0
        • Dominic Reber
          Dominic Reber @paul53 last edited by Dominic Reber

          @paul53
          Schade, ich schaffs alle sensoren auszulesen, die "open" = true haben, aber den dazugehörigen Namen kann ich nirgends auslesen... Schade.

          Mach ich halt eine Doppelabfrage.
          objects liefert den Namen, states den status

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Dominic Reber last edited by paul53

            @Dominic-Reber sagte:

            den dazugehörigen Namen kann ich nirgends auslesen... Schade.

            Dazu benötigt man ein Script auf ioBroker, das auf jede Türbewegung reagiert und die Namen der offenen Türen in einen Datenpunkt schreibt. Dieser Datenpunkt kann zu jeder Zeit per Simple-API abgefragt werden. Beispiel-Skript:

            const idsOpen = $('deconz.0.Sensors.*.open');
            const idNamen = '0_userdata.0.Offen.Namen';
            
            function checkOpen() {
                let names = [];
                idsOpen.each(function(id, i) {
                    if(getState(id).val) names.push(getObject(id).common.name);
                });
                let text = 'alle Türen sind geschlossen';
                if(names.length) text = 'offene Türen: ' + names.join(', ');
                setState(idNamen, text, true);
            }
            
            createState(idNamen, '', {type: 'string', name: 'Namen offener Türen', role: 'info'}, checkOpen);
            
            idsOpen.on(checkOpen); // Wertänderung
            
            1 Reply Last reply Reply Quote 0
            • K
              klassisch Most Active last edited by klassisch

              Dazu ein konkretes Beispiel.
              Aus alten Zeiten habe ich für jedes Fenster eine Homematic-Variable, in die ein Text geschrieben wird, wenn ein Fenster offen ist.
              Diese Variable wird zum ioBroker übertragen.
              Dort hat diese Variable den leider wenig sprechenden Datenpunkt

              hm-rega.0.7419
              

              und mit einer simpleApi Abfrage

              http://192.168.1.25:8087/get/hm-rega.0.7419/?prettyPrint
              

              bekomme ich in diesem Fall ein recht komplexes Objekt in JSON

              {
                  "val": "WC-Fenster",
                  "ack": true,
                  "ts": 1607927113044,
                  "q": 0,
                  "from": "system.adapter.hm-rega.0",
                  "user": "system.user.admin",
                  "lc": 1608927984804,
                  "_id": "hm-rega.0.7419",
                  "type": "state",
                  "common": {
                      "name": "AllesZu_msg_WC",
                      "type": "string",
                      "read": true,
                      "write": true,
                      "role": "state",
                      "desc": "Texpuffer WC",
                      "custom": {
                          "history.0": {
                              "enabled": true,
                              "changesOnly": true,
                              "debounce": "",
                              "maxLength": "",
                              "retention": 0,
                              "changesRelogInterval": "",
                              "changesMinDelta": "",
                              "aliasId": ""
                          },
                          "influxdb.0": {
                              "enabled": true,
                              "changesOnly": false,
                              "debounce": "",
                              "retention": 0,
                              "changesRelogInterval": 0,
                              "changesMinDelta": 0,
                              "storageType": ""
                          }
                      }
                  },
                  "native": {
                      "Name": "AllesZu_msg_WC",
                      "TypeName": "VARDP",
                      "DPInfo": "Texpuffer WC",
                      "ValueMin": null,
                      "ValueMax": null,
                      "ValueUnit": "",
                      "ValueType": 20,
                      "ValueSubType": 11,
                      "ValueList": ""
                  },
                  "acl": {
                      "object": 1636,
                      "state": 1636
                  }
              }
              
              

              relevant ist in diesem Fall der Wert des Strings
              "val": "WC-Fenster",
              Wird das Fenster wieder geschlossen, dann schreibe ich einen Leerstring in diese Variable und ioBroker antwortet auf obige Abfrage mit einem geänderten Wert
              "val": "",
              Die Ausgabe kommt wie gezeigt im JSON Format, wenn man /?prettyPrint anhängt.
              Wenn man das wegläßt kommt einfach plain text

              	
              val	""
              ack	true
              ts	1607927113044
              q	0
              from	"system.adapter.hm-rega.0"
              user	"system.user.admin"
              lc	1608929424856
              _id	"hm-rega.0.7419"
              type	"state"
              common	
              name	"AllesZu_msg_WC"
              type	"string"
              read	true
              write	true
              role	"state"
              desc	"Texpuffer WC"
              custom	
              history.0	
              enabled	true
              changesOnly	true
              debounce	""
              maxLength	""
              retention	0
              changesRelogInterval	""
              changesMinDelta	""
              aliasId	""
              influxdb.0	
              enabled	true
              changesOnly	false
              debounce	""
              retention	0
              changesRelogInterval	0
              changesMinDelta	0
              storageType	""
              native	
              Name	"AllesZu_msg_WC"
              TypeName	"VARDP"
              DPInfo	"Texpuffer WC"
              ValueMin	null
              ValueMax	null
              ValueUnit	""
              ValueType	20
              ValueSubType	11
              ValueList	""
              acl	
              object	1636
              state	1636
              

              Einen manuell angelegten Datenpunkt kann man sicher einfacher gestalten. Aber um ein Parsen auf dem Empfänger wird man nicht herumkommen.
              Man kann jetzt also vom verarbeitenden Gerät aus alle Datenpunkte einzeln oder per bulk abfragen und hat damit die Komplexität dort.
              Oder man legt etwas mehr Komplexität in den ioBroker und schreibt ein Schript, welches eine Liste der offenen Türen zusammenstellt und holt dann per get diese Liste ab.

              Zur Zusatzfrage: Man kann ein Script auslösen, wenn man per simpleApi "set" einen Datenpunkt verändert (oder zumindest setzt) und das JavaScript auf diese Veränderung bzw. das Setzen triggern läßt.

              Dominic Reber 1 Reply Last reply Reply Quote 0
              • Dominic Reber
                Dominic Reber @klassisch last edited by

                Super, danke euch beiden!

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

                Support us

                ioBroker
                Community Adapters
                Donate

                1.1k
                Online

                31.7k
                Users

                79.7k
                Topics

                1.3m
                Posts

                3
                6
                260
                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