Personal Weather Station

Does anybody have work on any Personal Weather Ststion? Looking to display the data.

Anything here?
https://discourse.nodered.org/search?q=weather%20station%20%23share-your-projects%20order%3Alatest

I did look on before. all what I found was related to get the data from online weather service. What I am looking is for a PWS installed in my house and get the information local in my Observatory PC.

I found couple but the are using HA with some nodes no available in Nore Red, ex. eqwittmttq server.

Looking now into WeeWX to see how I can implement on Node Red. I am a 72 Year new on node red

I recently shared one of my projects that might perform some of the tasks you are looking for.

I've written an 'Installation Guide' (there's a link on the website) that explains all about the project.
If you would like to read about it, I've published it on my 'Share my projects' website here...

https://teamwork-int.com/share_my_projects/
If you visit the above link you'll need to click on the folder labelled... C_single_sensor_node

SSN_generic_RDS_v05.py is the latest version of the Python script - works with ESP32-S2 and Pico-W

The project uses a BME280 sensor to measure temperature/humidity/air pressure and send the readings via a MQTT broker to Node-RED where the data can be processed. In my particular situation the device is located in a greenhouse at the bottom of my garden. It uses an ESP32-S2-Mini flashed with Micro-Python. Depending on what you want to do, you can use a local or remote MQTT broker.

I have an Oregon weather station that transmits at 433MHz and I use rtl_433 plus receiver to send data to Node-RED. There are quite a few of this type of weather station on the market. Includes rain gauge, wind sensor and temperature sensors

1 Like

Thanks for giving us more information.

Do you already have a personal weather station? If so what make and model is it? What sensors does it have?
This might be relevant in how you get the data into Node-red.

I think WeeWX is software to obtain the weather data? I'm not familiar with it, but Node-red is perfectly capable of accepting data from external python code.

I am sure that Home Assistant is very fine software but you can certainly achieve what you want with "just" Node-red. Most people on this forum don't use Home Assistant.
Note that it's easy to add features to Node-red, there is a whole library of such add-ons at flows.nodered.org.
It's very common to use MQTT because it can make communicating between Node-red and other devices very much easier. You might end up using it.

So the first stage is getting weather observations into Node-red. Once you can do that, you can start designing your weather display.

Thanks for your time. I have one Ecowitt GW 1000 server with sensor GS68 Anenometer. Let me tell you that I have the Agg Solo weather from Lunatico that is using UDP to comunicate with a private driver.

I had bad experience with this brand, first I lost a DragonFly unit to control the OBSY, relays failures I did replace it with a PLC Modbus.Now the Anenometer fail so I decide to look for other unit more reliable.

https://lunaticoastro.com/node-red-tutorial-for-dragonfly-and-cloudwatcher-solo/

This link show the flow that I am using with the agg solo weather that I did some changes.

Maybe this will help those who want to help me. THANKS FOR YOUR TIME

Can you share your Node Red flow so I can wotk on it? I will love takenanlook andnsee if I can adopt some ideas.

You will have to change the device ID's to match yours but this is a cutdown version of my flows. The final debug nodes are actually Dashboard chart nodes. The MQTT in is from a Pi running rtl_433 (using a USB receiver to get the info from the actual devices)

[{"id":"2bab8c419abb6dd1","type":"mqtt in","z":"ef3526e3ff0b76d1","name":"MQTT rtl_433","topic":"rtl_433","qos":"1","datatype":"json","broker":"ee05e0d9.9118e","nl":false,"rap":false,"inputs":0,"x":210,"y":240,"wires":[["f7edc83f703f4628"]]},{"id":"f7edc83f703f4628","type":"function","z":"ef3526e3ff0b76d1","name":"Split rtl_433 Message","func":"/** @type {Intl.DateTimeFormatOptions} */\nconst UK_DATETIME_OPTIONS = { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false }\n\nlet currentTopic = msg.topic\nlet currentValue = msg.payload\n\nlet {id: ID, model, time, channel, battery_ok, ...measurement} = currentValue\nlet device = {ID, model, measurement}\n\n// Standardise the date/time of the message\ncurrentValue.time =  new Date(time)\ncurrentValue.battery_ok = (battery_ok === 1) ? \"Ok\" : \"Change\"\n\nmsg.topic = currentTopic + \"/\" + device.ID + \"/\" + device.model\n\nnode.status({text:\"Receiving rtl_433 \" + Intl.DateTimeFormat('en-GB', UK_DATETIME_OPTIONS).format(currentValue.time)})\n\nmsg.device = device\n\nreturn msg","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":240,"wires":[["3f9ce74854e65778"]]},{"id":"3f9ce74854e65778","type":"function","z":"ef3526e3ff0b76d1","name":"Device Type","func":"const device = msg.device\n\n    switch (device.ID) {\n        case 192:\n            device.type = 'Wind Sensor'\n            device.name = 'Oregon Wind Sensor'\n            device.location = 'Outside'\n\n            break\n\n        case 140:\n            device.type = 'Rain Sensor'\n            device.name = 'Oregon Rain Sensor'\n            device.location = 'Outside'\n            break\n\n        case 15:\n            device.type = 'Rain Sensor'\n            device.name = 'TFA Rain Sensor'\n            device.location = 'Outside'\n            device.model = 'TFA Dostmann 30.3161'\n            break\n\n        case 253:\n            device.type = 'Environment Sensor'\n            device.name = 'Oregon Sensor 01'\n            device.location = 'Outside'\n            break            \n\n        case 178:\n            device.type = 'Environment Sensor'\n            device.name = 'Oregon Sensor 02'\n            device.location = 'Conservatory'\n            break \n\n        case 74:\n            device.type = 'Environment Sensor'\n            device.name = 'Oregon Sensor 03'\n            device.location = 'Hall'\n            break\n\n        case 115:\n            device.type = 'Environment Sensor'\n            device.name = 'Prologue Sensor 01'\n            device.location = 'Garage'\n            break\n\n        case 112:\n            device.type = 'Environment Sensor'\n            device.name = 'Oregon Sensor 04'\n            device.location = 'Unknown'\n            break\n\n        case '0x00158d00047b8337':\n            device.type = 'Environment Sensor'\n            device.name = 'Aqara Sensor 02'\n            device.location = 'Main Bedroom'\n            break     \n\n        case '0x00158d000486d817':\n            device.type = 'Environment Sensor'\n            device.name = 'Aqara Sensor 01'\n            device.location = 'Living Room (Front)'\n            break     \n\n         case '286E0E79A200030C':\n            device.type = 'Temperature Sensor'\n            device.name = 'Sensor DS18b20 01'\n            device.location = 'Study'\n            break\n            \n         case '28221F79A20003B5':\n            device.type = 'Temperature Sensor'\n            device.name = 'Sensor DS18b20 02'\n            device.location = 'Study'\n            break \n\n         case '2872CBD31E19018D':\n            device.type = 'Temperature Sensor'\n            device.name = 'Sensor DS18b20 03'\n            device.location = 'Study'\n            break \n\n        case '0x00158d00053f5842':\n            device.type = 'Environment Sensor'\n            device.name = 'Aqara Sensor 03'\n            device.location = 'Blue Bedroom'\n            break \n\n        case '0x00158d00032d55b4':\n            device.type = 'Environment Sensor'\n            device.name = 'Aqara Sensor 04'\n            device.location = 'Pink Bedroom'\n            break \n\n        case '0x00158d0006694b41':\n            device.type = 'Environment Sensor'\n            device.name = 'Aqara Sensor 05'\n            device.location = 'Dining Room'\n            break \n        \n        case '0x00158d00067c109f':\n            device.type = 'Environment Sensor'\n            device.name = 'Aqara Sensor 06'\n            device.location = 'Bathroom'\n            break \n            \n        case '0x00158d00068b8e6c':\n            device.type = 'Environment Sensor'\n            device.name = 'Aqara Sensor 07'\n            device.location = 'On Suite'\n            break\n\n        case '0x00158d00068b6be4':\n            device.type = 'Environment Sensor'\n            device.name = 'Aqara Sensor 08'\n            device.location = 'Living Room (Rear)'\n            break\n            \n        case '0x00158d0006a03909':\n            device.type = 'Environment Sensor'\n            device.name = 'Aqara Sensor 09'\n            device.location = 'Study'\n            break\n \n        case '0x00158d000644479d':\n            device.type = 'Light & Presence Sensor'\n            device.name = 'Aqara Motion Detector 01'\n            device.location = 'Study'\n            break\n \n        case '0x588e81fffe641873':\n            device.type = 'Router'\n            device.name = 'Tradfri Repeater 01'\n            device.location = 'Living Room (Front)'\n            break\n\n        case 'Sensor_BME280_01':\n            device.type = 'Environment Sensor'\n            device.name = 'Sensor BME280 01'\n            device.location = 'Study'\n            break\n            \n \n        default:\n            device.type = 'Unknown'\n            device.name = 'Unknown'\n            device.location = 'Unknown'\n\n   }\n\nmsg.device = device\nmsg.topic = msg.topic + '/' + device.location\n\nreturn msg","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":710,"y":240,"wires":[["b668098b8aa73bb4","79db588078c73821"]]},{"id":"b668098b8aa73bb4","type":"debug","z":"ef3526e3ff0b76d1","name":"debug 232","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":730,"y":100,"wires":[]},{"id":"79db588078c73821","type":"switch","z":"ef3526e3ff0b76d1","name":"Select Device","property":"device.name","propertyType":"msg","rules":[{"t":"eq","v":"Oregon Wind Sensor","vt":"str"},{"t":"eq","v":"Oregon Rain Sensor","vt":"str"},{"t":"eq","v":"TFA Rain Sensor","vt":"str"},{"t":"eq","v":"Oregon Sensor 01","vt":"str"},{"t":"eq","v":"Oregon Sensor 02","vt":"str"},{"t":"eq","v":"Oregon Sensor 03","vt":"str"},{"t":"eq","v":"Oregon Sensor 04","vt":"str"},{"t":"eq","v":"Prologue Sensor 01","vt":"str"},{"t":"eq","v":"Sensor DS18b20 02","vt":"str"},{"t":"eq","v":"Sensor DS18b20 01","vt":"str"},{"t":"eq","v":"Sensor BME280 01","vt":"str"},{"t":"eq","v":"Aqara Sensor 01","vt":"str"},{"t":"eq","v":"Aqara Sensor 02","vt":"str"},{"t":"eq","v":"Aqara Sensor 03","vt":"str"},{"t":"eq","v":"Aqara Sensor 04","vt":"str"},{"t":"eq","v":"Aqara Sensor 05","vt":"str"},{"t":"eq","v":"Aqara Sensor 06","vt":"str"},{"t":"eq","v":"Aqara Sensor 07","vt":"str"},{"t":"eq","v":"Aqara Sensor 08","vt":"str"},{"t":"eq","v":"Aqara Sensor 09","vt":"str"},{"t":"eq","v":"Aqara Motion Detector 01","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":22,"x":980,"y":240,"wires":[["11a93e696b50b958"],[],[],["abda0650a27d9eeb"],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],"outputLabels":["Oregon Wind Sensor","Oregon Rain Sensor","TFA Rain Sensor","Oregon Sensor 01","Oregon Sensor 02","Oregon Sensor 03","Oregon Sensor 04","Prologue Sensor 01","","","","","","","","","","","","","",""],"info":"72"},{"id":"b785d3b27d0e3779","type":"switch","z":"ef3526e3ff0b76d1","name":"Wind","property":"measurement","propertyType":"msg","rules":[{"t":"cont","v":"wind_max_m_s","vt":"str"},{"t":"cont","v":"wind_avg_m_s","vt":"str"},{"t":"cont","v":"wind_dir_deg","vt":"str"},{"t":"cont","v":"battery_ok","vt":"str"}],"checkall":"false","repair":false,"outputs":4,"x":1950,"y":100,"wires":[["6881556797d74423"],["77cbe90b62f14d47"],["6759a106def9f64a"],["c9741dc738d5fac9"]]},{"id":"6881556797d74423","type":"debug","z":"ef3526e3ff0b76d1","name":"Wind Max","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2180,"y":20,"wires":[]},{"id":"11a93e696b50b958","type":"split","z":"ef3526e3ff0b76d1","name":"Separate \\n Measurement","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"measurement","x":1500,"y":100,"wires":[["d7d69e78d89508e2"]]},{"id":"77cbe90b62f14d47","type":"debug","z":"ef3526e3ff0b76d1","name":"Wind Avg","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2180,"y":80,"wires":[]},{"id":"6759a106def9f64a","type":"debug","z":"ef3526e3ff0b76d1","name":"Wind Dir","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2180,"y":140,"wires":[]},{"id":"c9741dc738d5fac9","type":"debug","z":"ef3526e3ff0b76d1","name":"Battery","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2180,"y":200,"wires":[]},{"id":"d7d69e78d89508e2","type":"change","z":"ef3526e3ff0b76d1","name":"Remove Parts","rules":[{"t":"delete","p":"parts","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1760,"y":100,"wires":[["b785d3b27d0e3779"]]},{"id":"cb50193f6c5ff77e","type":"switch","z":"ef3526e3ff0b76d1","name":"Environment","property":"measurement","propertyType":"msg","rules":[{"t":"cont","v":"temperature_C","vt":"str"},{"t":"cont","v":"humidity","vt":"str"},{"t":"cont","v":"battery_ok","vt":"str"}],"checkall":"false","repair":false,"outputs":3,"x":1970,"y":300,"wires":[["5e907ead92ad5b8f"],["9f8020b5fd03b149"],["590af4051f25a7ba"]]},{"id":"5e907ead92ad5b8f","type":"debug","z":"ef3526e3ff0b76d1","name":"Wind Max","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2180,"y":260,"wires":[]},{"id":"abda0650a27d9eeb","type":"split","z":"ef3526e3ff0b76d1","name":"Separate \\n Measurement","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"measurement","x":1500,"y":300,"wires":[["ab91fcdc96369b21"]]},{"id":"9f8020b5fd03b149","type":"debug","z":"ef3526e3ff0b76d1","name":"Wind Avg","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2180,"y":300,"wires":[]},{"id":"590af4051f25a7ba","type":"debug","z":"ef3526e3ff0b76d1","name":"Battery","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2180,"y":340,"wires":[]},{"id":"ab91fcdc96369b21","type":"change","z":"ef3526e3ff0b76d1","name":"Remove Parts","rules":[{"t":"delete","p":"parts","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1760,"y":300,"wires":[["cb50193f6c5ff77e"]]},{"id":"ee05e0d9.9118e","type":"mqtt-broker","name":"MQTT","broker":"192.168.1.21","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.