Angeregt durch diesen Beitrag habe ich mich noch etwas weiter mit der Integration vom WIFFI-WZin IPS beschäftigt.
Ich hatte regen, sehr aufgeschlossenen und netten Kontakt mit Eugen :). Er hat einige Änderungen an der Firmware vorgenommen und stellt mit der heute veröffentlichten Version 53 ein JSON mit allen Daten zur Verfügung. Dieses JSON wird direkt an IPS geschickt und kann dort wie folgt verarbeitet werden.
Zum Empfangen der Daten muss eine Serversocket I/O Instanz angelegt werden
Danach wird ein Cutter angelegt, der die Daten vom Serversocket erhält und sie bei 03 (hex) aufteilt
Und dann noch eine Registervariable, die das Script von unten als Ziel bekommt
<?
$debug = true;
$vartype = array(
'string' => '3',
'number' => '2',
'boolean' => '0'
);
$data = trim($_IPS['VALUE']);
$data_object = json_decode($data, true);
//echo "---
";
//print_r($data_object);
//echo "---
";
$ident = str_replace(':','',$data_object['Systeminfo']['MAC-Adresse']);
foreach ($data_object['Systeminfo'] as $key => $value) {
SetValue(CreateVariableByIdent( CreateDummyModulByIdent($_IPS['SELF'], "wiffi_".$ident), $ident."_".str_replace('-','_',$key), $key, $vartype['string']), $value);
}
foreach ($data_object['vars'] as $array) {
SetValue(CreateVariableByIdent(CreateDummyModulByIdent($_IPS['SELF'], "wiffi_".$ident), $ident."_".$array['name'], $array['homematic_name'], $vartype[$array['type']]), $array['value']);
}
return(0);
function CreateVariableByIdent($id, $ident, $name, $type)
{
$vid = @IPS_GetObjectIDByIdent($ident, $id);
if($vid === false) {
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetIdent($vid, $ident);
}
return $vid;
}
function CreateDummyModulByIdent($id, $ident)
{
$id = IPS_GetParent($id);
$vid = @IPS_GetObjectIDByIdent($ident, $id);
if($vid === false) {
$InsID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
IPS_SetName($InsID, $ident); // Instanz mit Default Name benennen
IPS_SetIdent($InsID, $ident);
IPS_SetParent($InsID, IPS_GetParent($_IPS['SELF']));
}
return $vid;
}
?>
Damit der WIFFI-WZ das JSON auch sendet, muss Parameter 27 auf 1 gestellt werden oder mit folgendem Script gleich noch weitere Parameter gesetzt werden. Die IP im Script entsprechend auf euren WIFFI anpassen.
<?
ini_set(max_execution_time, 180); // Sekunden Laufzeit
$ip = '172.16.100.34';
$array = array(
'param:27:1:', // 1 für JSON Daten
'param:13:55:', // Eigene Ortshoehe
'param:20:524:', // Breitenengrad des eigenen Standortes in 0.1°
'param:21:98:' // Laengengrad des eigenen Standortes in 0.1°
);
foreach($array as $entry) {
file_get_contents('http://'.$ip.'/?'.$entry);
IPS_Sleep(10*1000);
}
?>
Das Ergebnis sind dann folgende Werte, die inklusive der Dummy Instanz und jeweiligem eindeutigen Ident automatisch angelegt werden.
Das Dummy Modul wird parallel zum Script angelegt und kann natürlich umbenannt werden, da die Variablen jeweils per Ident angesprochen werden.
Die Messwerte werden bei entsprechend großer Änderung gesendet bzw. auch nach Mindestzeitabständen. Die Bewegungsmelder und Noise senden sofort, womit auch entsprechende Beleuchtungssteuerung oder Ähnliches möglich ist.
Zu Signalisierung kann der Buzzer mit angesteuert werden und piept dann z.B. dreimal.
file_get_contents('http://172.16.100.21/?buzzer:3:');
Der WIFFI ist bei mir einige Wochen zum Testen im Bad gelaufen, die Werte sind sehr stabil und gut vergleichbar mit meinen LCN Daten bzw. einem „Schätzeisen für Temperatur und Feuchte“.
Um eventuell auftretende Ausreißer beim Neustart zu unterbinden werden die Werte ab Version 53 erst nach 60 Sekunden geschickt, damit sich alle Sensoren wieder eingependelt haben.
Sollte reges Interesse am WIFFI-WZ und seiner Integration in IPS bestehen, könnte ich daraus auch ein Modul erstellen .