digitalstrom_mqtt_gateway_in_a_docker_container

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
digitalstrom_mqtt_gateway_in_a_docker_container [06.07.2024 09:26] Pascal Suterdigitalstrom_mqtt_gateway_in_a_docker_container [06.07.2024 09:47] (current) Pascal Suter
Line 1: Line 1:
 ====== DigitalSTROM MQTTG Gateway in a Docker container ====== ====== DigitalSTROM MQTTG Gateway in a Docker container ======
-**this is WIP**  +this is how i set up Chriss Gross' [[https://github.com/cgHome/mqtt-dss-bridge|MQTT bridge]] to run inside a node docker container. i have also slightly modified his script to use authentication and to allow setting the ''qos'' in the config file as well. in addition to that i have written a wrapper script in bash that will constantly (as in every second) check when the last contact was established to the dss server. if that's too long ago, it will restart the bridge. this was necessary because otherwise the bridge script would not recognize when it had lost the connection to the dss server (i.e. because of a network outage or because the dss has been restarted or whatever other reason there might be) and it would need a manual intervention. this script fixed this issue for me pretty reliably.   
-this is how i set up Chriss Gross' [[https://github.com/cgHome/mqtt-dss-bridge|MQTT bridge]] to run inside a node docker container. i have also slightly modified his script to use authentication and to allow setting the ''qos'' in the config file as well: + 
 +on a personal note i want to add: kudos to node.js for still being able to run a script that hasn't been touched for 9 years without modifying a single line of code! this actually makes the need to dockerize this quite questionable. however, i still perfer it this way in my current setup :) 
 + 
 +so here is how i set it up:
  
 <code yaml docker-compose.yml> <code yaml docker-compose.yml>
Line 78: Line 81:
 CMD /startup.sh CMD /startup.sh
 </code> </code>
 +
 +  docker compose build 
 +  docker compose up
 +press ''ctrl+C'' to stop the app again, then edit the config file 
   nano ./app/node_modules/mqtt-dss-bridge/config.js   nano ./app/node_modules/mqtt-dss-bridge/config.js
 +
 +now your setup might be different, but i wanted to be able to use a password authentication for mqtt and i wanted to set ''qos'' to ''2'', by default this is hardcoded to ''1''
 +
 +so in the settings in the ''var config='' section i edited the ''client'' attribute to look like this: 
 +<code javascript>
 +    // MQTT-Client
 +    client: {
 +        url: 'mqtt://mqtt.psuter.ch:1883',
 +        baseTopic: dssTopic,
 +        qos: 2,
 +        username: 'myuser',
 +        password: 'mysecret'
 +    },
 +</code>
 +again of course with the correct username and password.
 +
 +next i had to slightly modify the script in ''app/node_modules/mqtt-dss-bridge/lib/dss.js'' starting from ''line 23'' i have added the ''qos'' setting as well as the ''username'' and ''password'' settings, so this section now looks like this: 
 +<code javascript>
 +var clientSettings = {
 +    keepalive: 10,
 +    clientId: config.name,
 +    will: {
 +        topic: config.client.baseTopic + '/state/online',
 +        payload: new Buffer('{"$value": "false"}'),
 +        qos: config.client.qos,
 +        retain: true
 +    },
 +    username: config.client.username,
 +    password: config.client.password
 +};
 +</code>
 +
 +with all this done, we can now start the container and hope for it to run ;) 
 +  docker compose up -d
 +
 +
  • digitalstrom_mqtt_gateway_in_a_docker_container.1720250782.txt.gz
  • Last modified: 06.07.2024 09:26
  • by Pascal Suter