Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. Iobroker JavaScript MQTT Fehler

    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

    Iobroker JavaScript MQTT Fehler

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

      Systemdata Bitte Ausfüllen
      Hardwaresystem: Windows 10
      Betriebssystem: Ubuntu als Subsystem
      Node-Version: 14.21.1
      NPM-Version: 6.14.17

      Hallo zusammen,

      ich habe ein Script, das im Visual Studio Code funktioniert.

      code_tvar dgram = require("dgram");
      var CronJob = require('cron').CronJob;
      const mqtt = require('mqtt');
      
      var client = dgram.createSocket("udp4");
      var PORT = process.env.UDP_PORT||"4000";
      var IPadress = process.env.UDP_IP ||"192.168.178.90";
      var ID = process.env.RL_ID||"002D001E47435719";
      var IDSZ = "002D001E47435719";
      var PWD = "1111"
      var MQTTserver = process.env.MQTT_IP ||"192.168.178.54";
      var MQTTPort = process.env.MQTT_PORT ||"1883";
      
      var mqtt_temp_message = "";
      var header  = Buffer.from(
              [ 0xFD, 0xFD,   // Beginn des Pakets
               0x02,          // Protokolltyp
               0x10,          // ID Blockgroesse
               ]
              );
      var IDbuf = Buffer.from(ID);
      var PWDsizebuf = Buffer.from([0x04]);
      var PWDbuf = Buffer.from(PWD);
      var writeFlevelbuf = Buffer.from('init');
      var writeModebuf = Buffer.from('init');
      
      const clientId = `mqtt_${Math.random().toString(16).slice(3)}`;
      
      var mqtt_url = 'mqtt://${MQTTServer}:${MQTTport}';
      //console.log(mqtt_url);
      const mqtt_client  = mqtt.connect(mqtt_url, clientId);
      
      mqtt_client.on('connect', function(){
      	console.log("connected to mqtt");
      	mqtt_client.subscribe('rl/Bathroom/cmnd/fan_level');
      	mqtt_client.subscribe('rl/Bathroom/cmnd/mode');
      	}
      );
      
      
      mqtt_client.on('message', function(topic, message){
      	//message ist Buffer
      	//console.log(topic);
      	if(topic.includes("fan_level")){
      		// construct fan_level write message
      		var dataarr = new Uint8Array(1);
      		dataarr[0] = parseInt(message.toString());
      		var writeFlevelDatabuf = Buffer.from([0x02, 0x02]);
      		writeFlevelbuf = Buffer.concat([header, IDbuf, PWDsizebuf, PWDbuf, writeFlevelDatabuf, Buffer.from(dataarr.buffer)]);
      		var checksum_writeFlevel = calcchecksum(writeFlevelbuf);
      		writeFlevelbuf = Buffer.concat([writeFlevelbuf,checksum2buffer(checksum_writeFlevel)]);
      		console.log(writeFlevelbuf);
      		client.send(writeFlevelbuf, PORT, IPadress);
      		console.log("fan level case");
      	}
      	else if(topic.includes("mode")){
      		// construct Mode write message
      		var error = 0;
      		var modedataarr = new Uint8Array(1);
                      if(message.toString() == "ventilation"){modedataarr[0] = 0;}
                      else if(message.toString() == "regeneration"){modedataarr[0] = 1;}
                      else if(message.toString() == "supplyair"){modedataarr[0] = 2;}
      		else {
      			console.log("bad mode command", message.toString());
      			error = 1;
      			}
      		if(error == 0){
      			var writeModeDatabuf = Buffer.from([0x02, 0xB7]);
      			writeModebuf = Buffer.concat([header, IDbuf, PWDsizebuf, PWDbuf, writeModeDatabuf, Buffer.from(modedataarr.buffer)]);
      			var checksum_writeMode = calcchecksum(writeModebuf);
      			writeModebuf = Buffer.concat([writeModebuf,checksum2buffer(checksum_writeMode)]);
      			console.log(writeModebuf);
      			client.send(writeModebuf, PORT, IPadress);
      			}
      		console.log("mode case");
      	}
      	else{
      		console.log(message.toString())
      	}
      });
      
      
      
      // UDP
      client.on("message", function(message, rinfo) {
          	console.log("received: ", message, rinfo);
      	datalen = rinfo.size - 24 - message.readInt8(20);
      	databuf = message.subarray(20+message.readInt8(20)+2, -2) //20 byte upfront, pwd length, pwd, func
      	for (let i=0; i < datalen; i+=2){
      		console.log("data = ", databuf[i]);
      		switch(databuf[i]){
      			case(1):
      				console.log("RL ist  ", databuf[i+1]?"an":"aus");
      				mqtt_client.publish('/rl/Bathroom/status', databuf[i+1]?"on":"off", { qos: 0, retain: true });
      				break;
      			case(2):
      				console.log("Lueftungsstufe ist ", databuf[i+1]);
      				mqtt_client.publish('/rl/Bathroom/fan_level', databuf[i-1]?databuf[i+1].toString():"0", { qos: 0, retain: true });
      				break;
      			case(37): //0x25
      				console.log("Feuchtigkeit Bad ist ", databuf[i+1]);
      				mqtt_client.publish('/rl/Bathroom/humidity', databuf[i+1].toString(), { qos: 0, retain: true });
      				break;
      			case(183): //0xB7
      				if(databuf[i+1].toString() == "0"){mqtt_temp_message = "ventilation";}
      				else if(databuf[i+1].toString() == "1"){mqtt_temp_message = "regeneration";}
      				else if(databuf[i+1].toString() == "2"){mqtt_temp_message = "supplyair";}
      				else {mqtt_temp_message = "error"+ databuf[i+1].toString();} 
      				mqtt_client.publish('/rl/Bathroom/mode', mqtt_temp_message, { qos: 0, retain: true });
                                      break;
      			default:
      				console.log("unknown ID");
      				console.log(message, rinfo)
      		}
      	}
      
      });
      
      client.bind(PORT);
      
      function calcchecksum(intbuff){
      	let checksum = 0;
      	for (let i = 2; i < intbuff.length; i++) {
        		// console.log(newbuff[i]);
        		checksum+=intbuff[i];
      	}
      	//console.log("checksum = " , checksum);
      	return checksum;
      }
      
      function checksum2buffer(checksum){
      	const arr = new Uint8Array(2);
      	arr[0] = checksum%256;
      	arr[1] = checksum/256;
      	return Buffer.from(arr.buffer);
      }
      
      
      // setup UDP messages
      //var Databuf = Buffer.from([0x01, 0xb9, 0x92, 0xa3]);
      var Databuf = Buffer.from([0x01, 0x01, 0x02, 0x25, 0xB7]);
      
      var list = [header, IDbuf, PWDsizebuf, PWDbuf, Databuf];
      var intbuff = Buffer.concat(list);
      
      //calculate checksum
      let checksum = calcchecksum(intbuff);
      const arr = new Uint8Array(2);
      arr[0] = checksum%256;
      arr[1] = checksum/256;
      const checksumbuff = Buffer.from(arr.buffer);
      
      var list2 = [intbuff,checksum2buffer(checksum)];
      var getbuff = Buffer.concat(list2);
      console.log(getbuff);
      
      
      // <Buffer fd fd 02 10 30 30 34 41 30 30 32 45 34 33 35 33 35 33 30 42 04 31 31 31 31 01 01 02 de 00>
      var job = new CronJob('*/10 * * * * *', function() {
      	client.send(getbuff, PORT, IPadress);
       	console.log('You will see this message every second');
      }, null, true, 'Europe/Berlin');
      job.start();
      
      
      //from App
      //fd fd 02 10 30 30 34 45 30 30 33 35 34 33 35 33 35 33 30 42 04 31 31 31 31 01 b9 92 a3 13 06
      //fd fd 02 10 30 30 34 41 30 30 32 45 34 33 35 33 35 33 30 42 04 31 31 31 31 01 b9 92 a3 1e 06
      
      ext
      

      Ich habe versucht das Script mit dem JS Adpater von Iobroker zu starten.

      Leider funktioniert es nicht.

      Das Problem ist folgendes: in der Zeile 31

      25f18aea-50a1-4d43-b17f-a9e65090f8be-grafik.png
      bekomme ich folgende Meldung:
      Property 'connect' does not exist on type 'typeof import("mqtt")'

      Kann mir jemand bitte weiter helfen?

      paul53 1 Reply Last reply Reply Quote 0
      • Cinimod
        Cinimod Most Active last edited by

        @karloslb

        Bisschen mehr Infos währen hilfreich um dir zu helfen

        K 1 Reply Last reply Reply Quote 0
        • K
          karloslb @Cinimod last edited by

          @cinimod sorry, bin neu im Forum. Es hat ein wenig gedauert.

          Homoran Cinimod 2 Replies Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @karloslb last edited by

            @karloslb hilft das?

            https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md

            K 1 Reply Last reply Reply Quote 0
            • Cinimod
              Cinimod Most Active @karloslb last edited by

              @karloslb

              Alles gut, war nicht bös gemeint. Es war nur nichts zum auswerten da 😊

              Ich bin da leider raus.

              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @karloslb last edited by

                @karloslb sagt: Das Problem ist folgendes: in der Zeile 31

                Ignorieren! Der Javascript-Editor meckert bei Attributen, die er nicht kennt.

                1 Reply Last reply Reply Quote 0
                • K
                  karloslb @Homoran last edited by

                  @homoran sagte in Iobroker JavaScript MQTT Fehler:

                  @karloslb hilft das?

                  https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md

                  Nein, leider nicht. Ich bin nicht so fortgeschritten.

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  818
                  Online

                  31.8k
                  Users

                  80.0k
                  Topics

                  1.3m
                  Posts

                  4
                  7
                  191
                  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