+ Antworten
Ergebnis 1 bis 10 von 10
  1. #1
    Registriert seit
    Aug 2009
    Ort
    Stuhr
    Beiträge
    251

    Standard Die intelligente Warmwasser Zirkulationspumpe

    Basierend auf einem Projekt, die ich direkt in der Homematic-CCU gelöst habe, stelle ich hiermit eine Lösung für IP-Symcon zur Verfügung.

    Artikel: Sascha ‘Real-RIOT’ Schmidt – MyBLOG Blog Archive Die intelligente Warmwasser Zirkulationspumpe

    Für die Lösung kann folgendes Script genutzt werden:

    PHP-Code:
    <?
    //*****************
    $pumpen_id 42990;
    //*****************

    $runtime_id  = @IPS_GetObjectIDByName("RUN_TIME"$IPS_SELF);
    $lastrun_id  = @IPS_GetObjectIDByName("LAST_RUN"$IPS_SELF);
    $locktime_id = @IPS_GetObjectIDByName("LOCK_TIME"$IPS_SELF);

    if ( 
    $runtime_id == )
    {
        
    $runtime_id IPS_CreateVariable(1);
        
    IPS_SetName($runtime_id"RUN_TIME");
        
    IPS_SetParent($runtime_id$IPS_SELF);
       
    SetValue($runtime_id5);
    }
    if ( 
    $locktime_id == )
    {
        
    $locktime_id IPS_CreateVariable(1);
        
    IPS_SetName($locktime_id"LOCK_TIME");
        
    IPS_SetParent($locktime_id$IPS_SELF);
        
    SetValue($locktime_id45);
    }
    if ( 
    $lastrun_id == )
    {
        
    $lastrun_id IPS_CreateVariable(1);
        
    IPS_SetName($lastrun_id"LAST_RUN");
        
    IPS_SetParent($lastrun_id$IPS_SELF);
    }

    $lock_time GetValue($locktime_id);
    $run_time  GetValue($runtime_id);
    $last_run  GetValue($lastrun_id);

    $lock_time $lock_time*60;
    $run_time  $run_time*60;

    if ( 
    $IPS_SENDER != "TimerEvent" )
    {
        if ( 
    time() > $last_run $lock_time )
        {
            
    IPS_SetScriptTimer($IPS_SELF$run_time);
            
    HM_WriteValueBoolean($pumpen_id"STATE"true);
          
    SetValue($lastrun_idtime());
        }
    } else
    {
          
    HM_WriteValueBoolean($pumpen_id"STATE"false);
          
    IPS_SetScriptTimer($IPS_SELF0);
    }
    ?>
    Es muß lediglich am Anfang des Scripts die ID der Zirkulationspumpe angegeben werden. Das ist bei mir ein ganz normaler Schaltaktor.

    LOCK_TIME: Definiert die Zeit, die die Warmwasser Pumpe NICHT eingeschaltet werden soll (Minuten)
    RUN_TIME: Definiert die Zeit, die die Warmwasser Pumpe laufen soll
    LAST_RUN: Ist eine Variable, die vom Script genutzt wird und bedarf keiner Userinteraktion.

    Getriggert wird das Script durch angegebene Ereignisse in IP-Symcom. Bei mir sind es beispielsweise die Bewegungsmelder in Küche, GästeWC und Bad.

    Hoffe, ich konnte das verständlich darlegen.

    Viele Grüße
    Sascha
    Geändert von saschahb (09.09.09 um 06:02 Uhr)

  2. #2
    Registriert seit
    Sep 2011
    Ort
    53639 Königswinter
    Beiträge
    1,412

    Hallo Sascha,

    schönes Skript, ich setze es grade für mich um.

    Aber ich hab mal eine Frage dazu.

    In dem Skript setzt Du, wenn die Bedingungen erfüllt sind, den Aktor für die Pumpe auf die in "RUN_TIME" eingestellte Zeit.

    Wozu dann aber noch der Timer? Der Aktor schaltet doch automatisch nach der eingestellten Zeit aus?
    mws
    ---------------------------------------------------------------
    Wer Rechtschreibfehler findet darf sie behalten.
    ----------------o00o----'(_)'----o00o---------------------

  3. #3
    Registriert seit
    Jun 2011
    Beiträge
    28

    Hallo,
    Vielen Dank für das Skript. Ich habe mir zwei bewegungsmelder bestellt und möchte das für unser Haus auch umsetzten.
    Eine Frage, da ich mit IP - Symcon noch keine Erfahrung habe:
    Wie sieht das Skript aus, wenn mann eine generelle Sperrzeit z. B. nachts hinzufügen möchten?

    Sent from my GT-I9100 using Tapatalk

  4. #4
    Registriert seit
    Sep 2011
    Ort
    53639 Königswinter
    Beiträge
    1,412

    Schau mal hier rein da ist das was Du suchst beschrieben.
    mws
    ---------------------------------------------------------------
    Wer Rechtschreibfehler findet darf sie behalten.
    ----------------o00o----'(_)'----o00o---------------------

  5. #5
    Registriert seit
    Sep 2011
    Ort
    53639 Königswinter
    Beiträge
    1,412

    Ich hab das Skript mal für mich umgeschrieben, da ich mir die Variablen selber an anderer Stelle angelegt habe und noch zusätzlich die von Wurlitzer vorgeschlagenen Sperrzeiten hinzugefügt habe:

    PHP-Code:
    <?
       
    include_once "IPSLogger.ips.php";
       
        
    $pumpen_id 11633 /*[Geräte\Erdgeschoss\Wirtschaftsraum\Heizungsaktor I\Aktor 4]*/;

        
    $runtime_id  56901 /*[Program\Heizung\Data\Zirkulationspumpe\RUN_TIME]*/;
        
    $lastrun_id  20738 /*[Program\Heizung\Data\Zirkulationspumpe\LAST_RUN]*/;
        
    $locktime_id 50905 /*[Program\Heizung\Data\Zirkulationspumpe\LOCK_TIME]*/;
        
    $offtime_id 33473 /*[Program\Heizung\Data\Zirkulationspumpe\Pumpe aus ab]*/;
        
    $ontime_id 22483 /*[Program\Heizung\Data\Zirkulationspumpe\Pumpe an ab]*/;
        
        
    $lock_time GetValue($locktime_id);
        
    $run_time  GetValue($runtime_id);
        
    $last_run  GetValue($lastrun_id);
        
    $offtime GetValue($offtime_id);
        
    $ontime GetValue($ontime_id);
        
        
    $lock_time $lock_time*60;
        
    $run_time  $run_time*60;

        
    $time date("H:i");
        
        if ( 
    $IPS_SENDER != "TimerEvent" )
        {

            if (
    GetUnixTime($time) > $last_run $lock_time && $time >= $ontime && $time <= $offtime)
            {
                
    IPS_SetScriptTimer($IPS_SELF$run_time);
                
    HM_WriteValueBoolean($pumpen_id"STATE"true);
                
    SetValue($lastrun_idGetUnixTime($time));
                
    IPSLogger_Dbg (__file__,"Zirkulationspumpe ein für ".($run_time 60)." Minuten!");
            }
        }
        else
        {
              
    HM_WriteValueBoolean($pumpen_id"STATE"false);
              
    IPS_SetScriptTimer($IPS_SELF0);
              
    IPSLogger_Dbg (__file__,"Zirkulationspumpe aus!");
        }
        
        function 
    GetUnixTime($time)
        {
            
    $time_array explode (":"$time );

            
    $Hour =  $time_array[0];
            
    $Minute =  $time_array[1];

            return 
    mktime($Hour$Minute0);
         }
    ?>
    Die UnixTime Umrechung ist drin, weil es damit einfach ist zu prüfen wann die Pumpe zuletzt gelaufen ist. Da ich die Sperrzeiten im Webfront einstellbar gemacht habe wollte ich da aber Uhrzeiten haben.

    Die Prüfung mit dem Timer ha ich auch drin gelassen, damit ich das Ausschalten mitloggen kann.

    Die Variablen sind bei mir so angelegt:

    mws
    ---------------------------------------------------------------
    Wer Rechtschreibfehler findet darf sie behalten.
    ----------------o00o----'(_)'----o00o---------------------

  6. #6
    Registriert seit
    Jun 2011
    Beiträge
    28

    Hallo,

    vielen Dank für Deine Beiträge.
    Ich werde es am Wochenende testen.

  7. #7
    Registriert seit
    Jun 2011
    Beiträge
    28

    Ich habe Dein Skript implementiert. Vielen Dank dafür.
    Allerdings erschließt sich mir als Anfänger noch nicht ganz, wie ich nun die Variablen in der Web-Oberfläche ändern kann. Angezeigt werden sie mir. Ist das erst ein Fueature der Professional Version?
    Danke schon im Voraus!

  8. #8
    Registriert seit
    Sep 2011
    Ort
    53639 Königswinter
    Beiträge
    1,412

    Du musst noch das ChangeSettings Skript mit folgender Zeile füllen:

    PHP-Code:
    SetValue($IPS_VARIABLE$IPS_VALUE); 
    damit die Variablen über die Webseite geändert werden können.
    Geändert von mws (07.12.11 um 14:16 Uhr)
    mws
    ---------------------------------------------------------------
    Wer Rechtschreibfehler findet darf sie behalten.
    ----------------o00o----'(_)'----o00o---------------------

  9. #9
    Registriert seit
    Sep 2011
    Ort
    53639 Königswinter
    Beiträge
    1,412

    Übrigens hab ich das Skript noch mal geändert weil ich diesen Timer zum Ausschalten raus geworfen habe, das können die HM Aktoren selber und ich schalte noch 2 Mal zusätzlich via Timer wenn meine Frau bzw. ich aufstehe. Dann wollen wir im Bad auch warmes Wasser haben, aber da ist zur Zeit kein Bewegungsmelder.

    Das neue Skript sieht jetzt so aus:

    PHP-Code:
    <?
       
    include_once "IPSLogger.ips.php";
       
        
    $pumpen_id 11874 /*[Geräte\Erdgeschoss\Wirtschaftsraum\Heizungsaktor I\Aktor 2 / Zirkulationspumpe]*/;

        
    $runtime_id  56901 /*[Program\Heizung\Data\Zirkulationspumpe\RUN_TIME]*/;
        
    $lastrun_id  20738 /*[Program\Heizung\Data\Zirkulationspumpe\LAST_RUN]*/;
        
    $locktime_id 50905 /*[Program\Heizung\Data\Zirkulationspumpe\LOCK_TIME]*/;
        
    $offtime_id 33473 /*[Program\Heizung\Data\Zirkulationspumpe\Sperrzeit_Von]*/;
        
    $ontime_id 22483 /*[Program\Heizung\Data\Zirkulationspumpe\Sperrzeit_Bis]*/;
        
        
    $lock_time GetValue($locktime_id);
        
    $run_time  GetValue($runtime_id);
        
    $last_run  GetValue($lastrun_id);
        
    $offtime GetValue($offtime_id);
        
    $ontime GetValue($ontime_id);
        
        
    $lock_time $lock_time*60;
        
    $run_time  $run_time*60;

        
    $time date("H:i");
        
       if (
    GetUnixTime($time) > $last_run $lock_time && $time >= $ontime && $time <= $offtime)
       {
            
    HM_WriteValueFloat($pumpen_id"ON_TIME"$run_time);
            
    HM_WriteValueBoolean($pumpen_id"STATE"true);
            
    SetValue($lastrun_idGetUnixTime($time));
            
    IPSLogger_Inf (__file__,"Zirkulationspumpe ein für ".($run_time 60)." Minuten!");
       }
        
        function 
    GetUnixTime($time)
        {
            
    $time_array explode (":"$time );

            
    $Hour =  $time_array[0];
            
    $Minute =  $time_array[1];

            return 
    mktime($Hour$Minute0);
         }
    ?>
    Geändert von mws (13.12.11 um 22:42 Uhr)
    mws
    ---------------------------------------------------------------
    Wer Rechtschreibfehler findet darf sie behalten.
    ----------------o00o----'(_)'----o00o---------------------

  10. #10
    Registriert seit
    Sep 2011
    Ort
    53639 Königswinter
    Beiträge
    1,412

    Zitat Zitat von mws Beitrag anzeigen
    Du musst noch das ChangeSettings Skript mit folgender Zeile füllen:

    PHP-Code:
    SetValue($IPS_VARIABLE$IPS_VALUE); 
    damit die Variablen über die Webseite geändert werden können.
    PS: Natürlich musst Du dann noch dieses Skript bei jeder Variablen, die Du im WebFront ändern möchtest als Actionskript zuweisen.
    mws
    ---------------------------------------------------------------
    Wer Rechtschreibfehler findet darf sie behalten.
    ----------------o00o----'(_)'----o00o---------------------

Ähnliche Themen

  1. Homematic Sender und Empfänger anmelden
    Von gros_ibou im Forum HomeMatic
    Antworten: 6
    Letzter Beitrag: 26.08.09, 08:51
  2. Anfänger braucht Hilfe bei homematic + IPS
    Von ipsnewbie im Forum HomeMatic
    Antworten: 2
    Letzter Beitrag: 26.07.09, 17:11
  3. Homematic STATE Variable bekommen
    Von sn00py im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 1
    Letzter Beitrag: 22.03.09, 09:04
  4. FS20 <-> Homematic
    Von sn00py im Forum Sonstige Funkkomponenten / Wetterstationen
    Antworten: 4
    Letzter Beitrag: 27.10.08, 16:18