{"id":144,"date":"2022-10-06T10:11:04","date_gmt":"2022-10-06T09:11:04","guid":{"rendered":"http:\/\/guillemrueda.com\/blog\/?p=144"},"modified":"2022-10-06T10:28:14","modified_gmt":"2022-10-06T09:28:14","slug":"mqtt-i-posar-en-marxa-un-servidor-mqtt","status":"publish","type":"post","link":"https:\/\/guillemrueda.com\/blog\/2022\/10\/06\/mqtt-i-posar-en-marxa-un-servidor-mqtt\/","title":{"rendered":"MQTT (I): Posar en marxa un servidor MQTT"},"content":{"rendered":"\n<p>Davant de varietat de servidors de MQTT triem per a l&#8217;exemple el Mosquitto.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>1.- Baixar Mosquitto <a href=\"https:\/\/mosquitto.org\/download\">https:\/\/mosquitto.org\/download<\/a><\/p>\n\n\n\n<p>2.- Anar a la carpeta d&#8217;instal\u00b7laci\u00f3 i buscar mosquitto.conf. En cas que no existeixi, crear-lo:<\/p>\n\n\n\n<p>3.- Posar la seg\u00fcent configuraci\u00f3: <\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"wp-block-code\"><code><code>listener 1883\nprotocol mqtt\nlistener 9001\nprotocol websockets\n## Authentication ##\nallow_anonymous true\n# password_file \/mosquitto\/conf\/mosquitto.conf<\/code><\/code><\/pre>\n<\/div><\/div>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<p>4. Provar que funciona correctament arrancant-lo des CMD <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\\mosquitto.exe -c .\\mosquitto.conf -v<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"699\" src=\"http:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-1-1024x699.png\" alt=\"\" class=\"wp-image-148\" srcset=\"https:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-1-1024x699.png 1024w, https:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-1-300x205.png 300w, https:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-1-768x524.png 768w, https:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-1.png 1219w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Per a comprovar la connexi\u00f3 i el estat del servidor de MQTT podem fer servir un client b\u00e0sic de MQTT fet amb HTML. Com per configuraci\u00f3 hem activat els websockets no ens far\u00e0 falta res m\u00e9s que executar aquesta p\u00e0gina des el navegador (les llibreries Javascript \u00e9s consulten a un CDN):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\" xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"utf-8\" \/&gt;\n    &lt;title&gt;mqtt&lt;\/title&gt;\n    &lt;script src=\"https:\/\/unpkg.com\/mqtt@4.0.1\/dist\/mqtt.min.js\"&gt;&lt;\/script&gt;\n    &lt;script&gt;\n        \/\/ An mqtt variable will be initialized globally\n        console.log(mqtt)\n    &lt;\/script&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n\n    &lt;script&gt;\n        const options = {\n            \/\/ Clean session\n            clean: true,\n            connectTimeout: 4000,\n        }\n\n        const publishMessage = (event) =&gt; {\n            event.preventDefault();\n            let addr = document.getElementById('addrText').value;\n            let topic = document.getElementById('topicText').value;\n            let msg = document.getElementById('messageText').value;\n\n            const client = mqtt.connect(addr, options);\n\n            client.publish(topic, msg, { qos: 0, retain: false }, function (error) {\n                if (error) {\n                    console.log(error);\n                } else {\n                    console.log('Published');\n                }\n            })\n\n        }\n\n        const subscribeMessages = (event) =&gt; {\n            event.preventDefault();\n\n            let addr = document.getElementById('addrTextSub').value;\n            let topic = document.getElementById('topicTextSub').value;\n\n            const clientSub = mqtt.connect(addr, options);\n\n            clientSub.on('connect', function () {\n                console.log('Connected')\n                clientSub.subscribe(topic, function (err) {\n                    if (err) {\n                        console.log(error);\n                    } else {\n                        console.log('Subscribed');\n                    }\n                })\n            });\n\n            clientSub.on('message', function (topic, message) {\n                \/\/ message is Buffer\n                console.log();\n                var table = document.getElementById(\"messagesReceived\");\n                var row = table.insertRow();\n                var cell1 = row.insertCell(0);\n                var cell2 = row.insertCell(1);\n                cell1.innerHTML = new Date().toLocaleString();\n                cell2.innerHTML = message.toString();\n            });\n\n\n        }\n\n    &lt;\/script&gt;\n\n    &lt;form onsubmit=\"return publishMessage(event)\"&gt;\n        &lt;fieldset&gt;\n            &lt;legend&gt;Send message&lt;\/legend&gt;\n            &lt;label for=\"addrText\"&gt;Address:&lt;\/label&gt;\n            &lt;input type=\"text\" id=\"addrText\" name=\"addrText\"&gt;&lt;br&gt;&lt;br&gt;\n            &lt;label for=\"topicText\"&gt;Topic:&lt;\/label&gt;\n            &lt;input type=\"text\" id=\"topicText\" name=\"topicText\"&gt;&lt;br&gt;&lt;br&gt;\n            &lt;label for=\"messageText\"&gt;Message:&lt;\/label&gt;\n            &lt;input type=\"text\" id=\"messageText\" name=\"messageText\"&gt;&lt;br&gt;&lt;br&gt;\n            &lt;input type=\"submit\" value=\"Submit\"&gt;\n        &lt;\/fieldset&gt;\n    &lt;\/form&gt;\n    &lt;br&gt;&lt;br&gt;\n    &lt;form onsubmit=\"return subscribeMessages(event)\"&gt;\n        &lt;fieldset&gt;\n            &lt;legend&gt;Subscribe&lt;\/legend&gt;\n            &lt;label for=\"addrTextSub\"&gt;Address:&lt;\/label&gt;\n            &lt;input type=\"text\" id=\"addrTextSub\" name=\"addrTextSub\"&gt;&lt;br&gt;&lt;br&gt;\n            &lt;label for=\"topicTextSub\"&gt;Topic:&lt;\/label&gt;\n            &lt;input type=\"text\" id=\"topicTextSub\" name=\"topicTextSub\"&gt;&lt;br&gt;&lt;br&gt;\n            &lt;input type=\"submit\" value=\"Subscribe\"&gt;\n        &lt;\/fieldset&gt;\n    &lt;\/form&gt;\n    &lt;br&gt;&lt;br&gt;\n    &lt;table id=\"messagesReceived\"&gt;\n        &lt;tr&gt;\n            &lt;th&gt;\n                Timestamp\n            &lt;\/th&gt;\n            &lt;th&gt;\n                Message\n            &lt;\/th&gt;\n        &lt;\/tr&gt;\n    &lt;\/table&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p>Amb el codi anterior i els par\u00e0metres de connexi\u00f3 que al ser per web sockets haurem de especificar protocol (wb) i port a l&#8217;adre\u00e7a tal aix\u00ed: wb:\/\/localhost:9001. El resultat de enviar un missatge a la subscripci\u00f3 que triem hauria de ser aquesta:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"953\" height=\"658\" src=\"http:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-2.png\" alt=\"\" class=\"wp-image-149\" srcset=\"https:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-2.png 953w, https:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-2-300x207.png 300w, https:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-2-768x530.png 768w\" sizes=\"auto, (max-width: 953px) 100vw, 953px\" \/><\/figure>\n\n\n\n<p>5.- Feta la prova amb la configuraci\u00f3 parem el terminal, farem que sigui un servei i aix\u00ed no necessitem tenir una sessi\u00f3 activa. Per a fer-lo cal executar el <em>mosquito.exe install<\/em>. En el cas que ja estigui instal\u00b7lat \u00e9s recomanable desinstal\u00b7lar-lo executant <em>mosquito.exe uninstall<\/em> . Per a revisar el estat del servei ho podem fer des Control+Alt+Spr, pestanya Serveis i veure tots els serveis buscant el servei Mosquitto Broker:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"570\" src=\"http:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-3-1024x570.png\" alt=\"\" class=\"wp-image-154\" srcset=\"https:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-3-1024x570.png 1024w, https:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-3-300x167.png 300w, https:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-3-768x428.png 768w, https:\/\/guillemrueda.com\/blog\/wp-content\/uploads\/2022\/10\/image-3.png 1471w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Si el servei no funcion\u00e9s reviseu que a les variables de entorn el MOSQUITTO_DIR \u00e9s el de instal\u00b7laci\u00f3.<\/p>\n\n\n\n<p>Amb aix\u00f2 ja podem iniciar les proves de MQTT amb aquest i altres entorns, recordant que els seg\u00fcents passos amb el servidor haurien de ser dotar-lo de seguretat (autenticaci\u00f3 i encriptaci\u00f3 del canal).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Davant de varietat de servidors de MQTT triem per a l&#8217;exemple el Mosquitto. 1.- Baixar Mosquitto https:\/\/mosquitto.org\/download 2.- Anar a la carpeta d&#8217;instal\u00b7laci\u00f3 i buscar mosquitto.conf. En cas que no existeixi, crear-lo: 3.- Posar la seg\u00fcent configuraci\u00f3: 4. Provar que funciona correctament arrancant-lo des CMD Per a comprovar la connexi\u00f3 i el estat del servidor &hellip; <a href=\"https:\/\/guillemrueda.com\/blog\/2022\/10\/06\/mqtt-i-posar-en-marxa-un-servidor-mqtt\/\" class=\"more-link\">Continua la lectura de <span class=\"screen-reader-text\">MQTT (I): Posar en marxa un servidor MQTT<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,15,14,6],"tags":[],"class_list":["post-144","post","type-post","status-publish","format-standard","hentry","category-general","category-javascript","category-mqtt","category-programacio"],"_links":{"self":[{"href":"https:\/\/guillemrueda.com\/blog\/wp-json\/wp\/v2\/posts\/144","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/guillemrueda.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/guillemrueda.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/guillemrueda.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/guillemrueda.com\/blog\/wp-json\/wp\/v2\/comments?post=144"}],"version-history":[{"count":6,"href":"https:\/\/guillemrueda.com\/blog\/wp-json\/wp\/v2\/posts\/144\/revisions"}],"predecessor-version":[{"id":157,"href":"https:\/\/guillemrueda.com\/blog\/wp-json\/wp\/v2\/posts\/144\/revisions\/157"}],"wp:attachment":[{"href":"https:\/\/guillemrueda.com\/blog\/wp-json\/wp\/v2\/media?parent=144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/guillemrueda.com\/blog\/wp-json\/wp\/v2\/categories?post=144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/guillemrueda.com\/blog\/wp-json\/wp\/v2\/tags?post=144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}