+ Antworten
Ergebnis 1 bis 2 von 2
  1. #1
    Registriert seit
    Nov 2016
    Beiträge
    230

    Standard Variablenänderung durch Skript nur, wenn das Skript die Variable zuletzt geändert hat

    Hallo,

    für den Aussperrschutz, der über einen Homematic-Drehgriff-Sensor läuft, habe ich folgendes Skript gebastelt:

    PHP-Code:
    <?

    $Zustand 
    GetValueInteger(58186 /*[Geräte\Fenster-Türen\Drehgriff Dachterrasse\STATE]*/);

    if (
    GetValue(44732 /*[Beschattung\Automatikschaltung\Automatik DT]*/))
    {
        if ((
    $IPS_SENDER == "TimerEvent") && ($Zustand == "2")) // nach 2 sec prüfen
        
    {
          
    setValue(44732 /*[Beschattung\Automatikschaltung\Automatik DT]*/false);
          
    HM_WriteValueFloat(59019 /*[Geräte\Jalousien\Jalousie DT]*/"LEVEL"1.0);
          
    IPS_SetScriptTimer($IPS_SELF0); // Timer beenden
          
    return; // Script verlassen
        
    }

        if (
    $Zustand == "2"
        {
           
    IPS_SetScriptTimer($IPS_SELF2); // Timer für 2 sec setzen
        
    }

        else
        {
          
    IPS_SetScriptTimer($IPS_SELF0); // Timer beenden
          
    return; // Script verlassen
        
    }
    }

    else
    {
        if ((
    $IPS_SENDER == "TimerEvent") && ($Zustand == "2")) // nach 2 sec prüfen
        
    {
          
    HM_WriteValueFloat(59019 /*[Geräte\Jalousien\Jalousie DT]*/"LEVEL"1.0);
          
    IPS_SetScriptTimer($IPS_SELF0); // Timer beenden
          
    return; // Script verlassen
        
    }

        if (
    $Zustand == "2"
        {
           
    IPS_SetScriptTimer($IPS_SELF2); // Timer für 2 sec setzen
        
    }

        else
        {
            
    setValue(44732 /*[Beschattung\Automatikschaltung\Automatik DT]*/true);
            
    IPS_SetScriptTimer($IPS_SELF0); // Timer beenden
               
    return; // Script verlassen
        
    }
    }

    ?>
    Dadurch soll die Beschattungsautomatik an der betreffenden Tür ausgeschaltet und die Jalosie heraufgefahren werden, wenn der Drehgriff mind. 2 Sekunden auf "offen" steht. Wenn der Griff nicht mehr auf offen steht, soll die Automatik wieder eingeschaltet werden. Das klappt auch soweit.

    Allerdings wird die Automatik mit dem Skript auch eingeschaltet, wenn sie vorher bereits ausgeschaltet war und dies nicht durch das Skript erfolgt ist. Ich möchte die Automatik durch das Skript aber nur wieder einschalten, wenn sie zuletzt durch das Skript selbst ausgeschaltet worden ist (wenn sie bereits vorher aus war, soll sie auch aus bleiben).

    Hat jemand eine Idee, was ich ergänzen muss, um das zu realisieren?

    Danke und vG...!

  2. #2
    Registriert seit
    Nov 2016
    Beiträge
    230

    Ich habe es inzwischen selbst hinbekommen:

    PHP-Code:
    <?

    $Zustand 
    GetValueInteger(58186 /*[Geräte\Fenster-Türen\Drehgriff Dachterrasse\STATE]*/);

    if (
    GetValue(44732 /*[Beschattung\Automatikschaltung\Raumautomatik\Automatik DT]*/))
    {
        if ((
    $IPS_SENDER == "TimerEvent") && ($Zustand == "2")) // nach 2 sec prüfen
        
    {
          
    setValue(44732 /*[Beschattung\Automatikschaltung\Raumautomatik\Automatik DT]*/false);
              
    $VarA IPS_GetVariable(44732 /*[Beschattung\Automatikschaltung\Raumautomatik\Automatik DT]*/);
            
    $ChMemo $VarA['VariableChanged'];
          
    setValue(52858 /*[Test\AutoTest]*/$ChMemo);
          
    HM_WriteValueFloat(59019 /*[Geräte\Jalousien\Jalousie DT]*/"LEVEL"1.0);
          
    IPS_SetScriptTimer($IPS_SELF0); // Timer beenden
          
    return; // Script verlassen
        
    }

        if (
    $Zustand == "2"
        {
           
    IPS_SetScriptTimer($IPS_SELF2); // Timer für 2 sec setzen
        
    }

        else
        {
          
    IPS_SetScriptTimer($IPS_SELF0); // Timer beenden
          
    return; // Script verlassen
        
    }
    }

    else
    {
        if ((
    $IPS_SENDER == "TimerEvent") && ($Zustand == "2")) // nach 2 sec prüfen
        
    {
          
    HM_WriteValueFloat(59019 /*[Geräte\Jalousien\Jalousie DT]*/"LEVEL"1.0);
          
    IPS_SetScriptTimer($IPS_SELF0); // Timer beenden
          
    return; // Script verlassen
        
    }

        if (
    $Zustand == "2"
        {
           
    IPS_SetScriptTimer($IPS_SELF2); // Timer für 2 sec setzen
        
    }

        else
        {
            
    $ChMRC GetValue(52858 /*[Test\AutoTest]*/);
            
    $VarA IPS_GetVariable(44732 /*[Beschattung\Automatikschaltung\Raumautomatik\Automatik DT]*/);
            
    $ChMemo $VarA['VariableChanged'];
            if (
    $ChMemo == $ChMRC)
            {
            
    setValue(44732 /*[Beschattung\Automatikschaltung\Raumautomatik\Automatik DT]*/true);
            
    IPS_SetScriptTimer($IPS_SELF0); // Timer beenden
               
    return; // Script verlassen
            
    }
            
            else
            {
            
    IPS_SetScriptTimer($IPS_SELF0); // Timer beenden
               
    return; // Script verlassen
            
    }
        }
    }

    ?>

Ähnliche Themen

  1. LinkID ermitteln die das Skript aufgerufen hat?
    Von harry28 im Forum Skripte, PHP, SQL
    Antworten: 18
    Letzter Beitrag: 28.03.19, 11:24
  2. Skript starten, wenn Variable über Webfront geändert wurde
    Von Detective im Forum Skripte, PHP, SQL
    Antworten: 1
    Letzter Beitrag: 11.11.14, 13:23
  3. Antworten: 10
    Letzter Beitrag: 28.01.14, 21:36
  4. Antworten: 3
    Letzter Beitrag: 29.11.12, 18:39
  5. Skript durch ein Skript erzeugen lassen
    Von wgreipl im Forum Skripte, PHP, SQL
    Antworten: 8
    Letzter Beitrag: 02.05.10, 21:01