Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Hex an TCP Client senden

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Hex an TCP Client senden

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Malaus last edited by

      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. 1 Reply Last reply Reply Quote 0
      • J.A.R.V.I.S.
        J.A.R.V.I.S. Developer @Malaus last edited by 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 1 Reply Last reply Reply Quote 1
        • M
          Malaus @J.A.R.V.I.S. last edited by

          @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. 1 Reply Last reply Reply Quote 0
          • J.A.R.V.I.S.
            J.A.R.V.I.S. Developer @Malaus last edited by 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 1 Reply Last reply Reply Quote 0
            • M
              Malaus @J.A.R.V.I.S. last edited by Malaus

              @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 😄 es fehlt 0x also so:

              const brightness = getState(T1).val;
              const brightnessHex = brightness.toString(16);
              const level = "0x" + brightnessHex
              
              1 Reply Last reply Reply Quote 0
              • M
                Malaus last edited by

                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. 1 Reply Last reply Reply Quote 0
                • J.A.R.V.I.S.
                  J.A.R.V.I.S. Developer @Malaus last edited by

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

                  log(JSON.stringify(data));
                  
                  1 Reply Last reply Reply Quote 0
                  • M
                    Malaus last edited by

                    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. 1 Reply Last reply Reply Quote 0
                    • J.A.R.V.I.S.
                      J.A.R.V.I.S. Developer @Malaus last edited by 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 1 Reply Last reply Reply Quote 1
                      • M
                        Malaus @J.A.R.V.I.S. last edited by

                        @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. 1 Reply Last reply Reply Quote 0
                        • J.A.R.V.I.S.
                          J.A.R.V.I.S. Developer @Malaus last edited by

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

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          863
                          Online

                          31.8k
                          Users

                          80.0k
                          Topics

                          1.3m
                          Posts

                          communication javascript node-red
                          2
                          11
                          784
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo