Nedávno jsem se tady hrdil se svou krásnou novou meteostanicí Ventus W830.

Při výběru jsem se zaměřil výhradně na wi-fi stanice, abych nemusel řešit lokální úložiště dat, manuální stahování údajů ze stanice apod. Po chvíli zápasení s nastavením automatického odesílání dat do cloudů pomocí aplikace WS View jsem si uvědomil, že je sice fajn mít krásné grafy na Ecowitt Weather, Weather Cloud, WeatherObservationsWebsite či Weather Underground, ale co je to člověku platné, když se data po roce automaticky mažou (pokud nezaplatíte).

Takže jsem se vrhnul do zkoumání různých alternativ, přičemž jsem velice rychle zjistil, že pokud chci mít nad svými údaji o měření kontrolu, musím si je ukládat někam k sobě (čímž jsem se dostal do příkrého rozporu s mým hlavním kritériem výběru meteostanice).

Variantu domácího serveru jsem okamžitě zavrhnul, takže mi zůstalo řešení postavené na webových službách. Protože jsem už do tohoto „projektu“ nechtěl vrážet další peníze, musel jsem využít svého stávajícího hostingu, čímž pádem jsem potřeboval najít SW napsaný v php (a MySQL).

Jako jeden z mála (dokonce snad možná i jako jediný) mým potřebám vyhověl rozsáhlý (český!) projekt Meteoteplate.com. Ten dokáže importovat dat z meteostanic různými způsoby, ale jako nejpoužitelnější mi přišlo použití API.

Mobilní aplikace WS View umožňuje (kromě odesílání dat do předem definovaných cloudových služeb) specifikovat i vlastní adresu/IP.  

Po několika pokusech se mi podařilo z logu serveru zjistit, jaké požadavky meteostanice vlastně odesílá:

[code]"GET /weatherstation/updateweatherstation.php?ID=na&PASSWORD=Nepovím :)&indoortempf=77.0&tempf=46.9&dewptf=41.0&windchillf=46.9&indoorhumidity=47&humidity=80&windspeedmph=0.0&windgustmph=0.0&winddir=259&absbaromin=29.829&baromin=30.428&rainin=0.000&dailyrainin=0.000&weeklyrainin=0.118&monthlyrainin=1.799&solarradiation=68.51&UV=0&dateutc=2019-09-20%2007:15:36&softwaretype=EasyWeatherV1.4.2&action=updateraw&realtime=1&rtfreq=5"[/code]

 

To vypadalo nadějně. Stačilo vytvořit php script updateweatherstation.php a umístit jej na web do adresáře weatherstation. Scriptu stačí přečíst vstupní parametry z meteostanice (viz výše), přemapovat je na odpovídající parametry API, provést konverze jednotek (stupně Fahrenheita na stupně Celsia, palce na milimetry, míle za hodinu na kilometry za hodinu, palce rtuti na hectopascaly), časový údaj zkonvertovat do UTC UNIX Timestamp a nakonec tyto údaje předat do API (api.php v rootu webu). Php neovládám, ale díky „Google programování“ jsem vyplodil následující řádky:

[code]<?php

include("../config.php");
include("../scripts/functions.php");

date_default_timezone_set('UTC');
$datetime = new DateTime($_GET['dateutc']);
$local_time = new DateTimeZone($stationTZ);
$datetime->setTimezone($local_time);
$epoch = date_format($datetime, 'U');


$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$domainName = $_SERVER['HTTP_HOST'].'/';

$url = $protocol.$domainName."api.php?";

$url .= "PASS=".$_GET['PASSWORD']."&";
$url .= "U=".$epoch."&";
$url .= "T=".convertor($_GET['tempf'],"f","c")."&";
$url .= "H=".$_GET['humidity']."&";
$url .= "P=".convertor($_GET['baromin'],"inhg","hpa")."&";
$url .= "W=".convertor($_GET['windspeedmph'],"mph","kmh")."&";
$url .= "G=".convertor($_GET['windgustmph'],"mph","kmh")."&";
$url .= "B=".$_GET['winddir']."&";
$url .= "R=".convertor($_GET['dailyrainin'],"in","mm")."&";
$url .= "RR=".convertor($_GET['rainin'],"in","mm")."&";
$url .= "S=".$_GET['solarradiation']."&";
$url .= "UV=".$_GET['UV']."&";
$url .= "TIN=".convertor($_GET['indoortempf'],"f","c")."&";
$url .= "HIN=".$_GET['indoorhumidity']."&";
$url .= "SW=".$_GET['softwaretype'];

$contents = file_get_contents($url);
#echo "success";


?>[/code]

 

S obrovským překvapením jsem zjistil, že tohle řešení funguje bez jediného problému (když nepočítám výpadky internetu) a vidět je můžete na adrese https://meteo.fotozapisnik.eu.