OpenWeatherMap simple Weather info
This flow will use the OpenWeathermap to query a city you set in the Openweathermap node and display it on the Awtrix screen.
| System | Node-RED |
|---|---|
| Firmware | AWTRIX 3 |
| Topic | Smarthome |
| Built by | myounges |
| File | XRKWORY8orP4.json · 6.1 KB |
| Icons | 13 |
| Published | 2 Sep 2025 · updated 2 Sep 2025 |
| Downloads | 7 |
Was looking for something simple. this queries the API every 90 minutes and stores the info then has another timer that queries the stored values to send them to the screen. These values can be changed. The icons I fetched from LaMetric to be as close as possible to the forecast.
XRKWORY8orP4.json
[
{
"id": "e37dfa7528f985bd",
"type": "openweathermap",
"z": "9da611451ddbe3d3",
"name": "Weather",
"wtype": "current",
"lon": "",
"lat": "",
"city": "",
"country": "",
"language": "en",
"x": 200,
"y": 3120,
"wires": [
[
"291a463fbaac37ce"
]
]
},
{
"id": "c271bac7796d9310",
"type": "inject",
"z": "9da611451ddbe3d3",
"name": "inject",
"props": [
{
"p": "topic",
"vt": "str"
}
],
"repeat": "5400",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 69,
"y": 3120,
"wires": [
[
"e37dfa7528f985bd"
]
]
},
{
"id": "9112bc3237e043af",
"type": "mqtt out",
"z": "9da611451ddbe3d3",
"name": "awtrix",
"topic": "awtrix/notify",
"qos": "2",
"retain": "false",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "",
"x": 670,
"y": 3120,
"wires": []
},
{
"id": "ab731a831755c8cb",
"type": "function",
"z": "9da611451ddbe3d3",
"name": "awtrix",
"func": "switch (msg.payload.icon) {\n case '01d':\n // Action for value1\n msg.payload.icon = 2282;\n break;\n\n case '02d':\n // Action for value2\n msg.payload.icon = 2286;\n break;\n\n case '03d':\n // Action for value3\n msg.payload.icon = 44321;\n break;\n \n case '04d':\n // Action for value1\n msg.payload.icon = 44326;\n break;\n\n case '09d':\n // Action for value2\n msg.payload.icon = 72;\n break;\n\n case '10d':\n // Action for value3\n msg.payload.icon = 2284;\n break;\n\n case '11d':\n // Action for value1\n msg.payload.icon = 11428;\n break;\n\n case '13d':\n // Action for value2\n msg.payload.icon = 4702;\n break;\n\n case '50d':\n // Action for value2\n msg.payload.icon = 17055;\n break;\n\n case '01n':\n // Action for value1\n msg.payload.icon = 18433;\n break;\n\n case '02n':\n // Action for value2\n msg.payload.icon = 54631;\n break;\n\n case '03n':\n // Action for value3\n msg.payload.icon = 63124;\n break;\n case '04n':\n // Action for value1\n msg.payload.icon = 44331;\n break;\n\n case '09n':\n // Action for value2\n msg.payload.icon = 72;\n break;\n\n case '10n':\n // Action for value3\n msg.payload.icon = 63079;\n break;\n case '11n':\n // Action for value1\n msg.payload.icon = 11428;\n break;\n\n case '13n':\n // Action for value1\n msg.payload.icon = 4702;\n break;\n\n case '50n':\n // Action for value2\n msg.payload.icon = 17055;\n break;\n}\n\nmsg.icon = msg.payload.icon;\nmsg.temp = msg.payload.tempc;\n\nmsg.payload = { \n \"name\": \"weather\",\n \"force\": false,\n \"icon\": msg.icon,\n \"moveIcon\": false,\n \"repeat\": 1,\n \"soundfile\": 1,\n \"color\": [\n 0,\n 106,\n 255\n ],\n \"text\": msg.temp + \" C\"\n}\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 530,
"y": 3120,
"wires": [
[
"9112bc3237e043af"
]
]
},
{
"id": "b46f2905cfa95d15",
"type": "inject",
"z": "9da611451ddbe3d3",
"name": "repeat locally",
"props": [
{
"p": "topic",
"vt": "str"
}
],
"repeat": "60",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 180,
"y": 3160,
"wires": [
[
"81aa80fea885bd84"
]
]
},
{
"id": "291a463fbaac37ce",
"type": "change",
"z": "9da611451ddbe3d3",
"name": "",
"rules": [
{
"t": "set",
"p": "icon",
"pt": "global",
"to": "payload.icon",
"tot": "msg"
},
{
"t": "set",
"p": "tempc",
"pt": "global",
"to": "payload.tempc",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 360,
"y": 3120,
"wires": [
[
"ab731a831755c8cb"
]
]
},
{
"id": "81aa80fea885bd84",
"type": "change",
"z": "9da611451ddbe3d3",
"name": "",
"rules": [
{
"t": "set",
"p": "payload.icon",
"pt": "msg",
"to": "icon",
"tot": "global"
},
{
"t": "set",
"p": "payload.tempc",
"pt": "msg",
"to": "tempc",
"tot": "global"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 360,
"y": 3160,
"wires": [
[
"ab731a831755c8cb"
]
]
},
{
"id": "671286ff8c767144",
"type": "global-config",
"env": [],
"modules": {
"node-red-node-openweathermap": "1.0.1"
}
}
]
These icons belong on the device, in /ICONS. Each one is at
most 32×8
pixels — shown here magnified, at their real proportions.
8×8 px
8×8 px
8×8 px
8×8 px
8×8 px
8×8 px
8×8 px
8×8 px
8×8 px
8×8 px
8×8 px
8×8 px
8×8 px