Brauch mal "Denk" hilfe

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

Dazu musst Du überhaupt erst mal verraten welcher Typ die Variable ist und in welchem Format die Mindestdauer in der Variable abgelegt wird.

Wozu der Doppelpost?

Flexibles Fertigmelder-Skript - Seite 2

Habe den Doppelpost mal gelöscht.

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 :wink:

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…