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. Umwandlung DEC in BIN bzw. Aufteilung in einzelner BITS

NEWS

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

  • 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

Scheduled Pinned Locked Moved Skripten / Logik
4 Posts 2 Posters 828 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.
  • T Offline
    T Offline
    techer2
    wrote on last edited by
    #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 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #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 Reply Last reply
      0
      • paul53P Offline
        paul53P Offline
        paul53
        wrote on last edited by
        #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 Reply Last reply
        0
        • T Offline
          T Offline
          techer2
          wrote on last edited by
          #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 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

          644

          Online

          32.7k

          Users

          82.3k

          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