Hallo Rainer,
Ja im Moment bin ich ratlos. Setze ich die Variable von Hand, dann klappts, wird die Variable durch den Fensterkontakt gesetzt, klappts nicht, obwohl sich auch hier der Wert der Variable völlig korrekt ändert.
Jetzt nicht mehr. Ich habe eine Triggervariable rausgeworfen. Aber immer noch mit dem selben Problem. Ich hatte es aber falsch erkannt. Die Skripte werden korrekt gestartet. Lediglich die Ansage ist nicht zu hören.
Dieses Script wird durch den Fensterkontakt getriggert:
$wz_fensterstatus=0; // fenster ist zu; wenn 1, dann auf
$sag_es="";
// jetzt erst ermitteln, welche Variable aktueller ist FensterStatus, oder die Solltemp.
if(IPS_GetUpdateTime("WZ_H_Fenster")>IPS_GetUpdateTime("WZ_H_Temp_Soll_Read"))
{ if(GetValueBoolean("WZ_H_Fenster")) $wz_fensterstatus=1;
}
else
{ if(GetValueFloat("WZ_H_Temp_Soll_Read")==8) $wz_fensterstatus=1;
}
$status=GetValueInteger("Terassentemperatur_Status");
if(($status&1)==0) return; // Überwachung ist abgeschaltet
require_once '../web/include/GERAETE.php';
$temp_terasse=GetValueFloat("TE_RX_Thermometer_Temperature");
$temp_wz=GetValueFloat("WZ_H_Temp_gemessen");
// prüfen, ob Fenster falsch geschlossen/geöffnet wurde (z.B. geöffnet, obwohl es draußen wärmer ist, die Variable aber auf kühen steht
if($wz_fensterstatus==1)
{ // Fenster ist offen
if(($status&2)!=0)
{ if($temp_terasse>$temp_wz) $sag_es.="- Bitte das Wohnzimmerfenster wieder schließen. Draußen ist es zu warm!"; // Ansagen für Kühlen
}
else
{ if($temp_terasse<$temp_wz) $sag_es.="- Bitte das Wohnzimmerfenster wieder schließen. Draußen ist es zu kalt!"; // Ansage für Heizen
}
}
else
{ // Fenster ist zu
if(($status&2)!=0)
{ if($temp_terasse<$temp_wz) $sag_es.="- Bitte das Wohnzimmerfenster wieder öffnen. Draußen ist es kälter als im Wohnzimmer!"; // Ansagen für Kühlen
}
else
{ if($temp_terasse>$temp_wz) $sag_es.="- Bitte das Wohnzimmerfenster wieder öffnen. Draußen ist es wärmer als im Wohnzimmer!"; // Ansagen für Heizen
}
}
if($sag_es!="")
{ //SetValueString("SAG_ES",':KH WZ sz WG:'.$sag_es);
SetValueString("SAG_ES",':KH WZ sz WG:'.$sag_es);
IPS_RunScript("Sag_Es");
}
// Heizungssteuerung läuft im Moment nicht korrekt, daher jetzt abbrechen
return;
Wenn ich mir die Variable SAG_ES anzeigen lasse, dann sehe ich, dass der Wert völlig korrekt ist.
Das Script Sag_Es sieht dann so aus:
$sag_text=GetValueString("SAG_ES");
if(substr($sag_text,0,1)!="!")
{ if(strftime("%H%M")<700||strftime("%H%M")>2300) return; // vor 7 und nach 23 Uhr nichts mehr sagen!
}
require_once '../web/include/GERAETE.php';
if(IPS_SemaphoreEnter("SAG_ES", 10000))
{ // Script nur 1x innerhalb von 10 Sek. aufrufen lassen. Alle weiteren Aufrufe in dieser Zeit werden ignoriert.
// Hierdurch wird verhindert, dass das Telefon doppelt angerufen wird. Bei späteren Auflegen beibt dann die erste Verbindung bestehen!
$alter_Status=GetValueBoolean("WZ_Couch_Sound.Status");
$geraete=substr($sag_text,0,12); // Hier steht z. B. :WZ WG SZ KH:
if(strstr($geraete,'WZ'))
{ // erst schauen, ob Lautsprecher im WZ an sind, dann nochmals einschalten, sonst für 30 Sek. einschalten
if($alter_Status)
{ FS20_SwitchMode($WZ_SOUND_20, true); // ist an, dann kann ich ja nochmals einschalten
}
else
{ FS20_SwitchDuration($WZ_SOUND_20, true, 30); // ist aus, dann für 30 Sec. ein **************
}
}
if(strstr($geraete,'WZ')) IPS_Sleep(4000); // noch warten, damit die Teufelbox einschalten kann
if(strstr($geraete,'WZ')) TTS_Speak($TTS_WZ, substr($sag_text,12));
if(strstr($geraete,'KH')) TTS_Speak($TTS_KH, substr($sag_text,12));
if(strstr($geraete,'WG')) TTS_Speak($TTS_WG, substr($sag_text,12));
SetValueBoolean("WZ_Couch_Sound.Status",$alter_Status); // alten Status wieder annehmen
SetValueString("SAG_ES",'');
IPS_SemaphoreLeave("SAG_ES");
}
Der Statuswert für die Box im Wohnzimmer ist korrekt, die Box müsste eigentlich einschalten (sh ********). Das klappt aber nicht.
Klar, ist ein FS20-Aktor, also sollte man meinen der Funk sei gestört. Aber was ich nicht verstehe ist, dass wenn ich die Variable von Hand setze, die Box immer einschaltet, wenn sie vom Türkontake gesetzt wird, aber nie einschaltet. Das kann nichts mit dem Funk zu tun haben, zumal der Aktor mit Superhet-Empfänger umgebaut ist und von 100 Schaltvorgängen ca. 99,8 mal auch korrekt schaltet.
Sorry für den langen Text.
Christoph