Eltako(EnOcean) Multisensor MS mit FWS61

Solange es noch kein Modul dafür gibt, behelfe ich mir mit folgendem Script.

<?
if($_IPS['SENDER']  == "RegisterVariable")
{
    $str = str_split(Str2Hex($_IPS['VALUE']), 2);
    
    if($str[0] == "00" && $str[1] == "00" && $str[2] == "FF" && $str[3] == "1A") //Funktionsüberwachung
    {
       SetValue(47701 /*[Eltako Enocean\Multisensor\Funktionsüberwachung]*/, "Funktionsstörung/Leitungsbruch");
       return;
    }
    SetValue(47701 /*[Eltako Enocean\Multisensor\Funktionsüberwachung]*/, "OK");
    
    if($str[3] == "28") // Telegrammteil 2
    {
       SetValue(54891 /*[Eltako Enocean\Multisensor\Sonnenwert West]*/, hexdec($str[0])*150/255); // 0-150 kLux
       SetValue(53922 /*[Eltako Enocean\Multisensor\Sonnenwert Süd]*/, hexdec($str[1])*150/255); // 0-150 kLux
       SetValue(19868 /*[Eltako Enocean\Multisensor\Sonnenwert Ost]*/, hexdec($str[2])*150/255); // 0-150 kLux
    }
    else // Telegrammteil 1
    {
       SetValue(52246 /*[Eltako Enocean\Multisensor\Dämmerung]*/, hexdec($str[0])*1000/255); // 0-1000 Lux
       
       $temp = hexdec($str[1])*120/255; // Temperatur -40°C - +80°C
       SetValue(45979 /*[Eltako Enocean\Multisensor\Temperatur]*/, $temp - 40);
        
        
       SetValue(28785 /*[Eltako Enocean\Multisensor\Windgeschwindigkeit]*/, hexdec($str[2])*70/255*3.6); // Windgeschwindigkeit in km/h
       
       if($str[3] == "1A") // Regen
       {
           SetValue(19844 /*[Eltako Enocean\Multisensor\Regensensor]*/, true);
         }
      if($str[3] == "18") // kein Regen
      {
           SetValue(19844 /*[Eltako Enocean\Multisensor\Regensensor]*/, false);
         }
    }
}


function Str2Hex($daten)
{
    $Hex = "";
     for($i=0; $i<strlen($daten); $i++)
   $Hex .= sprintf("%02X", ord($daten[$i]));
     return $Hex;
}

?>

Das ist für mich mal wieder ein „wow das geht“ Beitrag :slight_smile:

Bedeutet das, dass ich theoretisch alle bisher nicht unterstützen Enocean Komponenten auf diese Weise auslesen kann?


I am here: http://tapatalk.com/map.php?wovsww

Theoretisch ja. wenn du aber über PHP pollen musst, ist das nicht so toll. Da ist ein Modul wesentlich besser.

Beim Multisensor ist das aber kein Problem.

Schönes Script, in der Tat kann man damit ohne eine von IPS spezifisch für ein ELTAKO Gerät entwickelte Instanz ein solches ansteuern. ELTAKO hat ja die Schnittstelle gut dokumentiert und wenn man die HEX Befehle kennt müsste die Steuerung mit dem Script funktionieren. Gefällt mir, wieder etwas wo ich was lernen kann :slight_smile:

hallo - wie komme ich denn an die Adresse ran, die ich im Cutter-Splitter eintragen muss?

Ah - habs rausgefunden. Für alle die es nicht wissen:

In EnOcean Splitter öffnen, Debugging starten und direkt danach den FWS mit Strom versorgen. Die nächsten 2 Telegramme kommen vom FWS. die ersten Zeichen sind identisch (zumindest war es das bei mir) Parse Buffer und die letzten (Parse Data) endeten mit einer anderen Kennung.

wenn das so gut funktioniert dann hol ich mir das ding auch,
so kann ich unter anderem endlich meinen FAH63 ablösen, der treibt mich noch zum Wahnsinn.
Super Script wenn das funzt übrigens.

Hi zusammen,
hab den Sensor jetzt verkabelt und angeschlossen, sieht soweit gut aus, nur mit den Cutter Daten (Rechte Trennzeichen)
komm ich nicht klar.
Kann mir einer sagen welche ich übernehmen soll ?

16.02.2013 12:14:20.00 | Parse Buffer | 55 00 0A
16.02.2013 12:14:20.00 | Chunk Incomplete |
16.02.2013 12:14:20.00 | Parse Buffer | 55 00 0A 07 01 EB A5 7E 00 00 0F 01 03 70 69 00 01 FF FF FF FF 59 00 67
16.02.2013 12:14:20.00 | Parse Data: 01 | A5 7E 00 00 0F 01 03 70 69 00
16.02.2013 12:14:20.00 | Parse Data (Opt) | 01 FF FF FF FF 59 00
16.02.2013 12:14:43.00 | Transmitted | 55 00 01 00 05 70 08 38
16.02.2013 12:14:43.00 | Parse Buffer | 55 00 05 01 02 DB
16.02.2013 12:14:43.00 | Chunk Incomplete |
16.02.2013 12:14:43.00 | Parse Buffer | 55 00 05 01 02 DB 00 FF F7 62 00 0A 7D
16.02.2013 12:14:43.00 | Parse Data: 02 | 00 FF F7 62 00
16.02.2013 12:14:43.00 | Parse Data (Opt) | 0A
16.02.2013 12:14:43.00 | Received | 00 FF F7 62 00
16.02.2013 12:14:45.00 | Parse Buffer | 55
16.02.2013 12:14:45.00 | Chunk Incomplete |
16.02.2013 12:14:45.00 | Parse Buffer | 55 00 0A 07 01 EB A5 93 36 00 0F 00 83 80 CB 00 01 FF FF FF FF 4D 00 ED
16.02.2013 12:14:45.00 | Parse Data: 01 | A5 93 36 00 0F 00 83 80 CB 00
16.02.2013 12:14:45.00 | Parse Data (Opt) | 01 FF FF FF FF 4D 00
16.02.2013 12:15:43.00 | Transmitted | 55 00 01 00 05 70 08 38
16.02.2013 12:15:43.00 | Parse Buffer | 55 00
16.02.2013 12:15:43.00 | Chunk Incomplete |
16.02.2013 12:15:43.00 | Parse Buffer | 55 00 05 01 02 DB 00 FF F7 62 00 0A 7D
16.02.2013 12:15:43.00 | Parse Data: 02 | 00 FF F7 62 00
16.02.2013 12:15:43.00 | Parse Data (Opt) | 0A
16.02.2013 12:15:43.00 | Received | 00 FF F7 62 00
16.02.2013 12:15:59.00 | Parse Buffer | 55 00 0A 07 01
16.02.2013 12:15:59.00 | Chunk Incomplete |
16.02.2013 12:15:59.00 | Parse Buffer | 55 00 0A 07 01 EB A5 81 00 00 0F 01 03 70 69 00 01 FF FF FF FF 59 00 9E
16.02.2013 12:15:59.00 | Parse Data: 01 | A5 81 00 00 0F 01 03 70 69 00
16.02.2013 12:15:59.00 | Parse Data (Opt) | 01 FF FF FF FF 59 00
16.02.2013 12:16:23.00 | Parse Buffer | 55 00 0A 07 01
16.02.2013 12:16:23.00 | Chunk Incomplete |
16.02.2013 12:16:23.00 | Parse Buffer | 55 00 0A 07 01 EB A5 93 3B 00 0F 00 83 80 CB 00 01 FF FF FF FF 4D 00 31
16.02.2013 12:16:23.00 | Parse Data: 01 | A5 93 3B 00 0F 00 83 80 CB 00
16.02.2013 12:16:23.00 | Parse Data (Opt) | 01 FF FF FF FF 4D 00
16.02.2013 12:16:43.00 | Transmitted | 55 00 01 00 05 70 08 38
16.02.2013 12:16:43.00 | Parse Buffer | 55 00 05
16.02.2013 12:16:43.00 | Chunk Incomplete |
16.02.2013 12:16:43.00 | Parse Buffer | 55 00 05 01 02 DB 00 FF F7 62 00 0A 7D
16.02.2013 12:16:43.00 | Parse Data: 02 | 00 FF F7 62 00
16.02.2013 12:16:43.00 | Parse Data (Opt) | 0A
16.02.2013 12:16:43.00 | Received | 00 FF F7 62 00

Ab 2.6 gab es eine Änderung der Daten in IPS. Deswegen hab ich das Script geändert. Die Adresse kommt in rechte Trennzeichen, da ist im Cutterbild der Pfeil falsch. Linke Trennzeichen braucht man nicht mehr.

Die Änderung.

$data = substr($_IPS['VALUE'], -5, -1);
    //IPS_LogMessage($_IPS['SELF'], Str2Hex($data));
    
    $str = str_split(Str2Hex($data), 2);

Da meine Adresse eine führende Null hat lese ich nur 3 Byte aus.

Schreib bei dir die letzten 3 Byte rein und sieh ob es funktioniert, andernfalls, musst Du die Adresse komplett eingeben und substr anpassen.

Hi,
leider komm ich nicht klar die Werte bei mir stimmen garnicht,

hier noch mal der log vom ENOCEN Splitter nach direktem einschalten des Stroms.

16.02.2013 14:05:16.00 | Parse Buffer | 55 00 0A 07 01 EB
16.02.2013 14:05:16.00 | Chunk Incomplete |
16.02.2013 14:05:16.00 | Parse Buffer | 55 00 0A 07 01 EB A5 44 88 00 18 00 87 9E 5F 00 01 FF FF FF FF 49 00 AE
16.02.2013 14:05:16.00 | Parse Data: 01 | A5 44 88 00 18 00 87 9E 5F 00
16.02.2013 14:05:16.00 | Parse Data (Opt) | 01 FF FF FF FF 49 00
16.02.2013 14:05:21.00 | Parse Buffer | 55
16.02.2013 14:05:21.00 | Chunk Incomplete |
16.02.2013 14:05:21.00 | Parse Buffer | 55 00 0A 07 01 EB A5 4C 08 0D 80 00 87 9E 5F 00 01 FF FF FF FF 49 00 C8
16.02.2013 14:05:21.00 | Parse Data: 01 | A5 4C 08 0D 80 00 87 9E 5F 00
16.02.2013 14:05:21.00 | Parse Data (Opt) | 01 FF FF FF FF 49 00

was ist denn jetzt meine Adresse, bzw welche werte verwende ich am besten ??
Vielen Dank schon mal.
Den Eintrag im Script hab ich schon übernommen.
mfg

Wenn sonst keine Geräte mehr aktiv sind, diese

00 87 9E 5F

Danke hab jetzt die Adresse nach deinen Angaben geändert aber immer noch seltsame Werte.
Kannst du mal prüfen ob ich das Skript richtig geändert habe.


if($_IPS['SENDER']  == "RegisterVariable")
{
    $data = substr($_IPS['VALUE'], -5, -1);
    //IPS_LogMessage($_IPS['SELF'], Str2Hex($data));

    $str = str_split(Str2Hex($data), 2);

    if($str[0] == "00" && $str[1] == "00" && $str[2] == "FF" && $str[3] == "1A") //Funktionsüberwachung
    {
       SetValue(46784 /*[Backend\Logische Instanzen\Scripte\WETTER\Multisensor FWS61\Multisensor FWS61\Funktionsüberwachung]*/, "Funktionsstörung/Leitungsbruch");
       return;
    }
    SetValue(46784 /*[Backend\Logische Instanzen\Scripte\WETTER\Multisensor FWS61\Multisensor FWS61\Funktionsüberwachung]*/, "OK");

    if($str[3] == "28") // Telegrammteil 2
    {
       SetValue(16643 /*[Backend\Logische Instanzen\Scripte\WETTER\Multisensor FWS61\Multisensor FWS61\Sonnenwert West]*/, hexdec($str[0])*150/255); // 0-150 kLux
       SetValue(15148 /*[Backend\Logische Instanzen\Scripte\WETTER\Multisensor FWS61\Multisensor FWS61\Sonnenwert Süd]*/, hexdec($str[1])*150/255); // 0-150 kLux
       SetValue(32762 /*[Backend\Logische Instanzen\Scripte\WETTER\Multisensor FWS61\Multisensor FWS61\Sonnenwert Ost]*/, hexdec($str[2])*150/255); // 0-150 kLux
    }
    else // Telegrammteil 1
    {
       SetValue(30906 /*[Backend\Logische Instanzen\Scripte\WETTER\Multisensor FWS61\Multisensor FWS61\Dämmerung]*/, hexdec($str[0])*1000/255); // 0-1000 Lux

       $temp = hexdec($str[1])*120/255; // Temperatur -40°C - +80°C
       SetValue(42798 /*[Backend\Logische Instanzen\Scripte\WETTER\Multisensor FWS61\Multisensor FWS61\Temperatur]*/, $temp - 40);


       SetValue(46817 /*[Backend\Logische Instanzen\Scripte\WETTER\Multisensor FWS61\Multisensor FWS61\Windgeschwindigkeit]*/, hexdec($str[2])*70/255*3.6); // Windgeschwindigkeit in km/h

       if($str[3] == "1A") // Regen
       {
           SetValue(13364 /*[Backend\Logische Instanzen\Scripte\WETTER\Multisensor FWS61\Multisensor FWS61\Regensensor]*/, true);
         }
      if($str[3] == "18") // kein Regen
      {
           SetValue(13364 /*[Backend\Logische Instanzen\Scripte\WETTER\Multisensor FWS61\Multisensor FWS61\Regensensor]*/, false);
         }
    }
}


function Str2Hex($daten)
{
    $Hex = "";
     for($i=0; $i<strlen($daten); $i++)
   $Hex .= sprintf("%02X", ord($daten[$i]));
     return $Hex;
}

ja, das passt. Hast Du die 00 bei der Adresse im Cutter weggelassen.

Ansonsten häng mal einen Dump aus der Registervariable an.

hab ich gerade noch ausprobiert,
jetzt siehts besser aus, Temp Wind Dämmerung Regen und Funktion passen.
Die 3 Sonnenwerte da tut sich nix werden auch nicht aktualisiert.

Kleine Nebenfrage werden bei dir die Heizelemente für den Regensensor auch ziemlich heiß ???

Die 3 Sonnenwerte da tut sich nix werden auch nicht aktualisiert.

Das dauert max 10 min.

Kleine Nebenfrage werden bei dir die Heizelemente für den Regensensor auch ziemlich heiß ???

Warm werden sie aber gemessen hab ich noch nicht.

komisch jetzt hat er s doch mal mit aktualisiert, scheint zu klappen.
Danke für den spitzen support.

hab meine Hand mal drangehalten aber nach paar Sekunden sollte man sie lieber wegnehmen sonst wirds unangenem.
mit freundlichen Grüßen

komisch jetzt hat er s doch mal mit aktualisiert, scheint zu klappen.

Du solltest dir die Anleitung mal richtig durchlesen, dort stehen die Aktualisierungszeiten drinnen. :wink:

danke nochmal. Bin begeistert von dem Zauberkasten.

Kurze Frage, ich habe heute meinen Multisensor MS erhalten. An der Unterseite vorne an der Spitze sieht es so aus, als ob eine Abdeckung fehlt. Man siehr einen Sensor im Freien und rechts und links daneben sind Schlitze, die so aussehen, als ob sie eine Abdeckung halten sollen. Kann mir jemand sagen, ob das so richtiog ist, oder ob die bdeckung fehlt?

Gruß

th3elk

Hallo zusammen,
erstmal vorab ich bin ein IP Symcon Neuling und habe nicht allzu viel Ahnung von der ganzen Materie :confused:
Ich habe mithilfe dieses Threads versucht den Multisensor in Ip symcon einzubinden aber das hat nur halbwegs funktioniert^^

Ich habe folgende Probleme: Weder der Regensensor noch die 3 Helligkeitswerte scheinen anzukommen
(siehe Bild Objektbaum) der FWS eingebunden als STM100 Instanz zeigt mir jedoch einen Wert für den Regensensor an.

Ich bin mir absolut nicht sicher was ich als Adresse in den Cutter eintragen muss und außerdem ob bei mir im Skript die Zeile $data = substr($_IPS[‚VALUE‘], -4, -1); dann stimmt. ( immerhin scheinen so Temperatur,Wind,Dämmerung richtig zu laufen)

Das Bild Enocean Gateway zeigt die Empfangenen Daten nach dem Strom einschalten.
Zur Verbindung zum PC nutze ich ein FAM-USB Funk Antennenmodul von Eltako.

Vielleicht kann mir ja jemand sagen welche Adresse ich in den Cutter eintragen muss oder ob ich sonst einen offensichtlichen Fehler gemacht habe, würde mich freuen :slight_smile:

Grüße
Quasar

PS: hier noch mein Auswertungs Skript

<?
if($_IPS['SENDER']  == "RegisterVariable")
{
      $data = substr($_IPS['VALUE'], -4, -1);
    //IPS_LogMessage($_IPS['SELF'], Str2Hex($data));

    $str = str_split(Str2Hex($data), 2);

    if($str[0] == "00" && $str[1] == "00" && $str[2] == "FF" && $str[3] == "1A") //Funktionsüberwachung
    {
       SetValue(27320 /*[Belz\Wetterstation\Multisensor\Funktionsüberwachung]*/, "Funktionsstörung/Leitungsbruch");
       return;
    }
    SetValue(27320 /*[Belz\Wetterstation\Multisensor\Funktionsüberwachung]*/, "OK");

    if($str[3] == "28") // Telegrammteil 2
    {
       SetValue(17211 /*[Objekt #17211 existiert nicht]*/, hexdec($str[0])*150/255); // 0-150 kLux
       SetValue(18009 /*[Belz\Wetterstation\Multisensor\Sonnenwert Süd]*/, hexdec($str[1])*150/255); // 0-150 kLux
       SetValue(56888 /*[Belz\Wetterstation\Multisensor\Sonnenwert West]*/, hexdec($str[2])*150/255); // 0-150 kLux
    }
    else // Telegrammteil 1
    {
       SetValue(28196 /*[Belz\Wetterstation\Multisensor\Dämmerung]*/, hexdec($str[0])*1000/255); // 0-1000 Lux

       $temp = hexdec($str[1])*120/255; // Temperatur -40°C - +80°C
       SetValue(37979 /*[Belz\Wetterstation\Multisensor\Temperatur]*/, $temp - 40);


       SetValue(14824 /*[Belz\Wetterstation\Multisensor\Windgeschwindigkeit]*/, hexdec($str[2])*70/255*3.6); // Windgeschwindigkeit in km/h

       if($str[3] == "1A") // Regen
       {
           SetValue(57815 /*[Belz\Wetterstation\Multisensor\Regensensor]*/, true);
         }
      if($str[3] == "18") // kein Regen
      {
           SetValue(57815 /*[Belz\Wetterstation\Multisensor\Regensensor]*/, false);
         }
    }
}


function Str2Hex($daten)
{
    $Hex = "";
     for($i=0; $i<strlen($daten); $i++)
   $Hex .= sprintf("%02X", ord($daten[$i]));
     return $Hex;
}
?>
```php

![Cutter Multisensor.png|701x512](upload://r7jO70AmBPQ184ivgtR3pVABMRE.png)



![Enocean Gateway.png|921x552](upload://bwZsRVyrb3VK2IpuyMGQvYlbLom.png)



![Objektbaum.png|1011x447](upload://ssgKk3e3MI5xtzrh6mFNpNcHpwF.png)



![Register Variable.png|997x511](upload://7rCs0I11oxHr9BC6feuuYh21eQW.png)