Seite 1 von 1

#1 Elsener Wetterstation am Raspberry, auf dem auch IPS läuft.

Verfasst: Mo 1. Mai 2017, 20:38
von Thomas
Hallo,
Lutz hat da ein RS485 Modul am Pi hängen, und da mal die Elsner Wetterstation dran gehängt.
Wir haben dann da gerade mal ein Skript auf Lutz seinem Rechner gebastelt, welches die Daten in IPS Var's bringt. Sieht gut aus.
@Lutz, bitte stelle das mal auch hier vor. ;)
lg Thomas

#2 Re: Elsener Wetterstation am Raspberry, auf dem auch IPS läuft.

Verfasst: Di 2. Mai 2017, 21:53
von Lutz
Dann versuche ich das mal.


Bei den PI muß man erst die Serielle Schnittstelle anstellen/einbinden.
Als Hardware habe ich die Erweiterungsplatine RS485 für den PI genommen, gibt es beim großen C.
Dann muß man in der Raspi-Config die Serielle Schnittstelle freigeben und zusätzlich noch in der cmdline.txt etwas laut Internet entfernen.

Aufpassen, welchen Raspi man hat. Der 3er hat noch Bluetooth auf dem Port :mad:

In IPS die Schnittstelle festlegen

Bild

Dann einen Cutter installieren. Wichtig hier die 57 und die 03, die das Start und Endbyte darstellen

Bild

Als nächstes muß man eine RegisterVariable anlegen, wo dann noch ein Skript hinterlegt ist.

Bild

Nach dem speichern und ausführen des Skriptes erscheinen die Variablen im Objektbaum

Bild

Die Elsner sendet ihr Werte jede Sekunde. Kann man auch er Platine sehen. Dort sollte die rot LED aufblinken

LG Lutz

#3 Re: Elsener Wetterstation am Raspberry, auf dem auch IPS läuft.

Verfasst: Mi 3. Mai 2017, 21:35
von Thomas
Hi Lutz,

und hänge hier bitte noch das PHP Skript rein, welches wir auf deinem Rechner erarbeit haben, dann könnten es alle nutzen :lol:

#4 Re: Elsener Wetterstation am Raspberry, auf dem auch IPS läuft.

Verfasst: Mi 3. Mai 2017, 22:04
von Lutz
Jepp

Code: Alles auswählen

// $inbuf ="+22.2112233N88811.1J??????????????1992";

$ModulID = IPS_GetParent($_IPS['SELF']);
if ($_IPS['SENDER'] == "RegisterVariable")
{
   $inbuf  = RegVar_GetBuffer($_IPS['INSTANCE']);
   $inbuf .= $_IPS['VALUE'];
   // var_dump ($inbuf);
   
   setvalue(11111, $inbuf);
   $temp = substr($inbuf,0,5);
   // var_dump($temp);
    $id = CreateVariableByName($ModulID, 'Temperatur', 2);
   setvalue($id, $temp);

   $tageslicht = substr($inbuf,12,3);
    $id = CreateVariableByName($ModulID, 'Tageslicht', 1);
   setvalue($id , $tageslicht);

   $ksüd = substr($inbuf,5,2);
    $id = CreateVariableByName($ModulID, 'kLux Süd', 1);
   setvalue($id , $ksüd);

   $ksüd = substr($inbuf,7,2);
    $id = CreateVariableByName($ModulID, 'lKux West', 1);
   setvalue($id , $ksüd);

   $ksüd = substr($inbuf,9,2);
    $id = CreateVariableByName($ModulID, 'kLux Ost', 1);
   setvalue($id, $ksüd);
   
   $wind = floatval(substr($inbuf,15,4));
    $id = CreateVariableByName($ModulID, 'Wind', 2);
   setvalue($id, $wind);

   $regen = substr($inbuf,11,1);
//      var_dump($regen);
    $id = CreateVariableByName($ModulID, 'Dämmerung', 0);
   switch($regen){
      case "J":
         setvalueboolean($id, 1);   
      break;
      case "N":
         setvalueboolean($id , 0);   
      break;
   
   }
   
   $regen = substr($inbuf,19,1);
//      var_dump($regen);
    $id = CreateVariableByName($ModulID, 'Regen', 0);
   switch($regen){
      case "J":
         setvalueboolean($id, 1);   
      break;
      case "N":
         setvalueboolean($id , 0);   
      break;
   
   }
}

function CreateVariableByName($id, $name, $type)
{
   $vid = @IPS_GetVariableIDByName($name, $id);
   if($vid===false) {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
   }
   return $vid;

}
?>