Skip to content
  • 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
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Boolean Verknüpfung

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

Boolean Verknüpfung

Boolean Verknüpfung

Scheduled Pinned Locked Moved Skripten / Logik
20 Posts 2 Posters 3.3k 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
    #11

    Mein function-node hat noch Schönheitsfehler. Habe erst zuspät bemerkt, dass der Input Hex-Zahlen sind. Deshalb ist auf die Regular Expression kein Verlass. Außerdem verhält sich die string.split() Methode recht sperrig bei regEx. Mit string.match() gehts deutlich einfacher.

    ! ````
    //splitte string in int-Array
    let aI = msg.payload.match(/.{1,2}(?=(.{2})+(?!.))|.{1,2}$/g) //split in 2stellige strings
    .map(x => parseInt(x,16)); //konvertiere HEX strings nach Integer
    ! //xor vom inputArray
    let mustXor = aI[aI.length-1];
    ! //xor aus inputArry entfernen, ist nötig, damit sich die reduce() Methode verwenden läßt
    aI.splice(-1, 1);
    ! //xor aus inputarry bilden
    let ifXor = aI.reduce((v, vnext) => v ^ vnext);
    ! if (ifXor == mustXor) { //no error
    ! node.status({fill:"green",shape:"dot",text:'no error'})
    node.send([{payload: aI[0]},
    {payload: aI[1]},
    {payload: aI[2]},
    {payload: aI[3]},
    {payload: aI[4]},
    {payload: aI[5]},
    {payload: aI[6]},
    {payload: 'no error'}]);
    ! } else { //xor error

    node.status({fill:"red",shape:"dot",text:'XOR error'})
    node.send([null,null,null,null,null,null,null,{payload: 'XOR error'}]);
    

    }

    ! ````

    Du kannst den beiliegenden Code einfach komplett in das function-node pasten.

    Ist soweit eigentlich kommentiert. Ansonsten frag einfach.

    1 Reply Last reply
    0
    • P Offline
      P Offline
      pfuhsy
      wrote on last edited by
      #12

      Top. Das geht. Danke.

      In "mustXor" steht der errechnete Wert, soviel hab ich verstanden. Wie bekomme ich ihn wieder in Hex gewandelt, also damit 3A anstatt 58 drin steht ? Am besten auch immer 2stellig. D.h. wenn ich eine 4 habe, brauche ich in Hex genauer genommern eine 04.

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

        Also mit toString() Methode kannst du eine Zahl wieder in einen String konvertieren.

        https://www.w3schools.com/jsref/jsref_t … number.asp

        Also falls do mustXor wieder als String brauchst, wäre das mustXor.toString(16). Aber wozu? Der XOR Test ist ja schon gemacht.

        1 Reply Last reply
        0
        • P Offline
          P Offline
          pfuhsy
          wrote on last edited by
          #14

          Weil ich einen Sheldon-Tick habe und die beiden auch noch in 2 Objekten sehen will.
          6863_unbenannt.jpg

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

            Na dann schreib ihn vlt. gleich zum Ausgang 8.

            if (ifXor == mustXor) {  //no error
            
                node.status({fill:"green",shape:"dot",text:'no error'})
                node.send([{payload: aI[0]},
                           {payload: aI[1]},
                           {payload: aI[2]},
                           {payload: aI[3]},
                           {payload: aI[4]},
                           {payload: aI[5]},
                           {payload: aI[6]},
                           {payload: mustXor.toString(16)}]);
            
            } else {  //xor error
            
                node.status({fill:"red",shape:"dot",text:'XOR error'})
                node.send([null,null,null,null,null,null,null,{payload: 'XOR error'}]);
            }
            
            

            Falls du ihn im Fehlerfall auch haben willst, dann halt statt {payload: 'XOR error'} ebenfalls {payload: mustXor.toString(16)}

            1 Reply Last reply
            0
            • P Offline
              P Offline
              pfuhsy
              wrote on last edited by
              #16

              Ok ist drin. Funkioniert. Und wie bekomme ich den letzten Schönheitsfehler noch raus, 2Stellig ? ich suche gerne bei google "node red String format". Ich finde was mit "%2" oder so ähnlich. Kenn ich auch C, hab ich die Syntax noch nicht richtig drin.

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

                Versuch mal````
                {payload: mustXor.toString(16).padStart(2, '0')}

                Fall du alle Ausgänge als hex 2stellig haben willst, dann musst du das .toString(16).padStart(2, '0') überall anhängen.
                1 Reply Last reply
                0
                • P Offline
                  P Offline
                  pfuhsy
                  wrote on last edited by
                  #18

                  Super. Ich danke dir für die Unterstützung, hast mir sehr geholfen. Ich probiere das morgen mal aus.

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

                    Sorry, ich seh grad, das geht wohl in node-red nicht mit dem padstart() hier getestet: https://www.jdoodle.com/execute-nodejs-online

                    Muss mal sehen was man da machen kann.

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

                      Nicht schön, aber auf die Schnelle fällt mir auch nur eine eigene Funktion ein.

                      //splitte string in int-Array 
                      let aI = msg.payload.match(/.{1,2}(?=(.{2})+(?!.))|.{1,2}$/g)  //split in 2stellige strings
                                          .map(x => parseInt(x,16));                 //konvertiere HEX strings nach Integer
                      
                      //xor vom inputArray
                      let mustXor = aI[aI.length-1];
                      
                      //xor aus inputArry entfernen
                      aI.splice(-1, 1);
                      
                      //xor aus inputaary bilden
                      let ifXor = aI.reduce((v, vnext) => v ^ vnext);
                      
                      let fix2 = (x) => ('0'+x).slice(-2);  // einstelligen String mit führender Null
                      
                      if (ifXor == mustXor) {  //no error
                      
                          node.status({fill:"green",shape:"dot",text:'no error'})
                          node.send([{payload: fix2(aI[0].toString(16))},
                                     {payload: fix2(aI[1].toString(16))},
                                     {payload: fix2(aI[2].toString(16))},
                                     {payload: fix2(aI[3].toString(16))},
                                     {payload: fix2(aI[4].toString(16))},
                                     {payload: fix2(aI[5].toString(16))},
                                     {payload: fix2(aI[6].toString(16))},
                                     {payload: fix2(mustXor.toString(16))}]);
                      
                      } else {  //xor error
                      
                          node.status({fill:"red",shape:"dot",text:'XOR error'})
                          node.send([null,null,null,null,null,null,null,{payload: 'XOR error'}]);
                      }
                      

                      Jetzt wird an allen Ausgängen ein 2stelliger String ausgegeben.

                      Edit: geht auch etwas kürzer s.o. und diesmal ohne Copy/Paste Fehler –hoffe ich 😉

                      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

                      597

                      Online

                      32.4k

                      Users

                      81.3k

                      Topics

                      1.3m

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

                      • Don't have an account? Register

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