Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Newbie Einzelnen Wert von Contact-Entity anzeigen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Newbie Einzelnen Wert von Contact-Entity anzeigen

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

      Hallo,
      versuche gerade ersten Werte in einem dashboard (Lovelance) anzeigen zu lassen.
      Wetterdaten von meiner Netatmo-Wetterstation haben auch sofort funktioniert, da gab es automatisch eine passende "Rolle" mit genau einem Wert (Bsp: "value.temeprature"; Wert: "4.1° C")
      Bei meinem Zigbee Device (über Zigbee2mqtt) gibt es die Rolle "Variable", mit Wert: "Battery:100, Contact: false, ..."

      Wie kann ich mir genau nur den Kontaktstatus anzeigen lassen; wie kann ich diesen Wert in einzlne Teile (Batterie, ContactStatus, ...) "aufsplitten? Vorhanden sind diese Daten ja, aber alle in einem "String" (?)

      Ist das ein "Problem" von meiner Zigbee2MQTT konfiguration, oder muss ich nach einem "standard" hier vorgehen, wenn ja, welchem?NA-zigbee2mqtt.jpg

      mickym 1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active @topsurfer last edited by

        @topsurfer sagte in Newbie Einzelnen Wert von Contact-Entity anzeigen:

        Wie kann ich mir genau nur den Kontaktstatus anzeigen lassen; wie kann ich diesen Wert in einzlne Teile (Batterie, ContactStatus, ...) "aufsplitten? Vorhanden sind diese Daten ja, aber alle in einem "String" (?)

        Das ist ein JSON String und eine sehr effiziente Methode Daten zu übertragen. Je nachdem mit welcher Logikmaschine Du arbeitest, den JSON-String in ein JS-Objekt umwandeln und Du kannst direkt auf die Werte zugreifen.

        T 1 Reply Last reply Reply Quote 0
        • T
          topsurfer @mickym last edited by

          @mickym
          OK 😉

          Ich bin Newbie, wo finde ich da eine weiterführende Stelle (Best practice, Anleitung, HowTo ?) um zu sehen, wie und wo ich das machen kann?

          Was meinst du mit "Logikmaschine"?

          mickym 1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @topsurfer last edited by mickym

            @topsurfer Na was möchtest Du den mit dem Wert machen?

            Logikmaschine - die gebräuchlichsten im iobroker Umfeld sind: blockly, Javascript oder NodeRed. im Prinzip muss man nicht alles als eigenen Datenpunkt haben - die JSON-Strings sind eine sehr effiziente Methode Daten zu speichern. Wenn Du es nicht direkt in einer Visualisierung als Datenpunkt brauchst, wandelst Du es in ein Javascript Objekt um.

            Wie gesagt - kommt darauf an, was Du verwendest.
            Im Blockly sieht das so aus:
            f92ea069-cb64-4ce1-9f30-9c5e59f9e7bb-image.png
            In Javascript so:

            obj = JSON.parse(str)
            

            und in NodeRed:
            15b4bd2b-6924-4913-aec5-54e2242b1a22-image.png

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

              Letztlich möchte ich mir den Wert (offen/geschlossen) vom Kontakt "nur" anzeigen lassen ...

              Diese "Logikmaschinen" sind Adapter (?), welche ich noch installieren muss?
              Welche Methode wird denn empfohlen, ohne das man zuviele Möglichkeiten und Option verliert?
              Blockly ist ja was "grafisches" zum schieben ...

              Irgendwie werde ich erschlagen, OpenHab soll ja komplexer sein, aber irgendwie fiel mir da der Einstieg leichter 😉


              Das habe ich gefunden:
              https://www.smarthome-tricks.de/software-iobroker/iobroker-javascript-json-verarbeiten/

              Wenn man diese Json-Parse() -Methode nutzen wollte, wo müßte dieser Code dann eingetragen werden?

              try { 
                  obj = JSON.parse(value);
                  var name = obj.name;
                  var temp = obj.temp;
                  var hum = obj.hum;
                } catch (e) {
                  return;
                }
              
              mickym paul53 2 Replies Last reply Reply Quote 0
              • mickym
                mickym Most Active @topsurfer last edited by mickym

                @topsurfer Nun das ist doch alles kein Problem - willst Du denn mit JS wirklich programmieren?

                Ich bin ein NodeRed Fan - aber die meisten nutzen hier Blockly.

                Wenn Du so einen String hast:

                {"Battery":100, "Contact": false}
                

                wie oben beschrieben und Du willst mit JS programmieren dann würde es so aussehen:

                var str = '{"Battery":100, "Contact": false}';
                
                var obj = JSON.parse(str);
                // im Prinzip halt JSON.parse('{"Battery":100, "Contact": false}');
                var battery = obj.Battery;
                var contact = obj.Contact;
                

                Ich empfehle Dir hier ein paar Basics zu Javascript:

                https://www.w3schools.com/js/js_json_parse.asp

                und

                https://www.w3schools.com/js/js_objects.asp

                Mit NodeRed kannst Dich halt auf die Logik konzentrieren, verlierst aber nichts an Möglichkeiten, da JS nativ unterstützt wird und in iobroker sehr gut eingebunden ist.

                In NodeRed liest Du Deinen Datenpunkt aus, konvertierst in eine Objekt und greifst auf die Eigenschaften zu:

                e82714d6-c803-4373-99f9-4f0a6779e419-image.png

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

                  @topsurfer
                  Triggere auf den JSON-Datenpunkt:

                  const idKontakt = '0_userdata.0.Kontakt01'; // ID anpassen!
                  // Datenpunkt für Kontakt erstellen
                  createState(idKontakt, false, {type: 'boolean', name: 'Kontakt01', role: 'indicator', read: true, write: false});
                  
                  on('mqtt.0.zigbee2mqtt.Contact_01', function(dp) {
                     setState(idKontakt, JSON.parse(dp.state.val).contact, true);
                  });
                  
                  T 1 Reply Last reply Reply Quote 0
                  • T
                    topsurfer @paul53 last edited by

                    Danke euch !!

                    Werde ich morgen angehen, nur zum Verständnis mit dem JS Codes, wo muss oder müßte ich diese reinkopieren?

                    paul53 Zarello 2 Replies Last reply Reply Quote 0
                    • paul53
                      paul53 @topsurfer last edited by paul53

                      @topsurfer sagte: JS Codes, wo muss oder müßte ich diese reinkopieren?

                      In den Editor des Javascript-Adapters.

                      1 Reply Last reply Reply Quote 0
                      • Zarello
                        Zarello @topsurfer last edited by

                        @topsurfer Ich bin auf ein ähnliches Problem gestoßen und habe kurzerhand ein kleines Skript geschrieben, welches sämtliche Daten der Geräte unter mqtt.0.zigbee2mqtt unter javascript.0.MQTT zur Verfügung stellt. Ich bin mir nicht sicher, ob das alles reibungslos funktioniert, aber ich möchte natürlich viele der Geräte auch in Visualisierungen verwenden und benötige dementsprechend die kopierten Datenpunkte mit Aktualisierungs-/Übertragungsfunktionen. Vielleicht hilft Dir das ja auch weiter: Datenpunkte im JSON-Format und deren Visualisierung

                        T 1 Reply Last reply Reply Quote 0
                        • T
                          topsurfer @Zarello last edited by topsurfer

                          Ich denke Node Red würde mir "zusagen",
                          stoße aber direkt auf ein "Problem" (bevor ich noch den JSON String verarbeiten kann),
                          habe ein "Debug" eingebaut um mir zunächst überhaupt anzeigen zu lassen, was an Daten "reinkommt"

                          Habe auch den funktionierenden Temperatur-Sensor von Netatmo angelegt und "debug" verdrahtet, aber das rechte "Debug" Fenster bleibt immer komplett leer.
                          Und auch einen SmartSwitch (#21), der über MQTT arbeitet und funktioniert.

                          Im Debug-Menu habe ich "Msg" als auch mal "Kompletten Nachrichten Objekt" ausgewählt und probiert (und natürlich dann auch deployed), aber keinerlei Änderung. "Debug" bleibt leer

                          Was übersehe ich? Wo ist mein (Denk) Fehler?
                          (Habe "iobroker in", "iobroker get object" und "iobroker get" probiert)

                          node-red-debug-leer.jpg

                          mickym 2 Replies Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @topsurfer last edited by mickym

                            @topsurfer Hallo - Nun Du nimmst die iobroker IN Node. Wenn allerdings nichts getriggert wird, dann kommt auch nichts rein. 😉

                            Also in der iobroker In Node noch spezifizieren, dass am Anfang der Datenpunkt ausgelesen wird:

                            7c70f32b-e58a-4f4f-b5f3-bce457ceea54-image.png

                            Wenn Du die Taste inaktiv drückst:

                            22bc0c66-bc41-4df8-b4ff-737e74953e9d-image.png

                            dann bleibt diese Node still - das geht auch ohne Übernahme/Deploy - damit kann man schnell Debug Nodes aktivieren und deaktivieren.

                            Die iobroker- get Nodes die liefern nichts - und lesen nur aus, wenn Du sie triggerst. Du kannst eine Inject Node davorhängen und über die Taste triggern. Wie gesagt im Normalfall triggern die Datenpunkte selbst über die iobroker-In Node.

                            T 1 Reply Last reply Reply Quote 0
                            • T
                              topsurfer @mickym last edited by topsurfer

                              OK, liegt wohl (zumindest beim ZigBee) Contact daran, das dieser trotz Auslösung des Magnet-Kontakt keine Daten geschickt hat, sondern nur alle 10 Minuten (?).
                              Vom Netatmo kam gar nichts an, aber wie kann ich da mit Node Red und dem JSON testen, wenn nur alle 10 Minuten was im Debug was ankommt?

                              data.jpg

                              mickym 1 Reply Last reply Reply Quote 0
                              • mickym
                                mickym Most Active @topsurfer last edited by mickym

                                @topsurfer Wie gesagt mit der getNode kannst Du die Daten immer lesen musst die aber mit einer Inject Node triggern.

                                Ansonsten nur um den JSON String zu testen kannst Du auch den ganzen String in eine Inject-Node kopieren.

                                Nehmen wir mal an Du möchtest den in Deinem Screenshot abgebildeten JSON String und die weitere Verarbeitung testen:

                                bc91b39a-a3c0-4e4c-81a7-aa3b4606b675-image.png

                                Dann gehtst Du mit der Maus im Debugfenster auf Wert kopieren - wie abgebildet

                                Sobald Du den Wert dann in die Inject Node kopiert hast:

                                0fab76f8-936c-4bb3-9c83-b722fa0534f3-image.png

                                und diese triggerst - solltest Du mit einer anschließenden Debug Node - die identische Ausgabe erhalten:
                                5ffa1c51-78f2-48c8-9f20-a319341debed-image.png

                                über eine anschließende JSON Node - siehst Du wie das Ganze in ein JS Objekt umgewandelt wurde:

                                22d34707-ab93-4eba-aa44-b1a23702bf9c-image.png

                                Nun kannst Du auf die Eigenschaften direkt zugreifen - wenn Du am Anfang nicht weißt wie, dann hilft Dir den Pfad zu kopieren, das ist das Icon vor dem Wert kopieren:

                                Nehmen wir an Du bist an dem Wert linkquality interessiert:

                                dann kopierst Du den Wert in die Zwischenablage - später weißt Du sowas auswendig:

                                c143aa23-e16e-4860-817d-d5425c31ed9f-image.png

                                mit einer Debug Node - kannst Du so schon den einzelnen Wert extrahieren:

                                In die Debug Node kopierst Du den kopierten Pfad:

                                ca0f3591-934f-4667-a4c4-6d985ed53937-image.png

                                Du siehst auf die Objekteigenschaften greifst Du einfach mit einem Punkt zu. Also payload.linkquality oder payload.battery usw.

                                Du bekommst also den Wert schon mal einzeln:

                                d1cea4c0-436c-4e15-bc68-dac6b80c5105-image.png

                                Um den Wert dann in einer payload einzeln zu verarbeiten kannst Du diese über eine Change Node setzen:

                                32cf29ab-1e5f-491b-bb83-7d75c1a097fa-image.png

                                Hier siehst Du jede Nachricht mit dem einzelnen Wert, den Du über eine iobroker-Out Node in einen eigenen Datenpunkt schreiben kannst oder was weiß ich, was Du damit anstellen willst.

                                Damit Du üben kannst, brauchst Du nur den folgenden Flow importieren:

                                [
                                   {
                                       "id": "be9ae138.a40b9",
                                       "type": "inject",
                                       "z": "54b226bc.0793e8",
                                       "name": "",
                                       "props": [
                                           {
                                               "p": "payload"
                                           }
                                       ],
                                       "repeat": "",
                                       "crontab": "",
                                       "once": false,
                                       "onceDelay": 0.1,
                                       "topic": "",
                                       "payload": "{\"battery\":100,\"contact\":false,\"linkquality\":134,\"voltage\":3005}",
                                       "payloadType": "str",
                                       "x": 550,
                                       "y": 260,
                                       "wires": [
                                           [
                                               "f77fee95.33031",
                                               "87971ea6.bc01f"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "f77fee95.33031",
                                       "type": "debug",
                                       "z": "54b226bc.0793e8",
                                       "name": "",
                                       "active": false,
                                       "tosidebar": true,
                                       "console": false,
                                       "tostatus": false,
                                       "complete": "false",
                                       "statusVal": "",
                                       "statusType": "auto",
                                       "x": 730,
                                       "y": 260,
                                       "wires": []
                                   },
                                   {
                                       "id": "87971ea6.bc01f",
                                       "type": "json",
                                       "z": "54b226bc.0793e8",
                                       "name": "",
                                       "property": "payload",
                                       "action": "",
                                       "pretty": false,
                                       "x": 720,
                                       "y": 320,
                                       "wires": [
                                           [
                                               "2b35c376.181bcc",
                                               "11c50505.2a173b",
                                               "c72940c6.73bce",
                                               "1b4d9da3.b83512",
                                               "57b43ac0.2e12a4"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "2b35c376.181bcc",
                                       "type": "debug",
                                       "z": "54b226bc.0793e8",
                                       "name": "",
                                       "active": false,
                                       "tosidebar": true,
                                       "console": false,
                                       "tostatus": false,
                                       "complete": "false",
                                       "statusVal": "",
                                       "statusType": "auto",
                                       "x": 870,
                                       "y": 320,
                                       "wires": []
                                   },
                                   {
                                       "id": "11c50505.2a173b",
                                       "type": "debug",
                                       "z": "54b226bc.0793e8",
                                       "name": "",
                                       "active": false,
                                       "tosidebar": true,
                                       "console": false,
                                       "tostatus": false,
                                       "complete": "payload.linkquality",
                                       "targetType": "msg",
                                       "statusVal": "",
                                       "statusType": "auto",
                                       "x": 930,
                                       "y": 380,
                                       "wires": []
                                   },
                                   {
                                       "id": "c72940c6.73bce",
                                       "type": "change",
                                       "z": "54b226bc.0793e8",
                                       "name": "Batterie",
                                       "rules": [
                                           {
                                               "t": "set",
                                               "p": "payload",
                                               "pt": "msg",
                                               "to": "payload.battery",
                                               "tot": "msg"
                                           }
                                       ],
                                       "action": "",
                                       "property": "",
                                       "from": "",
                                       "to": "",
                                       "reg": false,
                                       "x": 880,
                                       "y": 460,
                                       "wires": [
                                           [
                                               "4529c251.3c398c"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "1b4d9da3.b83512",
                                       "type": "change",
                                       "z": "54b226bc.0793e8",
                                       "name": "Kontakt",
                                       "rules": [
                                           {
                                               "t": "set",
                                               "p": "payload",
                                               "pt": "msg",
                                               "to": "payload.contact",
                                               "tot": "msg"
                                           }
                                       ],
                                       "action": "",
                                       "property": "",
                                       "from": "",
                                       "to": "",
                                       "reg": false,
                                       "x": 880,
                                       "y": 500,
                                       "wires": [
                                           [
                                               "4529c251.3c398c"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "57b43ac0.2e12a4",
                                       "type": "change",
                                       "z": "54b226bc.0793e8",
                                       "name": "Voltage",
                                       "rules": [
                                           {
                                               "t": "set",
                                               "p": "payload",
                                               "pt": "msg",
                                               "to": "payload.voltage",
                                               "tot": "msg"
                                           }
                                       ],
                                       "action": "",
                                       "property": "",
                                       "from": "",
                                       "to": "",
                                       "reg": false,
                                       "x": 880,
                                       "y": 540,
                                       "wires": [
                                           [
                                               "4529c251.3c398c"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "4529c251.3c398c",
                                       "type": "debug",
                                       "z": "54b226bc.0793e8",
                                       "name": "",
                                       "active": true,
                                       "tosidebar": true,
                                       "console": false,
                                       "tostatus": false,
                                       "complete": "false",
                                       "statusVal": "",
                                       "statusType": "auto",
                                       "x": 1080,
                                       "y": 500,
                                       "wires": []
                                   }
                                ]
                                

                                Einfach von hier in die Zwischenablage und dann im Menü auf Import und den Inhalt der Zwischenablage in das rosa Fenster kopieren:

                                dc9a51d6-e8e1-4f1f-8b4f-4147d03add06-image.png

                                1 Reply Last reply Reply Quote 0
                                • mickym
                                  mickym Most Active @topsurfer last edited by

                                  @topsurfer Ach und wenn Du mit NodeRed anfängst schalte zu Beginn gleich die Stringkonvertierung in den Adaptereinstellungen aus, das wird Dir später helfen - auch wenn Du über mqtt immer Strings bekommst:

                                  Ich habe Dir den Haken markiert, den Du wegmachen sollst:

                                  64e3452c-9184-4cca-bfbd-133bc415e5e9-image.png

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

                                    DANKE Micky !
                                    Teste ich nachher ...

                                    Haken habe ich entfernt bei ".... Zeichenkette konvertieren"

                                    Der "Pallett Manager" ist bei mir nicht aktiviert, konnte auf die schnelle auch nicht finden was der für eine Aufgabe hat.

                                    mickym 1 Reply Last reply Reply Quote 0
                                    • mickym
                                      mickym Most Active @topsurfer last edited by

                                      @topsurfer Der macht es Dir einfacher zusätzliche Nodes zu installieren - das kann man aber auch später bei Bedarf anhaken - das hat keine Auswirkungen auf Deine bisherigen Flows oder Deiner Arbeit. Die Konvertierung auszuschalten ist dagegen schon wichtig, sonst hat man später einen Aufwand wenn man es wieder umstellt.

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

                                        @mickym
                                        So, konnte deiner Anleitung folgen und di ersten Werte so "erstellen".
                                        (und Node Red zumindest etwas "verstehen", habe noch nie mit einer grafischen Erstellung von "Scripten" oder "Abläufen" zu tun gehabt!)

                                        Danke!

                                        Nur eine Frage (evtl. an andere), ich stehe ja dann letztlich vor der Entscheidung, Node red oder blockly zu nutzen.
                                        Wie würde das ganze in blockly ausschauen?
                                        Wie kann ich dort den JSON String in einzelne "Variablen" aufsplitten?

                                        mickym paul53 2 Replies Last reply Reply Quote 0
                                        • mickym
                                          mickym Most Active @topsurfer last edited by mickym

                                          @topsurfer sagte in Newbie Einzelnen Wert von Contact-Entity anzeigen:

                                          @mickym
                                          So, konnte deiner Anleitung folgen und di ersten Werte so "erstellen".
                                          (und Node Red zumindest etwas "verstehen", habe noch nie mit einer grafischen Erstellung von "Scripten" oder "Abläufen" zu tun gehabt!)

                                          Danke!

                                          Nur eine Frage (evtl. an andere), ich stehe ja dann letztlich vor der Entscheidung, Node red oder blockly zu nutzen.
                                          Wie würde das ganze in blockly ausschauen?
                                          Wie kann ich dort den JSON String in einzelne "Variablen" aufsplitten?

                                          Nur so ungefähr müsste es meines erachtens so aussehen

                                          ba9f44c8-3130-428f-8a03-41dceb5a345c-image.png

                                          Du setzt also den Wert des triggers in die Variable JSONString- wandelst das in ein Objekt (ich habs hier object) genannt und ordnest die Eigenschaft battery Deiner Variablen Batterie zu,

                                          Überprüfen und bessere Tipps zum Thema Blockly kann Dir sicher @paul53 geben. 🙂 Auch @jan1 hilft Dir bei der Blockly Erstellung sicher gerne.

                                          Und mal abgesehen von meiner persönlichen Präferenz, hast Du hier an Board viel mehr Blockly Unterstützung - das nehmen einfach die meisten. Warum weiß ich zwar nicht 😄 - aber insofern hast Du mit Blockly viel mehr Leute, die Dich unterstützen können.

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

                                            @topsurfer sagte: Wie würde das ganze in blockly ausschauen?

                                            Bild_2021-12-08_212411.png

                                            Wert (unter "Trigger"):

                                            Blockly_DP_Props.JPG

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            414
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            33
                                            1248
                                            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