<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>https://www.binefa.com/index.php?action=history&amp;feed=atom&amp;title=Introducci%C3%B3_a_l%27%C3%BAs_del_Node-RED</id>
	<title>Introducció a l'ús del Node-RED - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="https://www.binefa.com/index.php?action=history&amp;feed=atom&amp;title=Introducci%C3%B3_a_l%27%C3%BAs_del_Node-RED"/>
	<link rel="alternate" type="text/html" href="https://www.binefa.com/index.php?title=Introducci%C3%B3_a_l%27%C3%BAs_del_Node-RED&amp;action=history"/>
	<updated>2026-05-05T12:07:05Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://www.binefa.com/index.php?title=Introducci%C3%B3_a_l%27%C3%BAs_del_Node-RED&amp;diff=11127&amp;oldid=prev</id>
		<title>Jordi Binefa: /* Comunicació MQTT entre el NodeRED i la placa IoT-02 */</title>
		<link rel="alternate" type="text/html" href="https://www.binefa.com/index.php?title=Introducci%C3%B3_a_l%27%C3%BAs_del_Node-RED&amp;diff=11127&amp;oldid=prev"/>
		<updated>2025-10-29T18:07:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Comunicació MQTT entre el NodeRED i la placa IoT-02&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ca&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Versió més antiga&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revisió del 18:07, 29 oct 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l6&quot; &gt;Línia 6:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línia 6:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''Al minut 2:20 del primer vídeo de la classe invertida es fa referència a un broker diferent al que tenim programat a la placa.'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''Al minut 2:20 del primer vídeo de la classe invertida es fa referència a un broker diferent al que tenim programat a la placa.'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;!--&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''Les credencials a utilitzar són aquestes:'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''Les credencials a utilitzar són aquestes:'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l12&quot; &gt;Línia 12:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línia 12:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  const int mqtt_port = '''1883''';  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  const int mqtt_port = '''1883''';  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  const char* mqtt_user = &amp;quot;'''user'''&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  const char* mqtt_user = &amp;quot;'''user'''&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  const char* mqtt_password = &amp;quot;'''pass'''&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  const char* mqtt_password = &amp;quot;'''pass'''&amp;quot;;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;--&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!--[[Assignació de ports per al curs 2022-2023]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!--[[Assignació de ports per al curs 2022-2023]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_binefa_com:diff::1.12:old-11126:rev-11127 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jordi Binefa</name></author>
		
	</entry>
	<entry>
		<id>https://www.binefa.com/index.php?title=Introducci%C3%B3_a_l%27%C3%BAs_del_Node-RED&amp;diff=11126&amp;oldid=prev</id>
		<title>Jordi Binefa: Es crea la pàgina amb «= Comunicació MQTT entre el NodeRED i la placa IoT-02 = &lt;!-- Assignació de ports per al curs 2023-2024  '''El firmware de la placa IoT-02 per al dia d'avui és e...».</title>
		<link rel="alternate" type="text/html" href="https://www.binefa.com/index.php?title=Introducci%C3%B3_a_l%27%C3%BAs_del_Node-RED&amp;diff=11126&amp;oldid=prev"/>
		<updated>2025-10-29T18:07:02Z</updated>

		<summary type="html">&lt;p&gt;Es crea la pàgina amb «= Comunicació MQTT entre el NodeRED i la placa IoT-02 = &amp;lt;!-- &lt;a href=&quot;/index.php?title=Assignaci%C3%B3_de_ports_per_al_curs_2023-2024&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Assignació de ports per al curs 2023-2024 (encara no existeix)&quot;&gt;Assignació de ports per al curs 2023-2024&lt;/a&gt;  &amp;#039;&amp;#039;&amp;#039;El firmware de la placa IoT-02 per al dia d&amp;#039;avui és e...».&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Comunicació MQTT entre el NodeRED i la placa IoT-02 =&lt;br /&gt;
&amp;lt;!-- [[Assignació de ports per al curs 2023-2024]]&lt;br /&gt;
&lt;br /&gt;
'''El firmware de la placa IoT-02 per al dia d'avui és el mateix que vam utilitzar l'últim dia''': [https://www.binefa.cat/training/iot02/IoT-02_mqtt_json_upcSchool_broker1.zip firmware per gestionar, també, l'ús de JSON a la placa IoT-02]. [https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_mqtt_sync_upcSchool_broker1 Firmware IoT-02_mqtt_json_upcSchool_broker1 a GitHub]&lt;br /&gt;
&lt;br /&gt;
'''Al minut 2:20 del primer vídeo de la classe invertida es fa referència a un broker diferent al que tenim programat a la placa.'''&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''Les credencials a utilitzar són aquestes:'''&lt;br /&gt;
&lt;br /&gt;
 const char* mqtt_server = &amp;quot;'''vps656540.ovh.net'''&amp;quot;; // Your MQTT broker&lt;br /&gt;
 const int mqtt_port = '''1883'''; &lt;br /&gt;
 const char* mqtt_user = &amp;quot;'''user'''&amp;quot;;&lt;br /&gt;
 const char* mqtt_password = &amp;quot;'''pass'''&amp;quot;;&lt;br /&gt;
&amp;lt;!--[[Assignació de ports per al curs 2022-2023]]&lt;br /&gt;
&lt;br /&gt;
'''Nou firmware de la placa IoT-02 per al dia d'avui''' (s'han afegit temes MQTT per treballar amb JSON): [https://www.binefa.cat/training/iot02/IoT-02_mqtt_json_upcSchool_broker2.zip firmware per gestionar l'ús de JSON a la placa IoT-02]. [https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_mqtt_json_upcSchool_broker2 Firmware IoT-02_mqtt_json_upcSchool_broker2 a GitHub]--&amp;gt;&lt;br /&gt;
== Subscripció i publicació ==&lt;br /&gt;
[[Image:Nodered20220402a00.png|center|Comunicació MQTT entre el NodeRED i la placa IoT-02]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici '''NodeRED-01''' ===&lt;br /&gt;
Implementeu el vostre flux per rebre l'estat dels tres botons (de manera asíncrona, quan hi ha un canvi) de la placa IoT-02.&lt;br /&gt;
&lt;br /&gt;
= Panell de Control (''Dashboard'') =&lt;br /&gt;
[https://flows.nodered.org/node/node-red-dashboard Cal instal·lar el conjunt de nodes ''node-red-dashboard'']&lt;br /&gt;
== Node '''commutador''' (''switch'') ==&lt;br /&gt;
El node commutador envia un ''payload'' personalitzat per a l'estat ''ON'' i l'estat ''OFF''.&lt;br /&gt;
&lt;br /&gt;
[[Image:Nodered20220402b01.png|center|Flux commutador leds]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Nodered20220402b00.png|center|Visualització commutador leds]]&lt;br /&gt;
=== Exercici '''NodeRED-02''' ===&lt;br /&gt;
Poseu 5 commutadors (Control dels 4 leds i l'estat del relé biestable de la placa IoT-02).&lt;br /&gt;
&lt;br /&gt;
== Nodes de '''text''', '''botó''' i '''variables de flux'''. Canvi de color d'un punt (representació d'un led) ==&lt;br /&gt;
El node botó envia un ''payload'' personalitzat quan es prem.&lt;br /&gt;
&lt;br /&gt;
[[Image:Nodered20220402c01.png|center|Flux canvi de color d'un punt]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Nodered20220402c00.png|center|Visualització canvi de color d'un punt]]&lt;br /&gt;
&lt;br /&gt;
Al ''Value format'' del node de text:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font color={{msg.color}} &amp;gt;&amp;lt;i class=&amp;quot;fa fa-circle&amp;quot; style=&amp;quot;font-size:24px;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funció '''FF3399''':&lt;br /&gt;
 msg.color = &amp;quot;#FF3399&amp;quot;&lt;br /&gt;
 return msg;&lt;br /&gt;
&lt;br /&gt;
Funció '''{R,G,B} -&amp;gt; {0,0,0}''':&lt;br /&gt;
 flow.set(&amp;quot;R&amp;quot;,&amp;quot;00&amp;quot;);&lt;br /&gt;
 flow.set(&amp;quot;G&amp;quot;,&amp;quot;00&amp;quot;);&lt;br /&gt;
 flow.set(&amp;quot;B&amp;quot;,&amp;quot;00&amp;quot;);&lt;br /&gt;
 flow.set(&amp;quot;RGB&amp;quot;,&amp;quot;#&amp;quot;+flow.get(&amp;quot;R&amp;quot;)+flow.get(&amp;quot;G&amp;quot;)+flow.get(&amp;quot;B&amp;quot;));&lt;br /&gt;
 msg.color = flow.get(&amp;quot;RGB&amp;quot;);&lt;br /&gt;
 return msg;&lt;br /&gt;
&lt;br /&gt;
Funció '''R -&amp;gt; FF''':&lt;br /&gt;
 flow.set(&amp;quot;R&amp;quot;,&amp;quot;FF&amp;quot;);&lt;br /&gt;
 flow.set(&amp;quot;RGB&amp;quot;,&amp;quot;#&amp;quot;+flow.get(&amp;quot;R&amp;quot;)+flow.get(&amp;quot;G&amp;quot;)+flow.get(&amp;quot;B&amp;quot;));&lt;br /&gt;
 msg.color = flow.get(&amp;quot;RGB&amp;quot;);&lt;br /&gt;
 return msg;&lt;br /&gt;
&lt;br /&gt;
Funció '''R -&amp;gt; 00''':&lt;br /&gt;
 flow.set(&amp;quot;R&amp;quot;,&amp;quot;00&amp;quot;);&lt;br /&gt;
 flow.set(&amp;quot;RGB&amp;quot;,&amp;quot;#&amp;quot;+flow.get(&amp;quot;R&amp;quot;)+flow.get(&amp;quot;G&amp;quot;)+flow.get(&amp;quot;B&amp;quot;));&lt;br /&gt;
 msg.color = flow.get(&amp;quot;RGB&amp;quot;);&lt;br /&gt;
 return msg;&lt;br /&gt;
&lt;br /&gt;
[https://www.binefa.cat/training/upcSchool/2022/20220402/ledMulticolor.nodered.json Flux ledMulticolor.nodered.json]&lt;br /&gt;
=== Exercici '''NodeRED-03''' ===&lt;br /&gt;
Feu una visualització d'un punt que representa un led multicolor. A la placa IoT-02:&lt;br /&gt;
&lt;br /&gt;
* Quan el botó '''IO0''' estigui premut incorpora el color '''vermell''' al punt multicolor representat al panell de control del NodeRED&lt;br /&gt;
&lt;br /&gt;
* Quan el botó IO0 no estigui premut treu el color vermell al punt multicolor representat al panell de control del NodeRED&lt;br /&gt;
&lt;br /&gt;
* Quan el botó '''I34''' estigui premut incorpora el color '''verd''' al punt multicolor representat al panell de control del NodeRED&lt;br /&gt;
&lt;br /&gt;
* Quan el botó I34 no estigui premut treu el color verd al punt multicolor representat al panell de control del NodeRED&lt;br /&gt;
&lt;br /&gt;
* Quan el botó '''I35''' estigui premut incorpora el color '''blau''' al punt multicolor representat al panell de control del NodeRED&lt;br /&gt;
&lt;br /&gt;
* Quan el botó I35 no estigui premut treu el color blau al punt multicolor representat al panell de control del NodeRED&lt;br /&gt;
&lt;br /&gt;
== '''Simulació de generació d'una dada'''. Aleatorització controlada pel panell de control ==&lt;br /&gt;
[[Image:12nodeRedRandomUi.png|center|Generació de dades aleatòries]]&lt;br /&gt;
&lt;br /&gt;
En seleccionar el commutador (''switch'') '''Randomize''' comença la generació de dades aleatòries. En deseleccionar-lo s'atura la generació de dades. El node commutador envia un ''payload'' personalitzat per a l'estat ''ON'' i l'estat ''OFF''.&lt;br /&gt;
&lt;br /&gt;
[[Image:14nodeRedRandomUi.png|center|Generació de dades aleatòries]]&lt;br /&gt;
&lt;br /&gt;
[https://www.binefa.cat/training/upcSchool/2022/20220402/14nodeRedRandomUi.nodered.json Codi per al NodeRED que genera dades aleatòries]&lt;br /&gt;
&lt;br /&gt;
Funció '''Randomizing (On/Off)''':&lt;br /&gt;
 flow.set(&amp;quot;Randomizing&amp;quot;,msg.payload);&lt;br /&gt;
 return msg;&lt;br /&gt;
&lt;br /&gt;
Funció '''random value in range (20.0,30.0)''':&lt;br /&gt;
 msg.payload = parseFloat( (200 + Math.floor(Math.random() * 101))/10); // value between 20.0 and 30.0&lt;br /&gt;
 return msg;&lt;br /&gt;
&lt;br /&gt;
=== Exercici '''NodeRED-04''' ===&lt;br /&gt;
Importeu el [https://www.binefa.cat/training/upcSchool/2022/20220402/14nodeRedRandomUi.nodered.json flux 14nodeRedRandomUi] i verifiqueu el funcionament.&lt;br /&gt;
&lt;br /&gt;
== Conversió de '''JSON''' a text i text a JSON ==&lt;br /&gt;
[[Image:Nodered20220402d00.png|center|Flux JSON -&amp;gt; TXT i TXT -&amp;gt; JSON]]&lt;br /&gt;
&lt;br /&gt;
[https://www.binefa.cat/training/upcSchool/2022/20220402/jsonTxt.nodered.json Flux jsonTxt.nodered.json]&lt;br /&gt;
&lt;br /&gt;
* Funció '''genero json''':&lt;br /&gt;
 var json00 = {}&lt;br /&gt;
 json00.nombre = &amp;quot;Joan&amp;quot;&lt;br /&gt;
 json00.apellido = &amp;quot;Pérez&amp;quot;&lt;br /&gt;
 json00.edad = 26&lt;br /&gt;
 msg.payload = json00&lt;br /&gt;
 return msg;&lt;br /&gt;
&lt;br /&gt;
* Funció '''genero txt''':&lt;br /&gt;
 var txt = &amp;quot;{\&amp;quot;apellido\&amp;quot;:\&amp;quot;Martínez\&amp;quot;,\&amp;quot;nombre\&amp;quot;:\&amp;quot;Meritxell\&amp;quot;,\&amp;quot;edad\&amp;quot;:28}&amp;quot;&lt;br /&gt;
 msg.payload = txt&lt;br /&gt;
 return msg;&lt;br /&gt;
&lt;br /&gt;
== Passarel·la '''HTTP a MQTT''' ==&lt;br /&gt;
[[Image:Nodered20220402e00.png|center|Flux HTTP a MQTT]]&lt;br /&gt;
&lt;br /&gt;
[https://www.binefa.cat/training/upcSchool/2022/20220402/httpMqtt.nodered.json Flux httpMqtt.nodered.json]&lt;br /&gt;
&lt;br /&gt;
[http://vps656540.ovh.net:2222/mqtt?topic=/7C9EBDEA5BA0/ledW&amp;amp;&amp;amp;payload=0 Apagant] led blanc:&lt;br /&gt;
[[Image:Nodered20220402e01.png|center|Apagant led blanc. HTTP a MQTT]]&lt;br /&gt;
&lt;br /&gt;
[http://vps656540.ovh.net:2222/mqtt?topic=/7C9EBDEA5BA0/ledW&amp;amp;&amp;amp;payload=1 Encenent] led blanc:&lt;br /&gt;
[[Image:Nodered20220402e02.png|center|Encenent led blanc. HTTP a MQTT]]&lt;br /&gt;
&lt;br /&gt;
* Funció '''bridge''':&lt;br /&gt;
 msg.topic = msg.req.query['topic'];&lt;br /&gt;
 msg.payload = msg.req.query['payload'];&lt;br /&gt;
 return msg;&lt;br /&gt;
&lt;br /&gt;
* Funció '''response''':&lt;br /&gt;
 msg.payload = &amp;quot;Tema: &amp;quot;+msg.req.query['topic']+&amp;quot;, missatge: &amp;quot;+msg.req.query['payload'];&lt;br /&gt;
 return msg;&lt;br /&gt;
&lt;br /&gt;
=== Exercici '''NodeRED-05''' ===&lt;br /&gt;
Implementeu el vostre flux per canviar l'estat dels leds i el relé biestable de la placa IoT-02.&lt;br /&gt;
&lt;br /&gt;
== Node '''exec''' ==&lt;br /&gt;
El node '''exec''' executa ordres del sistema operatiu.&lt;br /&gt;
&lt;br /&gt;
[[Image:Nodered20220402h00.png|center|Flux amb node exec]]&lt;br /&gt;
&lt;br /&gt;
[https://www.binefa.cat/training/upcSchool/2022/20220402/exec.nodered.json Flux exec.nodered.json]&lt;br /&gt;
&lt;br /&gt;
== Enviament de JSON a la placa IoT-02 ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nodered20220402f00.png|center|Flux de JSON en node Inject a NodeRED]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Nodered20220402f01.png|center|Edició de JSON en node Inject a NodeRED]]&lt;br /&gt;
&lt;br /&gt;
[https://www.binefa.cat/training/upcSchool/2022/20220402/jsonLeds.json Flux jsonLeds.json]&lt;br /&gt;
&lt;br /&gt;
* Al codi Arduino es diferencia el tipus '''bool''' del tipus '''int''':&lt;br /&gt;
  if (szTopic == String(&amp;quot;/&amp;quot; + String(sMac) + TOPIC_JSON_LEDS  ).c_str()) {&lt;br /&gt;
    JSONVar myObject = JSON.parse(szPayload);&lt;br /&gt;
    if (JSON.typeof(myObject) == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
      Serial.println(&amp;quot;Parsing input failed!&amp;quot;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    if (myObject.hasOwnProperty(&amp;quot;ledW&amp;quot;)) {&lt;br /&gt;
      digitalWrite(LED_W, ('''bool''')myObject[&amp;quot;ledW&amp;quot;]);&lt;br /&gt;
    }    &lt;br /&gt;
    if (myObject.hasOwnProperty(&amp;quot;ledR&amp;quot;)) {&lt;br /&gt;
      digitalWrite(LED_R, ('''int''')myObject[&amp;quot;ledR&amp;quot;]);&lt;br /&gt;
    }&lt;br /&gt;
    if (myObject.hasOwnProperty(&amp;quot;ledY&amp;quot;)) {&lt;br /&gt;
      digitalWrite(LED_Y, ('''int''')myObject[&amp;quot;ledY&amp;quot;]);&lt;br /&gt;
    }&lt;br /&gt;
    if (myObject.hasOwnProperty(&amp;quot;ledG&amp;quot;)) {&lt;br /&gt;
      digitalWrite(LED_G, ('''int''')myObject[&amp;quot;ledG&amp;quot;]);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Recepció de JSON des de la placa IoT-02 ==&lt;br /&gt;
Es rep un text. El node JSON converteix el text a un objecte JSON. És un node bidireccional (si entra un objecte JSON surt un text).&lt;br /&gt;
&lt;br /&gt;
[[Image:Nodered20220402g00.png|center|Flux recepció de JSON]]&lt;br /&gt;
&lt;br /&gt;
[https://www.binefa.cat/training/upcSchool/2022/20220402/jsonIn.nodered.json Flux jsonIn.nodered.json]&lt;br /&gt;
&lt;br /&gt;
=== Exercici '''NodeRED-06''' ===&lt;br /&gt;
Implementeu un sistema SCADA (supervisió i control) que mostri en ''widgets'' diferents de tipus rellotge la temperatura, humitat relativa i nivell de llum (des de la placa IoT-02). També una gràfica de la temperatura en funció del temps. A la part de control de la placa IoT-02 hi ha un commutador, quan està activat el relé es posa en estat SET, s'encén el led vermell (i apaga el verd) i apareix SET a la pantalla OLED. Quan es desactiva el commutador el relé es posa en estat RESET, s'encén el led verd (i apaga el vermell) i apareix RESET a la pantalla OLED.&lt;/div&gt;</summary>
		<author><name>Jordi Binefa</name></author>
		
	</entry>
</feed>