VPD Analysis

What Is VPD? VPD stands for Vapor Pressure Deficit and is affected by temperature and humidity. This calculation shows the difference between how much moisture is in the air versus what it can hold when saturated. When VPD is in an ideal range, this allows plants to basically act like a straw pulling water up from the soil, taking in carbon dioxide, and releasing oxygen and moisture into the air. ...

May 10, 2026 · 6 min · ScriptedVestige

Initial Data Analysis

Having a lot of data collected can be a good thing, but it’s important to be able to pull the signal from the noise to be able to act upon the data. What’s the point in collecting all of this data if I’m not going to use it? I’m going to create some materialized views in Timescale that I can query with Grafana that will show me useful data that I can act on. ...

April 11, 2026 · 8 min · ScriptedVestige

Lightning Strike Detection

Alright, so we’re adding more sensors to the stack! I went with more Ecowitt sensors because they’ll just connect to the existing console and send data through the existing pipeline. Hardware I’m going to start with the WH57 lightning strike detector. I’ve selected this sensor to pair with an AQI sensor to build a home brew wildfire detection and alerting system. The lightning strike detector will detect strikes up to 25 miles out. The physical installation is easy and it comes with the mount and hardware necessary, just add batteries. ...

April 10, 2026 · 5 min · ScriptedVestige

Data Gap & Outage Detection

I’ve had some outages over time due to planned maintenance or severe weather. What I’m going to work on today is a way to detect missing data in my tables so I can investigate. TimescaleDB Gap Detection In my database, I’m going to create some views that will show me gaps in data so I can investigate why those gaps exist if the cause is not planned or apparent. I’ll start using pgAdmin4 which gives me direct access to my database to create tables and views as well as run queries. I’ll also open my TimescaleDB directory where I store .sql files that contain table schemas or SQL statements and queries in VSCode. I like to create my queries and statements in VSCode, then copy and paste into pgAdmin4. ...

March 7, 2026 · 5 min · ScriptedVestige

Unplanned Outage Troubleshooting

Power & ISP Outages While at work, I received a notification at 14:35 local time from my power company that there was an outage in my area. I then received a notification at 15:50 that the power was back up. I also received notification from my ISP reporting an outage at 15:45 local due to the power outage, which is weird, but after I got home, I could see multiple occurrences of losing connectivity to my ISP in the UDM. ...

February 24, 2026 · 7 min · ScriptedVestige

Manual Event Logging

There is a lot of data that I want to collect that my sensors can’t. With automation and machine learning application being the goal, I want to gather as much data as I possibly can to really create a complete picture of events in the yard. Snow events are one example of that, so that’s where I started. Check out the repo on GitHub I again used Python, FastAPI, and uvicorn to define some API endpoints on the same Pi that runs my Ecowitt ingest API. Just like the Ecowitt ingest, I’ll make this API a service also. The difference with this one though is that when the endpoint is requested in the browser, an HTML form is presented. ...

February 14, 2026 · 3 min · ScriptedVestige

Grafana

Grafana is a tool that allows you to build dashboards to visualize data. I haven’t gone too deep into the full capabilities yet, but I wanted a way to display the weather data from my database without reinventing the wheel and building dashboards manually myself. Install & Config Grafana is available as an app on TrueNAS SCALE, which is the OS that runs on my NAS. In the configuration, I’ll select “Publish port on the host for external access” for the Port Bind Mode in the network configuration so other hosts on my LAN can access the Grafana web UI with the default port 3000. Timescale and Portainer are using different ports, so I’ll have no conflicts between the three services and all can be accessed via their respective ports on the NAS IP (and hostname down the road when I get around to setting up Pi-hole). For the host IP, I’ll select ‘0.0.0.0’ (aka any) IP address because TrueNAS isn’t allowing me to select the host IP, but I’ve got traffic locked down pretty well with my VLAN and firewall rules setup. ...

February 7, 2026 · 5 min · ScriptedVestige