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. Hex an TCP Client senden

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

Hex an TCP Client senden

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascriptnode-redcommunication
11 Beiträge 2 Kommentatoren 894 Aufrufe 2 Watching
  • Ä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.
  • M Offline
    M Offline
    Malaus
    schrieb am zuletzt editiert von
    #1

    Ich habe einen Modbus fähigen Dali Controller. Leider hat das mit Modbus nicht wirklich geklappt, daher bin ich auf die Idee gekommen den ganzen Hex Wert an das Gerät zu schicken. Den Hex Wert habe ich per Wireshark ausgelesen. Nun bin ich mir nicht sicher, wie ich den Wert per JavaScript oder NodeRed an das Gerät schicke.

    Bei JavaScript sieht das immoment so aus:

    var T1 = "javascript.0.Hilfswerte.Fernbedienung.T1";
    
    on({id: T1 , change: "any"},
    schalten);
    
    var net = require('net');
    
    function schalten(){
    if (getState(T1).val==true){
          var hex_data = [0x01,0x9b,0x00,0x00,0x00,0x17,0x01,0x17,0x00,0x65,0x00,0x05,0x00,0x64,0x00,0x06,0x0c,0x12,0x8a,0x00,0x03,0x00,0x00,0x01,0xa0,0x00,0x00,0x00,0x00]
          var data = Buffer.from(hex_data);
          var ip = '192.168.178.36';
          var port = 502;
          sendMessage(ip, port, data);
          }
    
    }
    
    function sendMessage(host, port, message) {
      var client = net.connect({host:host, port: port}, function () {
        // 'connect' listener
        console.log('connected to server!');
        client.write(message);
      });
      client.on('data', function (data) {
        console.log(data.toString());
        client.end();
      });
      client.on('end', function () {
        console.log('disconnected from server');
      });
      client.on('error', function (error) {
        console.error('error: ' + error);
        client.end();
      });
    
    }
    

    Bildschirmfoto 2020-03-18 um 10.41.57.png

    Und bei NodeRed so (Hatte noch nie was mit NodeRed zu tun):
    Bildschirmfoto 2020-03-18 um 10.34.00.png

    Bildschirmfoto 2020-03-18 um 10.43.19.png

    Ich hab auch schon versucht den Hex Wert in verschiedene Formate umzuformen.
    z.B.:

    ["0x01“,"0x9b","0x00","0x00","0x00","0x17","0x01","0x17","0x00","0x65","0x00","0x05","0x00","0x64","0x00","0x06","0x0c","0x12","0x8a","0x00","0x03","0x00,"0x00","0x01","0xa0","0x00","0x00","0x00","0x00"]
    

    Oder

    \x01\x9b\x00\x00\x00\x17\x01\x17\x00\x65\x00\x05\x00\x64\x00\x06\x0c\x12\x8a\x00\x03\x00\x00\x01\xa0\x00\x00\x00\x00
    
    J.A.R.V.I.S.J 1 Antwort Letzte Antwort
    0
    • M Malaus

      Ich habe einen Modbus fähigen Dali Controller. Leider hat das mit Modbus nicht wirklich geklappt, daher bin ich auf die Idee gekommen den ganzen Hex Wert an das Gerät zu schicken. Den Hex Wert habe ich per Wireshark ausgelesen. Nun bin ich mir nicht sicher, wie ich den Wert per JavaScript oder NodeRed an das Gerät schicke.

      Bei JavaScript sieht das immoment so aus:

      var T1 = "javascript.0.Hilfswerte.Fernbedienung.T1";
      
      on({id: T1 , change: "any"},
      schalten);
      
      var net = require('net');
      
      function schalten(){
      if (getState(T1).val==true){
            var hex_data = [0x01,0x9b,0x00,0x00,0x00,0x17,0x01,0x17,0x00,0x65,0x00,0x05,0x00,0x64,0x00,0x06,0x0c,0x12,0x8a,0x00,0x03,0x00,0x00,0x01,0xa0,0x00,0x00,0x00,0x00]
            var data = Buffer.from(hex_data);
            var ip = '192.168.178.36';
            var port = 502;
            sendMessage(ip, port, data);
            }
      
      }
      
      function sendMessage(host, port, message) {
        var client = net.connect({host:host, port: port}, function () {
          // 'connect' listener
          console.log('connected to server!');
          client.write(message);
        });
        client.on('data', function (data) {
          console.log(data.toString());
          client.end();
        });
        client.on('end', function () {
          console.log('disconnected from server');
        });
        client.on('error', function (error) {
          console.error('error: ' + error);
          client.end();
        });
      
      }
      

      Bildschirmfoto 2020-03-18 um 10.41.57.png

      Und bei NodeRed so (Hatte noch nie was mit NodeRed zu tun):
      Bildschirmfoto 2020-03-18 um 10.34.00.png

      Bildschirmfoto 2020-03-18 um 10.43.19.png

      Ich hab auch schon versucht den Hex Wert in verschiedene Formate umzuformen.
      z.B.:

      ["0x01“,"0x9b","0x00","0x00","0x00","0x17","0x01","0x17","0x00","0x65","0x00","0x05","0x00","0x64","0x00","0x06","0x0c","0x12","0x8a","0x00","0x03","0x00,"0x00","0x01","0xa0","0x00","0x00","0x00","0x00"]
      

      Oder

      \x01\x9b\x00\x00\x00\x17\x01\x17\x00\x65\x00\x05\x00\x64\x00\x06\x0c\x12\x8a\x00\x03\x00\x00\x01\xa0\x00\x00\x00\x00
      
      J.A.R.V.I.S.J Offline
      J.A.R.V.I.S.J Offline
      J.A.R.V.I.S.
      Developer
      schrieb am zuletzt editiert von J.A.R.V.I.S.
      #2

      @Malaus sagte in Hex an TCP Client senden:

      "0x01“

      Das “ ist kein " sondern ein “. Deswegen wird ein Fehler geworfen.

      Versuch es mal mit:

      ["0x01","0x9b","0x00","0x00","0x00","0x17","0x01","0x17","0x00","0x65","0x00","0x05","0x00","0x64","0x00","0x06","0x0c","0x12","0x8a","0x00","0x03","0x00","0x00","0x01","0xa0","0x00","0x00","0x00","0x00"]
      
      M 1 Antwort Letzte Antwort
      1
      • J.A.R.V.I.S.J J.A.R.V.I.S.

        @Malaus sagte in Hex an TCP Client senden:

        "0x01“

        Das “ ist kein " sondern ein “. Deswegen wird ein Fehler geworfen.

        Versuch es mal mit:

        ["0x01","0x9b","0x00","0x00","0x00","0x17","0x01","0x17","0x00","0x65","0x00","0x05","0x00","0x64","0x00","0x06","0x0c","0x12","0x8a","0x00","0x03","0x00","0x00","0x01","0xa0","0x00","0x00","0x00","0x00"]
        
        M Offline
        M Offline
        Malaus
        schrieb am zuletzt editiert von
        #3

        @J-A-R-V-I-S

        das hat funktioniert! Vielen Dank!
        Jetzt muss ich mir nur noch was ausdenken, wie ich am sinnvollsten die Helligkeit der Lampe schalte. Am besten eine Dezimal in Hex umrechnen.

        J.A.R.V.I.S.J 1 Antwort Letzte Antwort
        0
        • M Malaus

          @J-A-R-V-I-S

          das hat funktioniert! Vielen Dank!
          Jetzt muss ich mir nur noch was ausdenken, wie ich am sinnvollsten die Helligkeit der Lampe schalte. Am besten eine Dezimal in Hex umrechnen.

          J.A.R.V.I.S.J Offline
          J.A.R.V.I.S.J Offline
          J.A.R.V.I.S.
          Developer
          schrieb am zuletzt editiert von J.A.R.V.I.S.
          #4

          @Malaus sagte in Hex an TCP Client senden:

          Am besten eine Dezimal in Hex umrechnen.

          Hier, falls du das noch benötigst:

          const brightness = 60;
          
          const brightnessHex = brightness.toString(16);
          
          
          M 1 Antwort Letzte Antwort
          0
          • J.A.R.V.I.S.J J.A.R.V.I.S.

            @Malaus sagte in Hex an TCP Client senden:

            Am besten eine Dezimal in Hex umrechnen.

            Hier, falls du das noch benötigst:

            const brightness = 60;
            
            const brightnessHex = brightness.toString(16);
            
            
            M Offline
            M Offline
            Malaus
            schrieb am zuletzt editiert von Malaus
            #5

            @J-A-R-V-I-S

            nochmal Danke!
            Hab das nun eingebaut und laut log rechnet er es auch um allerdings schaltet er nur bei sehr kleinen Zahlen (1,3,6,..) und bei den größeren geht es aus. Und auch immer nur die gleiche Helligkeit. Nimm ich z.B. "0xC8" und ersetze das mit brightnessHex, geht die Lampe auf die jeweilige Helligkeit.

            function schalten(){
                const brightness = getState(T1).val;
             
                const brightnessHex = brightness.toString(16);
             
                  console.log("Level " + brightnessHex);
                  var hex_data = ["0x00","0x6f","0x00","0x00","0x00","0x17","0x01","0x17","0x00","0x65","0x00","0x05","0x00","0x64","0x00","0x06","0x0c","0x12","0x5f","0x00","0x03","0x00","0x00","0x00",brightnessHex,"0x00","0x00","0x00","0x00"] 
            
                  var data = Buffer.from(hex_data);
                  var ip = '192.168.178.36';
                  var port = 502;
                  sendMessage(ip, port, data);
            }
            

            Bildschirmfoto 2020-03-18 um 15.27.17.png

            Edit: Hab das problem beim absenden erkannt :D es fehlt 0x also so:

            const brightness = getState(T1).val;
            const brightnessHex = brightness.toString(16);
            const level = "0x" + brightnessHex
            
            1 Antwort Letzte Antwort
            0
            • M Offline
              M Offline
              Malaus
              schrieb am zuletzt editiert von
              #6

              Durch:

              client.on('data', function (data) {
                  console.log(data.toString());
                  client.end();
                });
              

              Erhalte ich ja eine Antwort vom Client. Wie kann ich diese auswerten? Im Log bekomme ich nur seltsame Zeichen:
              Bildschirmfoto 2020-03-19 um 14.47.39.png

              J.A.R.V.I.S.J 1 Antwort Letzte Antwort
              0
              • M Malaus

                Durch:

                client.on('data', function (data) {
                    console.log(data.toString());
                    client.end();
                  });
                

                Erhalte ich ja eine Antwort vom Client. Wie kann ich diese auswerten? Im Log bekomme ich nur seltsame Zeichen:
                Bildschirmfoto 2020-03-19 um 14.47.39.png

                J.A.R.V.I.S.J Offline
                J.A.R.V.I.S.J Offline
                J.A.R.V.I.S.
                Developer
                schrieb am zuletzt editiert von
                #7

                @Malaus ich weiß nicht genau was da ankommt, vermutlich ein Array? Dann versuch mal folgendes:

                log(JSON.stringify(data));
                
                1 Antwort Letzte Antwort
                0
                • M Offline
                  M Offline
                  Malaus
                  schrieb am zuletzt editiert von
                  #8

                  Ja das funktioniert soweit:

                  Bildschirmfoto 2020-03-19 um 15.26.46.png

                  Jetzt kann ich doch mit

                  JSON.parse();
                  

                  das in Number umwandeln und danach wieder in Hex. Also mein Ziel wäre, es mit der gesendeten Hex Datei zu vergleichen.
                  Nur leider spuckt er mir nur [object][object] aus.
                  Wo ist da mein Denkfehler?

                  J.A.R.V.I.S.J 1 Antwort Letzte Antwort
                  0
                  • M Malaus

                    Ja das funktioniert soweit:

                    Bildschirmfoto 2020-03-19 um 15.26.46.png

                    Jetzt kann ich doch mit

                    JSON.parse();
                    

                    das in Number umwandeln und danach wieder in Hex. Also mein Ziel wäre, es mit der gesendeten Hex Datei zu vergleichen.
                    Nur leider spuckt er mir nur [object][object] aus.
                    Wo ist da mein Denkfehler?

                    J.A.R.V.I.S.J Offline
                    J.A.R.V.I.S.J Offline
                    J.A.R.V.I.S.
                    Developer
                    schrieb am zuletzt editiert von J.A.R.V.I.S.
                    #9

                    @Malaus wenn du ein Buffer in ein JSON Object umwandeln möchtest, dann versuch mal folgendes:

                    const obj = JSON.parse(data.toString());
                    

                    bzw.

                    const obj = data.toJSON().data;
                    
                    M 1 Antwort Letzte Antwort
                    1
                    • J.A.R.V.I.S.J J.A.R.V.I.S.

                      @Malaus wenn du ein Buffer in ein JSON Object umwandeln möchtest, dann versuch mal folgendes:

                      const obj = JSON.parse(data.toString());
                      

                      bzw.

                      const obj = data.toJSON().data;
                      
                      M Offline
                      M Offline
                      Malaus
                      schrieb am zuletzt editiert von
                      #10

                      @J-A-R-V-I-S ich hätte da noch eine Frage:
                      Gibt es eine simple Möglichkeit ein bestimmtes Modbus Register per Javascript abzufragen? Also das ich den Modbus Adapter umgehe.

                      J.A.R.V.I.S.J 1 Antwort Letzte Antwort
                      0
                      • M Malaus

                        @J-A-R-V-I-S ich hätte da noch eine Frage:
                        Gibt es eine simple Möglichkeit ein bestimmtes Modbus Register per Javascript abzufragen? Also das ich den Modbus Adapter umgehe.

                        J.A.R.V.I.S.J Offline
                        J.A.R.V.I.S.J Offline
                        J.A.R.V.I.S.
                        Developer
                        schrieb am zuletzt editiert von
                        #11

                        @Malaus mit Modbus habe ich leider nichts am Hut, da kann ich die leider nicht weiterhelfen.

                        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

                        706

                        Online

                        32.7k

                        Benutzer

                        82.4k

                        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