Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Switch-Node und JSON

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.3k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.6k

Switch-Node und JSON

Scheduled Pinned Locked Moved Skripten / Logik
15 Posts 2 Posters 2.2k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    rewenode
    wrote on last edited by
    #5

    Irgend was falsch abgeschrieben?

    Bei mir geht es:

    ! ````
    [{"id":"86c2e068.ff494","type":"debug","z":"8ba3e952.5c0868","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":610,"y":180,"wires":[]},{"id":"e105a427.a5ccd8","type":"inject","z":"8ba3e952.5c0868","name":"","topic":"","payload":"{"canid":289,"dlc":3,"data":[1,2,2],"payload":"289#\u0001\u0002\u0001","_msgid":"44a517cd.bfd338"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":90,"y":180,"wires":[["a4c35bda.d1a118"]]},{"id":"a4c35bda.d1a118","type":"switch","z":"8ba3e952.5c0868","name":"wenn id==289 und data[2]==1 dann Ausg.1","property":"payload","propertyType":"msg","rules":[{"t":"jsonata_exp","v":"payload.canid = 289 and payload.data[2] = 1","vt":"jsonata"}],"checkall":"true","repair":false,"outputs":1,"x":350,"y":180,"wires":[["86c2e068.ff494"]]}]

    
    Poste mal deinen flow-export
    1 Reply Last reply
    0
    • R Offline
      R Offline
      rewenode
      wrote on last edited by
      #6

      Kann es sein, dass dein Objekt Export nicht korrekt ist?

      Auf deinem ersten Bild ist data ein buffer. Im export ein einfaches array.

      1 Reply Last reply
      0
      • R Offline
        R Offline
        rewenode
        wrote on last edited by
        #7

        Ok ich seh schon, der Export war das komplette Object. Ich schau mal..

        1 Reply Last reply
        0
        • SchlippiS Offline
          SchlippiS Offline
          Schlippi
          wrote on last edited by
          #8

          Das ist eins meiner Probleme.

          Die Daten aus dem CanDumb-Node ist:

          {"canid":1,"dlc":3,"data":[0,0,1],"payload":"1#\u0000\u0000\u0001","_msgid":"cd3218ea.e75a78"}
          17327_1.png
          Die Daten werden als Buffer angezeigt.

          Leider reichen meine Java- und JSON-Kenntnisse dafür noch nicht aus.

          Wie kann ich das nutzen bzw. vergleichen. Ich werde noch öffters auf das Buffer-Problem stoßen.

          1 Reply Last reply
          0
          • R Offline
            R Offline
            rewenode
            wrote on last edited by
            #9

            Alles klar wart mal kurz.

            1 Reply Last reply
            0
            • R Offline
              R Offline
              rewenode
              wrote on last edited by
              #10

              Fällt mir auf die Schnelle nur ein function-node ein.

              Problem ist, dass du mit JSONata nicht auf ein Javascript Buffer-Object zugreifen kannst (gilt übrigens auch für data-objects).

              ! ````
              [{"id":"77dd4923.67a078","type":"function","z":"8ba3e952.5c0868","name":"wenn id==289 und data[2]==1 dann Ausg.1","func":"let data = Array.prototype.slice.call(msg.data, 0);\n\nif (msg.canid == 289 && data[2] == 1 ) {\n node.send(msg);\n node.status({fill:"green",shape:"dot"});\n} else {\n node.status({fill:"red",shape:"dot"});\n}\n\n","outputs":1,"noerr":0,"x":630,"y":260,"wires":[["caaa9b3e.024f48"]]}]

              
              Das kannst du anstatt des switch nehmen.
              
              Funktioniert genauso. Die KOMPLETTE Eingangs-msg wird nur weitergeleitet, wenn die Bedingung erfüllt ist:
              
              ****function-node****
              

              //buffer to array
              let data = Array.prototype.slice.call(msg.data, 0);

              if (msg.canid == 289 && data[2] == 1 ) {
              node.send(msg);
              node.status({fill:"green",shape:"dot"});
              } else {
              node.status({fill:"red",shape:"dot"});
              }

              
              Natürlich kannst du hier den auszugebenden payload noch nach deinen Wünschen anpassen.
              
              Mir fällt auf, dass sowohl die canid als auch die bufferdaten noch in Stringform im payload stehen. In diesem Fall könnte man auch im switch-node mit den JSONata String-functions arbeiten.
              1 Reply Last reply
              0
              • R Offline
                R Offline
                rewenode
                wrote on last edited by
                #11

                Übrigens, falls du den buffer nicht für andere Zwecke als array brauchst, kannst du natürlich ohne Array-Konvertierung direkt abfragen

                if (msg.canid == 289 && msg.data[2] == 1 ) ...
                
                1 Reply Last reply
                0
                • SchlippiS Offline
                  SchlippiS Offline
                  Schlippi
                  wrote on last edited by
                  #12

                  So,

                  bin jetzt erst dazu gekommen es zu testen.

                  Funktioniert gut. Es ist aber mit der Switch-Funktion schon angenehmer. Deshalb habe ich hinter das CanDumb-Node die Funktion mit deinem Code gehängt und habe msg.data = data zugefügt.

                  let data = Array.prototype.slice.call(msg.data, 0);
                  
                  msg.data = data;
                  
                  if (msg.canid == 1 && data[2] == 1 ) {
                     node.send(msg);
                     node.status({fill:"green",shape:"dot"});
                  } else {
                     node.status({fill:"red",shape:"dot"});
                  }
                  return msg;
                  

                  Jetzt müsste ich das Switch-Node nutzen können. Ist mir für die weitere nutzung ziemlich egal, ob es ein Buffer oder ein Array ist.

                  Vielen Dank. Das bringt mich meiner Hausdigitalisierung sehr weiter. Ich kann nur C++ auf Microkontrollern programmieren. Der Wechsel auf Java und Node-Red fällt mir doch schwerer als gedacht.

                  1 Reply Last reply
                  0
                  • R Offline
                    R Offline
                    rewenode
                    wrote on last edited by
                    #13

                    @Schlippi:

                    Der Wechsel auf Java und Node-Red fällt mir doch schwerer als gedacht. `
                    Willkommen im Club :lol:
                    @Schlippi:

                    Deshalb habe ich hinter das CanDumb-Node die Funktion mit deinem Code gehängt und habe msg.data = data zugefügt. `
                    Ja, das sollte klappen.

                    msg.data = Array.prototype.slice.call(msg.data, 0);
                    

                    Viel Spaß noch

                    1 Reply Last reply
                    0
                    • SchlippiS Offline
                      SchlippiS Offline
                      Schlippi
                      wrote on last edited by
                      #14

                      Ha, jetzt hab ich ein ähnliches Problem mit dem ui_Switch für das Dashboard.

                      Ich kann mit dem Switch Nachrichten versenden mit z.B.:

                      When click, send

                      On payload````
                      {"canid":11,"dlc":3,"data":[1,0,21]}

                      Off payload````
                      {"canid":11,"dlc":3,"data":[1,0,22]}
                      

                      Ich hätte natürlich auch gerne, dass sich der Switch-Zustand ändert, wenn Nachrichten ankommen.

                      Problem ist, dass der ui_switch wohl nur auf den payload reagiert, aber nicht auf ein Object?

                      Der Payload ist aber nutzlos, sobald Hex-Zahlen aus dem CAN-Bus ankommen.

                      Es muss auch nicht unbedingt der ui_switch im Dashboard benutzt werden. Gerne auch ein anderes Node. Ich würde halt nur gerne im Dashboar sehen, ob eine Lampe aus bzw. an ist. Der Lampenstatus wird per CAN-Bus gesendet.

                      1 Reply Last reply
                      0
                      • R Offline
                        R Offline
                        rewenode
                        wrote on last edited by
                        #15

                        Setz halt einen function-/change-node vor den Eingang des ui-switch, der dir den payload so aufbereitet, dass nur true/false drinsteht.

                        Mach ich immer so

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        316

                        Online

                        32.5k

                        Users

                        81.7k

                        Topics

                        1.3m

                        Posts
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Home
                        • Recent
                        • Tags
                        • Unread 0
                        • Categories
                        • Unreplied
                        • Popular
                        • GitHub
                        • Docu
                        • Hilfe