Adding sensors and switches from Domoticz and ZigBee2MQTT to Telegram

The stream allows you to automatically send sensor readings and the state of switches from Domotics and Z2MKTT to the telegram bot, as well as control the switches from the Telegram bot. In order for the sensors and switches to get into the Telegram bot, you need to set the indicator in the name of the sensor, in my example, this is an underscore "_", for example Kitchen_Light or Garage_Gate. This symbol can be changed by specifying the "zna" variable in all Function nodes. In order for the stream to form the keyboard, it is necessary to send the /menu command to the Telegram bot.

[{"id":"407b66b8.062a58","type":"tab","label":"Zig Bee","disabled":false,"info":""},{"id":"863e1e1c.033c","type":"function","z":"407b66b8.062a58","name":"Form listrooms","func":"\nif(msg.payload.content === undefined){} else {flow.set(\"type\", msg.payload.content);}\nif(msg.payload.chatId === undefined){} else {flow.set(\"chatId\", msg.payload.chatId);}\nvar pa = flow.keys();\nvar jki = [];\nvar kle = [];\nvar jkr = [];\nvar t = 0;\nvar znak = \"_\"; //разделительный знак в топике, Балкон_Розетка\nvar idx;\n\n//формируем массив комнат\n for (let i = 0; i < pa.length; i++) {\n if(pa[i].includes(znak)){if(jkr.includes(pa[i].slice(0, [pa[i].indexOf(znak)]))){}else{\n jkr[t] = pa[i].slice(0, [pa[i].indexOf(znak)])\n t = t+1;\n }}\n }\nflow.set(\"listrooms\", jkr);\n\n\n var lengths = pa.map(x => flow.get(x));\n \n  for (let i = 0; i < lengths.length; i++) { \n     jki[i] = {tapy : pa[i], valome : lengths[i]}\n  }\n  var tape = flow.get(\"type\");\n  let room = jki.filter(item => item.tapy.includes(tape));\n var  payload = {room : room, chatId : flow.get(\"chatId\")};\nmsg.payload = payload;\nreturn msg;","outputs":1,"noerr":0,"x":400,"y":940,"wires":[["a190aaf.87a6d58"]]},{"id":"9afc2602.e1aaa8","type":"function","z":"407b66b8.062a58","name":"Domotikcz","func":"msg.topic =  msg.payload.name;\n\nif(msg.payload.dtype === \"Temp\"){msg.payload.temperature = Number(msg.payload.svalue1);}\nif(msg.payload.dtype === \"Light/Switch\"){if(msg.payload.switchType === \"On/Off\"){if(msg.payload.nvalue)\n{msg.payload.state = \"ON\";} else {msg.payload.state = \"OFF\"}} \n  if(msg.payload.switchType === \"Selector\" && msg.payload.stype === \"Selector Switch\"){\n      var t = 0;\n      var v = 0;\n      var k = [];\n       for (let char of msg.payload.LevelNames) {\n           if(char === \"|\"){k[v] = t; \n           v = v + 1; }\n           t = t + 1;\n       msg.payload.nomSelector =  Number(msg.payload.svalue1);\n           \n       }\n      var e = Number(msg.payload.svalue1)/10 - 1;\n      msg.payload.Leve = k;\n      msg.payload.stateSelector =  msg.payload.LevelNames.slice(k[0 + e]+1, k[1 + e]);} \n      if(msg.payload.switchType === \"Dimmer\"){\n          msg.payload.stateDimmer = Number(msg.payload.svalue1);\n      }\n    \n}\nif(msg.payload.dtype === \"Lux\"){msg.payload.illuminance = Number(msg.payload.svalue1);}\nif(msg.payload.dtype === \"Temp + Humidity\"){msg.payload.temperature = Number(msg.payload.svalue1);\n msg.payload.humidity = Number(msg.payload.svalue2);\n    msg.payload.pointofross = Number(msg.payload.svalue3);\n}\n\nif(msg.payload.dtype === \"Temp + Humidity + Baro\"){msg.payload.temperature = Number(msg.payload.svalue1);\n msg.payload.humidity = Number(msg.payload.svalue2);\n  msg.payload.pressure = Number(msg.payload.svalue4);\n  msg.payload.pointofross = Number(msg.payload.svalue3)\n}\n\nif(msg.payload.dtype === \"Rain\"){msg.payload.rate = Number(msg.payload.svalue1)/10000;\n msg.payload.rain = Number(msg.payload.svalue2);\n}\n\nif(msg.payload.dtype === \"Wind\"){msg.payload.degrees = Number(msg.payload.svalue1);\n msg.payload.compass = msg.payload.svalue2;\n  msg.payload.speed = Number(msg.payload.svalue3)/10; \n  msg.payload.gust = Number(msg.payload.svalue4)/10\n  msg.payload.FeelsLike = Number(msg.payload.svalue6)\n  msg.payload.temperature = Number(msg.payload.svalue5);\n}\n\nif(msg.payload.stype === \"Visibility\"){msg.payload.vissibility = Number(msg.payload.svalue1);\n}\n\nif(msg.payload.dtype === \"UV\"){msg.payload.ultraviolet = Number(msg.payload.svalue1);\n}\n\nif(msg.payload.stype === \"kWh\"){msg.payload.power = Number(msg.payload.svalue1);\nmsg.payload.summpower = Number(msg.payload.svalue2);\n}\n\n\n//msg.topic = topic;\nreturn msg;","outputs":1,"noerr":0,"x":610,"y":280,"wires":[["7bad60ed.8aab1"]]},{"id":"386d6585.a1a21a","type":"zigbee2mqtt-bridge","z":"407b66b8.062a58","name":"","server":"bfdd1bcb.dd1a68","topic":null,"x":230,"y":220,"wires":[["3a22c3e7.165cfc"]]},{"id":"9d22a4c8.cd97c8","type":"zigbee2mqtt-in","z":"407b66b8.062a58","name":"Зал_ДДвижения","server":"bfdd1bcb.dd1a68","friendly_name":"Зал_ДДвижения","device_id":"0x00158d000413fbed","state":"0","outputAtStartup":true,"x":220,"y":360,"wires":[["d7205ced.2072"]]},{"id":"d7205ced.2072","type":"debug","z":"407b66b8.062a58","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":470,"y":360,"wires":[]},{"id":"3a22c3e7.165cfc","type":"json","z":"407b66b8.062a58","name":"","property":"payload","action":"","pretty":false,"x":420,"y":220,"wires":[["a0cb97dc.9bff88"]]},{"id":"df13b1a5.b1c0a","type":"zigbee2mqtt-in","z":"407b66b8.062a58","name":"Балкон_Розетка","server":"bfdd1bcb.dd1a68","friendly_name":"Балкон_Розетка","device_id":"0x00158d000353d7c2","state":"","outputAtStartup":true,"x":220,"y":420,"wires":[["2f1deb25.04d4c4"]]},{"id":"2f1deb25.04d4c4","type":"debug","z":"407b66b8.062a58","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":470,"y":420,"wires":[]},{"id":"80d4e113.ee85d","type":"zigbee2mqtt-in","z":"407b66b8.062a58","name":"","server":"bfdd1bcb.dd1a68","friendly_name":"Коридор_ДДвижения","device_id":"0x00158d00031e17b5","state":"0","outputAtStartup":true,"x":240,"y":480,"wires":[["6194e286.3f2bfc"]]},{"id":"6194e286.3f2bfc","type":"debug","z":"407b66b8.062a58","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":470,"y":480,"wires":[]},{"id":"b95590a3.a204","type":"zigbee2mqtt-in","z":"407b66b8.062a58","name":"","server":"bfdd1bcb.dd1a68","friendly_name":"Коридор_Дверь","device_id":"0x00158d0003952588","state":"0","outputAtStartup":true,"x":220,"y":540,"wires":[["1f06c883.8976b7","8e459531.50bf08"]]},{"id":"1f06c883.8976b7","type":"debug","z":"407b66b8.062a58","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":470,"y":540,"wires":[]},{"id":"ebee7e09.f4a61","type":"zigbee2mqtt-out","z":"407b66b8.062a58","name":"Балкон_Розетка","server":"bfdd1bcb.dd1a68","friendly_name":"Балкон_Розетка","device_id":"0x00158d000353d7c2","command":"state","commandType":"z2m_cmd","payload":"payload","payloadType":"msg","transition":0,"x":430,"y":720,"wires":[]},{"id":"4206218e.8e38a","type":"inject","z":"407b66b8.062a58","name":"","topic":"","payload":"toggle","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":720,"wires":[["ebee7e09.f4a61"]]},{"id":"8e459531.50bf08","type":"link out","z":"407b66b8.062a58","name":"Тамбур","links":["d24d0f7f.1fcee"],"x":595,"y":580,"wires":[]},{"id":"6d5958dd.7ca1f8","type":"zigbee2mqtt-in","z":"407b66b8.062a58","name":"","server":"bfdd1bcb.dd1a68","friendly_name":"Тамбур_ДДвижения","device_id":"0x00158d0003fae2db","state":"0","outputAtStartup":true,"x":230,"y":600,"wires":[["33202d26.57f2b2","8e459531.50bf08"]]},{"id":"33202d26.57f2b2","type":"debug","z":"407b66b8.062a58","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":450,"y":600,"wires":[]},{"id":"a0cb97dc.9bff88","type":"function","z":"407b66b8.062a58","name":"zigbee2mqtt","func":"if (msg.payload.level == \"info\"){\nvar message = msg.payload.message;\nvar t = 0;\nvar v = 0;\nvar k = [];\nvar topic = \"zigbee2mqtt\";// топик на который подписан  в zigbee2mqtt\n\n       for (let char of message) {\n           if(char === \"'\"){k[v] = t; \n           v = v + 1; }\n           t = t + 1;\n       }\n      \n      msg.payload.Leve = k;\n      msg.topic =  message.slice(k[0]+ topic.length + 2, k[1]); \n       msg.payload =  message.slice(k[2]+1, k[3]);\n       \n       \nreturn msg;}","outputs":1,"noerr":0,"x":610,"y":220,"wires":[["2d4e2d39.c19372"]]},{"id":"2d4e2d39.c19372","type":"json","z":"407b66b8.062a58","name":"","property":"payload","action":"","pretty":false,"x":770,"y":220,"wires":[["7bad60ed.8aab1"]]},{"id":"9d54883c.e2d0d8","type":"mqtt in","z":"407b66b8.062a58","name":"","topic":"domoticz/out","qos":"2","datatype":"auto","broker":"8c61f6d8.6a52e8","x":230,"y":280,"wires":[["4b1ff25d.7fae6c"]]},{"id":"4b1ff25d.7fae6c","type":"json","z":"407b66b8.062a58","name":"","property":"payload","action":"","pretty":false,"x":410,"y":280,"wires":[["9afc2602.e1aaa8"]]},{"id":"7032190d.062bb8","type":"zigbee2mqtt-in","z":"407b66b8.062a58","name":"","server":"bfdd1bcb.dd1a68","friendly_name":"Зал_Ксиоми","device_id":"0x00158d00036b6538","state":"0","outputAtStartup":true,"x":210,"y":660,"wires":[["fb8d56d5.fd69e8"]]},{"id":"fb8d56d5.fd69e8","type":"debug","z":"407b66b8.062a58","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":450,"y":660,"wires":[]},{"id":"7bad60ed.8aab1","type":"function","z":"407b66b8.062a58","name":"flow set","func":"var dt = new Date();\nvar topic = msg.topic;\nvar payload = msg.payload;\nvar znak = \"_\"; //разделительный знак в топике, _Балкон_Розетка\nlet battery = {};\nlet linkquality = {};\n\n\npayload = {battery : msg.payload.battery,\nvoltage : msg.payload.voltage,\ntemperature : msg.payload.temperature,\nhumidity : msg.payload.humidity,\npressure : msg.payload.pressure,\nlinkquality : msg.payload.linkquality,   \nilluminance : msg.payload.illuminance,\ncontact : msg.payload.contact,\nstate : msg.payload.state,\nstateSelector : msg.payload.stateSelector,\nnomSelector : msg.payload.nomSelector,\nstateDimmer : msg.payload.stateDimmer,\noccupancy : msg.payload.occupancy,\ndegrees : msg.payload.degrees,    \nvissibility : msg.payload.vissibility,\nFeelsLike : msg.payload.FeelsLike,\ngust : msg.payload.gust,\ncompass : msg.payload.compass,\nspeed : msg.payload.speed,\nultraviolet : msg.payload.ultraviolet,\nsummpower : msg.payload.summpower,\nozon : msg.payload.ozon,\nrate : msg.payload.rate,\nrain : msg.payload.rain,\npower : msg.payload.power,\nenergy : msg.payload.energy,\nconsumption : msg.payload.consumption,\nidx : msg.payload.idx,\ntime : dt.getTime()\n};\n\nflow.set(topic, payload);\n\nmsg.payload =  payload;\nreturn msg;   \n","outputs":1,"noerr":0,"x":1060,"y":280,"wires":[[]]},{"id":"4c3b0db6.4789f4","type":"zigbee2mqtt-in","z":"407b66b8.062a58","name":"","server":"bfdd1bcb.dd1a68","friendly_name":"Зал_ДВибрации","device_id":"0x00158d0002b8bbfc","state":"0","outputAtStartup":true,"x":220,"y":800,"wires":[["1e9487f7.286648"]]},{"id":"1e9487f7.286648","type":"debug","z":"407b66b8.062a58","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":410,"y":800,"wires":[]},{"id":"1b885ac3.1ef015","type":"telegram receiver","z":"407b66b8.062a58","name":"Megevabot","bot":"65dd8e4a.968dd","saveDataDir":"","x":160,"y":900,"wires":[["863e1e1c.033c","271ced23.8d3052"],[]]},{"id":"133a96e8.ce1789","type":"telegram sender","z":"407b66b8.062a58","name":"","bot":"65dd8e4a.968dd","x":930,"y":940,"wires":[["7d9ec2d5.9ce06c"]]},{"id":"d5e5aef0.bc5c8","type":"string","z":"407b66b8.062a58","name":"","methods":[{"name":"replaceAll","params":[{"type":"str","value":"."},{"type":"str","value":"\\."}]},{"name":"replaceAll","params":[{"type":"str","value":"-"},{"type":"str","value":"\\-"}]}],"prop":"payload.content","propout":"payload.content","object":"msg","objectout":"msg","x":750,"y":940,"wires":[["133a96e8.ce1789"]]},{"id":"a190aaf.87a6d58","type":"function","z":"407b66b8.062a58","name":"form a message","func":"var payload = msg.payload.room;\nvar jkr = [];\nvar t = 0;\nvar znak = \"_\"; //разделительный знак в топике, _Балкон_Розетка\nvar idx;\nvar msng, msngw = \"\";\n msngq = \" \";\nvar massiv = {};\nvar type,tepi = \"\";\nvar te = flow.get(\"type\");\nvar listrooms = flow.get(\"listrooms\");\nvar messageid = flow.get(\"messageid\");\n //формируем сообщение в теллеграм\n var meseng = \"\"\n \n if (msg.payload.chatId  === undefined) {} else {flow.set(\"chatId\", msg.payload.chatId)}\n for (let i = 0; i < payload.length; i++) { \n     var dt = new Date();\n     tapy = \"__*\" + payload[i].tapy.slice(payload[i].tapy.lastIndexOf(znak) + 1) + \"*__\" + \"\\n\" ;\n     tepi = payload[i].tapy.slice(payload[i].tapy.lastIndexOf(znak) + 1);\n     if(payload[i].valome.state === undefined){state = \"\";} else {\n         if (payload[i].valome.state ===  \"OFF\") {sta =  \" 🔴️ ON\"} else {sta = \" ⚫️ OFF️\"}\n        msngw = \"[{\\\"text\\\":\\\"\"+  tepi + sta + \"\\\",\\\"callback_data\\\":\\\"\" + te + znak + tepi + \"~state\" + \"\\\"}],\"; \n       if (payload[i].valome.state ===  \"OFF\") {staate =  \"⚫️ OFF️\"} else {staate =    \"🔴 ON️\"}   \n         var state = \"_состояние:_ \" + staate + \"\\n\";}\n     if(payload[i].valome.power === undefined){power = \"\";} else {var power = \"_мощность:_ *\" + payload[i].valome.power + \"Watt*\" + \"\\n\";}\n     if(payload[i].valome.energy === undefined){energy = \"\";} else {var energy = \"_энергия:_ *\" + payload[i].valome.energy + \"kWh*\" + \"\\n\";}\n     if(payload[i].valome.temperature === undefined){temperature = \"\";} else {var temperature = \"_температура:_ *\" + payload[i].valome.temperature + \"°С*\" + \"\\n\";}\n     if(payload[i].valome.FeelsLike === undefined){FeelsLike = \"\";} else {var FeelsLike = \"_чувствуется как:_ *\" + payload[i].valome.FeelsLike + \"°С*\" + \"\\n\";}\n     if(payload[i].valome.humidity === undefined){humidity = \"\";} else {var humidity = \"_влажность:_ *\" + payload[i].valome.humidity + \"%*\" + \"\\n\";}\n     if(payload[i].valome.pressure === undefined){pressure = \"\";} else {var pressure = \"_давление:_ *\" + payload[i].valome.pressure + \"hPa*\" + \"\\n\";}  \n     if(payload[i].valome.pointofross === undefined){pointofross = \"\";} else {var pointofross = \"_точка россы:_ *\" + payload[i].valome.pointofross + \"°С*\" + \"\\n\";}\n     if(payload[i].valome.degrees === undefined){degrees = \"\";} else {var degrees = \"_направление:_ *\" + payload[i].valome.degrees + \"°\" + payload[i].valome.compass + \"*\\n\";}\n     if(payload[i].valome.speed === undefined){speed = \"\";} else {var speed = \"_скорость:_ *\" + payload[i].valome.speed + \"m/s*\\n\";}\n     if(payload[i].valome.gust === undefined){gust = \"\";} else {var gust = \"_порывы:_ *\" + payload[i].valome.gust + \"m/s*\\n\";}\n     if(payload[i].valome.ultraviolet === undefined){ultraviolet = \"\";} else {var ultraviolet = \"_УФ-индекс:_ *\" + payload[i].valome.ultraviolet + \"uv*\\n\";}\n     if(payload[i].valome.rate === undefined){rate = \"\";} else {var rate = \"_количество:_ *\" + payload[i].valome.rate + \"mm*\\n\";}\n     if(payload[i].valome.rain === undefined){rain = \"\";} else {var rain = \"_интенсивность:_ *\" + payload[i].valome.rain + \"mm/h*\\n\";}\n     if(payload[i].valome.occupancy === undefined){occupancy = \"\";} else {\n         var dvig;\n         if (payload[i].valome.occupancy){dvig = \"🔴\"} else {dvig = \"🟢\"}\n         var occupancy = \"_движение:_ *\" + dvig + \"*\\n\";}\n     \n     if(payload[i].valome.contact === undefined){contact = \"\";} else {\n         var cont;\n         if (payload[i].valome.contact){cont = \"Закрыто 🟢\"} else {cont = \"Открыто 🔴\"}\n         var contact = \"_состояние:_ *\" + cont + \"*\\n\";} \n     \n     \n     if(payload[i].valome.vissibility === undefined){vissibility = \"\";} else {var vissibility = \"_видимость:_ *\" + payload[i].valome.vissibility + \"km*\\n\";}\n     if(payload[i].valome.stateDimmer === undefined){stateDimmer = \"\";} else {\n         msngw = \"[{\\\"text\\\":\\\"\"+ \"⏪\" + \"\\\",\\\"callback_data\\\":\\\"\" + te + znak + tepi + \"~minus10-stateDimmer\" + \"\\\"},{\\\"text\\\":\\\"\"+ \"◀️️\"  + \"\\\",\\\"callback_data\\\":\\\"\" + te + znak + tepi + \"~minus90-stateDimmer\" + \"\\\"}, {\\\"text\\\":\\\"\"+  tepi  + \"\\\",\\\"callback_data\\\":\\\"\" + te + znak + tepi +  \"~mute-stateDimmer\" + \"\\\"},{\\\"text\\\":\\\"\"+ \"▶️\" + \"\\\",\\\"callback_data\\\":\\\"\" + te + znak + tepi + \"~plus90-stateDimmer\" + \"\\\"}, {\\\"text\\\":\\\"\"+ \" ⏩\" + \"\\\",\\\"callback_data\\\":\\\"\" + te + znak + tepi + \"~plus10-stateDimmer\" + \"\\\"}],\";\n         var stateDimmer = \"_уровень:_ *\" + payload[i].valome.stateDimmer + \"%*\\n\";}\n     if(payload[i].valome.stateSelector === undefined){stateSelector = \"\";} else {\n             msngw = \"[{\\\"text\\\":\\\"\"+ \"⏪\" + \"\\\",\\\"callback_data\\\":\\\"\" + te + znak + tepi + \"~minus10-stateSelector\" + \"\\\"}, {\\\"text\\\":\\\"\"+  tepi  + \"\\\",\\\"callback_data\\\":\\\"\" + te + znak + tepi +  \"~mute-stateSelector\" + \"\\\"},{\\\"text\\\":\\\"\"+ \" ⏩\" + \"\\\",\\\"callback_data\\\":\\\"\" + te + znak + tepi + \"~plus10-stateSelector\"+ \"\\\"}],\";\n         var stateSelector = \"_Выбрано:_ *\" + payload[i].valome.stateSelector + \"✔️*\\n\";}\n     if(payload[i].valome.illuminance === undefined){illuminance = \"\";} else {var illuminance = \"_освещенность:_ *\" + payload[i].valome.illuminance + \"Lux*\" + \"\\n\";}\n     if(payload[i].valome.linkquality === undefined){linkquality = \"\";} else {var linkquality = \" 📶 *\" + payload[i].valome.linkquality + \"%*\";} \n     if(payload[i].valome.voltage === undefined){voltage = \"\";} else {var voltage = \" 🔋 *\" + (payload[i].valome.voltage/1000).toFixed(2) +  \"Вт*\";}\n     if(payload[i].valome.battery === undefined){battery = \"\";} else {var battery = \"/*\" + payload[i].valome.battery + \"%*\";}\n     if(payload[i].valome.time === undefined){time = \"\";} else {var time = \" ⏱ *\" + Math.round((dt.getTime() - payload[i].valome.time)/60000) + \"мин*\" + \"\\n\";}\n   meseng = meseng + tapy + stateDimmer + stateSelector + state + power + energy + temperature + FeelsLike + humidity + pointofross + occupancy + contact +  vissibility + rate + rain + degrees + speed + gust + ultraviolet + pressure + illuminance + voltage + battery + linkquality + time + \"\\n\";\n     msngq = msngq + msngw;\n }\n \n var inlan = \"{\\\"inline_keyboard\\\":[\" + msngq.slice(0, -1) +  \"]}\";\n  if(messageid ===  undefined){type = \"message\"; messageid = \"\";} else {type = \"editMessageText\";} \n \n content = \"__*\" + te + \"*__\" + \"\\n\" + \"\\n\" + meseng;\n flow.set(\"content\", content)\n  payload = {\n    chatId : flow.get(\"chatId\"),\n    type : type,\n    content :content, \n   \n   \n  \n  \n   options: { \n        reply_markup: inlan,\n        message_id : messageid,\n        chat_id: flow.get(\"chatId\"),\n        disable_web_page_preview : true,\n        parse_mode : \"MarkdownV2\"\n    }\n};\n\n\n \nmsg.payload = payload;\nreturn msg;","outputs":1,"noerr":0,"x":580,"y":940,"wires":[["d5e5aef0.bc5c8"]]},{"id":"7d9ec2d5.9ce06c","type":"function","z":"407b66b8.062a58","name":"","func":"flow.set(\"messageid\", msg.payload.content.message_id);\nreturn msg;","outputs":1,"noerr":0,"x":1170,"y":940,"wires":[[]]},{"id":"18e7627f.cb88de","type":"function","z":"407b66b8.062a58","name":"form a keyboard","func":"var payload = msg.payload;\nvar jkr = [];\nvar t = 0;\nvar znak = \"_\"; //разделительный знак в топике, _Балкон_Розетка\nvar idx;\nvar msng = \"\";\nvar massiv = {};\nvar type = flow.get(\"type\");\nvar listrooms = flow.get(\"listrooms\");\nvar content = flow.get(\"content\");\n var meseng = \"\"\nflow.set(\"messageid\", msg.payload.content.message_id);\n //формирование клавиатуры\n let lengths =  listrooms.map(item => item.length);\n  for (let i = 0; i < listrooms.length; i++) { \n   if(lengths[i] + lengths[i+1] + lengths[i+2] < 25){ msng = msng + \"[\\\"\"  + listrooms[i]  + \"\\\",\\\"\" + listrooms[i + 1] + \"\\\",\\\"\" + listrooms[i + 2] +\"\\\"],\";\n   i = i + 2;\n   } else { \n    if(lengths[i] + lengths[i+1] < 15){ msng = msng + \"[\\\"\"  + listrooms[i]  + \"\\\",\\\"\" + listrooms[i + 1] + \"\\\"],\";\n   i = i + 1;\n   } else {  \n msng = msng + \"[\\\"\"  + listrooms[i]  + \"\\\"],\";}\n } }\n inlan = \"{\\\"keyboard\\\":[\" + msng.slice(0, -1) + \"],\" + \"\\\"resize_keyboard\\\":true,  \\\"one_time_keyboard\\\":false\" + \"}\";\n \n \n \n  payload = {\n    chatId : flow.get(\"chatId\"),\n    type : \"message\",\n    content : \"меню\", \n    lengths : lengths,\n    listrooms : listrooms,\n  \n  \n   options: { \n       \n        reply_markup: inlan,\n        disable_web_page_preview : true,\n        parse_mode : \"MarkdownV2\"\n    }\n};\n\n\n \nmsg.payload = payload;\nreturn msg;","outputs":1,"noerr":0,"x":620,"y":1000,"wires":[["133a96e8.ce1789"]]},{"id":"98c72ecf.c0b5e","type":"inject","z":"407b66b8.062a58","name":"Обнавление Телеги раз в сек","topic":"","payload":"","payloadType":"date","repeat":"1","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":980,"wires":[["863e1e1c.033c"]]},{"id":"271ced23.8d3052","type":"function","z":"407b66b8.062a58","name":"Delete Massage","func":"var listrooms = flow.get(\"listrooms\");\n\nif (listrooms.includes(msg.payload.content) || listrooms.includes(msg.payload.content.text)){\n msg.payload.type = 'deleteMessage';   \n msg.payload.content = msg.payload.messageId;    \nreturn msg;    \n}\n","outputs":1,"noerr":0,"x":450,"y":880,"wires":[["133a96e8.ce1789"]]},{"id":"6dd9eb62.736744","type":"telegram command","z":"407b66b8.062a58","name":"","command":"/menu","bot":"65dd8e4a.968dd","strict":false,"x":350,"y":1020,"wires":[["18e7627f.cb88de"],[]]},{"id":"793c7119.c9071","type":"telegram event","z":"407b66b8.062a58","name":"","bot":"65dd8e4a.968dd","event":"callback_query","autoanswer":false,"x":220,"y":1140,"wires":[["c01b690.cdacc98"]]},{"id":"c01b690.cdacc98","type":"function","z":"407b66b8.062a58","name":"","func":"let str = msg.payload.content;\nvar Status;\nstre = flow.get(str.slice(0, str.indexOf('~')));\n\nif(stre.idx){\n    if(stre.state){\n    if(stre.state === \"ON\"){Status = \"Off\"} else {Status = \"On\"}\n    msg.payload = \"{\\\"command\\\":\\\"switchlight\\\",\\\"idx\\\":\" + stre.idx + \",\\\"switchcmd\\\":\\\"\" + Status + \"\\\" }\";\n                  }\n    if(stre.stateSelector){\n        if(msg.payload.content.includes(\"plus10\")){Status = stre.nomSelector + 10}\n        if(msg.payload.content.includes(\"minus10\")){Status = stre.nomSelector - 10}\n        if(msg.payload.content.includes(\"mute\")){Status = 0}\n     msg.payload =  \"{\\\"command\\\":\\\"switchlight\\\",\\\"idx\\\":\" + stre.idx + \",\\\"switchcmd\\\":\\\"Set Level\\\",\\\"level\\\":\" + Status + \"}\";\n                  } \n      if(stre.stateDimmer === undefined){} else {\n        if(msg.payload.content.includes(\"plus10\")){Status = stre.stateDimmer + 10}\n        if(msg.payload.content.includes(\"minus10\")){Status = stre.stateDimmer - 10}\n        if(msg.payload.content.includes(\"plus90\")){Status = stre.stateDimmer + 1}\n        if(msg.payload.content.includes(\"minus90\")){Status = stre.stateDimmer - 1}\n        if(msg.payload.content.includes(\"mute\")){Status = 0}\n     msg.payload =  \"{\\\"command\\\":\\\"switchlight\\\",\\\"idx\\\":\" + stre.idx + \",\\\"switchcmd\\\":\\\"Set Level\\\",\\\"level\\\":\" + Status + \"}\";\n                  }\n//{\"command\":\"switchlight\",\"idx\":78,\"switchcmd\":\"On\"}\nmsg.topic = \"domoticz/in\";\nreturn msg;} else {\n    if(stre.state){\n    if(stre.state === \"ON\"){Status = \"{\\\"state\\\": \\\"OFF\\\"}\"} else {Status =\"{\\\"state\\\": \\\"ON\\\"}\"}\n     msg.payload = Status;\n    msg.topic = \"zigbee2mqtt/\" + str.slice(0, str.indexOf('~')) + \"/set\";\n    return msg;}\n}","outputs":1,"noerr":0,"x":390,"y":1140,"wires":[["773b7d83.a59c64"]]},{"id":"773b7d83.a59c64","type":"mqtt out","z":"407b66b8.062a58","name":"","topic":"","qos":"","retain":"","broker":"8c61f6d8.6a52e8","x":570,"y":1140,"wires":[]},{"id":"b13313.edae7cf","type":"zigbee2mqtt-in","z":"407b66b8.062a58","name":"","server":"bfdd1bcb.dd1a68","friendly_name":"0x5c0272fffec24309","device_id":"0x5c0272fffec24309","state":"0","outputAtStartup":true,"x":210,"y":760,"wires":[["ef49b810.6de288"]]},{"id":"ef49b810.6de288","type":"debug","z":"407b66b8.062a58","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":480,"y":760,"wires":[]},{"id":"bfdd1bcb.dd1a68","type":"zigbee2mqtt-server","z":"","name":"zigbee","host":"localhost","mqtt_port":"1883","mqtt_username":"vovadpua","mqtt_password":"7880186","tls":"e220341c.bd1c08","usetls":false,"base_topic":"zigbee2mqtt"},{"id":"8c61f6d8.6a52e8","type":"mqtt-broker","z":"","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"65dd8e4a.968dd","type":"telegram bot","z":"","botname":" @MegevaBot:","usernames":"","chatids":"474664595","baseapiurl":"","updatemode":"polling","pollinterval":"300","usesocks":false,"sockshost":"","socksport":"","socksusername":"","sockspassword":"","bothost":"","localbotport":"","publicbotport":"","privatekey":"","certificate":"","useselfsignedcertificate":false,"verboselogging":false},{"id":"e220341c.bd1c08","type":"tls-config","z":"","name":"","cert":"","key":"","ca":"","certname":"","keyname":"","caname":"","servername":"","verifyservercert":true}]

Flow Info

Created 4 years, 10 months ago
Rating: not yet rated

Owner

Actions

Rate:

Node Types

Core
  • debug (x8)
  • function (x9)
  • inject (x2)
  • json (x3)
  • link out (x1)
  • mqtt in (x1)
  • mqtt out (x1)
  • mqtt-broker (x1)
  • tls-config (x1)
Other

Tags

  • telegram bot
  • Z2MKTT,
  • Domoticz
  • ZigBee2MQTT
Copy this flow JSON to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option