-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathteslamate-awtrix-node-red-flow.json
1 lines (1 loc) · 22.4 KB
/
teslamate-awtrix-node-red-flow.json
1
[{"id":"01e4c85e6161951e","type":"tab","label":"teslamate - awtrix","disabled":false,"info":"","env":[]},{"id":"f310605c7ef32623","type":"mqtt in","z":"01e4c85e6161951e","name":"mqtt - teslamate","topic":"teslamate/cars/1/#","qos":"2","datatype":"auto","broker":"7d8b163feef9f343","nl":false,"rap":true,"rh":0,"inputs":0,"x":100,"y":260,"wires":[["21decde2856c85f1"]]},{"id":"21decde2856c85f1","type":"switch","z":"01e4c85e6161951e","name":"","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"teslamate/cars/1/latitude","vt":"str"},{"t":"eq","v":"teslamate/cars/1/longitude","vt":"str"},{"t":"eq","v":"teslamate/cars/1/geofence","vt":"str"},{"t":"eq","v":"teslamate/cars/1/battery_level","vt":"str"},{"t":"eq","v":"teslamate/cars/1/rated_battery_range_km","vt":"str"},{"t":"eq","v":"teslamate/cars/1/est_battery_range_km","vt":"str"},{"t":"eq","v":"teslamate/cars/1/state","vt":"str"},{"t":"eq","v":"teslamate/cars/1/charger_power","vt":"str"},{"t":"eq","v":"teslamate/cars/1/version","vt":"str"},{"t":"eq","v":"teslamate/cars/1/update_available","vt":"str"},{"t":"eq","v":"teslamate/cars/1/update_version","vt":"str"},{"t":"eq","v":"teslamate/cars/1/display_name","vt":"str"},{"t":"eq","v":"teslamate/cars/1/outside_temp","vt":"str"},{"t":"eq","v":"teslamate/cars/1/inside_temp","vt":"str"}],"checkall":"true","repair":false,"outputs":14,"x":270,"y":260,"wires":[["b592d0733d075437"],["c00d9faaa4a25419"],["7df0abd9c3d15d2f"],["b9aff05167a2dc90"],["075c3cf071822009"],["36d307c9b8a774eb"],["01705be414f50d02"],["cc91748db14cd465"],["90be15651ef7c8b2"],["1fb705788d0b4586"],["80b2ee4c9e4b011f"],["4cdd6752554006ea"],["884434da7669a876"],["70e07f6645426f97"]]},{"id":"b592d0733d075437","type":"function","z":"01e4c85e6161951e","name":"latitude (car 1)","func":"flow.set(\"latitude_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":160,"wires":[["dc867acbbe6b08f1"]]},{"id":"c00d9faaa4a25419","type":"function","z":"01e4c85e6161951e","name":"longitude (car 1)","func":"flow.set(\"longitude_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":220,"wires":[["dc867acbbe6b08f1"]]},{"id":"dc867acbbe6b08f1","type":"function","z":"01e4c85e6161951e","name":"distanceGeofenceCar1","func":"var app_name = \"distanceGeofenceCar1\";\n\nvar duration = flow.get(\"awtrix_duration\");\nvar lifetime = flow.get(\"awtrix_lifetime\");\nvar repeat = flow.get(\"awtrix_repeat\");\nvar prefix = flow.get(\"awtrix_prefix\");\nvar app_prefix = flow.get(\"awtrix_app_prefix\");\n\nmsg.topic = prefix + \"/custom/\" + app_prefix + app_name;\n\nvar home_latitude = flow.get(\"home_latitude\");\nvar home_longitude = flow.get(\"home_longitude\");\nvar car_latitude = flow.get(\"latitude_car1\");\nvar car_longitude = flow.get(\"longitude_car1\");\nvar geofence = flow.get(\"geofence_car1\");\nvar icon = \"23172\";\n\n// --------------------------------------------------\n// Dinstance calculation taken from:\n// Jörg Hofmann / meintechblog.de\n// https://meintechblog.de/2024/06/11/dafuer-nutze-ich-mqtt-und-nodered-im-smarthome/\n// --- begin ---\n\nvar RADIUS = 6371;\n\nvar toRad = function(n) {\n return n * Math.PI / 180;\n};\n\nvar getDistance = function(from, to) {\n var fromLat = from[0];\n var fromLon = from[1];\n var toLat = to[0];\n var toLon = to[1];\n var dLat = toRad(toLat - fromLat);\n var dLon = toRad(toLon - fromLon);\n fromLat = toRad(fromLat);\n toLat = toRad(toLat);\n var a = Math.pow(Math.sin(dLat / 2), 2) + (Math.pow(Math.sin(dLon / 2), 2) * Math.cos(fromLat) * Math.cos(toLat));\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n return RADIUS * c;\n};\n\nvar measurePath = function(points) {\n return points.reduce(function(memo, point) {\n var distance = memo.lastPoint === null ? 0 : getDistance(memo.lastPoint, point);\n return { lastPoint: point, distance: distance + memo.distance };\n }, { lastPoint: null, distance: 0 }).distance;\n};\n\nvar calcDistance = function(fromLat, fromLon, toLat, toLon) {\n if(typeof fromLat === 'number'){\n return getDistance([fromLat, fromLon], [toLat, toLon]);\n } else {\n return measurePath(fromLat);\n }\n};\n\nvar value = Number(calcDistance(\n home_latitude,\n home_longitude,\n car_latitude,\n car_longitude\n));\n// --- end ---\n// --------------------------------------------------\n\nvar unit = \"\";\n\nif (value >= 1000) {\n value = value/100 - 0.5;\n value = value.toFixed(1);\n unit = \"tkm\";\n} else if(value >= 10) {\n value = value.toFixed(0);\n unit = \"km\";\n} else if(value >= 1) {\n value = value.toFixed(1);\n unit = \"km\";\n} else {\n value = value * 1000;\n value = value.toFixed(0);\n unit = \"m\";\n}\n\nvalue = value + \" \" + unit;\n\nif (geofence != \"\") {\n value = geofence;\n}\n\nmsg.payload = {\n \"text\": value,\n \"icon\": icon,\n \"repeat\": repeat,\n \"lifetime\": lifetime,\n \"duration\": duration,\n \"pushIcon\": 0\n};\n\nnode.status({ fill:\"green\",shape:\"ring\",text:value });\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":850,"y":160,"wires":[["bc7905651dca0c01"]]},{"id":"bc9a27298b84fd05","type":"change","z":"01e4c85e6161951e","name":"config","rules":[{"t":"set","p":"home_latitude","pt":"flow","to":"58.890512","tot":"num"},{"t":"set","p":"home_longitude","pt":"flow","to":"6.5464104","tot":"num"},{"t":"set","p":"awtrix_prefix","pt":"flow","to":"awtrix/stefan","tot":"str"},{"t":"set","p":"awtrix_app_prefix","pt":"flow","to":"teslamate_","tot":"str"},{"t":"set","p":"awtrix_duration","pt":"flow","to":"10","tot":"str"},{"t":"set","p":"awtrix_lifetime","pt":"flow","to":"120","tot":"str"},{"t":"set","p":"awtrix_repeat","pt":"flow","to":"2","tot":"str"},{"t":"set","p":"awtrix_sleeptime","pt":"flow","to":"36000","tot":"str"},{"t":"set","p":"qos","pt":"msg","to":"0","tot":"str"},{"t":"set","p":"retain","pt":"msg","to":"false","tot":"str"},{"t":"set","p":"awtrix_bri","pt":"flow","to":"70","tot":"str"},{"t":"set","p":"awtrix_teff","pt":"flow","to":"10","tot":"str"},{"t":"set","p":"awtrix_tspeed","pt":"flow","to":"800","tot":"str"},{"t":"set","p":"awtrix_sspeed","pt":"flow","to":"50","tot":"str"},{"t":"set","p":"awtrix_app_tim","pt":"flow","to":"false","tot":"str"},{"t":"set","p":"awtrix_app_dat","pt":"flow","to":"false","tot":"str"},{"t":"set","p":"awtrix_app_hum","pt":"flow","to":"false","tot":"str"},{"t":"set","p":"awtrix_app_temp","pt":"flow","to":"false","tot":"str"},{"t":"set","p":"awtrix_app_bat","pt":"flow","to":"false","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":270,"y":120,"wires":[["b2b5be453e14f053"]]},{"id":"373ef53667069001","type":"inject","z":"01e4c85e6161951e","name":"Init vars","props":[{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"","payloadType":"date","x":100,"y":120,"wires":[["bc9a27298b84fd05"]]},{"id":"1646c4cd49963778","type":"function","z":"01e4c85e6161951e","name":"awtrix sleep","func":"// Send AWTRIX device to sleep for x seconds\nvar sleep = flow.get(\"awtrix_sleeptime\"); // in seconds\nvar prefix = flow.get(\"awtrix_prefix\");\nmsg.topic = prefix + \"/sleep\";\n\nmsg.payload = {\n \"sleep\": sleep\n};\n\nreturn msg;\n","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":810,"y":1040,"wires":[["bc7905651dca0c01"]]},{"id":"30b24589d95a8134","type":"inject","z":"01e4c85e6161951e","name":"Send AWTRIX to sleep","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"1","topic":"","payload":"","payloadType":"date","x":140,"y":1040,"wires":[["1646c4cd49963778"]]},{"id":"1b549de2d33a079e","type":"inject","z":"01e4c85e6161951e","name":"Run every minute","props":[{"p":"payload"}],"repeat":"60","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"","payloadType":"date","x":130,"y":400,"wires":[["7be6d3dc8138ba7a","3fef45b251ad7253"]]},{"id":"7be6d3dc8138ba7a","type":"function","z":"01e4c85e6161951e","name":"batterySocCar1","func":"var app_name = \"batterySocCar1\";\n\nvar duration = flow.get(\"awtrix_duration\");\nvar lifetime = flow.get(\"awtrix_lifetime\");\nvar repeat = flow.get(\"awtrix_repeat\");\nvar prefix = flow.get(\"awtrix_prefix\");\nvar app_prefix = flow.get(\"awtrix_app_prefix\");\n\nmsg.topic = prefix + \"/custom/\" + app_prefix + app_name;\n\nvar value = Number(flow.get(\"battery_level_car1\"));\nvar unit = \"%\";\nvar icon = \"7421\";\n\nvalue = value.toFixed(0);\n\nmsg.payload = {\n \"text\": value + ' ' + unit,\n \"progress\": value,\n \"icon\": icon, \n \"repeat\": repeat,\n \"lifetime\": lifetime,\n \"duration\": duration,\n \"pushIcon\": 0 \n};\n\nnode.status({ fill: 'green', shape: 'ring', text: value + ' ' + unit });\n\nreturn msg;\n","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":340,"wires":[["bc7905651dca0c01"]]},{"id":"bc7905651dca0c01","type":"mqtt out","z":"01e4c85e6161951e","name":"mqtt - awtrix","topic":"","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"7d8b163feef9f343","x":1150,"y":360,"wires":[]},{"id":"b2b5be453e14f053","type":"function","z":"01e4c85e6161951e","name":"awtrix settings","func":"// Set dafault values\n// See: https://blueforcer.github.io/awtrix3/#/api\n\n// Set device default values\nvar awtrix_bri = flow.get(\"awtrix_bri\"); // Brightness (0-255)\nvar awtrix_abri = false; // Automatic brightness\nvar awtrix_teff = flow.get(\"awtrix_teff\"); // App transition effect\nvar awtrix_tspeed = flow.get(\"awtrix_tspeed\"); // App transition time\nvar awtrix_sspeed = flow.get(\"awtrix_sspeed\"); // Scroll speed\n\n// Show preinstalled apps (needs manual restart of the device after publishing)\nvar awtrix_app_tim = flow.get(\"awtrix_app_tim\"); // Show time\nvar awtrix_app_dat = flow.get(\"awtrix_app_dat\"); // Show date\nvar awtrix_app_hum = flow.get(\"awtrix_app_hum\"); // Show humidity (sensor in device)\nvar awtrix_app_temp = flow.get(\"awtrix_app_temp\"); // Show temperature (sensor in device)\nvar awtrix_app_bat = flow.get(\"awtrix_app_bat\"); // Show battery soc of device\n\n// --------------------------------------------------\n\nvar prefix = flow.get(\"awtrix_prefix\");\nmsg.topic = prefix + \"/settings\";\n\nmsg.payload = {\n \"BRI\": awtrix_bri,\n \"ABRI\": awtrix_abri,\n \"TEFF\": awtrix_teff,\n \"TSPEED\": awtrix_tspeed,\n \"SSPEED\": awtrix_sspeed,\n \"TIM\": awtrix_app_tim,\n \"DAT\": awtrix_app_dat,\n \"HUM\": awtrix_app_hum,\n \"TEMP\": awtrix_app_temp,\n \"BAT\": awtrix_app_bat\n};\n\nreturn msg;\n","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":100,"wires":[["bc7905651dca0c01"]]},{"id":"64b35b3faa5c1fe9","type":"comment","z":"01e4c85e6161951e","name":"Sleep (manually)","info":"You can change the node to a specific time.\nPlease consider that the device should be\nplugged in to power for longer sleep times, eg.\nover night.\n\nSee \"awtrix sleep\" node for changing amount\nof sleep time.\n\nTo set the values click the button of below\nnode.\n\nVisit the AWTRIX website for all settings:\nhttps://blueforcer.github.io/awtrix3/#/api","x":100,"y":1000,"wires":[]},{"id":"7f5fb7667fccf571","type":"comment","z":"01e4c85e6161951e","name":"Readme.1st","info":"1. TeslaMate: connect TeslaMate with your mqtt server\n2. AWTRIX: connect AWTRIX device with your mqtt server\n3. AWTRIX: download all icons used by the flow (see below) to your AWTRIX device (see icons in settings)\n4. This flow: change variable \"awtrix_prefix\" (see \"vars\" node) to the mqtt topic of your AWTRIX device (see mqtt in settings \"prefix\")\n5. This flow: change home coordiantes (see \"vars\" node)\n6. This flow: change mqtt server settings in node-red to your mqtt server (see right side settings icon \"MQTT\")\n\nUsed icons (download to AWTRIX device):\n23172\n2735\n7421\n44231\n8478\n2056\n\nMore icons:\nhttps://developer.lametric.com/icons\n\nAWTRIX settings:\nawtrix_bri = '70'; // Brightness (0-255)\nawtrix_abri = false; // Automatic brightness\nawtrix_teff = '10'; // App transition effect\nawtrix_tspeed = '800'; // App transition time\nawtrix_sspeed = '50'; // Scroll speed\n\nShow preinstalled AWTRIX apps (needs manual restart of the device after publishing):\nawtrix_app_tim = true; // Show time\nawtrix_app_dat = false; // Show date\nawtrix_app_hum = false; // Show humidity (sensor in device)\nawtrix_app_temp = false; // Show temperature (sensor in device)\nawtrix_app_bat = false; // Show battery soc of device\n","x":90,"y":40,"wires":[]},{"id":"213e4e77402a6662","type":"function","z":"01e4c85e6161951e","name":"softwareUpdateCar1","func":"var app_name = \"softwareUpdateCar1\";\n\nvar duration = flow.get(\"awtrix_duration\");\nvar lifetime = flow.get(\"awtrix_lifetime\");\nvar repeat = flow.get(\"awtrix_repeat\");\nvar prefix = flow.get(\"awtrix_prefix\");\nvar app_prefix = flow.get(\"awtrix_app_prefix\");\n\nmsg.topic = prefix + \"/custom/\" + app_prefix + app_name;\n\nvar display_name = flow.get(\"display_name_car1\");\nvar version = flow.get(\"version_car1\");\nvar update_available = false;\nupdate_available = flow.get(\"update_available_car1\");\nvar update_version = flow.get(\"update_version_car1\");\n\nvar value = display_name;\nvar icon = \"2735\";\n\nif (update_available = true) {\n value = \"Update available for \" + display_name + \": \" + version + \" -> \" + update_version;\n}\n\nmsg.payload = {\n \"text\": value,\n \"icon\": icon, \n \"repeat\": repeat,\n \"lifetime\": lifetime,\n \"duration\": duration,\n \"pushIcon\": 0 \n};\n\nnode.status({ fill: 'green', shape: 'ring', text: value + ' | ' + update_available });\n\nif (update_available == true || update_version != \"\" ) {\n return msg;\n}\n","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":840,"y":640,"wires":[["bc7905651dca0c01"]]},{"id":"90be15651ef7c8b2","type":"function","z":"01e4c85e6161951e","name":"version (car 1)","func":"flow.set(\"version_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":640,"wires":[["213e4e77402a6662"]]},{"id":"1fb705788d0b4586","type":"function","z":"01e4c85e6161951e","name":"update_available (car 1)","func":"flow.set(\"update_available_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":700,"wires":[["213e4e77402a6662"]]},{"id":"80b2ee4c9e4b011f","type":"function","z":"01e4c85e6161951e","name":"update_version (car 1)","func":"flow.set(\"update_version_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":760,"wires":[["213e4e77402a6662"]]},{"id":"b9aff05167a2dc90","type":"function","z":"01e4c85e6161951e","name":"battery_level (car 1)","func":"flow.set(\"battery_level_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":490,"y":340,"wires":[["7be6d3dc8138ba7a"]]},{"id":"4cdd6752554006ea","type":"function","z":"01e4c85e6161951e","name":"display_name (car 1)","func":"flow.set(\"display_name_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":820,"wires":[["213e4e77402a6662"]]},{"id":"7df0abd9c3d15d2f","type":"function","z":"01e4c85e6161951e","name":"geofence (car 1)","func":"flow.set(\"geofence_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":280,"wires":[["dc867acbbe6b08f1"]]},{"id":"884434da7669a876","type":"function","z":"01e4c85e6161951e","name":"outside_temp (car 1)","func":"flow.set(\"outside_temp_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":880,"wires":[["9d0e402b596c060f"]]},{"id":"70e07f6645426f97","type":"function","z":"01e4c85e6161951e","name":"inside_temp (car 1)","func":"flow.set(\"inside_temp_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":490,"y":940,"wires":[["71b43714f38a3585"]]},{"id":"075c3cf071822009","type":"function","z":"01e4c85e6161951e","name":"rated_battery_range_km (car 1)","func":"flow.set(\"rated_battery_range_km_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":530,"y":400,"wires":[[]]},{"id":"cc91748db14cd465","type":"function","z":"01e4c85e6161951e","name":"charger_power (car 1)","func":"flow.set(\"charger_power_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":580,"wires":[["f917e260be9e3c39"]]},{"id":"01705be414f50d02","type":"function","z":"01e4c85e6161951e","name":"state (car 1)","func":"flow.set(\"state_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":470,"y":520,"wires":[["f917e260be9e3c39"]]},{"id":"3fef45b251ad7253","type":"function","z":"01e4c85e6161951e","name":"batteryRangeCar1","func":"var app_name = \"batteryRangeCar1\";\n\nvar duration = flow.get(\"awtrix_duration\");\nvar lifetime = flow.get(\"awtrix_lifetime\");\nvar repeat = flow.get(\"awtrix_repeat\");\nvar prefix = flow.get(\"awtrix_prefix\");\nvar app_prefix = flow.get(\"awtrix_app_prefix\");\n\nmsg.topic = prefix + \"/custom/\" + app_prefix + app_name;\n\nvar value = Number(flow.get(\"est_battery_range_km_car1\"));\nvar unit = \"km\";\nvar icon = \"7421\";\n\nvalue = value.toFixed(0);\n\nmsg.payload = {\n \"text\": value + ' ' + unit,\n \"icon\": icon, \n \"repeat\": repeat,\n \"lifetime\": lifetime,\n \"duration\": duration,\n \"pushIcon\": 0 \n};\n\nnode.status({ fill: 'green', shape: 'ring', text: value + ' ' + unit });\n\nreturn msg;\n","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":830,"y":460,"wires":[["bc7905651dca0c01"]]},{"id":"f917e260be9e3c39","type":"function","z":"01e4c85e6161951e","name":"chargePowerCar1","func":"var app_name = \"chargePowerCar1\";\n\nvar duration = flow.get(\"awtrix_duration\");\nvar lifetime = flow.get(\"awtrix_lifetime\");\nvar repeat = flow.get(\"awtrix_repeat\");\nvar prefix = flow.get(\"awtrix_prefix\");\nvar app_prefix = flow.get(\"awtrix_app_prefix\");\n\nmsg.topic = prefix + \"/custom/\" + app_prefix + app_name;\n\nvar value = Number(flow.get(\"charger_power_car1\"));\nvar value2 = flow.get(\"state_car1\");\nvar unit = \"kW\";\nvar icon = \"44231\";\n\nvalue = value.toFixed(0);\n\nmsg.payload = {\n \"text\": value + ' ' + unit,\n \"icon\": icon,\n \"repeat\": repeat,\n \"lifetime\": lifetime,\n \"duration\": duration,\n \"pushIcon\": 0\n};\n\nnode.status({ fill: 'green', shape: 'ring', text: value + ' ' + unit + ' | ' + value2 });\n\nif (value > 0 || value2 == \"charging\") {\n return msg;\n}","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":830,"y":520,"wires":[["bc7905651dca0c01"]]},{"id":"9d0e402b596c060f","type":"function","z":"01e4c85e6161951e","name":"outsideTempCar1","func":"var app_name = \"outsideTempCar1\";\n\nvar duration = flow.get(\"awtrix_duration\");\nvar lifetime = flow.get(\"awtrix_lifetime\");\nvar repeat = flow.get(\"awtrix_repeat\");\nvar prefix = flow.get(\"awtrix_prefix\");\nvar app_prefix = flow.get(\"awtrix_app_prefix\");\n\nmsg.topic = prefix + \"/custom/\" + app_prefix + app_name;\n\nvar value = Number(flow.get(\"outside_temp_car1\"));\nvalue = value.toFixed(1);\nvar unit = \"°C\";\nvar icon = \"8478\";\n\nmsg.payload = {\n \"text\": value + ' ' + unit,\n \"icon\": icon,\n \"repeat\": repeat,\n \"lifetime\": lifetime,\n \"duration\": duration,\n \"pushIcon\": 0\n};\n\nnode.status({ fill: 'green', shape: 'ring', text: value + ' ' + unit });\n\nreturn msg;\n","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":830,"y":880,"wires":[["bc7905651dca0c01"]]},{"id":"71b43714f38a3585","type":"function","z":"01e4c85e6161951e","name":"insideTempCar1","func":"var app_name = \"insideTempCar1\";\n\nvar duration = flow.get(\"awtrix_duration\");\nvar lifetime = flow.get(\"awtrix_lifetime\");\nvar repeat = flow.get(\"awtrix_repeat\");\nvar prefix = flow.get(\"awtrix_prefix\");\nvar app_prefix = flow.get(\"awtrix_app_prefix\");\n\nmsg.topic = prefix + \"/custom/\" + app_prefix + app_name;\n\nvar value = Number(flow.get(\"inside_temp_car1\"));\nvalue = value.toFixed(1);\nvar unit = \"°C\";\nvar icon = \"2056\";\n\nmsg.payload = {\n \"text\": value + ' ' + unit,\n \"icon\": icon,\n \"repeat\": repeat,\n \"lifetime\": lifetime,\n \"duration\": duration,\n \"pushIcon\": 0\n};\n\nnode.status({ fill: 'green', shape: 'ring', text: value + ' ' + unit });\n\nreturn msg;\n","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":940,"wires":[["bc7905651dca0c01"]]},{"id":"36d307c9b8a774eb","type":"function","z":"01e4c85e6161951e","name":"est_battery_range_km (car 1)","func":"flow.set(\"est_battery_range_km_car1\", msg.payload);\n\nnode.status({fill:\"blue\",shape:\"ring\",text:msg.payload}); \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":520,"y":460,"wires":[["3fef45b251ad7253"]]},{"id":"7d8b163feef9f343","type":"mqtt-broker","name":"MQTT","broker":"192.168.7.15","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]