WIFFI-WZ ohne CCU betreiben

Hallo zusammen,

ich weiß ja nicht ob jemand hier im Forum diesen Sensorwürfel kenn? --> Der WIFFI-WZ 2.0 … der Wohnzimmersensor | STALL
Der kommuniziert per WLAN mit der Homematic CCU und schreibt da seine Werte in die Variablen.
Soweit funktioniert das auch mit CCU in der Testumgebung. Normal im Einsatz habe ich allerdings einen Win-Rechner mit HM Lan-Adapter und dann noch einen Raspi mit HM-Modul und Homegear. In beiden Fällen fehlt mir also die CCU-Funktionalität (und damit auch die Variablen).

Ich hab in IPS mal einfach einen Server-Socket erstellt und geschaut was der Wiffi so sendet und das schaut dann folgendermaßen aus:

So… und nun schnippel ich mir recht unelegant die ankommenden Daten raus und verteil sie auf die Variablen:

<?

$data = trim($_IPS['VALUE']);

$data = str_replace('GET /xy.exe?antwort=dom.GetObject("',"",$data);
$data = str_replace('").State(',"#",$data);
$data = str_replace(')',"",$data);
$data_array=explode("#",$data);
					
if ($data_array[0]=="wz_motion_left") {setvalue(53684 /*[Sensoren/Aktoren\Wiffi\wz_motion_left]*/,$data_array[1]);};
if ($data_array[0]=="wz_baro") {setvalue(22790 /*[Sensoren/Aktoren\Wiffi\wz_baro]*/,$data_array[1]);};
if ($data_array[0]=="wz_luftdrucktrend") {setvalue(21746 /*[Sensoren/Aktoren\Wiffi\wz_luftdrucktrend]*/,$data_array[1]);};
if ($data_array[0]=="wz_elevation") {setvalue(53346 /*[Sensoren/Aktoren\Wiffi\wz_elevation]*/,$data_array[1]);};
if ($data_array[0]=="wz_lux") {setvalue(30152 /*[Sensoren/Aktoren\Wiffi\wz_lux]*/,$data_array[1]);};
if ($data_array[0]=="wz_azimut") {setvalue(34973 /*[Sensoren/Aktoren\Wiffi\wz_azimut]*/,$data_array[1]);};
if ($data_array[0]=="wz_noise") {setvalue(55523 /*[Sensoren/Aktoren\Wiffi\wz_noise]*/,$data_array[1]);};	
if ($data_array[0]=="wz_motion_right") {setvalue(33634 /*[Sensoren/Aktoren\Wiffi\wz_motion_right]*/,$data_array[1]);};
if ($data_array[0]=="wz_temp") {setvalue(24414 /*[Sensoren/Aktoren\Wiffi\wz_temp]*/,$data_array[1]);};
if ($data_array[0]=="wz_feuchte") {setvalue(16421 /*[Sensoren/Aktoren\Wiffi\wz_feuchte]*/,$data_array[1]);};			
if ($data_array[0]=="wz_co2") {setvalue(17909 /*[Sensoren/Aktoren\Wiffi\wz_co2]*/,$data_array[1]);};		
?>

Wenn das Teil jeman im Einsatz hat und eine bessere Lösung hat, bitte mal melden;)

Für die Deckenmontage gibt’s was ähnliches auf 1-Wire und ESP8266 Basis:

http://blog.thomasheldt.de/1-wire-baldachin-multi-sensor/

Unter „Software“ ist ein Beispiel für die Arduino IDE aufgeführt…

Das könnte man vielleicht als DENKANSTOSS verwenden.
http://blog.thomasheldt.de/1-wire-testsoftware-fuer-arduino/

Hallo Brausepaul,

ich bin selber stolzer Besitzer des Wiffi_WZ. und dachte mir gerade:„Mensch, tolle Idee, probiere ich doch auch mal.“

Nur hab ich da ein kleines Problem: Ich habe, wie Du ein Server Socket installiert und den Port 8181 eingestellt. Nur kriege ich leider keinerlei Daten von meinem kleinen Würfel. Hast Du da noch was Anderes eingestellt?

Viele Grüße und schonmal vielen Dank.

Burkhard

Hallo Burkhard,

also viel ist da eigentlich nicht eingestellt. Unter Windows hab ich die Firewall für die IP+Port des Wiffi aufgemacht und dem Wiffi natürlich als CCU meinen Win-Rechner angegeben. Der Wiffi zeigt dann „connected“ an sobald der Port offen ist (er prüft also nicht ob da wirklich ne CCU ist). Im Server-Socket unter Debug sollten dann die Daten zu sehen sein.

Das Teil stell ich erstmal in die Gästetoilette und schau ob der Luftgütesensor brauchbare Daten liefert :p. Wenn der wirklich zu gebrauchen ist könnte ich mir vorstellen wirklich darüber die Belüftungsanlage zu steuern …aber zur Zeit ist das alles noch Spielwiese:rolleyes:.

Hallo Brausepaul,

die Einstellungen decken sich mit meinen. Habe auf dem Raspi keine Firewall und YAHM+Symcon installiert. Kommen trotzdem keine Daten an.

Da ich aber YAHM als CCU-Ersatz eh dauerhaft zu laufen habe, hab ich einfach die Systemvariablen in Symcon mittels des Homematic Extended Modul anlegen lassen. Und siehe da, es läuft. :smiley:

Viele Grüße,

Burkhard

Hallo Brausepaul,

sehr interessante Sache.

Ich habe zwar im Moment keinen Wiffi, aber den Homeduino in Betrieb.
Um deine Vorgehensweise zu Testen, habe ich mal dafür wie du einen ServerSocket erstellt. Und siehe da, es komen Daten an. :smiley:

Um dies jetzt weiter verarbeiten zu können fehlt mir gerade der Ansatz. Woher weiß denn das Script, das es dieses ServerSocket auswerten soll?
Ich stehe gerade auf dem Schlauch. :confused:

Hallo Thomas …

Ich habe zwar im Moment keinen Wiffi, aber den Homeduino in Betrieb.
Um deine Vorgehensweise zu Testen, habe ich mal dafür wie du einen ServerSocket erstellt. Und siehe da, es komen Daten an. :smiley:

… Ich habe auch (drei) Homeduinos im Einsatz. Momentan läuft alles über die CCU mit dort angelegten Variablen.
Aber ich würde den Homeduino direkt ansprechen. Was hast Du genau eingestellt, damit Du die Anzeige erhältst?
Mit freundlichen Grüßen
Matthias

Hallo Matthias,

Aber ich würde den Homeduino direkt ansprechen.

du sprichst mit dieser Kommunikation nicht den Homedruino an, er spricht IPS an ;).

Du musst unter „I/O Instanzen“ einen „Server Socket“ anlegen, der auf den Port hört, den eigentlich die CCU hat. Das sollte 8181 sein.

Dann eine Registervariable anlegen, die als übergeordnete Instanz die gerade angelegt hat und als Ziel das Script von oben oder mit automatischer Anlage der Variablen mein Testscript:

<?

$debug = false;
$vartype = array(
	'wz_ip' => '3',
	'wz_co2' => '2',
	'wz_temp' => '2',
	'wz_feuchte' => '2',
	'wz_noise' => '0',
	'wz_luftdrucktrend' => '3',
	'wz_motion_left' => '0',
	'wz_motion_right' => '0',
	'wz_lux' => '2',
	'wz_baro' => '2',
	'wz_elevation' => '2',
	'wz_azimut' => '2'
);

$data = trim($_IPS['VALUE']);

$data = str_replace('GET /xy.exe?antwort=dom.GetObject("',"",$data);
$data = str_replace('").State(',"#",$data);
$data = str_replace(')',"",$data);
$data_array=explode("#",$data);

if ($debug)
	IPS_LogMessage(IPS_GetName($_IPS['SELF']), "wiffi: ".$data_array[0]." = ".str_replace('"','',$data_array[1]));

SetValue(CreateVariableByIdent($_IPS['SELF'], $data_array[0], $data_array[0], $vartype[$data_array[0]]), str_replace('"','',$data_array[1]));

return(0);


function CreateVariableByIdent($id, $ident, $name, $type)
{
	$id = IPS_GetParent($id);
	$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;
}

?> 

Da ich noch weitere Wiffi’s einsetzen möchte, werde ich wohl noch die Erzeugung von Unterkategorien mit einbauen, damit das etwas aufgeräumter aussieht.

Hallo MHerold,

ich mach das so wie von Ralf beschrieben. Aber lese den Homeduino momentan nur aus.
Leider funktioniert es noch nicht so, siehe nächster Post.
Wenn du noch Fragen hast dann her damit.

Hallo Zusammen,

leider funktioniert es noch nicht so wie es soll.

Ich habe die RegisterVariable, die Variablen und das Script erstellt.

In der Registervariable kommen auch die Werte zyklich an.

Leider liefert das Script nur immer eine Fehlermeldung.

Vielleicht kann mir jemand auf die Sprünge helfen.

Das Script als Ziel in der Registervariablen ;). Schau dir das Formular noch mal genau an.

Du kannst das Script zwar manuell ausführen, aber dann bekommst du den Fehler. Value ist beim Execute nicht gesetzt.

MfG
Ralf

Hallo Ralf,

das Script ist als Ziel in der RegisterVariablen eingetragen.

Aber es geht trotzdem nicht. :confused:
Mit dem Manuellen ausführen wollte ich eigentlich nur sehen, wo es klemmt.

Ich habe es auch schon mit deinem Script probiert, die Variablen werden angelegt, aber es erfolgt keine Übergabe der Werte in die Variablen.

Bau dir kurz ein

print_r($_IPS['VALUE'];

mit ein und prüfe, was du wirklich übermittelt bekommst.

Eventuell passt die Array Aufbereitung nicht richtig.

Hallo Ralf,

vielen Dank für den Tip. Hab ich gemacht, nur macht mich das Ergebnis auch nicht schlauer. :frowning:

Vor und nach VALUE müssen noch ’

Habe ich oben auch korrigiert und die Fehlermeldung ist doch sehr nett :), „assumed …“ sagt es auch.

MfG
Ralf

Jetzt wo du es schreibst, hätte ich auch selbst drauf kommen können :banghead::banghead:

Jetzt sieht das Ergebnis so aus:

Dein Code als Text wäre besser zu lesen, aber im Bild sind " in dem ankommenden Wert aber ’
Damit funktionieren die str_replace nicht.

Sorry, bin nur am Tablet, wenn du es nicht angepasst bekommst, ich bin nachher noch am Rechner ;).

MfG
Ralf

02.11.2016 20:02:24     Register Variable    GET /xy.exe?antwort=dom.GetObject('homeduino_heizung_D28').State(41.81)

Hallo Ralf,

das war es, vielen Dank für die Hilfe.
So funktioniert es jetzt bei mir.

<?

print_r($_IPS['VALUE']);
$data = trim($_IPS['VALUE']);

$data = str_replace('GET /xy.exe?antwort=dom.GetObject(\'',"",$data);
$data = str_replace('\').State(',"#",$data);
$data = str_replace(')',"",$data);
$data_array=explode("#",$data);

if ($data_array[0]=="homeduino_heizung_D29") {setvalue(45624 /*[Hardware\Homeduino\Heizung\Vorlauf]*/,$data_array[1]);};
if ($data_array[0]=="homeduino_heizung_D28") {setvalue(24886 /*[Hardware\Homeduino\Heizung\Ruecklauf]*/,$data_array[1]);};
?>

Sehr schön, kleine Ursache … :loveips:

Ich bin mit Eugen in Kontakt, vielleicht gibt es zu den Wiffis mittelfristig eine andere Kommunikationsmöglichkeit :cool:.