Daten über das Ecowitt-Protokoll an einen eigenen Server übertragen

Für Geräte von froggit
WetterMatthi
Offline
Beiträge: 4
Registriert: 08 Aug 2022, 17:44
Hat sich bedankt: 1 mal
Danksagung erhalten: 2 mal

Daten über das Ecowitt-Protokoll an einen eigenen Server übertragen

#1

Beitrag von WetterMatthi »

Einige Wetterstationen bieten die Option an Daten über das Ecowitt-Protokoll an einen eigenen Server zu übertragen. Da hier schon öfter besprochen wurde, wie die Daten am eigenen Server nun empfangen werden können und ich dies kürzlich bei mir umgesetzt habe, darf ich euch eine kleine Anleitung bereitstellen :-) In meinem Fall habe ich dies für meine HP1000SE PRO per PHP erledigt.

I. Grundsätzliches zum Verständnis:

1. Der Server kann ein Raspberry Pi im eigenen Netzwerk sein auf dem ein Apache Webserver, PHP und eventuell auch ein Datenbankserver läuft. Selbst ein Raspberry Pi Zero W kann das bewerkstelligen. Auch viele NAS bieten die Möglichkeit an PHP-Scripts auszuführen. Das PHP Script kann jedoch auch auf einem Webspace eines Hostingproviders liegen. Also z.B. auf eurer eigenen Homepage. Es gibt auch einige seriöse Anbieter die Gratis-Pakete zur Verfügung stellen.

2. Die Wetterstation sendet die Daten aktiv an den Server, ruft dort das entsprechende Script auf und übermittelt die Daten per HTTP POST-Methode. Das Script muss die Daten dann weiterverarbeiten. Also zunächst in irgendeiner Form speichern. Beispielsweise in einer CSV-Datei oder in einer SQL-Datenbank.
Was nicht funktioniert ist, dass man ein PHP-Script über einen Browser oder einen Cronjob aufruft und dadurch die Daten der Wetterstation direkt abgefragt oder angezeigt werden. Das ist allerdings problemlos in 2 Schritten möglich. 1. Daten empfangen und abspeichern. 2. abgespeicherte Daten auslesen und darstellen.

II. Einstellungen auf der Wetterstation:

Bei der HP1000SE PRO findet man die entsprechenden Einstellungen unter 'Einstellungen (Zahnrad-Symbol) -> Wetterserver-Einstellungen -> Ind.Server-Einstellungen'
Hier muss u. A. die IP-Adresse oder der Hostname des Servers sowie der Pfad zum PHP-Script angegeben werden. Port ist im Normalfall 80. Die weiteren Einstellungen sollten selbsterklärend sein.
Beispielsweise könnte das dann so aussehen.
img1.jpg
img1.jpg (69.14 KiB) 3346 mal betrachtet

III. Die PHP-Scripts

In unserem Fall wollen wir die übermittelten Daten in CSV-Dateien speichern. Pro Tag wird eine Datei erstellt und im angegebenen Intervall befüllt. Die Datei ist mit dem jeweiligen Tagesdatum benannt. Also z.B. 2022-08-09.csv

1. Daten empfangen und in Dateien speichern - Dieses Script muss von der Wetterstation aufgerufen werden.

Grundsätzlich sollte das Script 1:1 so funktionieren. Geändert werden muss lediglich die Variable $mac in Zeile 3. Hier hinterlegt ihr bitte die MAC-Adresse eurer Wetterstation. Bei der HP1000SE PRO findet man die MAC-Adresse unter den Wetterserver-Einstellungen oder unter 'Einstellungen (Zahnrad-Symbol) -> nochmal Zahnrad-Symbol -> nochmal Zahnrad-Symbol -> nochmal Zahnrad-Symbol -> Displayinformationen-Anzeige'.
Hintergrund für die Abfrage der MAC-Adresse ist, dass die Wetterstation beim POST die eigene MAC-Adresse als MD5 Hash übermittelt. So ist zumindest halbwegs sichergestellt, dass nicht jeder x-Beliebige Daten an euer Script übermitteln kann und diese dann auch noch verarbeitet werden. Grundsätzlich sollten alle von extern übermittelten Daten u. A. auf Plausibilität überprüft werden. Das würde aber hier den Rahmen sprengen.
Voraussetzung, dass die CSV-Dateien gespeichert werden können sind natürlich entsprechende Schreibrechte im aktuellen Verzeichnis.

Code: Alles auswählen

<?PHP

$mac = "FF:FF:FF:FF:FF:FF";
$md5hash = strtoupper(md5($mac));

	if ($_POST["PASSKEY"] == $md5hash) 
	{
		$f = date('Y-m-d') .".csv";
		$csv_header = "";
		$csv_data = "";
		$csv_seperator = ";";
		$csv_linebreak = "\n";
		
		$handle = fopen($f, "a");
				
		foreach($_POST as $key => $value)
		{
			$csv_header = $csv_header .$key .$csv_seperator;
			$csv_data = $csv_data .$value .$csv_seperator;
		}
		
		$csv_header = rtrim($csv_header, $csv_seperator);
		$csv_data =	rtrim($csv_data, $csv_seperator);
		
		if (filesize($f) == 0)
		{
			fwrite($handle, $csv_header);
			fwrite($handle, $csv_linebreak);	
		}
		
		fwrite($handle, $csv_data);
		fwrite($handle, $csv_linebreak);
		
		fclose($handle);
	}

?>
2. CSV-Dateien auslesen und in einer Tabelle darstellen - absteigend sortiert. Der aktuellste Eintrag steht also ganz oben. Dieses Script könnt ihr dann über einen Browser aufrufen.

Code: Alles auswählen

<!DOCTYPE html>

<html lang="de">

	<head>
		<meta charset="utf-8"/>
		<title>Demo</title>
		
		<style>
			table {border-collapse: collapse;}
			td {border: 1px solid black; padding: 2px;}
		</style>		
	</head>

	<body>


<?PHP

$csv_seperator = ";";

$files = glob("*.csv");
arsort($files);

foreach ($files as $file) 
{
	echo "<table>";
	
	$lines= file($file);
	// arsort($lines);

		foreach($lines as $line)
		{
			$field = explode($csv_seperator, $line);
			
				echo "<tr>";
				
				foreach($field as $value)
				{
					echo "<td>" .$value ."</td>";
				}
				
				echo "</tr>";
		}
		
		echo "</table><br><br>";
}

?>

	</body>
</html>	
Die Ausgabe sieht dann ungefähr so aus (Bild ist rechts abgeschnitten)
table.jpg
table.jpg (109.63 KiB) 3346 mal betrachtet
angeltom
Offline
Beiträge: 5
Registriert: 26 Jul 2024, 21:36

Re: Daten über das Ecowitt-Protokoll an einen eigenen Server übertragen

#2

Beitrag von angeltom »

Hallo,
das Scrip ist perfekt und passt zu meiner DNT Wetterstation.
Aber ich habe auch noch etliche Innensensoren.
Wie füge ich die hinzu?
Grüße und Danke
Thomas
Benutzeravatar
olicat
Online
Beiträge: 2361
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 41 mal
Danksagung erhalten: 477 mal
Kontaktdaten:

Re: Daten über das Ecowitt-Protokoll an einen eigenen Server übertragen

#3

Beitrag von olicat »

Hi!

Die werden automatisch durch das Script hinzugefuegt.
Du findest diese (WH31) dann in den Spalten tempNf (Temperatur in °F - wobei N=1..8) sowie humidityN.
Das Script nimmt einfach jedes von der Konsole uebermittelte Element (Key) und fuegt es der CSV-Zeile hinzu.

Oliver
angeltom
Offline
Beiträge: 5
Registriert: 26 Jul 2024, 21:36

Re: Daten über das Ecowitt-Protokoll an einen eigenen Server übertragen

#4

Beitrag von angeltom »

Hallo nochmal und Danke für die schnelle Antwort.
Habe nun gesehen, dass die Sensoren ebenfalls geloggt werden.

Allerdings werden die Werte in der csv Datei in Fahrenheit statt Celsius fortgeschrieben.
Obwohl alle Einstellungen (an der Station selbst als auch bei Ecowitt) auf Celsius eingestellt sind.

Wäre schlecht, wenn ich das dann später in Excel alles nochmal umrechnen müsste.

Gibt es hier noch irgendwelche versteckte Einstellungen?

Danke vorab und beste Grüße
Thomas
Benutzeravatar
olicat
Online
Beiträge: 2361
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 41 mal
Danksagung erhalten: 477 mal
Kontaktdaten:

Re: Daten über das Ecowitt-Protokoll an einen eigenen Server übertragen

#5

Beitrag von olicat »

Hi!

Nein, das Script in dieser Form schreibt nur die von der Konsole kommenden originalen Daten mit. Eine Umrechnung erfolgt nicht.

Oliver
angeltom
Offline
Beiträge: 5
Registriert: 26 Jul 2024, 21:36

Re: Daten über das Ecowitt-Protokoll an einen eigenen Server übertragen

#6

Beitrag von angeltom »

Hi,
danke.
Aber irgendwie werden die Daten auch mit 2 Stunden Zeitversatz protokolliert.

Neustart, alle Einstellungen kontrolliert.
Ich recherchiere mal.
Wenn ich was finde im Netz melde ich mich nochmal.
Gruß
Thomas
Benutzeravatar
olicat
Online
Beiträge: 2361
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 41 mal
Danksagung erhalten: 477 mal
Kontaktdaten:

Re: Daten über das Ecowitt-Protokoll an einen eigenen Server übertragen

#7

Beitrag von olicat »

Hi!

Die Daten werden in UTC-Zeit übermittelt. Aktuell haben wir dank Sommerzeit einen Offset von 2 Stunden.

Das Script in der vorliegenden Form ist als Ausgangspunkt für eigene Erweiterungen ganz gut.
Jedoch muss eben noch Einiges getan werden.

Vielleicht solltest Du mal formulieren, was Du eigentlich willst.
Vor allem, was aus dem CSV dann eigentlich erwachsen soll. Womöglich gibt es besser geeignete Lösungen für Dich.

Oliver
angeltom
Offline
Beiträge: 5
Registriert: 26 Jul 2024, 21:36

Re: Daten über das Ecowitt-Protokoll an einen eigenen Server übertragen

#8

Beitrag von angeltom »

Hi,
die Daten meiner WS sollen auf meiner Homepage im Intervall von 10 Minuten dargestellt werden.
Die Visualisierung dazu steht halbwegs, bezogen aus einer vernünftigen XLS Datei, respektive CSV.

Das ganze soll automatisiert ablaufen mit Hilfe von WINSCP.
Ich möchte keine Umwege über Werner Krenns WSWIN.
Auch ein Re-Download meiner Daten von Awekas, Ecowitt etc will ich nicht.

Ich habe nun die Umrechnungsformel von Fahrenheit zu Celsius eingebaut.
Auch das Zeitformat lässt sich umrechnen mit Excel.
Verlangt allerdings ein Upload zu meiner Homepage jedesmal.

Gruß
Thomas
Benutzeravatar
olicat
Online
Beiträge: 2361
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 41 mal
Danksagung erhalten: 477 mal
Kontaktdaten:

Re: Daten über das Ecowitt-Protokoll an einen eigenen Server übertragen

#9

Beitrag von olicat »

Hi!

Dann bist Du ja auf dem richtigen Weg.
Sinnvoller Weise erfolgt die Umrechnung für Temperatur und Zeit im PHP-Script.
Bedenke, dass ggf. auch die Werte für Regen und Wind umgerechnet werden müssen.

Viel Erfolg, Oliver
angeltom
Offline
Beiträge: 5
Registriert: 26 Jul 2024, 21:36

Re: Daten über das Ecowitt-Protokoll an einen eigenen Server übertragen

#10

Beitrag von angeltom »

Hi,
bin am Anfang, aber danke erstmal für den Ansatz.
Wenn fertig, melde ich mich zurück.
Urlaub rum, kann dauern. :-)

Gruß
Thomas
Antworten