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.


Podziel się artykułem