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

Danke Euch für die Hinweise und Angebote. Ich bin zwischenzeitlich fündig geworden!
Die Rezension war sehr hilfreich, und wenn ich das richtig sehe, wird man über Froggit ggf. sogar Ersatzteile für die Baugleichen anderen Stationen bekommen.

Gruß
Karsten

Guten Tag Gemeinde,

seit kurzem bin ich Besitzer einer EFWS2900.

Wurde schon mal probiert, die Station oder baugleiche, per USB auszulesen?

Gibt es eventuell einen Link?

Die Suche habe ich schon mal bemüht, aber noch Nix genaues gefunden.

Am W-Lan Modul habe ich ein RS232 -> USB Adapter gelötet. Die Daten gehen direkt ins IP-Symcon.

Es fehlen noch zwei Bytes, deren Funktionen sind mir noch nicht ganz klar.

Der Batteriestatus wird übrigens nicht ans W-Lan Modul übergeben.

Über ein Statusbyte kann aber ermittelt werden, welche Sensoren ausgefallen sind.

Wer sich die ganze Arbeit mit Adressen umbiegen sparen möchte, kann die Station auch mit einem USB-Adapter auslesen.
Dazu muss ein USB Adapter (FT232), mit zwei Drähten an das WLan-Modul (siehe Foto), angelötet werden.
Der Com-Port wird mit einer IO Instanz (Serieller Port) verbunden.
Danach wird ein Cutter hinzugefügt und mit dem seriellen Port, als übergeordnete Instanz, verknüpft.

Einstellungen und Variablen siehe Anhänge.

Das Script zum dekodieren der Werte stelle ich Morgen rein.

IO_Instanz.jpg

Wie kommt man auf sowas [emoji23][emoji23][emoji23]
Sehr geil

Gesendet von iPhone mit Tapatalk

Ich bastel halt gern. :slight_smile:

Als Nächstes dem Cutter eine Registervariable hinzufügen.
Als Ziel wird das Script eingetragen.
Im Script müssen dann die IDs angepasste werden.
Das sollte es gewesen sein.

Mit PHP stehe ich etwas auf Kriegsfuss. Da bin ich noch kräftig am lernen. Bitte um Nachsicht.:wink:


<?
//Ids der Variablen
$Wert1 =	29586 ;// Innentemperatur
$Wert2 =	29968 ;// Außentemperatur
$Wert3	=	17951 ;// Taupunkt
$Wert4	=	10083 ;// gefühlte Temperatur
$Wert5	=	53031 ;// Hitzeindex
$Wert6	=	57311 ;// Luftfeuchtigkeit Innen	
$Wert7	=	13848 ;// Luftfeuchtigkeit Außen
$Wert8	=	44044 ;// Luftdruck absolut			
$Wert9	=	42726 ;// Luftdruck relativ
$Wert10	=	34416 ;// Windrichtung
$Wert11	=	35193 ;// Windgeschwindigkeit
$Wert12	=	24839 ;// Windböe
$Wert13 =	10102 ;// Niederschlag aktuell	
$Wert14	=	54363 ;// Niederschlag Stunde	
$Wert15 =	41107 ;// Niederschlag 10min auf Stunde hochgerechnet	
$Wert16	=	14732 ;// Niederschlag täglich
$Wert17	=	30192 ;// Niederschlag wöchentlich
$Wert18	=	45004 ;// Niederschlag monatlich	
//Wert19 fehlt im Paket
$Wert20	=	53763 ;// Niederschlag gesamt
$Wert21 =	34800 ;// Sonneneinstrahlung		
$Wert22	=	15634 ;// Lichtintensität eventuell gemittelt	
$Wert23	=	42171 ;// UV
$Wert24a=	22271 ;// Datum
$Wert24b=	41073 ;// Letzter Paketempfang
$Wert25	=	33828 ;// Windgeschwindigkeit Tagesspitze

$Dp 	= 	14020 ;// Datenpaketlänge
$Daten_USB = 11179 ;// Wetterdaten USB	

//Ab hier braucht nichts mehr geändert zu werden.

$Wertlänge = array(2,2,2,2,2,1,1,2,2,2,2,2,4,4,4,4,4,4,0,4,4,2,1,6,2);
 
if ($_IPS['SENDER'] == "RegisterVariable") 
{
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
    $data  = RegVar_GetBuffer($_IPS['INSTANCE']);
    // neu empfangene Daten an $data anhängen
    $data .= $_IPS['VALUE'];
	
	 $CRCist = 1;
 
 		//Datenpaketlänge ermitteln
		$Len = ord($data[0])-5;
		$CRCsoll = ord($data[(ord($data[0])-3)]);
				
		for ($i = 0; $i <= ($Len+1); $i++) 
		{
		$CRCist = $CRCist + ord($data[$i]);
			If ($CRCist > 255)
			{
			$CRCist = $CRCist-256;
			}
		}
				
		SetValue($Daten_USB, bin2hex($_IPS['VALUE'])); //nur zur Kontrolle
		SetValue($Dp, ord($data[0]));
		
		if ($CRCist <> $CRCsoll)
		{
		echo ("Prüfsumme Fehlerhaft. Wetterdatenübertragung! 
");
		exit(); //Prüfsumme fehlerhaft
		}
				
			
		$x = 0;
		
		for ($i = 1; $x <= $Len; $i++) 
		{
         
					$x++;
					$Sensor = ord($data[$x]); //Sensor für Kennung des Gebers
					
					$BytePosition = ($Wertlänge[($Sensor)-1]); //Wertlänge für Sensor (Anzahl Byte)
	 			 	
					If ($Sensor == 1) //Temp innen
					{					
					SetValue($Wert1, (ord($data[$x+1])*0x100 +ord($data[$x+2])-400)/10);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 2) //Temp aussen
					{					
					SetValue($Wert2, (ord($data[$x+1])*0x100 + ord($data[$x+2])-400)/10);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 3) //Temp Taupunkt
					{					
					SetValue($Wert3, (ord($data[$x+1])*0x100 +ord($data[$x+2])-400)/10);	
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 4) //gefühlte Temp
					{					
					SetValue($Wert4, (ord($data[$x+1])*0x100 +ord($data[$x+2])-400)/10);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 5) //Hitzeindex
					{					
					SetValue($Wert5, (ord($data[$x+1])*0x100 +ord($data[$x+2])-400)/10);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 6) //rel. Feuchte innen
					{					
					SetValue($Wert6, ord($data[$x+1]));
					$x = $x + $BytePosition;
					};
					If ($Sensor == 7) //rel. Feuchte aussen
					{					
					SetValue($Wert7, ord($data[$x+1]));
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 8) //Absoluter Luftdruck
					{					
					SetValue($Wert8, (ord($data[$x+1])*0x100 +ord($data[$x+2]))/10);
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 9) //relativer Luftdruck
					{					
					SetValue($Wert9, (ord($data[$x+1])*0x100 +ord($data[$x+2]))/10);
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 10) //Windrichtung
					{					
					SetValue($Wert10, ord($data[$x+1])*0x100 +ord($data[$x+2]));
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 11) //Windgeschwindigkeit m/s
					{					
					SetValue($Wert11, (ord($data[$x+1])*0x100 +ord($data[$x+2]))/10);
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 12) //Windboen m/s
					{					
					SetValue($Wert12, (ord($data[$x+1])*0x100 +ord($data[$x+2]))/10);
				    $x = $x + $BytePosition;					
					};
					If ($Sensor == 13) //Regen aktuell
					{					
					SetValue($Wert13, (ord($data[$x+1])*0x1000000+ord($data[$x+2])*0x10000 +ord($data[$x+3])*0x100 +ord($data[$x+4]))/10);				
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 14) //Regen Stunde
					{					
					SetValue($Wert14, (ord($data[$x+1])*0x1000000+ord($data[$x+2])*0x10000 +ord($data[$x+3])*0x100 +ord($data[$x+4]))/10);				
					$x = $x + $BytePosition;
					};
					If ($Sensor == 15) //Regen auf eine Stunde hochgerechnet 10min * 6
					{					
					SetValue($Wert15, ((ord($data[$x+1])*0x1000000+ord($data[$x+2])*0x10000 +ord($data[$x+3])*0x100 +ord($data[$x+4]))/10)*6);							
					$x = $x + $BytePosition;
					};
					If ($Sensor == 16) //Regen tag
					{					
					SetValue($Wert16, (ord($data[$x+1])*0x1000000+ord($data[$x+2])*0x10000 +ord($data[$x+3])*0x100 +ord($data[$x+4]))/10);				
					$x = $x + $BytePosition;
					};
					If ($Sensor == 17) //Regen Woche
					{					
					SetValue($Wert17, (ord($data[$x+1])*0x1000000+ord($data[$x+2])*0x10000 +ord($data[$x+3])*0x100 +ord($data[$x+4]))/10);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 18) //Regen Monat
					{					
					SetValue($Wert18, (ord($data[$x+1])*0x1000000+ord($data[$x+2])*0x10000 +ord($data[$x+3])*0x100 +ord($data[$x+4]))/10);				
					$x = $x + $BytePosition;
					};
					
					//Sensor 19 Fehlt
					
					If ($Sensor == 20) //Regen gesamt
					{					
					SetValue($Wert20, (ord($data[$x+1])*0x1000000+ord($data[$x+2])*0x10000 +ord($data[$x+3])*0x100 +ord($data[$x+4]))/10);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 21) //Lichtsensor kLux
					{					
					SetValue($Wert21, (ord($data[$x+1])*0x1000000+ord($data[$x+2])*0x10000 +ord($data[$x+3])*0x100 +ord($data[$x+4]))/10000);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 22) //?? Sonneneinstrahlung W/m2
					{
					SetValue($Wert22, (ord($data[$x+1])*0x100 +ord($data[$x+2])));
					$x = $x + $BytePosition;
					};
					If ($Sensor == 23) //UV Index
					{					
					SetValue($Wert23, ord($data[$x+1]));
					$x = $x + $BytePosition;
					};
					If ($Sensor == 24) //Datum 
					{					
					SetValue($Wert24a, ord($data[$x+3]).".".ord($data[$x+2]).".".ord($data[$x+1]));
					SetValue($Wert24b, ord($data[$x+4]).":".ord($data[$x+5]).":".ord($data[$x+6]));
					$x = $x + $BytePosition;
					};    
					If ($Sensor == 25) //Windgeschwindigkeit Tagesspitze
					{					
					SetValue($Wert25, (ord($data[$x+1])*0x100 +ord($data[$x+2]))/10);
					$x = $x + $BytePosition;
					};
					
					
					
		}
							
}
?>

Moin… welchen USB Ft232 hast du genommen?
Danke,
Peter

Gesendet von iPhone mit Tapatalk

Einen FT232B mit internen Pegelwandler.

Das WLAN Modul wir mit 3,3Volt betrieben.

Das ja schon mal super das es so einfach geht, kann man dann nicht gleich ein WLAN Modul „zb ESP“ einbauen ?

Da bin ich gerade dran. :slight_smile:

Dann bleibt meine Station im Karton, das wäre der Finale weg wenn das klappt.:smiley:

Danke fürs Probieren, ich drücke die Daumen

Hallo Kernkraft,

Danke für den aufgezeigten Weg. Ich bastle gerade an einer Lösung RS232 to LAN. Als Pegelwandler verwende ich einen MAX3232… Aber aus bisher unbekannten Gründen „redet“ das Teil nicht mit mir :confused:

VG

Andreas

Hallo Lukky,

welchen Adapter benutzt Du und wie hast du ihn angeschlossen?

Hallo,

sorry das ich erst heute antworte. Ich mußte aber den Arbeitsplatz für meinen Kollegen freiräumen. Kann erst am Sonntag nachschauen.

VG

Andreas

Guten Tag Gemeinde.

Neuster Stand.

Neues Modul WT8266-S1 mit der Firmware ESPEasy v2.0 geladen.
Das alte Modul für „Notfälle“ beiseite gelegt und das neue Modul aufgelötet.
Die komplette Kommunikation geschieht jetzt über IP-Symcon.

Im Moment bin ich am Testen ob alles soweit läuft.

Gruß Andre

Hallo Gemeinde,

Ich habe mir die Wetterstation von ELV WS980WIFI bestellt und dachte ich könnte die recht einfach in IPS einbinden. Leider kann ich das Modul nicht laden und werde aus dem Thema nicht schlau.

Kann man jetzt diese Station über das interne Netzwerk abfragen oder nicht?
Wenn ich das Modul laden möchte bekomme ich einen Fehler: Error: curl error: Failed to connect to github.com port 443: Connection refused

Zur Anbindung:
Ich habe das Programm „WeatherSmartIP“ installiert und man kann damit wunderbar alle Werte abfragen und auch exportieren.
Wenn ich Wireshark mitlaufen lasse kann ich doch den Datenfluss sehen. Leider habe ich von dieser Materie keine Ahnung.
Die Einbindung müsste doch über einen Clientsocket machbar sein?

Für eure Einschätzung wäre ich sehr Dankbar.

Hallo Bussard013,

soweit ich es mitbekommen habe, geht es nicht direkt.

Das WLAN-Modul in der Wetterstation kann nicht einfach umprogrammiert werden, damit es dem Server die Daten schickt.

Einige haben eine Raspberry genommen, damit die Adresse umgebogen wird.

Mir war das zu aufwendig und noch einen Stromverbraucher mehr wollte ich auch nicht.

Ich habe einmal die Variante mit der direkten USB Anbindung gebastelt. Das Kabel störte mich dann aber.

Jetzt läuft die Wetterstation mit einem geflashten WLAN Modul. Die Daten werden direkt zum Server gesendet.

Es läuft ohne Fehler.

Gruss Andre

Zum Flashen muss man aber am Gerät selber basteln bzw. dies öffnen oder geht das eventuell auch nur mit Software?

Stimmt, das Gerät muss einmal geöffnet werden.

Zum aufspielen der Software benötigt man einen einfachen USB->RS232 Adapter mit 3,3Volt.

Es müssen, für das Flashen vier Drähte angelötet werden.

Nachdem das Modul die ESPEasy Software geladen hat, erfolgt die weitere Programmierung und Updates über das WLAN.

Gruss Andre

Das verstehe ich aber immer noch nicht. Ich habe keine Wettercloud eingestellt. Das muss doch intern funktionieren?

Wenn ich es richtig verstanden habe ist die Wettercloud-Adresse im Wlan Modul fest vorgegeben.
Die Daten werden direkt dort hin gesendet.
Die Anmeldeprozedur mit dem Handy dient nur dazu, die Wetterstation im Netzwerk anzumelden und den Gateway festzulegen.

Gruß Andre