Vineyard journal

Blog.

Vineyard diary, tips, automation and life at a Polish vineyard.

Journal
Frost, 100 km and the spite of dead things - the night of May 9/10, 2026
May 10, 2026 08:00

Frost, 100 km and the spite of dead things - the night of May 9/10, 2026

A year ago we fought off a frost from 200 kilometers away with a single API call from a phone. Last night history repeated itself - but with three plot twists: a new sensor in the upper part of the vineyard, an OpenSprinkler failure at the worst possible moment, and a 100-kilometer drive to save the buds. This time I was on my own - Ania was in Warsaw, so the whole “get in the car and go” operation fell to me.

That night we also saw, for the first time, what the microclimate of our vineyard actually looks like. It was a lesson in humility.

1. Friday afternoon: the SMS you don’t want to get

Friday, May 9th, around 2 PM. I’m 100 km from the vineyard. I open the VineyardElf dashboard - and instead of a calm green “ONLINE” I see a red “OpenSprinkler - offline since 13:36”.

I check Ecowitt - the weather station is working, data is flowing. But the GW1200 (the gateway at the house) and OpenSprinkler aren’t responding. Looks like a temporary WiFi drop on the Pustkowie network side.

I look at the forecast. Interia/Siedlce: minimum +1°C overnight. Open-Meteo: similar. Not looking dramatic from a synoptic standpoint - but we know better at Pustkowie. Forecasts are for “air at 2 meters,” not for grapevine buds near the ground. And clear skies + no wind + high humidity = a recipe for radiative cooling.

VineyardElf control panel in frost mode
VineyardElf control panel - FROST mode active, frost loop ready to run. Trilingual interface (PL/EN/DE) - because our guests aren’t only Polish.

Decision: I’m heading back.

2. The drive back: 100 km and a router reset

I arrive around 6 PM. First thing I do - restart the router and access points. Two minutes later Ecowitt is back online, data flowing without interruption. But OpenSprinkler is still offline.

I go to the enclosure - a waterproof box housing the OpenSprinkler. I unscrew the lid. I pull out my phone, take a photo of the display, and drop it into Claude Desktop:

“System Idle, 19:44 Sat 05-09, MC: _________ - what’s going on?”

And then something happened that I still can’t explain.

Before Claude had a chance to respond - the OpenSprinkler display flickered, refreshed, and an IP address appeared. On its own, without any intervention from me. No restart, no reset, nothing. I simply stood in front of it with the lid off and a phone in my hand, and it woke up.

A second later Claude’s answer came through: the MC: field is the network status, an empty line means no connection, most likely the DHCP lease had expired after the WiFi reset at the house, a restart should help. A very accurate diagnosis - except the patient had already healed itself.

OS started pinging the cloud. VineyardElf saw it again. The spite of dead things, as I called it in a text to Ania - that infuriating tendency of broken equipment to fix itself the moment you show up in person. Because hours earlier, looking at it remotely, the problem seemed real and present. All it took was getting in the car, driving 100 km, and standing in front of the device with a screwdriver - for it to obviously repair itself before I’d even had a chance to do anything.

An engineering explanation surely exists. Maybe the DHCP lease happened to renew. Maybe the router finished some restart I hadn’t seen in the logs. Maybe it was that moment when the OpenThings cloud noticed the client coming back and sent a keep-alive. Any of those explanations is probably true.

But I prefer my own: it was watching me drive all the way there, and didn’t want to look foolish in front of the boss.

3. Frost mode: the loop runs itself

In VineyardElf I switch the program to “Frost Watch.” The system checks Ecowitt every 15 minutes and compares against the thresholds in our algorithm:

  • Ground temperature < 2°C and falling trend → start the loop (early warning)
  • Ground temperature < 0.5°C → start the loop unconditionally (absolute threshold, regardless of trend)
  • Ground temperature ≥ 3°C → stop the loop

The frost protection loop runs in a cycle:

  • Pair 1 (S01 + S02): 3 minutes
  • Pair 2 (S03 + S04): 3 minutes
  • Pair 3 (S05 + S06): 3 minutes
  • 4-minute recheck timer after the last pair - if still below the STOP threshold, loop again from the start

Pairs instead of all six sections simultaneously, because the pump can’t handle that load - with 3+ sections running at once, pressure drops drastically and the Flippers start barely dripping. Two sections is the optimum: full coverage and stable pressure.

Unlike last year, when I triggered irrigation manually from 200 km away, tonight I didn’t click a single button. The system decided on its own. I sat at my laptop and watched.

Sprinkler test just before sunset
Sprinkler test just before dusk, May 9th - checking network pressure and row coverage. In a few hours these same nozzles will be running for real.

4. The night’s events: four sensors, one lesson

This spring I moved the CH1 sensor from the winery - where it had been measuring temperature and humidity inside the production room - to the upper part of the vineyard, between rows 13-14. The sensor sits there in the grass, at bud height. This isn’t about “high up above the ground” - it’s about the highest point of the plot in topographic terms. Pustkowie doesn’t sit on any dramatic slope - it’s a gentle rise, roughly 1 to 1.5 meters of elevation difference between the lowest rows (1-2) and the highest (13-14), over a distance of several dozen meters. A barely noticeable gradient; you can drive a tractor over it without even registering it. And yet - as this night showed - enough to create a 2°C temperature difference. For the first time, we have data from the upper part of the plot.

The Ecowitt weather station measures air at 2 meters. The “Indoor” sensor sits in the lower part of the vineyard, tucked inside a wooden birdhouse - protected from rain, sun, and direct spray from the sprinklers. CH1 in the upper part of the vineyard sits under an upturned plastic flowerpot, also in the grass. The WFC01-425E (garden water meter controller) is mounted 5 meters from the last row, completely exposed.

This is an important technical detail: both vineyard sensors measure air temperature in the bud zone, but neither is reached by the sprinkler water. They show what’s happening under the “ice blanket,” not the blanket itself. In other words - when CH1 shows -4.1°C, that’s the air temperature next to the shoots, but under shelter; the buds themselves, coated in water, sit in a completely different (warmer) thermal zone thanks to the latent heat of freezing. A third sensor, directly on a bud being irrigated, would be a valuable addition - to measure the contrast between “surrounding air” and “tissue under the ice.” That’s a 2027 project.

Hour Air temp (2m) Low vineyard Upper vineyard (CH1) WFC01
19:0010,1°C10,1°C14,2°C9,8°C
21:007,0°C5,4°C7,8°C6,7°C
22:002,8°C2,5°C0,5°C3,8°C
23:001,9°C0,3°C-0,9°C1,2°C
00:001,3°C-0,3°C-2,0°C-0,1°C
02:000,6°C-0,6°C-2,5°C-1,2°C
03:00-0,7°C-1,3°C-2,5°C-2,0°C
04:00-1,2°C-1,7°C-3,6°C-0,6°C
04:37---4,1°C ❄️-
05:00-1,7°C-1,8°C-3,8°C-0,5°C
05:05--1,9°C ❄️--
06:004,5°C0,7°C-0,1°C0,0°C
07:007,9°C7,3°C7,5°C4,3°C

Night minimums

  • Upper vineyard (CH1, highest point of the plot): -4.1°C at 04:37
  • Lower vineyard (Indoor): -1.9°C at 05:05
  • Air temp (station, 2m): -1.7°C at 05:00
  • WFC01-425E (outside irrigation zone): -2.6°C at 03:50

Temperature chart - upper vineyard CH1, minimum -4.0°C at 04:30
CH1 chart (upper vineyard) - comfortable 14.8°C in the afternoon, then a steep drop after sunset, minimum -4.0°C at 04:30. A textbook radiative cooling curve on a clear night.

Temperature chart - lower vineyard Indoor, minimum -1.9°C
“Indoor” sensor chart in the lower vineyard - minimum -1.9°C. The drop is slower, a longer plateau near zero, but still below freezing.

Temperature chart - weather station, air 2m, minimum -1.7°C
Ecowitt weather station - air at 2 meters. Minimum -1.7°C, dew point below zero, very narrow gap between temperature and dew point = full moisture saturation, ideal conditions for frost formation.

5. What the numbers tell us

First observation: forecast vs. reality. The meteorologists promised +1°C. In reality, station air temperature dropped to -1.7°C, and ground level in the upper part of the vineyard hit -4.1°C. That’s a 5°C gap between forecast and what the buds actually experienced. If we’d trusted the weather apps, we wouldn’t have irrigated at all.

Second observation: upper vs. lower vineyard. Two sensors in the same vineyard, both at ground level, both sheltered from direct irrigation (CH1 under a flowerpot, Indoor inside the birdhouse) - meaning both measure air temperature in the bud zone, unaffected by the latent heat of freezing. They’re separated by barely 1 to 1.5 meters of elevation and a few dozen meters horizontally. Temperature difference during the night: 2.2°C.

That’s the number worth sitting with for a moment. A meter and a half of terrain drop is nothing - you can’t see it with the naked eye, you can drive a tractor over it without even noticing. And yet on a clear May night, that gentle microtopography creates a 2.2°C difference between the highest and lowest points of the vineyard.

This is a pure microclimate difference, not an artifact of irrigation. Classic radiative inversion - on a clear, calm night, the highest points radiate heat directly to the sky (which has an effective infrared temperature of around -50°C). The air above them cools the fastest. CH1 in the upper part was exposed to open sky in all directions; the lower vineyard was partially sheltered by buildings and trees.

This changes how I think about irrigation priorities. Intuitively you’d assume the bottom of the vineyard is coldest - cold air sinks (and it does, when there’s no strong radiative cooling). But on a clear night, radiation beats convection: the upper part of the vineyard, most “visible” to the sky, loses heat fastest. Next investment - an additional sprinkler or thermal cover for rows 13-14 (young second-year Solaris vines). Tonight they were saved only by their protective sleeves - because there are no Flippers up there yet.

Green windbreak net along the upper edge of the vineyard
Green shade netting stretched along the south-western boundary of the vineyard - installed May 8th, literally the day before the first serious frost of the season. The CH1 sensor stands about a meter from this netting.

The windbreak: good idea or not?

Worth pausing here, because this was an experiment that just got its first real-world test - and the result is not clear-cut.

What it is. Shade cloth (the kind used as a privacy screen between properties), fastened to our existing forest fence that encloses the vineyard. Just one side - the south-western side, where the terrain has the greatest elevation and where cold air could flow in from the open field and forest. The CH1 sensor sits about a meter from this barrier.

What it was supposed to do. The hypothesis: on a calm night with a gentle drift of air from the field, a physical barrier would slow the inflow of cold and limit advective cooling in that part of the vineyard. A classic orchard technique - a windbreak on a budget.

What the data showed. Nothing good, for this particular night. CH1, sitting a meter from the barrier, reported -4.1°C - the coldest of all sensors, more than 2°C colder than the lower vineyard. What went wrong?

This night wasn’t an advective frost. It was radiative. Clear skies, no wind, high humidity - heat was escaping vertically, straight up to the sky through the cloudless vault (effective infrared temperature: -50°C). And on radiative cooling, a side barrier made of shade cloth has zero effect. In fact, you could argue it actually makes things slightly worse - by blocking any micro-circulation that might otherwise mix the cold air near the ground with warmer air a few meters up.

Does that mean the windbreak was a bad idea? No. Did it help this night? Also no. The windbreak is a tool for a different scenario - for frost driven by wind and cold air advection from the open field. Those nights happen too, especially in March and early April. The specific scenario we had on the night of May 9th-10th requires a completely different tool: sprinkler irrigation over rows 13-14.

This, incidentally, is one of the harder aspects of frost protection: there’s no single solution for all frost types. Radiative frost calls for water freezing over the buds. Advective frost calls for air mixing and windbreaks. Black frost (dry, no dew) is best fought with smoke or paraffin candles. We’ve only optimised for one scenario so far - radiative frost for rows 1-12. The windbreak was the first step toward a second front. It didn’t perform this night, but the data says “wrong scenario,” not “wrong idea.”

Operational conclusion: the windbreak stays, Flippers on rows 13-14 get added as soon as possible. Ideally before the “Ice Saints” next year.

Third observation: WFC01 as an accidental detective. Here the situation is the reverse of CH1 and Indoor - this sensor is mounted completely exposed, 5 meters from the last row, outside the irrigation zone, but within reach of windblown spray. At 03:50 it records a minimum of -2.6°C. At 03:55 - a sharp jump to -0.7°C. Why? Water from the sprinklers reached the area around the sensor. From that moment until dawn it held around -0.5°C - exactly the temperature at which water freezes and releases its latent heat.

In a sense this was our best sensor of the night - not because it was the most accurate, but because it was the only one that actually measured the effect of irrigation in real time. CH1 and Indoor showed how cold the buds were without being sprayed (because neither of them was). WFC01 showed what happens when water arrives: the thermometer jumps 1.9°C in a single minute. In other words: physics worked, again. 80 calories of latent heat from every gram of freezing water - and the buds sit in a safe zone around zero, even when the air is -2°C, and a few meters away, under a flowerpot in the grass, it’s -4°C.

What’s missing from this picture? A sensor directly on a bud under the ice blanket. I know what’s happening in the surrounding air (CH1, Indoor), I know what the freezing water did 5 meters from the vineyard (WFC01) - but I don’t know exactly what temperature a specific Solaris bud reached at 04:37, when CH1 reported -4.1°C. Theory says around 0°C. Practice will know once I plant a sensor with a waterproof cable there in 2027.

6. System performance stats

From the sprinkler_status sheet (OpenSprinkler logs, GAS via InConnector):

Section Rows Runs Total time Water usage*
S011-22060 min~1 m³
S023-42060 min~1 m³
S035-62060 min~1 m³
S047-81854 min~0,9 m³
S059-101957 min~1 m³
S0611-121957 min~1 m³
Total1-12~116~5.5h~6 m³

* Estimate based on runtime and nominal Flipper flow rate (43 l/h × 144 units). Actual usage depends on network pressure.

The first loop started automatically at 22:50 (a PRZYMROZEK entry in the sheet from 22:47, when ground temperature dropped to +0.6°C). The last cycle finished around 05:50, when air temperature crossed +2°C in an upward trend. Frost mode ended at 06:47 (air +7.4°C, ground +6.6°C).

Sprinkler in action - water droplet in lantern light
A Flipper sprinkler on its post, in the middle of the night - the water stream visible in the lantern light. Those 43 liters per hour from each nozzle turn into 80 calories of latent heat per gram when they start to freeze.

Night camera view - vineyard covered in an ice coating
Frame from the Reolink camera, 22:07. The entire vineyard glistens with water. In a few hours all of this will freeze - and that’s exactly when it starts to protect.

7. Comparison with 2025

27/28.04.2025 8/9.05.2025 9/10.05.2026
Min. air temp-1,9°C-1,7°C-1,7°C
Min. ground (low)0,0°C+0,6°C-1,9°C
Min. ground (upper)no sensorno sensor-4,1°C
Sprinkler cycles33480-90/zone~116 total
Water usage*~10 m³~26 m³~6 m³
Runtime16,5h~10h~5,5h
System startmanualmanual (API)automatic

* All water usage figures are estimates calculated from sprinkler runtime and nominal flow rate (43 l/h × number of Flippers × time), not from the water meter reading. Actual usage depends on network pressure and distribution within each section.

Last year the system ran longer and harder - I triggered irrigation manually and kept it going long after temperatures had returned to safe levels, just to be sure. This year the system fired exactly when needed and stopped as soon as conditions allowed. Fewer cycles, shorter runtime, less water - same result for rows 1-12.

This is, incidentally, one of the most underappreciated arguments for automation. Frost protection irrigation is inherently water-hungry by nature - and every hour we don’t have to “run it just to be safe” is a real, measurable saving. Water management is a topic that matters more to a winemaker today than it did five years ago: because of climate, because of cost, because of regulations. Less is better - and it’s better to know you could get away with less, than to wonder whether it was enough.

The price of that saving: additional knowledge about the microclimate that I didn’t have last year (that “free” -4.1°C in the upper vineyard is new information, not a new reality - it happened in 2025 too, it just wasn’t measured).

8. What I did in the morning

Standard morning recovery protocol within 24 hours of a frost:

  • Asahi SL (biostimulant, phytohormones) - supports regeneration of damaged tissue
  • Aspirin / salicylic acid - systemic resistance inducer (SAR)
  • Inspection of shoots, especially rows 13-14 (young vines in protective sleeves, no Flippers)

Shoots in the morning after a night of irrigation
Shoots in the morning - close-up
Saturday morning, May 10th. The sun is up, ice starting to melt, shoots looking healthy. Rows 1-12 (Flippers) show no visible damage at first glance.

Morning of May 10th - walking through the vineyard after the night sprinkler operation. Ice melting in the sun, buds looking healthy.

System status after the night - dashboard
Saturday 08:27 - system done, all sections reset, loop off. Status OK: frost, loop: OFF. Time for breakfast.

Damage assessment - over the next 3-5 days, once any damage becomes visible. At first glance rows 1-12 look good. The sleeved vines survived too - sleeves plus the still air trapped inside are a simple but effective microclimate buffer. Without them, -4°C would have taken them out immediately.

9. What’s next - the night of May 10th/11th

After a night like that, the first question is: will the next one be similar?

Fortunately, no. According to ICM (infometeo.pl), from Sunday May 10th a warmer air mass is moving in from the south. Forecasters are calling for a nightly minimum of around +2°C for the Siedlce region, with increasing cloud cover overnight and light rainfall on Monday. Open-Meteo gives a daytime high of 21°C - meaning a much warmer start to the night.

Even so, the system at Pustkowie will stay in Frost Watch mode - because we now know that “+2°C according to the forecast” can mean 0°C at ground level and -2°C in the upper part of the vineyard in our microclimate. Cloud cover will help (clouds block infrared radiation and limit cooling), but the watchdog stays on, sensors running, phone by the bed.

Frost season in Poland traditionally ends after the “Ice Saints” (May 12th-15th). We have a few more nights to get through.

10. What we learned this night

  1. A sensor in the upper vineyard changes everything. Without CH1, I’d be writing today that “it got to -1.7°C in the air, the system worked, success.” With CH1, I know the upper part of the vineyard was 2°C colder than the lower part - and that in future, rows 13-14 need to be treated as the highest-risk zone, even though they sit higher up, not lower. Plan for 2027: a third sensor directly on a bud, under the ice coating, to measure the contrast between ambient air and bud tissue.

  2. Synoptic forecasts are just a starting point. Interia said +1°C. Reality: -4.1°C at ground level. A vineyard microclimate can be 5°C colder than the “official” forecast for the region. Without our own weather station and thresholds triggered by real measurements, I’d have had no chance of reacting in time.

  3. Local API + automation = sleep. Last year at 11:30 PM I was manually calling the API, manually interpreting data, manually making decisions. This year - the system proposed, the system executed, I monitored. I slept (well, tried to sleep) instead of working.

  4. Failures always come at the worst moment. OpenSprinkler offline since 13:36 on the Friday before a frost night. The WiFi went down at the house, not in the vineyard. Lesson: during critical season I need a watchdog in InConnector that pings OS every 5 minutes and sends an SMS if it’s been offline for more than 15 minutes. Added to the roadmap for this week.

  5. The spite of dead things is real. Five hours offline. Remote diagnosis looking ominous. You get in the car, drive 100 km, open the enclosure, photograph the display, drop it into AI… and OpenSprinkler comes back to life before you even get a response. As if to say, “relax, I’ve got this.” Next time I’ll take a photo from the road before I even start the engine.

  6. One tool doesn’t protect against all frost types. Sprinkler irrigation beats radiative frost. Windbreaks (like our freshly installed barrier) beat advective frost. Candles and bonfires beat black frost. Tonight was a classic radiative event - irrigation worked, the windbreak had nothing to block. But that same windbreak might save us on a March night when cold wind comes off the field. A frost protection strategy is a portfolio of tools, not a single invention.


Post stats

  • Active sensors: 4 (CH1 upper, Indoor lower, station 2m, WFC01)
  • Lowest recorded temperature: -4.1°C (upper vineyard, 04:37)
  • System runtime: ~5.5 hours
  • Water usage (estimated): ~6 m³
  • Manual interventions in OpenSprinkler: 0 (it woke itself up before I’d done anything)
  • Kilometers driven after the offline alert: 100
  • Hours of sleep the night of May 9th/10th: three, maybe four

Next post - once it’s clear whether irrigation protected all the buds. I’m counting on it. If not - I’ll write about that too. Because this is a vineyard journal, not a brochure.


Stack and open source

The frost protection system at Winnica Pustkowie is built on:

  • OpenSprinkler 3.0 AC + zone expander - 14-section controller, local API + cloud (cloud.openthings.io)
  • Ecowitt WH2650A weather station + ground sensor (“indoor” channel) - temperature measurement in the bud zone
  • NDJ Flipper 43 l/h sprinklers - 144 units, 12 rows, 6 sections (pairs)
  • Omnigena 3T32 pump + 200 L pressure tank, water from a deep well
  • Control logic - Google Apps Script, data in Google Sheets, WhatsApp + SMS alerts
  • Web panel - Svelte on the Noe platform, trilingual (PL/EN/DE)
  • VineyardElf - our own vineyard management platform, aggregating all data

The entire control logic is open source. After two seasons of testing on our own land, I’ve released it on GitHub under the MIT license - with complete documentation, a configuration guide, and a full hardware list. Repo: github.com/mudhuh/opensprinkler-frost-protection. If you run a vineyard or orchard and want to build a similar system - everything is there, ready to fork and adapt to your setup.

The full list of tools we use at Pustkowie is on the Tech-vineyard page - from OpenSprinkler, Ecowitt and Reolink, to robots (Mammotion YUKA, drone plans) and platforms (VineyardElf, WineryElf, NanoSatelity). The sprinkler control panel and weather dashboard were built with Noe - a no-code platform for building web applications. All infrastructure (CMS, forms, API integrations, hosting) runs on Intum.

Full history of the frost protection project: From Hydrawise to OpenSprinkler - how we built a frost protection system for 7,000 PLN.