Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Boolean Verknüpfung

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    727

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    5.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

Boolean Verknüpfung

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
20 Beiträge 2 Kommentatoren 3.5k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • R Offline
    R Offline
    rewenode
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pfuhsy
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • R Offline
        R Offline
        rewenode
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • P Offline
          P Offline
          pfuhsy
          schrieb am zuletzt editiert von
          #14

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

          1 Antwort Letzte Antwort
          0
          • R Offline
            R Offline
            rewenode
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              pfuhsy
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • R Offline
                R Offline
                rewenode
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • P Offline
                  P Offline
                  pfuhsy
                  schrieb am zuletzt editiert von
                  #18

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

                  1 Antwort Letzte Antwort
                  0
                  • R Offline
                    R Offline
                    rewenode
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • R Offline
                      R Offline
                      rewenode
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0

                      Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                      Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                      Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                      Registrieren Anmelden
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      342

                      Online

                      32.8k

                      Benutzer

                      82.6k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe