Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Umwandlung DEC in BIN bzw. Aufteilung in einzelner BITS

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Umwandlung DEC in BIN bzw. Aufteilung in einzelner BITS

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
4 Beiträge 2 Kommentatoren 828 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.
  • T Offline
    T Offline
    techer2
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    habe jetzt schon gefühlt das ganze Forum dreimal durchsucht und nichts gefunden. :cry:

    Ich habe folgendes Probelem:

    Ich bekommen einen Wert (DEC-Dezimalwert) im Modubus gesendet von einer 8BIT Digital-Eingangskarte.

    Der Wert wird als Dezimalzahl gesendet, d.H. wenn der Wert 170 ist (BIN 10101010) bedeutet das die Eingänge 1,3,5,7 auf "1" sind und die 2,4,6,8 auf "0" sind.

    Jetzt stehe ich vor dem Problem die Digitaleingänge im IOBroker zu nutzen.

    Also ich würde gerne im IOBroker Objekte erzeugen für die Digitaleingänge 1-8 aus dem DEC-Wert.

    Ich denke wenn es hierfür einen Weg gibt, wäre der weg für die 8Bit Digitalausgangkarte dann auch klar.

    Ich habe von einem Anderen System ein Funktion die dieses Problem einfach löst:

    3802_var_iobroker.png

    Vielen Dank schon mal für Eure Zeit

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2
      const idVar = '...'; // Datenpunkt-ID Modbus Input
      
      var name = 'Modbus.DI';
      var di;
      
      for(var i = 0; i < 8; i++) {
         di = 8 - i;
         createState(name + di, false, {type: 'boolean'});
      }   
      
      function dec2bool(dp) {
         var in = dp.state.val;
         var b;
         for(var i = 0; i < 8; i++) {
            b = !!(in >> i & 1);
            di = 8 - i;
            setState(name + di, b, true);
         }
      }
      
      on(idVar, dec2bool); // Triggern bei Wertänderung
      
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #3

        Damit der Zeitstempel der Datenpunkte den Zeitpunkt der Änderung des jeweiligen DI enthält, sollte man prüfen, ob sich das Bit geändert hat.

        `const idVar = '...'; // Datenpunkt-ID Modbus Input
        
        var name = 'Modbus.DI';
        var bits = [false,false,false,false,false,false,false,false];
        
        for(var i = 0; i < 8; i++) {
           var di = 8 - i;
           createState(name + di, false, {type: 'boolean'});
        }   
        
        function dec2bool(in) {
           for(var i = 0; i < 8; i++) {
              var b = !!(in >> i & 1);
              if(b != bits[i]) {
                 var di = 8 - i;
                 setState(name + di, b, true);
                 bits[i] = b;
              }   
           }
        }
        
        on(idVar, function(dp) { // Triggern bei Wertänderung
           dec2bool(dp.state.val);
        });` [/i][/i]
        

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        1 Antwort Letzte Antwort
        0
        • T Offline
          T Offline
          techer2
          schrieb am zuletzt editiert von
          #4

          Hallo Paul,

          schon mal vielen Dank für deine Antwort und LÖSUNG!!! :D

          Ich habe diese heute morgen mal Studiert und ausprobiert.

          Da meine JS-Kenntnisse sich auf 0,1% definieren lassen(0,1% = ich weiß das es einen JS-Adapter gibt. ENDE :lol: ), war es nicht ganz so einfach wie gedacht :lol:

          Aber ich denke ich habe es jetzt verstanden und mal versucht es für JS-Anfänger zu beschreiben.

          Ich hatte bei dem Import noch eine Fehlermeldung die ich jetzt hoffentlich berichtigt habe?

          function dec2bool(in) { (habe ich in dp geändert)

          for(var i = 0; i < 8; i++) {

          var b = !!(in >> i & 1); (habe ich in dp geändert)

          (Es läuft auf jeden fall bei mir mal)

          Nur ich denke das der Weg "Rückwärts", also DOs zu schreiben doch nicht so einfach ist wie gedacht. Aber ich werde es demnächst versuchen und mein Ergebnis Posten :D

          `const idVar = 'ASIM.Telegram.MODBUS_DI2'; // Datenpunkt-ID Modbus Input
          
          var name = 'Modbus.DI_2';               //Legt 8 Datenpunkte im Javascript-Objektordner an
          var bits = [false,false,false,false,false,false,false,false];
          
          for(var i = 0; i < 8; i++) {
             var di = 8 - i;
             createState(name + di, false, {type: 'boolean'});
          }   
          
          function dec2bool(dp) {                 // function = js befehl / dec2bool = frei vergebener Name für die Funktion / dp = temporäre Variable für die funktion
             for(var i = 0; i < 8; i++) {
                var b = !!(dp >> i & 1);
                if(b != bits[i]) {
                   var di = 8 - i;
                   setState(name + di, b, true);
                   bits[i] = b;
                }   
             }
          }
          
          on(idVar, function(dp) { // Triggern bei Wertänderung
             dec2bool(dp.state.val);
          })`[/i][/i]
          
          1 Antwort Letzte Antwort
          0
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          672

          Online

          32.6k

          Benutzer

          82.3k

          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