Sainlogic Professionelle WLAN Funk Wetterstation - 10 in 1 Wi-Fi

Muss ich mal anderweitig fragen ob es da eine Lösung gibt. ich schätze mal wenn der Client ein Socket Close anfordert dann schließt sich der Socket auch. Ob es da einen Weg gibt weis ich noch nicht.

Das kann ich mir erst im Detail anschauen wenn ich selber echte Daten in IP-Symcon vorliegen habe, ich hoffe mal nächste Woche, wenn da aber jemand ein Hinweis hat was noch alles angepasst werden muss kann ich das auch vorher schon einbauen.

Dies hatte ich noch nicht hochgeladen, sollte jetzt in der aktuellen Version enthalten sein.

Hey erstmal danke für das Tolle Modul.

Das Abrufen der Daten klappt schon einmal super, bloß beim Übertragen zu Wunderground hakelt es noch.
Scheinbar scheinen die Variablen falsche zu übertragen werden.

Hier mal den Link aus den Debug:

https://weatherstation.wunderground.com/weatherstation/updateweatherstation.php?ID=XXXXXXXXX&PASSWORD=XXXXXXX&action=updateraw&dateutc=2018-05-13%2021%3A34%3A33&indoortempf=69%2C3&tempf=57%2C9&dewptf=49%2C8&windchillf=57%2C9&indoorhumidity=125%2C6&humidity=165%2C2&windspeedmph=3%2C40000563584&windgustmph=20%2C880034610688&winddir=46&absbaromin=1012%2C5300591433&baromin=1001%2C0163394072&rainin=0&dailyrainin=0&weeklyrainin=0&monthlyrainin=0%2C83&solarradiation=0&UV=0&softwaretype=EasyWeatherV1.2.1&realtime=1&rtfreq=5

In Wunderground wird nur die Regenmenge und der Druck richtig angezeigt.
Bei den Rest steht --, bzw. -5572.8 ℃

Gruß Swen

Die Antwort vom Modul ist noch nicht OK. Das Problem ist die Antwort

indoortempf=69%2C3&

wird nicht angenommen.
Sollte eher „69.2“ sein.
Ich hab die Function im Modul (protected function GetParameters() ) ersetzt durch

	protected function GetParameters()
	{

    $param =  '&dateutc=now';
		$param .= '&indoortempf=' .   str_replace(",",".",$this->CelsiusToFahrenheit(GetValue($this->GetIDForIdent("Indoor_Temp"))));
		$param .= '&tempf=' .         str_replace(",",".",$this->CelsiusToFahrenheit(GetValue($this->GetIDForIdent("Outdoor_Temp"))));
		$param .= '&dewptf=' .        str_replace(",",".",$this->CelsiusToFahrenheit(GetValue($this->GetIDForIdent("Dewpoint"))));
		$param .= '&indoorhumidity='. str_replace(",",".",GetValue($this->GetIDForIdent("Indoor_Humidity")));
		$param .= '&humidity=' .      str_replace(",",".",GetValue($this->GetIDForIdent("Outdoor_Humidity")));
		$param .= '&windspeedmph=' .  str_replace(",",".",$this->MSToMPH(GetValue($this->GetIDForIdent("Windspeed_ms"))));
		$param .= '&windgustmph=' .   str_replace(",",".",$this->MSToMPH(GetValue($this->GetIDForIdent("Windgust"))));
		$param .= '&winddir=' .       str_replace(",",".",GetValue($this->GetIDForIdent("Wind_Direction")));
	  $param .= '&baromin=' .       str_replace(",",".",$this->PressurehPaToBar(GetValue($this->GetIDForIdent("baromin"))));
	  $param .= '&rainin=' .        str_replace(",",".",GetValue($this->GetIDForIdent("rainin")));
	  $param .= '&dailyrainin=' .   str_replace(",",".",GetValue($this->GetIDForIdent("dailyrainin")));
		$param .= '&solarradiation=' .str_replace(",",".",GetValue($this->GetIDForIdent("solarradiation")));
		$param .= '&UV=' .            str_replace(",",".",GetValue($this->GetIDForIdent("UV")));
	  $param .= '&softwaretype=EasyWeatherV1.2.1';
		$param .= '&realtime=1';
		$param .= '&rtfreq=20';
		return $param;
	}

Hi Leute,

danke an Fonzo für die Arbeit an diesem Modul ohne Hardware in den Händen.

Ich habe mir aufgrund von diesem Thread die Wetterstation gegönnt :slight_smile:

Durch die Methode der DNS-Umleitung auf den IPS-Server konnte ich mit den Daten spielen.
Bei mir waren aber ein paar Anpassungen nötig bis es dann ohne Fehler lief.

Mir sind dann heute bei Vergleich der Messwerte ein paar Dinge aufgefallen die ich in einem Fork vom Modul angepasst habe. Der Pull-Request ist bereits raus :wink:

  • Windgeschwindigkeit in km/h wird von der Variable $windgust statt $windspeed errechnet
  • Regenmengen werden in inch übertragen, ich habe eine neue Funktion für die Umrechnung eingefügt

Schau mal was du davon verwenden möchtest.

Grüße
Adrian

Ok, ich habe mal ein Update gemacht und str_replace übernommen, könnt ja mal berichten ob das Besserung bringt.

Danke dafür, ich habe das mal so übernommen. Könnt ja mal Rückmeldung geben ob die Werte jetzt insgesamt Sinn machen bzw. wo noch was fehlt an der Umrechnung.

Was noch ergänzt werden muss ist die Auswertung der Einheiten im Modul. Hierzu wäre es wichtig zu wissen was denn für Einheiten generell zur Auswahl stehen sollen. Dann sollten dann je nach Auswahl ein passendes Varibalenprofil genutzt werden und die Werte dann entsprechenden der Einheit umgerechnet werden.

Aufpassen muss man dabei nur wenn man Daten aufzeichnet dann sollte die Einheit nicht geändert werden.
Oder kennt jemand eine Möglichkeit das immer die Rohdaten in der Variable abgelegt werden, diese aber Aufgrund eines Variablenprofils dann anders angezeigt werden?

Danke bei mir scheint es jetzt zu gehen.

Ich Prüfe das aber noch ausgiebig.

Swen

Hast du schon Zeit gefunden die Anleitung fertigzustellen? Ich habe mir den Router auch bestellt, kommt heute Abend und wollte das dann gleich einrichten.
Wäre mit einer Anleitung die nachweislich funktioniert einfacher :smiley:

Danke

Hallo Spooniester,

also der Router läuft soweit. Verarbeitet wird eine LEDE-Firmware mit den WLan Treibern von Andy Padawan, ursprünglich für Asus RT-N56U entwickelt. Heute morgen hat dann auch die nachträgliche Installation der Web-Oberfläche geklappt. Teste gerade die Umleitung der Wetterstation und hardere noch ein wenig mit der WPA2 Verschlüsselung, da die im benutzten Kernel nicht installiert war. Aber folgendes bisher:

1.) Image mit modifizierten Treibern herunterladen unter: LEDE for WR841N v13/WR840N v4 @ Raxp’s blog

2.) Image in tp_recovery.bin umbenennen

2.) PC auf feste IP 192.168.0.66 stellen

3.) Wan-Port (Blaue Buchse) des Routers an Dein Haus-Router anschließen (benötigen Internet-Zugang)

4.) PC an den WR841N anschliessen (gelbe Buchse)

5.) Tftpd64 starten (TFTPD32 : an opensource IPv6 ready TFTP server/service for windows : TFTP server)

6.) Unter Server interfaces die 192.168.0.66 auswählen

7.) unter Current Directory das Verzeichnis wählen, wo die Datei tp_recovery.bin liegt

8.) Den WR841 ausschalten und bei gedrückter Reset-Taste einschalten. Reset-Taste für mind. 8 Sekunden gedrückt halten. Zu erkennen, wenn Tftpd anzeigt, das Datei Übertragen wird

9.) Warten bis WR841N neu gestartet ist

10.) PC: Netzwerkkarte wieder auf empfang von DHCP umstellen

11.) mit Putty auf den WR841N (192.168.1.1)

12.)auf dem WR841N ausführen: vi /etc/opkg/distfeeds.conf dort alle abgewählten Paktequellen aktivieren (# entfernen)

13.) mit „:w“ speichern und mit „:q“ den vi beenden

14.) Luci und, wenn bedarf, den nano-editor installieren mit:
a.) opkg update
b.) opkg install luci
c.) opkg nano (optional)
15.) Webinterface Luci starten mit: /etc/init.d/uhttpd start

16.) Luci Autosstart einschalten mit: /etc/init.d/uhttpd enable
Im Webbrowser jetzt 192.168.1.1 eingeben und man ist auf der Weboberfläche
Dort kann man die ESSID ändern.

17.) Die Wetterstation mit dem neuen Netzwerk verbinden

18.) In luci wird die IP unter Status/Overview angezeigt. in der regel mit dem Hostnamen: ESP_xxxxxx

19.) Die Umleitung der Wetterstation per ssh mit: iptables -t nat -A PREROUTING -s IP.DER.WETTER.STATION -p tcp --dport 80 -j DNAT --to-destination IP.DES.SYMCON.SERVER:45000

20.) Für die dauerhafte Einrichtung der Umleitung:
a.) Einloggen auf den WR841N mittels ssh
b.) Die Datei /etc/firewall.user mit vi oder nano editieren
c.) Am Ende folgendes eintragen: iptables -t nat -A PREROUTING -s IP.DER.WETTER.STATION -p tcp --dport 80 -j DNAT --to-destination IP.DES.SYMCON.SERVER:45000
d.) abspeichern mit vi „:w“ und „:q“ beenden, mit nano „strg+x“ Dann frage ob gespeichert werden soll mit Y beantworten
e.) WR841N neu starten.

Soweit funktioniert das System dann auch. Wie gesagt, an der WPA2-Verschlüsselung sitze ich gerade mit Hochdruck dran.

Viele Grüße,

Burkhard

P.S.: Bei Problemen gerne auf mich zukommen. Wenn auch die Verschlüsselung läuft, werde ich eine bessere, bebilderte Anleitung schreiben.

Hallo,

kleine Ergänzung, wenn man am Monitor verfolgen möchte, was genau auf dem WR841N passiert, kann man parallel noch eine serielle Verbindung laufen lassen und die Ausgaben über putty verfolgen. Dazu schreibe ich nachher noch ne extra Anleitung (man sollte einen Lötkolben haben).

Daten werden übrigens mit dem Modul 1a an Wunderground übertragen. Vielen Dank für das Modul an Fonzo.

Viele Grüße,

Burkhard

Hallo Fonzo,

danke für Dein Modul. Auch ich habe mittels eines alten D-Link Routers mit dd-wrt Firmware die Daten auf Symcon umgeleitet bekommen.

Die Daten kommen in Symcon an, was ich im Debug Fenster des Sockets und der Instanz sehen kann.
Allerdings werden die Variablen der Instanz nicht befüllt. Da bleiben lauter Nullen stehen, egal wie lange es läuft.

Kann es sein, dass Dein Modul nur für die neue Version 5.0 angepasst ist und für Version 4.4 stable nicht funktioniert?

Eigentlich sollte das auch mit IPS 4 gehen, Daten kommen also an nur die Variable wir nicht beschrieben?

Genau so ist es. Daten kommen an.
Aber die Variablen werden nicht beschrieben.

Aber


$ver = IPS_GetKernelVersion()
var_dump($ver);

gibt schon einen Wert kleiner als 5 zurück oder?

Willst Du meine Version wissen?

IP-Symcon 4.4, Ubuntu, 19.02.2018, 36a7b6fcaa27

Ubuntu 4.4.0-124.148-generic 4.4.117

Ich will vielmehr wissen was die Funktion


$ver = IPS_GetKernelVersion() 
var_dump($ver);  

bei Dir zurückgibt. Danach wird nämlich eigentlich unterschieden in welcher Art die Variablen beschrieben werden, daher kann ich mir das momentan noch nicht schlüssig erklären was das genaue Problem ist.

Wenn ich das in ein Skript in Symcon eintrage, also so:


<?
$ver = IPS_GetKernelVersion();  
var_dump($ver);
?>

Dann bekomme ich folgende Ausgabe:

string(3) "4.4"

Und wo siehst Du die ankommenden Daten im Debug Fenster des Server Sockets oder auch im Debug Fenster der Wetterstation Instanz? Kommt denn irgendeine Fehlermeldung oder tut sich einfach nichts?

Ich habe Dir mal die beiden Debugauszüge von Instanz und Socket in zwei Dateien gepackt.
dump-socket.txt (23.7 KB)
dump-instanz.txt (20.3 KB)

Eine Fehlermeldung erfolgt nicht. Die Variablen bleiben einfach leer.

Eine genaue Ursache kann ich auf die Schnelle nicht finden, ich sehe nur das zwar Daten ankommen diese aber gar nicht richtig verarbeitet werden, sonst müsste im Debug dann auch die einzelnen Werte stehen.

Eigentlich sollten die Daten hier zerlegt werden


 $url = 'https://weatherstation.wunderground.com/weatherstation/updateweatherstation.php?ID=WEATHER13&PASSWORD=xxxxxxxx&action=updateraw&dateutc=now&indoortempf=32&tempf=32&dewptf=32&windchillf=32&indoorhumidity=0&humidity=0&windspeedmph=0&windgustmph=0&winddir=0&absbaromin=0&baromin=0&rainin=0&dailyrainin=0&weeklyrainin=0&monthlyrainin=0&solarradiation=0&UV=0&softwaretype=EasyWeatherV1.2.1&realtime=1&rtfreq=20';
$query = parse_url($url, PHP_URL_QUERY);
		parse_str($query, $data);
		var_dump($data);

Kommt da bei Dir auf Deinem System nichts bei raus bzw. was ist denn da die Ausgabe?