Guten Morgen Zusammen,
anbei ein kleines Update und eine kleine Beschreibung zum vorgehen für die Eltako / Elsner Wetterstation.
Nochmals zum Hintergrund: Bei uns zu Hause werkelt ein Eltako Multisensor, der wie vormals beschrieben "angeblich" nur mit Enocean funktionieren sollte, da dieser Baugleich zur Elsner Version ist und der Raspberry mit Solaranzeige die "Boardmittel" mitbringt sowie 24/7 läuft wollte ich die Informationen nutzen für die ein oder andere Steuerung.
Datenblatt der Elsner nun im Anhang.
Folgende Schritte sind nötig um die Wetterstation ans laufen zu bekommen.
1. Ser2Net installieren und Konfigurieren
Die neue Version von Ser2Net startet als Dienst. Nach der Installation prüfen ob der Dienst läuft.
Dies Ausgabe sollte im Idealfall wie folgt aussehen:
Code: Alles auswählen
pi@raspberrypi:~ $ systemctl status ser2net
● ser2net.service - Serial port to network proxy
Loaded: loaded (/lib/systemd/system/ser2net.service; enabled; preset: enabled)
Active: active (running) since Sun 2025-02-02 06:16:56 GMT; 29min ago
Docs: man:ser2net(8)
Main PID: 923 (ser2net)
Tasks: 1 (limit: 767)
CPU: 1min 4.531s
CGroup: /system.slice/ser2net.service
└─923 /usr/sbin/ser2net -n -c /etc/ser2net.yaml -P /run/ser2net.pid
Feb 02 06:16:56 raspberrypi systemd[1]: Starting ser2net.service - Serial port to network proxy...
Feb 02 06:16:56 raspberrypi systemd[1]: Started ser2net.service - Serial port to network proxy.
2. Ser2Net Konfigurieren - klingt einfach hat aber seine Tücken.
Bevor die Konfigurationsdatei angepasst wird, sollte kontrolliert werden wie die Schnittstelle genau heißt.
Die Ausgabe sollte ungefähr so aussehen:
Code: Alles auswählen
drwxr-xr-x 2 root root 60 Feb 2 05:57 .
drwxr-xr-x 4 root root 80 Feb 2 05:57 ..
lrwxrwxrwx 1 root root 13 Feb 2 05:57 usb-1a86_USB_Serial-if00-port0 -> ../../ttyUSB0
Nachdem nun die Schnittstelle "erkannt" wurde, nutzen wir die Informationen für die Konfiguration von Ser2Net.
Die Datei bzw. Ser2Net ist sehr empfindlich ein Leerzeichen an der falschen Stelle führt direkt zu einem Fehler!!
Mit dem Editor die Konfigurationsdatei öffnen:
Code: Alles auswählen
%YAML 1.1
---
# This is a ser2net configuration file, tailored to be rather
# simple.
#
# Find detailed documentation in ser2net.yaml(5)
# A fully featured configuration file is in
# /usr/share/doc/ser2net/examples/ser2net.yaml.gz
#
# If you find your configuration more useful than this very simple
# one, please submit it as a bugreport
#define: &banner \r\nser2net port \p device \d [\B] (Debian GNU/Linux)\r\n\r\n
#connection: &con0096
#accepter: tcp,localhost,2000
#enable: on
#options:
#banner: *banner
#kickolduser: true
#connector: serialdev,/dev/ttyUSB0,19200n81,local
connection: &firmata
accepter: localhost,2000
connector: serialdev,/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0,1920081n,local
options:
kickolduser: true # Leerzeichen nötig
max-connections: 3 # Leerzeichen nötig
In der original Config-Datei sind mehrere Beispiele. Diese wurden der gelöscht, da nicht benötigt.
Sollte irgendwo ein Leerzeichen zu viel sein, oder ein Sintaxfehler so lautet die Fehlermeldung beim Start vom Ser2Net Dienst:
Code: Alles auswählen
pi@raspberrypi:~ $ systemctl status ser2net
● ser2net.service - Serial port to network proxy
Loaded: loaded (/lib/systemd/system/ser2net.service; enabled; preset: enabled)
Active: active (running) since Sun 2025-02-02 07:00:06 GMT; 4s ago
Docs: man:ser2net(8)
Main PID: 1211 (ser2net)
Tasks: 1 (limit: 767)
CPU: 23ms
CGroup: /system.slice/ser2net.service
└─1211 /usr/sbin/ser2net -n -c /etc/ser2net.yaml -P /run/ser2net.pid
Feb 02 07:00:06 raspberrypi systemd[1]: ser2net.service: Main process exited, code=exited, status=1/FAILURE
Feb 02 07:00:06 raspberrypi systemd[1]: ser2net.service: Failed with result 'exit-code'.
[u]Feb 02 07:00:06 raspberrypi ser2net[1211]: /etc/ser2net.yaml:24(column 12): Unexpected scalar value
Feb 02 07:00:06 raspberrypi ser2net[1211]: /etc/ser2net.yaml:24(column 12): Unexpected scalar value[/u]
Feb 02 07:00:06 raspberrypi systemd[1]: Stopped ser2net.service - Serial port to network proxy.
Feb 02 07:00:06 raspberrypi systemd[1]: ser2net.service: Consumed 1min 5.412s CPU time.
Feb 02 07:00:06 raspberrypi systemd[1]: Starting ser2net.service - Serial port to network proxy...
Feb 02 07:00:06 raspberrypi systemd[1]: Started ser2net.service - Serial port to network proxy.
Die Konfigurationsdatei anpassen, den Fehler finden und dann mittels
den Dienst neu starten.
Das Ergebnis sollte in etwa so aussehen:
Code: Alles auswählen
pi@raspberrypi:~ $ sudo service ser2net restart
pi@raspberrypi:~ $ systemctl status ser2net
● ser2net.service - Serial port to network proxy
Loaded: loaded (/lib/systemd/system/ser2net.service; enabled; preset: enabled)
Active: active (running) since Sun 2025-02-02 07:01:13 GMT; 2s ago
Docs: man:ser2net(8)
Main PID: 1223 (ser2net)
Tasks: 1 (limit: 767)
CPU: 27ms
CGroup: /system.slice/ser2net.service
└─1223 /usr/sbin/ser2net -n -c /etc/ser2net.yaml -P /run/ser2net.pid
Feb 02 07:01:13 raspberrypi systemd[1]: Starting ser2net.service - Serial port to network proxy...
Feb 02 07:01:13 raspberrypi systemd[1]: Started ser2net.service - Serial port to network proxy.
Kontrolle ob auf dem eingestellten Port gelauscht wird:
Code: Alles auswählen
pi@raspberrypi:~ $ sudo netstat -tlpena | grep -i 200
tcp 0 0 127.0.0.1:2000 0.0.0.0:* LISTEN 0 1066665 1223/ser2net
tcp6 0 0 ::1:2000 :::* LISTEN 0 1066664 1223/ser2net
tcp6 0 0 2001:9e8:78c2:f700:4:22 2001:9e8:78c2:f70:58090 ESTABLISHED 0 6137 584/sshd: pi [priv]
tcp6 0 0 2001:9e8:78c2:f700:4:22 2001:9e8:78c2:f70:58699 ESTABLISHED 0 847541 1017/sshd: pi [priv
Sofern der Dienst läuft, kann nun Apache (sofern nicht schon vorhanden) sowie PHP installiert werden.
Damit ein Zugriff des Users: www-Data auf die Schnittstelle gelingt muss dieser noch in die Gruppe Dialout hinzugefügt werden.
Nun zum eigentlichen Akt, die Daten in Empfang nehmen und weiterverarbeiten.
Hier wurde nach viel "Suchen und Ausprobieren" ein "fertiges" PHP Script gefunden...
(Quelle:
https://redaktion.knx-user-forum.de/wet ... ia-rs-485/]
Dies war bei mir nicht lauffähig und hat div. Fehler ausgespuckt.
Interessant ist jedoch, dass die Checksummen oder andere Berechnungen schon implementiert sind.
Weiterhin ist hier ebenfalls eine Wichtige information enhalten, welche mir durchgegangen ist, jedes Signal von der Wetterstation beginnt mit einem "W".
Anbei der Erste Schritt vom "neuen" PHP Script womit zumindest kontrolliert werden kann welche Daten ankommen.
Da der Bus alle 3 Sekunden ein Signal sendet, ist ebenfalls eine Laufzeitberechnung für den Test mit drin.
Dies führt dazu, dass die Ergebnisse des PHP Skripes stellenweise nicht plausibel sind..
Code: Alles auswählen
<?php
$beginn = microtime(true);
//$string = "Hallo Schnittstelle!\n";
//$pointer = fopen("/dev/ttyUSB0","r","19200");
$pointer = fsockopen("localhost","2000");
//fwrite ($pointer, $string);
//$char = fgetc($pointer);
$i=0;
while(!feof($pointer))
{
$char =fgetc($pointer);
$str[$i] = $char;
//}
if ($i<45)
{
echo "Zaehler: $i \n </br>";
//echo "char ausgabe: $char \n </br>";
echo "string ausgabe: $str[$i] </br> \n \n \n";
$i=($i+1);
continue;
//echo $i;
//echo "finished \n \n \n";
//echo $char;
//fwrite($pointer);
//fclose($pointer);
}
if ($i==45)
{
break;
fclose($pointer);
}
//$i=(i+1);
}
$dauer = microtime(true) - $beginn;
echo "Verarbeitung des Skripts: $dauer Sek.";
?>
Dies zum aktuellen Stand.
Weiteres vorgehen:
Implementierung der Abfrage "W" (dies klappt aktuell noch nicht)
Dann die Daten zusammenfassen und in eine Datenbank schreiben.
Sofern dies alles klappt, dann versuchen das Skript auf der Solaranzeige zu implementieren.
Vielleicht habt Ihr Anregugen und Tipps, wie weiter vorgegangen werden kann.
Grüße
Retsam