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

Ich habe nicht die App zum Einstellen gemeint sondern die Software „WeatherSmartIP“ für Windows die nur die Daten von der Wetterstation empfängt. Die Daten werden von der Software in Echtzeit am PC übernommen.
Ich gehe davon aus das es auch eine Möglichkeit gibt die Daten direkt zu IPS zu schicken.

Wenn jemand Interesse hat sich das mit Teamviewer anzusehen dann einfach melden.

Hier noch der link zur Wetterstation.

Schalte doch mal kurz dein Internetzugang ab.
Mich würde interessieren, ob dann noch aktuelle Daten auf deinem PC oder Handy angezeigt werden.

Gruß Andre

Aber nicht als IP-Adresse, sondern als URL.
Wenn Du der Wetterstation klarmachst, dass api.weathercloud.net eine im LAN interne Adresse eines Raspis ist, wird sie brav alle Daten dort ohne weitere Rückfrage abliefern. Methode hier beschrieben.

Viele Grüsse
Harald

Hallo Andre

Ich möchte das gerne auch einmal ausprobieren. Ein WT8266-S1 habe ich noch irgendwo rumliegen. Was hast du an der ESPEasy modifiziert?

VG

Andreas

Ich habe nochmal getestet:

Wetterstation hängt über WLAN an der Fritzbox und fürs Internet gesperrt.
PC hängt mit LAN an der Fritzbox und fürs Internet gesperrt.
WeatherSmartIP geöffnet und es werden die aktuellen Daten von der Wetterstation empfangen. Die Daten ändern sich auch wenn ich die Luftfeuchte der Basis erhöhe.:smiley:
Wireshark geöffnet und man sieht abrufe von der PC-IP und Empfangspakete von der Wetterstations-IP. Nur leider kann ich mit diesen Daten nichts anfangen. Ich sehe nur dass zwischen Port 61424 und 45000 Daten fließen.

Hallo Andre,

ist es eigentlich möglich, einen weiteren ESP8266 parallel zum Original zu betreiben, den man mit ESPEasy modifiziert und damit die Daten z.B. parallel an Weather Underground sowie an fhem schickt?
Evntl indem man TX beim 2. ESPT8266 nicht verbindet, um sicherzustellen, dass es bei der Wetterstation kein Müll ankommt?
Ich sehe erstmal keinen Grund, warum das nicht funktionieren sollte, bin aber hier eher Laie.

Gruß
Robert

Hallo Robert,

ja das ist möglich. Eine Zeit lang habe ich beide ESP parallel betrieben.

Bei dem Versuchsaufbau waren die zwei Module allerdings mehr als 30 cm voneinander entfernt.

Wie sich die Module verhalten, wenn sie beide im Gerät verbaut sind, kann ich dir nicht sagen.

Der TXD-Anschluss vom „Heim-ESP“ sollte dann natürlich nicht angeschlossen sein.

Gruß Andre

Hallo Andreas,

hab deine Frage erst jetzt gelesen.

Am ESPEasy muss nichts modifiziert werden. Das Modul wie auf der Homepage beschrieben installieren.

Nach der Anmeldung habe ich bei
Controller:
„Generic HTTP“ hinzugefügt. Port 8000 und die IP
Devices:
„Communication-Serial Server“ TCP Port 8000; 9600 baud; 8 Bits; 1 Stopbit;

Falls das Modul als alleinige Verbindung zum Netz fungiert, muss die Uhrzeit und die
Kommunikation per Software im IP-Symcon bereitgestellt werden.

Falls Interesse besteht, kann ich das Script noch einstellen.

Gruß Andre

Hallo Andre,

danke für deine Rückantwort.
Dann werde ich das Teil einmal flashen.
Wenn du das Script bereitstellst wäre das super.

Danke.

Andreas

Hallo Andreas,

Im Bild sind noch die Einstellungen im IP-Symcon zu sehen.

Das Script „Client Überwachung“ startet die Verbindung neu, falls die Wetterstation mal spannungslos wurde.

der Code
„Wetterscript WLAN“


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

$Dp 	= 	14020 /*[Hardware\Wetter\Wetterstation USB\Datenpaketlänge]*/ ;// Datenpaketlänge
$Daten_USB = 11179 /*[Alte USB VersionCutter Wetterstation Wetterdaten\RegVar Wetterstation\Wetterdaten USB]*/ ;// Wetterdaten USB
$Sync = GetValueBoolean(37181 /*[Client Socket wetter WLAN\RegVar Wetterdaten WLan\Wetterscript WLAN\Sync]*/);
$Datenpaket = 0;
$Sendetext = "";


$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") 
{
    $data  = RegVar_GetBuffer($_IPS['INSTANCE']);                           	// bereits im Puffer der Instanz vorhandene Daten in $data kopieren
    $data .= $_IPS['VALUE'];                             						// neu empfangene Daten an $data anhängen
	
 	$CRCist = 0;
	
	if (strlen($data) >= 4)														 //kleinster Datenblock
	{
		if (($Sync == false) and (strpos($data, chr(0x07).chr(0x00).chr(0x04).chr(0x0B))) !== false) //Syncronisieren
			{
				$Position = strpos($data, chr(0x07).chr(0x00).chr(0x04).chr(0x0B));
				$data = substr( $data , ($Position + 4 ) - strlen($data));
				$Sync = true;
			} 
			
		if 	(($Sync == true) and  (strlen($data) >= 3))	
			{
				$Paketlaenge = ord($data[2]);
			if 	(strlen($data) >= $Paketlaenge )							// Warten bis Paket vollständig
				{
				$CRCsoll = ord($data[$Paketlaenge-1]);                		//Prüfsumme kontrollieren
				for ($i = 0; $i <= ($Paketlaenge-2); $i++) 
					{
					$CRCist = $CRCist + ord($data[$i]);
					If ($CRCist > 255)
						{
						$CRCist = $CRCist-256;
						}
					} 
				if ($CRCist <> $CRCsoll)
					{
						$Sync = false;
					}
					else
					{
						$Datenpaket = substr( $data ,0,($Paketlaenge) );
						$data = substr( $data , ($Paketlaenge) );
					}
				}
			}
	
		SetValueBoolean(37181 /*[Client Socket wetter WLAN\RegVar Wetterdaten WLan\Wetterscript WLAN\Sync]*/,$Sync );
  			
	}            

	RegVar_SetBuffer($_IPS['INSTANCE'], $data);
	
	

		if (ord($Datenpaket[0]) == 0x07) //07 00 04 0B Komunikation noch vorhanden?
		{
		CSCK_SendText(27728 /*[Client Socket wetter WLAN]*/,chr(0x07).chr(0x00).chr(0x06).chr(0x02).chr(0x00).chr(0x0F) ); //Antwort auf Test Kommunikation
		}
		
		if (ord($Datenpaket[0]) == 0x06) //06 00 04 0A Hole Datum
		{
		//06 00 0B FF FF FF FF FF FF 00 0B //Antwort wenn noch keine WLAN Verbindung 
		//06 00 0B 13 01 1B 09 0D 25 00 7B //Datum und Uhrzeit
		date_default_timezone_set("Europe/Berlin");
		
		$timestamp = time();
		$dat[0] = 6;
		$dat[1] = 0;
		$dat[2] = 11;
		$dat[3] = date("y",$timestamp);
		$dat[4] = date("m",$timestamp);
		$dat[5] = date("d",$timestamp);
		$dat[6] = (date("H",$timestamp)-1);
		$dat[7] = date("i",$timestamp);
		$dat[8] = date("s",$timestamp);
		$dat[9] = 0x00;
		$dat[10] = 0x00;        //Prüfsumme
		
		$CRCist = 0;
		
		for ($i = 0; $i <= 0x0B-2; $i++) 
					{
					$CRCist = $CRCist + $dat[$i];
					If ($CRCist > 255)
						{
						$CRCist = $CRCist-256;
						}
					}
					
		$dat[10] = $CRCist;//Prüfsumme
		
				
		for ($i = 0; $i < count($dat); $i++) 
		{
			$Sendetext = $Sendetext.chr($dat[$i]);
		            
        }
		
		CSCK_SendText(27728 /*[Client Socket wetter WLAN]*/,($Sendetext)); //Antwort auf Test Kommunikation
		
		}
		
		if (ord($Datenpaket[0]) == 0x01)
		{
		//01 00 07 00 01 00 09 Abfrage Sensoren
		
		
	    $Datenpaket = substr( $Datenpaket ,2,($Paketlaenge) );
		$x = 0;
		
		for ($i = 1; $x <= $Paketlaenge - 5; $i++)   
		{
         
					$x++;
					$Sensor = ord($Datenpaket[$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($Datenpaket[$x+1])*0x100 +ord($Datenpaket[$x+2])-400)/10);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 2) //Temp aussen
					{					
					SetValue($Wert2, (ord($Datenpaket[$x+1])*0x100 + ord($Datenpaket[$x+2])-400)/10);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 3) //Temp Taupunkt
					{					
					SetValue($Wert3, (ord($Datenpaket[$x+1])*0x100 +ord($Datenpaket[$x+2])-400)/10);	
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 4) //gefühlte Temp
					{					
					SetValue($Wert4, (ord($Datenpaket[$x+1])*0x100 +ord($Datenpaket[$x+2])-400)/10);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 5) //Hitzeindex
					{					
					SetValue($Wert5, (ord($Datenpaket[$x+1])*0x100 +ord($Datenpaket[$x+2])-400)/10);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 6) //rel. Feuchte innen
					{					
					SetValue($Wert6, ord($Datenpaket[$x+1]));
					$x = $x + $BytePosition;
					};
					If ($Sensor == 7) //rel. Feuchte aussen
					{					
					SetValue($Wert7, ord($Datenpaket[$x+1]));
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 8) //Absoluter Luftdruck
					{					
					SetValue($Wert8, (ord($Datenpaket[$x+1])*0x100 +ord($Datenpaket[$x+2]))/10);
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 9) //relativer Luftdruck
					{					
					SetValue($Wert9, (ord($Datenpaket[$x+1])*0x100 +ord($Datenpaket[$x+2]))/10);
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 10) //Windrichtung
					{					
					SetValue($Wert10, ord($Datenpaket[$x+1])*0x100 +ord($Datenpaket[$x+2]));
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 11) //Windgeschwindigkeit m/s
					{					
					SetValue($Wert11, (ord($Datenpaket[$x+1])*0x100 +ord($Datenpaket[$x+2]))/10);
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 12) //Windboen m/s
					{					
					SetValue($Wert12, (ord($Datenpaket[$x+1])*0x100 +ord($Datenpaket[$x+2]))/10);
				    $x = $x + $BytePosition;					
					};
					If ($Sensor == 13) //Regen aktuell
					{					
					SetValue($Wert13, (ord($Datenpaket[$x+1])*0x1000000+ord($Datenpaket[$x+2])*0x10000 +ord($Datenpaket[$x+3])*0x100 +ord($Datenpaket[$x+4]))/10);				
					$x = $x + $BytePosition;					
					};
					If ($Sensor == 14) //Regen Stunde
					{					
					SetValue($Wert14, (ord($Datenpaket[$x+1])*0x1000000+ord($Datenpaket[$x+2])*0x10000 +ord($Datenpaket[$x+3])*0x100 +ord($Datenpaket[$x+4]))/10);				
					$x = $x + $BytePosition;
					};
					If ($Sensor == 15) //Regen auf eine Stunde hochgerechnet 10min * 6
					{					
					SetValue($Wert15, ((ord($Datenpaket[$x+1])*0x1000000+ord($Datenpaket[$x+2])*0x10000 +ord($Datenpaket[$x+3])*0x100 +ord($Datenpaket[$x+4]))/10)*6);							
					$x = $x + $BytePosition;
					};
					If ($Sensor == 16) //Regen tag
					{					
					SetValue($Wert16, (ord($Datenpaket[$x+1])*0x1000000+ord($Datenpaket[$x+2])*0x10000 +ord($Datenpaket[$x+3])*0x100 +ord($Datenpaket[$x+4]))/10);				
					$x = $x + $BytePosition;
					};
					If ($Sensor == 17) //Regen Woche
					{					
					SetValue($Wert17, (ord($Datenpaket[$x+1])*0x1000000+ord($Datenpaket[$x+2])*0x10000 +ord($Datenpaket[$x+3])*0x100 +ord($Datenpaket[$x+4]))/10);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 18) //Regen Monat
					{					
					SetValue($Wert18, (ord($Datenpaket[$x+1])*0x1000000+ord($Datenpaket[$x+2])*0x10000 +ord($Datenpaket[$x+3])*0x100 +ord($Datenpaket[$x+4]))/10);				
					$x = $x + $BytePosition;
					};
					
					//Sensor 19 Fehlt
					
					If ($Sensor == 20) //Regen gesamt
					{					
					SetValue($Wert20, (ord($Datenpaket[$x+1])*0x1000000+ord($Datenpaket[$x+2])*0x10000 +ord($Datenpaket[$x+3])*0x100 +ord($Datenpaket[$x+4]))/10);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 21) //Lichtsensor kLux
					{					
					SetValue($Wert21, (ord($Datenpaket[$x+1])*0x1000000+ord($Datenpaket[$x+2])*0x10000 +ord($Datenpaket[$x+3])*0x100 +ord($Datenpaket[$x+4]))/10000);
					$x = $x + $BytePosition;
					};
					If ($Sensor == 22) //?? Sonneneinstrahlung W/m2
					{
					SetValue($Wert22, (ord($Datenpaket[$x+1])*0x100 +ord($Datenpaket[$x+2])));
					$x = $x + $BytePosition;
					};
					If ($Sensor == 23) //UV Index
					{					
					SetValue($Wert23, ord($Datenpaket[$x+1]));
					$x = $x + $BytePosition;
					};
					If ($Sensor == 24) //Datum 
					{					
					SetValue($Wert24a, ord($Datenpaket[$x+3]).".".ord($Datenpaket[$x+2]).".".ord($Datenpaket[$x+1]));
					SetValue($Wert24b, ord($Datenpaket[$x+4]).":".ord($Datenpaket[$x+5]).":".ord($Datenpaket[$x+6]));
					$x = $x + $BytePosition;
					};    
					If ($Sensor == 25) //Windgeschwindigkeit Tagesspitze
					{					
					SetValue($Wert25 , (ord($Datenpaket[$x+1])*0x100 +ord($Datenpaket[$x+2]))/10);
					$x = $x + $BytePosition;
					};
		}
	}			
}								
														
	
	
		
?>



und „Client Überwachung“


<?

define('Intervall', '60');


if($_IPS['SENDER'] == "TimerEvent")

{	
	//Zeit abgelaufen Überprüfen der letzten Aktualisierung/Änderung einer Variable 

	$Variablen_ID = 37181 /*[Client Socket wetter WLAN\RegVar Wetterdaten WLan\Wetterscript WLAN\Sync]*/;   
	$Variable_Daten = IPS_GetVariable($Variablen_ID); 

	$Delta = time()-($Variable_Daten['VariableUpdated']); // Letzte Variablenaktualisierung 
	
	//echo "DELTA seit letzter Aktualisierung: ".$Delta."
"; 

		if ($Delta > 30) 
		{  	// Variable wurde vor über 30 Sekunden zuletzt aktualisiert 
			//Client neu verbinden	
			$socket_id = IPS_GetInstance(27728 /*[Client Socket wetter WLAN]*/);
			$IOinstanz = 27728 /*[Client Socket wetter WLAN]*/;
		
			
		    echo "FEHLER - Socket nicht verbunden!";
		    IPS_SetProperty($IOinstanz, "Open", false);
		    IPS_ApplyChanges($IOinstanz); //Neue Konfiguration übernehmen
		    IPS_Sleep(1000);
		    IPS_SetProperty($IOinstanz, "Open", true);
		    IPS_ApplyChanges($IOinstanz); //Neue Konfiguration übernehmen
		 
			
		}
		
		//Timer nur neustarten
		IPS_SetScriptTimer($_IPS['SELF'], Intervall);
		 echo "Client Wetter Timer neu gestartet" , "
" ;
			
		
} 
else 
{

    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], Intervall);
	
	
}


?>

N’abend,

heute kam meine Wetterstation WS980WiFi von ELV an. Das Ding ins WLAN zu bekommen war etwas Tricky, aber nachdem man die richtigen Tasten am Monitor (WLAN Mode A) betätigt hat und die Fritzbox auf dem 5GHz-Netz zum schweigen gebracht hat ging es ganz schnell :wink:

Ich habe keinen Cloud-Dienst aktiviert bzw. registriert. Auf Port 46000 (UDP) findet man die Station und auf Port 45000 (TCP) kann man die Daten direkt abholen :wink: Keinen Umweg über WU usw.

Das Script ist gerade fertig geworden und geht über Nacht in die Testphase. Leider habe ich es nicht geschafft die Daten via ClientSocket usw. in IPS zu bekommen. Mache das derzeit schön zu Fuß per PHP_Socket-Befehle :confused:

Wer das Script haben möchte, morgen hier vorbeischauen - oder soll ich einen neues Thema auf machen?

Gute Nacht
Heiko

Dies Thema ist schon ziemlich voll und unübersichtlich. Ich denke niemand wird dir böse sein wenn du für deine Lösung einen neuen Thread im passenden Bereich auf machst. Du kannst den dann gerne hier verlinken, dass ihn auch wirklich jeder findet. Die community lebt ja nicht nur von Lösungen, sondern auch davon sie zu finden :wink:

Gruß,

Toni

Danke Toni, hatte ich mir schon gedacht - und gleich so umgesetzt :smiley:

Hier der Link https://www.symcon.de/forum/threads/40349-Wetterstation-WS980WiFi-von-ELV

Gruß Heiko

Hatt schon jemand von Euch mit der neuen Firmware 1.3.2 rumgespielt? Diese kann z.B. mit WS View hochgeladen werden. Es steht dann eine Custom Upload Funktion zur Verfügung, hier kann man einen Server eintragen, in dem Fall auch IP-Symcon.

Ich hab das mal getestet. Firmware laesst sich installieren. App muss aktualisiert werden.
Custom Upload Daten lassen sich eintragen. Im Moment seh ich noch keine Daten ueber Wireshark.

Hallo,

was hast du in der App und in IP-Symcon eingestellt.

VG

Andreas

In IP-Symcon hab ich bis jetzt noch nichts getan.
In der APP hab ich beide Protocoltypen probiert.
IP-Adresse von dem PC auf dem Wireshark laeuft.

Hallo,

mit Wireshark habe ich auch nichts feststellen können. Die Station sendet scheinbar nichts automatisch auch wenn ich als Intervall 10 sec eingestellt habe.

VG

Andreas

Ich kann gar keine 10 sec einstellen. Fehlermeldung. Bereich bei mir von 16-600.

Hallo,

Tippfehler 20 sec. eingestellt:rolleyes:

Andreas