
Blog winnicy
Jak automatyzujemy pogodę, opryski i temperaturę w Winnicy Pustkowie — czyli mniej Excela, więcej wina
Michał Stefaniak, 2025-04-03
Ostatnie dni to było intensywne dłubanie nad tym, jak połączyć pogodę z rzeczywistością – czyli jak ogarnąć to, co dzieje się z winoroślą, zanim zrobi się za późno. I jak zwykle: nie chodzi o technologie dla samych technologii, tylko o czas, spokój i mniej przypałów w sezonie.
Zrobiliśmy kilka rzeczy, które realnie pomagają — i nie wymagają zatrudniania programisty czy kupowania „systemu za 4000 zł”. Oto nasz domowy (ale solidny) system automatyzacji dla winnicy i winiarni.
⸻
1. Ecowitt + Google Sheets = wszystkie dane pogodowe w jednym miejscu
Stacja pogodowa WH2650A-WIFI2FC1 od Ecowitt zbiera dane z naszej działki w Wołyńcach. Nie bawimy się w ręczne spisywanie – co kilka minut dane lecą do Google Sheets przez API. Zapisujemy:
• temperaturę i wilgotność na zewnątrz (czyli to, co kluczowe dla liści i chorób),
• temperaturę i wilgotność wewnątrz winiarni (bo fermentacja lubi stabilność),
• promieniowanie UV i nasłonecznienie,
• ciśnienie, wiatr, opady – wszystko z timestampem.
Fragment kodu logujący dane do arkusza:
function logVineyardTempHumidity() {
const data = fetchWeatherData();
if (!data || !data.outdoor) return;
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("temperatura_i_wilgotnosc_winnica");
const now = new Date();
const tempF = parseFloat(data.outdoor.temperature?.value ?? "NaN");
const tempC = Math.round(((tempF - 32) * 5 / 9) * 10) / 10;
const humidity = parseFloat(data.outdoor.humidity?.value ?? "NaN");
sheet.appendRow([now, tempC, humidity]);
}
Efekt: mam historię pogody z dokładnością do 10 minut i nie muszę odpalać 3 aplikacji.
⸻
2. System oceniania ryzyka mączniaka – bez ręcznego kombinowania
W arkuszu dodaliśmy analizę, która co kilka minut sprawdza, czy warunki sprzyjają mączniakowi prawdziwemu:
• wilgotność > 85%
• temperatura > 5°C
• i tylko od 25 marca do 15 października (żeby nie dostawać alertów w grudniu)
Wszystko loguje się w osobnym arkuszu Ryzyko_maczniaka, a jeśli warunki są spełnione – system wysyła SMS-a z ostrzeżeniem.
Kod funkcji oceniającej ryzyko:
function logPowderyMildewRisk() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const source = ss.getSheetByName("temperatura_i_wilgotnosc_winnica"); const riskSheet = ss.getSheetByName("Ryzyko_maczniaka"); const data = source.getDataRange().getValues(); const now = new Date(); const month = now.getMonth() + 1; const day = now.getDate(); if (month < 3 || (month === 3 && day < 25) || month > 10) return; for (let i = 1; i < data.length; i++) { const [time, temp, humidity] = data[i]; if (humidity > 85 && temp > 5) { riskSheet.appendRow([time, temp, humidity, "TAK"]); } } }
Żeby nie było zbyt nerwowo – SMS przychodzi maksymalnie raz na serię i zawiera do 10 rekordów, żeby nie zapchać skrzynki i głowy.
⸻
3. SMSAPI – powiadomienia prosto na telefon
Wykorzystaliśmy SMSAPI (polski serwis do wysyłki wiadomości), żeby system sam pisał do mnie, kiedy trzeba zareagować.
Dzięki temu:
• wiem, że coś się dzieje, nawet gdy nie patrzę w arkusz,
• nie dostaję 20 SMS-ów naraz (jest limiter),
• wiadomości mają konkretne dane: „Wilgotność: 89%, temperatura: 13,2°C”.
Przykładowy webhook:
function sendSMSAlert(message) { const token = "TWÓJ_TOKEN_SMSAPI"; const encodedMsg = encodeURIComponent(message); const url = `https://api.smsapi.pl/sms.do?to=48NUMER1,48NUMER2&from=NADAWCA&message=${encodedMsg}&format=json&access_token=${token}`; UrlFetchApp.fetch(url); }
⸻
4. Monitoring winiarni – czyli kontrola fermentacji
Czujnik wewnętrzny (INDOOR) z Ecowitta zapisuje temperaturę i wilgotność w winiarni. Dane trafiają do arkusza, więc mogę łatwo sprawdzić:
• czy temperatura nie spada zbyt nisko (bo drożdże się obrażają),
• czy wilgotność nie idzie w górę (bo wtedy rozwijają się „zapachy piwniczne”).
W razie potrzeby mogę odpalić grzanie, klimę, albo lekko rozszczelnić.
⸻
5. Zabezpieczenia na błędy – nic się nie sypie
Każda funkcja ma zabezpieczenia try/catch, więc jeśli np. API Ecowitta się zawiesi, to:
• nie leci błąd na maila,
• arkusz się nie zawiesza,
• w wszystko po prostu pomija dane i leci dalej.
Nie trzeba restartować skryptu – działa samo.
⸻
Co dalej?
Planujemy dorzucić:
• alert przymrozkowy (zanim spalimy świeczki),
• dzienne podsumowania (ile deszczu, ile słońca, jakie wahania temp),
• ostrzeżenia o suszy (czyli kiedy trzeba rozważyć nawodnienie),
• i może integrację z Home Assistantem (żeby podlewanie samo się włączało w nocy, jak trzeba).
⸻
Dla tych, którzy wolą IFTTT:
Można też wszystko spiąć z IFTTT, np. tak:
Trigger: New row in Google Sheet (np. jeśli w kolumnie F pojawi się "TAK") Condition (filter): if (ColumnF == "TAK") Action: SMS / Webhook / Push notification
⸻
Czy to rocket science?
Nie. Ale działa.
I najważniejsze – odciąża głowę. W sezonie nie ma czasu przeliczać wilgotności, prognozy i tego, co było 3 dni temu. A tu wszystko się zapisuje samo – i krzyczy, jak trzeba działać.
Jak ktoś chce taki system u siebie – piszcie. Możemy się podzielić kodem i doświadczeniem, nie ma problemu.