# Gestion RFlink via node red

**URL:** <https://forum.hacf.fr/t/gestion-rflink-via-node-red/621>\
**Category:** Node-Red\
**Created:** [Octobre 8, 2020, 5:40 UTC](https://forum.hacf.fr/t/gestion-rflink-via-node-red/621 "2020-10-08T05:40:33Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![DcJona](https://forum.hacf.fr/user_avatar/forum.hacf.fr/dcjona/32/1274_2.png) [@DcJona](https://forum.hacf.fr/u/DcJona)\
**Post date:** [Octobre 8, 2020, 5:40 UTC](https://forum.hacf.fr/t/gestion-rflink-via-node-red/621/1 "2020-10-08T05:40:33Z")

</div>

Bonjour,

Je viens d’installer et paramètrer rflink via node red et ca tourne ! ouf…

par contre je me demande comment via node red gérer mes appareils ?

j’ai actuellement ce flow pour tester et gérer une sonde :

```
[{"id":"c170e7c6.e2c338","type":"debug","z":"9fec6591.8ae648","name":"Raw messages","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":360,"y":40,"wires":[]},{"id":"74fcb201.733f2c","type":"comment","z":"9fec6591.8ae648","name":"Examples","info":"20;B7;Digitech;ID=01bc;TEMP=0060;BAT=OK;\n20;B8;Prologue;ID=9722;TEMP=00e3;HUM=10;\n20;B9;Oregon TempHygro;ID=928F5;TEMP=00d1;HUM=56;HSTATUS=1;BAT=OK;\n20;BA;Tunex;ID=7B02;TEMP=0000;HUM=99;BAT=OK;\n20;BB;Oregon TempHygro;ID=528F1;TEMP=00c6;HUM=59;HSTATUS=0;BAT=OK;\n20;BC;AlectoV3;ID=3099;TEMP=00b3;HUM=61;BAT=OK;\n20;BD;Prologue;ID=9722;TEMP=00e3;HUM=10;\n20;BE;Oregon TempHygro;ID=528F1;TEMP=00c6;HUM=59;HSTATUS=0;BAT=OK;\n20;BF;Prologue;ID=9722;TEMP=00e3;HUM=10;\n20;C0;AlectoV3;ID=3099;TEMP=00b3;HUM=61;BAT=OK;\n20;C1;Tunex;ID=7B02;TEMP=0000;HUM=99;BAT=OK;\n20;C2;Prologue;ID=9722;TEMP=00e3;HUM=10;\n20;C3;AlectoV3;ID=3099;TEMP=00b4;HUM=61;BAT=OK;\n20;C4;Oregon TempHygro;ID=928F5;TEMP=00d1;HUM=56;HSTATUS=1;BAT=OK;\n20;C5;Digitech;ID=01bc;TEMP=0060;BAT=OK;\n20;C6;Tunex;ID=7B02;TEMP=0000;HUM=99;BAT=OK;\n20;C7;AlectoV3;ID=3099;TEMP=00b3;HUM=61;BAT=OK;\n20;C8;Prologue;ID=9722;TEMP=00e2;HUM=10;\n20;C9;AlectoV3;ID=3099;TEMP=00b4;HUM=61;BAT=OK;\n20;CA;Tunex;ID=7B02;TEMP=0000;HUM=99;BAT=OK;\n20;CB;Prologue;ID=9722;TEMP=00e2;HUM=10;\n20;CC;AlectoV3;ID=3099;TEMP=00b3;HUM=61;BAT=OK;\n20;CD;Doorbell;ID=99ff;SWITCH=1;CMD=ON;CHIME=01;\n20;CE;Doorbell;ID=99ff;SWITCH=1;CMD=ON;CHIME=01;\n20;CF;Doorbell;ID=99ff;SWITCH=1;CMD=ON;CHIME=01;\n20;D0;Prologue;ID=9722;TEMP=00e2;HUM=10;\n20;D1;Doorbell;ID=99ff;SWITCH=1;CMD=ON;CHIME=01;\n20;D2;Doorbell;ID=99ff;SWITCH=1;CMD=ON;CHIME=01;\n20;D3;Tunex;ID=7B02;TEMP=0000;HUM=99;BAT=OK;\n20;D4;AlectoV3;ID=3099;TEMP=00b4;HUM=61;BAT=OK;\n20;D5;Oregon TempHygro;ID=928F5;TEMP=00d1;HUM=56;HSTATUS=1;BAT=OK;\n20;D6;Prologue;ID=9722;TEMP=00e2;HUM=10;\n20;D7;Digitech;ID=01bc;TEMP=0060;BAT=OK;\n20;D8;Tunex;ID=7B02;TEMP=0000;HUM=99;BAT=OK;\n20;D9;AlectoV3;ID=3099;TEMP=00b3;HUM=61;BAT=OK;\n20;DA;Prologue;ID=9722;TEMP=00e2;HUM=10;\n20;DB;AlectoV3;ID=3099;TEMP=00b4;HUM=61;BAT=OK;\n20;DC;Tunex;ID=7B02;TEMP=0001;HUM=99;BAT=OK;\n20;DD;Prologue;ID=9722;TEMP=00e2;HUM=10;\n20;DE;AlectoV3;ID=3099;TEMP=00b3;HUM=61;BAT=OK;\n20;DF;Tunex;ID=7B02;TEMP=0001;HUM=99;BAT=OK;\n20;E0;Oregon TempHygro;ID=928F5;TEMP=00d1;HUM=56;HSTATUS=1;BAT=OK;\n20;E1;AlectoV3;ID=3099;TEMP=00b3;HUM=61;BAT=OK;\n20;E2;Prologue;ID=9722;TEMP=00e2;HUM=10;\n","x":90,"y":31,"wires":[]},{"id":"449c99e2.dc9158","type":"function","z":"9fec6591.8ae648","name":"Parse message","func":"var msg433 = {};\nmsg.payload = msg.payload.replace(/(\\r\\n|\\n|\\r)/gm,\"\");\nvar parts433 = msg.payload.split(\";\");\n\nmsg433.p1 = parts433[0];\nmsg433.p2 = parts433[1];\nmsg433.name = parts433[2];\nfor (var i=3; i<parts433.length; i++) {\n var keyvalue = parts433[i].split(\"=\");\n if (keyvalue.length===2) {\n msg433[keyvalue[0]] = keyvalue[1];\n }\n}\n\nmsg.msg433 = msg433;\n\nreturn msg;\n\n/*\n\n// So firstly a generic means of getting incoming items into an object\n\nvar the433 = {};\nmsg.payload = msg.payload.replace(/(\\r\\n|\\n|\\r)/gm,\"\");\nnode.warn(msg.payload);\nvar parts433 = msg.payload.split(\";\");\n\nthe433.p1 = parts433[0];\nthe433.p2 = parts433[1];\nthe433.name = parts433[2];\n\nvar a = 3;\nwhile (a < parts433.length) {\n var bits433 = parts433[a].split(\"=\");\n switch (bits433[0]) {\n case \"ID\": the433.id = bits433[1]; break;\n case \"SWITCH\": the433.switch = bits433[1]; break;\n case \"CMD\": the433.cmd = bits433[1]; break;\n case \"SET_LEVEL\": the433.set_level = parseInt(bits433[1], 10); break;\n case \"TEMP\": the433.temp = parseInt(bits433[1], 16) / 10; break;\n case \"HUM\": the433.hum = parseInt(bits433[1], 10); break;\n case \"BARO\": the433.baro = parseInt(bits433[1], 16); break;\n case \"HSTATUS\": the433.hstatus = parseInt(bits433[1], 10); break;\n case \"BFORECAST\": the433.bforecast = parseInt(bits433[1], 10); break;\n case \"UV\": the433.uv = parseInt(bits433[1], 16); break;\n case \"LUX\": the433.lux = parseInt(bits433[1], 16); break;\n case \"BAT\": the433.bat = bits433[1]; break;\n case \"RAIN\": the433.rain = parseInt(bits433[1], 16) / 10; break;\n case \"RAIN\": the433.rainrate = parseInt(bits433[1], 16) / 10; break;\n case \"WINSP\": the433.winsp = parseInt(bits433[1], 16) / 10; break;\n case \"AWINSP\": the433.awinsp = parseInt(bits433[1], 16) / 10; break;\n case \"WINGS\": the433.wings = parseInt(bits433[1], 16); break;\n case \"WINDIR\": the433.windir = parseInt(bits433[1], 10); break;\n case \"WINCHL\": the433.winchl = parseInt(bits433[1], 16); break;\n case \"WINTMP\": the433.wintmp = parseInt(bits433[1], 16); break;\n case \"CHIME\": the433.chime = parseInt(bits433[1], 10); break;\n case \"SMOKEALERT\": the433.smokealert = bits433[1]; break;\n case \"PIR\": the433.pir = bits433[1]; break;\n case \"CO2\": the433.co2 = parseInt(bits433[1], 10); break;\n case \"SOUND\": the433.sound = parseInt(bits433[1], 10); break;\n case \"KWATT\": the433.kwatt = parseInt(bits433[1], 16); break;\n case \"WATT\": the433.watt = parseInt(bits433[1], 16); break;\n case \"CURRENT\": the433.current = parseInt(bits433[1], 10); break;\n case \"CURRENT2\": the433.current2 = parseInt(bits433[1], 10); break;\n case \"CURRENT3\": the433.current3 = parseInt(bits433[1], 10); break;\n case \"DIST\": the433.dist = parseInt(bits433[1], 10); break;\n case \"METER\": the433.meter = parseInt(bits433[1], 10); break;\n case \"VOLT\": the433.volt = parseInt(bits433[1], 10); break;\n case \"RGBW\": the433.rgbc = parseInt(bits433[1].substring(0, 2), 16);\n the433.rgbw = parseInt(bits433[1].substring(2, 4), 16); break;\n }\n a++;\n}\n\n// SO - the above is general... here is my specific setup for temporarily displaying\n// the Acurite info\nif ((the433.p1 == \"20\") && (the433.name == \"Acurite\") && (the433.id == \"c826\")) {\n if (typeof the433.temp !== 'undefined') temp = the433.temp;\n if (typeof the433.hum !== 'undefined') hum = the433.hum;\n if (typeof the433.bat !== 'undefined') bat = the433.bat;\n if (typeof the433.rain !== 'undefined') rain = the433.rain;\n if (typeof the433.winsp !== 'undefined') winsp = the433.winsp;\n if (typeof the433.windir !== 'undefined') windir = the433.windir;\n\n node.warn(\"Temperature: \" + temp + \"c\");\n node.warn(\"Humidity: \" + hum + \"%\");\n node.warn(\"Battery: \" + bat);\n node.warn(\"Rain: \" + rain + \"mm\");\n node.warn(\"Wind Speed: \" + winsp + \"km/h\");\n node.warn(\"Wind Dir: \" + (windir * 22.5) + \" degrees\");\n}\n\n*/","outputs":1,"noerr":0,"x":340,"y":100,"wires":[["c5cf846f.73af78","e01eceac.bb1c3"]]},{"id":"c5cf846f.73af78","type":"function","z":"9fec6591.8ae648","name":"TEMP conversion","func":"if (msg.msg433.TEMP!==undefined) {\n if (parseInt(msg.msg433.TEMP, 16) >= 0x8000) {\n msg.msg433.TEMP = (parseInt(msg.msg433.TEMP, 16) & 0x7FFF) / 10 * -1;\n } else {\n msg.msg433.TEMP = parseInt(msg.msg433.TEMP, 16) / 10;\n }\n}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":550,"y":100,"wires":[["9dc4f5dd.eb6118"]]},{"id":"9dc4f5dd.eb6118","type":"function","z":"9fec6591.8ae648","name":"HUM conversion","func":"if (msg.msg433.HUM!==undefined) {\n msg.msg433.HUM = parseInt(msg.msg433.HUM, 10);\n}\n\nreturn msg;\n","outputs":1,"noerr":0,"x":760,"y":100,"wires":[["8572cbbb.6db988"]]},{"id":"8572cbbb.6db988","type":"function","z":"9fec6591.8ae648","name":"ID conversion","func":"if (msg.msg433.ID!==undefined) {\n msg.msg433.ID = parseInt(msg.msg433.ID, 16);\n}\n\nreturn msg;\n","outputs":1,"noerr":0,"x":960,"y":100,"wires":[["9869e902.274c48"]]},{"id":"9869e902.274c48","type":"function","z":"9fec6591.8ae648","name":"RAIN conversion","func":"if (msg.msg433.RAIN!==undefined) {\n msg.msg433.RAIN = parseInt(msg.msg433.RAIN, 16) /10;\n}\n\nreturn msg;\n","outputs":1,"noerr":0,"x":1170,"y":100,"wires":[["673d837.cb7467c"]]},{"id":"673d837.cb7467c","type":"function","z":"9fec6591.8ae648","name":"WINSP conversion","func":"if (msg.msg433.WINSP!==undefined) {\n msg.msg433.WINSP = parseInt(msg.msg433.WINSP, 16) /10;\n}\n\nreturn msg;\n","outputs":1,"noerr":0,"x":1390,"y":100,"wires":[["e46fa4f5.0745e8"]]},{"id":"e46fa4f5.0745e8","type":"function","z":"9fec6591.8ae648","name":"WINGS conversion","func":"if (msg.msg433.WINGS!==undefined) {\n msg.msg433.WINGS = parseInt(msg.msg433.WINGS , 16);\n}\n\nreturn msg;\n","outputs":1,"noerr":0,"x":1610,"y":100,"wires":[["87b36acb.d71b08"]]},{"id":"87b36acb.d71b08","type":"function","z":"9fec6591.8ae648","name":"SWITCH conversion","func":"if (msg.msg433.SWITCH !==undefined) {\n msg.msg433.SWITCH = parseInt(msg.msg433.SWITCH , 16);\n}\n\nreturn msg;\n","outputs":1,"noerr":0,"x":1860,"y":100,"wires":[["cb1ed351.b93a7"]]},{"id":"cb1ed351.b93a7","type":"function","z":"9fec6591.8ae648","name":"CHIME conversion","func":"if (msg.msg433.CHIME !==undefined) {\n msg.msg433.CHIME = parseInt(msg.msg433.CHIME , 16);\n}\n\nreturn msg;\n","outputs":1,"noerr":0,"x":150,"y":200,"wires":[["936af1bf.fb719","e79b8bf4.5058f8","519e5b3b.eb74d4","b6cfdb0d.a901b8"]]},{"id":"936af1bf.fb719","type":"switch","z":"9fec6591.8ae648","name":"Select device","property":"msg433.ID","propertyType":"msg","rules":[{"t":"eq","v":"11753","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":510,"y":200,"wires":[[],[]],"outputLabels":["Temp Garage","Unhandled"]},{"id":"e01eceac.bb1c3","type":"debug","z":"9fec6591.8ae648","name":"","active":false,"console":"false","complete":"true","x":490,"y":140,"wires":[]},{"id":"b5f87242.5455f","type":"serial in","z":"9fec6591.8ae648","name":"RFLink","serial":"a26f5ee4.366b5","x":110,"y":100,"wires":[["c170e7c6.e2c338","449c99e2.dc9158"]]},{"id":"6b0d25e7.b56efc","type":"mqtt out","z":"9fec6591.8ae648","name":"temp","topic":"/RFlink/temp_garage/","qos":"1","retain":"true","broker":"946c71c6.9448b","x":730,"y":360,"wires":[]},{"id":"e79b8bf4.5058f8","type":"change","z":"9fec6591.8ae648","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"msg433.TEMP","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":360,"wires":[["6b0d25e7.b56efc"]]},{"id":"b6cfdb0d.a901b8","type":"debug","z":"9fec6591.8ae648","name":"","active":true,"tosidebar":true,"console":false,"complete":"true","statusVal":"","statusType":"auto","x":490,"y":300,"wires":[]},{"id":"519e5b3b.eb74d4","type":"debug","z":"9fec6591.8ae648","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"msg433.TEMP","targetType":"msg","statusVal":"","statusType":"auto","x":530,"y":420,"wires":[]},{"id":"a26f5ee4.366b5","type":"serial-port","z":"","serialport":"/dev/ttyUSB0","serialbaud":"57600","databits":"8","parity":"none","stopbits":"1","waitfor":"","dtr":"none","rts":"none","cts":"none","dsr":"none","newline":"\\n","bin":"false","out":"char","addchar":"","responsetimeout":"10000"},{"id":"946c71c6.9448b","type":"mqtt-broker","z":"","name":"MQTT Docker 2","broker":"192.168.100.10","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

```

L’intéret serait maintenant d’automatiser la création de devices selon ce qu’il recoit dans le payload mais la je ne sais pas comment m’y prendre, si quelqu’un a une idée?

---

<div class="post-metadata">

**Author:** ![evenisse](https://forum.hacf.fr/user_avatar/forum.hacf.fr/evenisse/32/24_2.png) [@evenisse](https://forum.hacf.fr/u/evenisse)\
**Post date:** [Octobre 8, 2020, 9:11 UTC](https://forum.hacf.fr/t/gestion-rflink-via-node-red/621/2 "2020-10-08T09:11:45Z")

</div>

Hello,

Remplace ton switch device par une fonction 'prepare MQTT':

new\_msg = {};  
new\_msg.topic = '/RFlink/' + msg.msg433.name + '/info';  
new\_msg.qos = 1;  
new\_msg.retain = true;  
new\_msg.payload=msg.msg433.TEMP;  
return new\_msg;

 ![Screenshot 2020-10-08 at 11.08.46](https://forum.hacf.fr/uploads/default/original/1X/8340bd0c7f33b96c0e677b3e3a193224acabc12d.png)

---

<div class="post-metadata">

**Author:** ![DcJona](https://forum.hacf.fr/user_avatar/forum.hacf.fr/dcjona/32/1274_2.png) [@DcJona](https://forum.hacf.fr/u/DcJona)\
**Post date:** [Octobre 13, 2020, 9:27 UTC](https://forum.hacf.fr/t/gestion-rflink-via-node-red/621/3 "2020-10-13T09:27:32Z")

</div>

J'attaque maintenant les volets par contre j'ai plusieurs intérrogations ... .  
ma remontée avec le flow actuel : ![image](https://forum.hacf.fr/uploads/default/original/1X/6be0901cac457904d0c6bed885431e69cdfd273b.png)

je me demande donc comme créer un cover sous ha avec ceci  
le debug actuel me sort ceci :

 ![image](https://forum.hacf.fr/uploads/default/original/1X/b748fee354d55dd33c7b4b5847e2191d4ef2ed43.png)

je penais tenté ceci mais sans succès :

```
- platform: mqtt
  name: "MQTT Cover"
  command_topic: "/RFlink/RTS_40900349/set"
  state_topic: "/RFlink/RTS_40900349/state"
  availability_topic: "/RFlink/RTS_40900349/cover/availability"
  qos: 0
  retain: true
  payload_open: "UP"
  payload_close: "DOWN"
  payload_stop: "STOP"
  state_open: "open"
  state_opening: "opening"
  state_closed: "closed"
  state_closing: "closing"
  payload_available: "online"
  payload_not_available: "offline"
  optimistic: false
  value_template: "{{ value.x }}"

```

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Décembre 14, 2020, 8:19 UTC](https://forum.hacf.fr/t/gestion-rflink-via-node-red/621/4 "2020-12-14T20:19:56Z")

</div>

> [@DcJona](#):
>
> Je viens d’installer et paramètrer rflink via node red et ca tourne ! ouf…

As tu un lien vers un tutoriel ?

Merci.

---

<div class="post-metadata">

**Author:** ![DcJona](https://forum.hacf.fr/user_avatar/forum.hacf.fr/dcjona/32/1274_2.png) [@DcJona](https://forum.hacf.fr/u/DcJona)\
**Post date:** [Décembre 18, 2020, 9:54 UTC](https://forum.hacf.fr/t/gestion-rflink-via-node-red/621/5 "2020-12-18T21:54:02Z")

</div>

Nope c’est.pas encore finalisé je dois attendre que @evenisse evenise termine sa version quand il aura un peu de temps…en attendant je peux utiliser les prises et plusieurs autres choses on va voir avec lui quand il aura du temps car je pense que sa version a pas mal évolué comparé à la mienne
