NXMSH
16. November 2016 um 14:40
1
Hallo Zusammen,
Bin absolut blutiger Anfänger, kann mir jemand zeigen wie so eine Variable im Editor aussehn würde:
$minCycleDuration = GetValue(51473 /[Setup\Fertigmelder\Spülmaschine\Mindestdauer eines Durchlaufs] /);
Welches Profil wird benutzt
VG
Michael
Fonzo
16. November 2016 um 14:45
2
Dazu musst Du überhaupt erst mal verraten welcher Typ die Variable ist und in welchem Format die Mindestdauer in der Variable abgelegt wird.
kronos
16. November 2016 um 15:08
4
Habe den Doppelpost mal gelöscht.
NXMSH
16. November 2016 um 16:06
5
Es geht um das Script:
<?
// es müssen folgende Variablen angelegt und die IDs hier ersetzt werden!
// Variablen für die Mindest- und Höchstdauer eines Durchlaufs, in Minuten (integer)
$minCycleDuration = GetValue(51473 /*[Setup\Fertigmelder\Spülmaschine\Mindestdauer eines Durchlaufs]*/);
$maxCycleDuration = GetValue(56333 /*[Setup\Fertigmelder\Spülmaschine\Höchstdauer eines Durchlaufs]*/);
// Variablen für das Zählen erwarteter Gerätepausen, sowie die längste Pause die nicht als Ende des
// Durchlaufs gewertet werden soll.
// die Anzahl erwarteter Pausen ist wichtig, da nach dem Erreichen dieser Anzahl eine längere Unterbrechung
// (>= $minPauseDuration) als Durchlauf-Ende gewertet wird.
$minPauseDuration = GetValue(27873 /*[Setup\Fertigmelder\Spülmaschine\Mindestdauer einer mitgezählten Pause]*/);
$maxPauseDuration = GetValue(11914 /*[Setup\Fertigmelder\Spülmaschine\Längste zu erwartende Pause]*/);
$expectedPauses = GetValue(42870 /*[Setup\Fertigmelder\Spülmaschine\Anzahl erwarteter Pausen]*/);
// Variablen zum aktuellen Durchlauf. Für $deviceStatusId gelten folgende Werte:
// 0 = läuft nicht
// 1 = läuft
// 2 = läuft, bald fertig (erwartete Anzahl gezählter Pausen erreicht)
// 3 = fertig
$pauseCounterId = 58145 /*[Setup\Fertigmelder\Spülmaschine\Aktueller Durchlauf\Pausenzähler]*/;
$deviceStatusId = 43880 /*[Setup\Fertigmelder\Spülmaschine\Aktueller Durchlauf\Gerätestatus]*/;
$cycleStartTimeId = 11819 /*[Setup\Fertigmelder\Spülmaschine\Aktueller Durchlauf\Startzeitpunkt des Durchlaufs]*/;
$pauseStartTimeId = 19857 /*[Setup\Fertigmelder\Spülmaschine\Aktueller Durchlauf\Startzeitpunkt der letzten Pause]*/;
function deviceIsDone()
{
// hier die Fertigmeldung auslösen!
}
// ab hier nichts mehr ändern!
$deviceStatus = GetValue($deviceStatusId);
$pauses = GetValue($pauseCounterId);
if($_IPS['SENDER'] == 'Variable')
{
$rawState = $_IPS['VALUE'];
switch($deviceStatus)
{
case 3: // fertig
case 0: // läuft nicht
if($rawState) // neuer Durchlauf beginnt
{
SetValue($cycleStartTimeId, time());
$pauses = 0;
$deviceStatus = 1;
IPS_SetScriptTimer($_IPS['SELF'], $maxCycleDuration * 60);
}
break;
case 1: // läuft
case 2: // läuft, bald fertig
if($rawState) // Pause zu ende
{
$thisPauseDuration = time() - GetValue($pauseStartTimeId);
if($thisPauseDuration >= $minPauseDuration * 60)
{
$pauses++;
if($pauses >= $expectedPauses && $expectedPauses > 0)
{
$deviceStatus = 2;
}
}
$remainingTimeout = $maxCycleDuration * 60 -
(time() - GetValue($cycleStartTimeId));
if($remainingTimeout > 0)
IPS_SetScriptTimer($_IPS['SELF'], $remainingTimeout);
else
IPS_RunScript($_IPS['SELF']);
}
else // Pause beginnt
{
SetValue($pauseStartTimeId, time());
if($pauses >= $expectedPauses)
IPS_SetScriptTimer($_IPS['SELF'], $minPauseDuration * 60);
else
IPS_SetScriptTimer($_IPS['SELF'], $maxPauseDuration * 60);
}
break;
}
}
else // timeout durch zu lange Gesamtdauer des Durchlaufs, zu lange Pause bzw. am regulären Ende des Durchlaufs
{
if($deviceStatus == 1 || $deviceStatus == 2)
{
// falls Mindestdauer des Durchlaufs noch nicht erreicht ist, zurücksetzen ohne Fertigmeldung!
if(time() - GetValue($cycleStartTimeId) < $minCycleDuration)
{
$deviceStatus = 0;
IPS_SetScriptTimer($_IPS['SELF'], 0);
}
else
{
$deviceStatus = 3;
IPS_SetScriptTimer($_IPS['SELF'], 0);
deviceIsDone();
}
}
else if($deviceStatus == 3) $deviceStatus = 0;
}
SetValue($deviceStatusId, $deviceStatus);
SetValue($pauseCounterId, $pauses);
?>
Ich würde das gerne für meine Zwecke gerne benutzen, nur so wirklich verstehe ich das nicht, leider
NXMSH
16. November 2016 um 16:08
6
Danke, ich dachte so gehts schneller
Steht m.E. alles da:
// [b]es müssen folgende Variablen angelegt und die IDs hier ersetzt werden[/b]!
// Variablen für die Mindest- und Höchstdauer eines Durchlaufs, in Minuten (integer)
$minCycleDuration = GetValue(51473 /*[Setup\Fertigmelder\Spülmaschine\Mindestdauer eines Durchlaufs]*/);
$maxCycleDuration = GetValue(56333 /*[Setup\Fertigmelder\Spülmaschine\Höchstdauer eines Durchlaufs]*/);
Du legst also selbst diese Variablen (als integer) an einem dir passenden Ort (hier: Setup\Fertigmelder\Spülmaschine) an und verwendest dann als ID jene, die dir Symcon zugewiesen hat. Als Wert trägst du die Laufzeit in Minuten ein.
Das machst du mit allen Variablen, die verlangt werden.
Zuvor musst du wahrscheinlich Mal die Laufzeiten des kürzesten und des längsten Programms und die Pausen ermitteln…