Du kannst es mal mit Semaphore probieren. Oder einfach im Script eine Variable setzen true/false und gegenseitig von den Scripts abfragen. Wenn das eine läuft setzt es die Variable true und am Ende wieder false. Bei true verriegelt es dann da andere Script.
Würde dann in etwa so aussehen.
<?
switch($IPS_SENDER)
{
case "Execute": // im Sript ausführen. Simuliert Button im Webfront
break;
case "TimerEvent":
if($IPS_EVENT == 58305 /*[Test\2Timer\]*/) // ID des Scripttimer
{
TTS_Speak(28627 /*[Sprachausgabe\Text To Speech]*/, "Ausgeschaltet" , true);
IPS_LogMessage($IPS_SELF, "Aus"); // Ausgabe in Meldungen
SetValue(12345, false);
IPS_SetScriptTimer($IPS_SELF, 0);
return;
}
break;
}
if(GetValue(12345))
{
return;
}
else
{
TTS_Speak(28627 /*[Sprachausgabe\Text To Speech]*/, "Eingeschaltet" , true);
IPS_LogMessage($IPS_SELF, "Ein"); // Ausgabe in Meldungen
SetValue(12345, true);
IPS_SetScriptTimer($IPS_SELF, 10);
}
?>
Es gibt nur eine Variable, diese ist in beiden Scripts die gleiche. Wenn diese true ist, kann das andere Script nichts ausführen weil das andere ja schon läuft.
Wenn Du damit nicht zurecht kommst, die nächste Trockenübung.
Leg dir eine Boolvariable mit Namen Script gesperrt an. Diese führst Du dann mal von Hand aus von true auf false und beobachte was passiert wenn Du das Script ausführst.
<?
switch($IPS_SENDER)
{
case "Execute": // im Sript ausführen. Simuliert Button im Webfront
break;
case "TimerEvent":
if($IPS_EVENT == 58305 /*[Test\2Timer\]*/) // ID des Scripttimer
{
TTS_Speak(28627 /*[Sprachausgabe\Text To Speech]*/, "Ausgeschaltet" , true);
IPS_LogMessage($IPS_SELF, "Aus"); // Ausgabe in Meldungen
SetValue(33476 /*[Test\2Timer\Script gesperrt]*/, false); // Script freigeben
IPS_SetScriptTimer($IPS_SELF, 0);
return;
}
break;
}
if(GetValue(33476 /*[Test\2Timer\Script gesperrt]*/)) // Script Freigabe prüfen, wenn true verlassen
{
IPS_LogMessage($IPS_SELF, "Script ist gesperrt");
return;
}
else // sonst ausführen
{
TTS_Speak(28627 /*[Sprachausgabe\Text To Speech]*/, "Eingeschaltet" , true);
IPS_LogMessage($IPS_SELF, "Ein"); // Ausgabe in Meldungen
SetValue(33476 /*[Test\2Timer\Script gesperrt]*/, true); // Script sperren
IPS_SetScriptTimer($IPS_SELF, 20);
}
?>
…also,
in beiden Skripten wird die Variable Boolean mit der ID 13427 angesprochen. Diese ist für Rollladen hoch vorgesehen, siehe Anhang.
Wenn ich Rollladen „runter“ anklicke, ändert sich natürlich der Button Rollladen hoch.
…ich glaube, viel mehr habe ich auch nicht. :rolleyes:
Das war der entscheidende Hinweis :eek:,
noch eine Variable „Boolean“–Name „Gesperrt“ erstellt, diese ID 56743 im Script zum sperren verwendet, folgende Zeilen wieder eingefügt…