Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Plugin zur Steuerung eines Handtuchtrockners

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] - √ - Plugin zur Steuerung eines Handtuchtrockners

    Hallo Leute,

    könnte jemand mal über mein Plugin drüber schauen?

    Ich bin blutiger Anfänger und finde die blöden Fehler einfach nicht, die er anmeckert:
    syntax error at (eval 9017) line 25, near "#Zur Sicherheit wird nochmal der Sommerwert für Heizungsaktor gesetzt if $sommer_wert " syntax error at (eval 9017) line 36, near "} }"
    syntax error at (eval 9017) line 42, near "; }"
    syntax error at (eval 9017) line 47, near "; }"
    syntax error at (eval 9017) line 56, near "; }"
    syntax error at (eval 9017) line 61, near "; }"
    syntax error at (eval 9017) line 65, near "; }"

    Code:
    # Plugin zur Steuerung eines Handtuchtrockners
    # Sommer > Heizen über WW-Heizung
    # Winter > Heizen über WW-Heizung
    ### Definitionen
    my $hk_ga = "4/2/100";   # Gruppenadresse zur Steuerung Handtuchtrockner (An/Aus)
    my $sommer_ga = "4/0/0";  # Gruppenadresse Sommerbetrieb (An/Aus)
    my $sommer_wert = 1;   # Wert für Sommerbetrieb (An/Aus)
    my $patrone_ga = "4/2/110";  # Gruppenadresse E-Heizpatrone (An/Aus)
    my $stellantrieb_ga = "4/2/105"; # Gruppenadresse Stellantrieb (%-Wert)
    my $stellantrieb_auf = 100;  # Wert für Stellantrieb offen (%-Wert)
    my $stellantrieb_zu = 0;  # Wert für Stellantrieb geschlossen (%-Wert)
    my $laufzeit = 30;          # Laufzeit bis Auto Aus in sek.
    ### Ende Definitionen
    # Eigenen Aufruf-Zyklus auf 0 Sekunden setzen
    $plugin_info{$plugname.'_cycle'} = 0;
     
    #Prüfung, ob GA durch Schreibtransaktion angesprochen wurde
    if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $hk_ga ) { 
       #Kenner Laufzeit gestartet und Aufrufintervall des Plugin setzen
       $plugin_info{$plugname.'_sema'} = 1;
       $plugin_info{$plugname.'_cycle'} = $laufzeit;
     
       knx_write($sommer_ga, $sommer_wert, 1); #Zur Sicherheit wird nochmal der Sommerwert für Heizungsaktor gesetzt
     
       if $sommer_wert == 1 {
         if $hk_ga == 1 {
           knx_write($patrone_ga, 1, 1);
           knx_write($stellantrieb_ga, $stellantrieb_zu, 5.001);
           return "P An";
           }
         else {
           knx_write($patrone_ga,0,1);
           knx_write($stellantrieb_ga, $stellantrieb_auf, 5.001);
           return "P Aus";
           }
         }
       else {
         if $hk_ga == 1 {
           knx_write($patrone_ga,0,1);
           knx_write($stellantrieb_ga, $stellantrieb_auf, 5.001);
           return "WW An";
           }
         else {
           knx_write($patrone_ga,0,1);
           knx_write($stellantrieb_ga, $stellantrieb_zu, 5.001);
           return "WW Aus";
           }
         }
       }
    #Ausführung wenn Aufrufintervall/Laufzeit abgelaufen ist
    elsif ($plugin_info{$plugname.'_sema'}) {
       if $sommer_wert == 1 {
        knx_write($patrone_ga,0,1);
        knx_write($stellantrieb_ga, $stellantrieb_auf, 5.001);
        return "P Auto Aus";
        }
       else {
        knx_write($patrone_ga,0,1);
        knx_write($stellantrieb_ga, $stellantrieb_zu, 5.001);
        return "WW Auto Aus";
        }
       #Zurücksetzen Kenner Laufzeit gestartet und Aufrufintervall des Plugin
       $plugin_info{$plugname.'_sema'} = 0;
       $plugin_info{$plugname.'_cycle'} = 0; 
       }
    else { # zyklischer Aufruf
       # Plugin an Gruppenadresse "anmelden"
       $plugin_subscribe{$hk_ga}{$plugname} = 1;
       }
    Danke
    Sascha

    #2
    Hoi

    Du hast in Zeile 15 eine geschweifte Klammer auf gemacht, aber so wie der Code da steht nicht wieder zu.

    Vielleicht fehlt ja ein Teil vom Code, das könnte ja auch noch sein.
    Grüsse Bodo
    Fragen gehören ins Forum, und nicht in mein Postfach;
    EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

    Kommentar


      #3
      Ich sehe den Fehler

      Du hast bei vielen if-Abfragen die Klammern vergessen. Also so:

      Du hast z.B.
      Code:
      if $sommer_wert == 1 {
      richtig wäre:

      Code:
      if ($sommer_wert == 1) {
      Und dass an mehereren Orten im Code.
      Gruss Patrik alias swiss

      Kommentar


        #4
        Ahhhh, sehr gut, ich hab' Tomaten auf den Augen...
        Grüsse Bodo
        Fragen gehören ins Forum, und nicht in mein Postfach;
        EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

        Kommentar


          #5
          @haegar80

          Nein die geschweiften Klammern sind korrekt. Aber durch die fehlenden runden Klammern bei den If-Abfragen werden die geschweiften Klammern falsch interpretiert.

          Ergänze einfach bei deinem Code die runden Klammern und es sollte funktionieren

          PS: Wo ist der Post hin auf den ich geantwortet habe?
          Gruss Patrik alias swiss

          Kommentar


            #6
            Danke für die Tipps!!!
            Das mit den Klammern hat die Lösung gebracht!!

            Mein WAF hat sich damit extrem gesteigert! Wärme auf Knopfdruck mit "Antivergessenautomatik" kommt immer gut an. ;-)

            Das fertige Konstrukt sieht jetzt so aus:
            Code:
            # Plugin zur Steuerung eines Handtuchtrockners
            # Sommer > Heizen über WW-Heizung
            # Winter > Heizen über WW-Heizung
            ### Definitionen
            my $hk_ga = "4/2/100";           # Gruppenadresse zur Steuerung Handtuchtrockner (An/Aus)
            my $sommer_ga = "4/0/0";         # Gruppenadresse Sommerbetrieb (An/Aus)
            my $sommer_wert = 1;             # Wert für Sommerbetrieb (An/Aus)
            my $patrone_ga = "4/2/110";      # Gruppenadresse E-Heizpatrone (An/Aus)
            my $stellantrieb_ga = "4/2/105"; # Gruppenadresse Stellantrieb (%-Wert)
            my $stellantrieb_auf = 100;      # Wert für Stellantrieb offen (%-Wert)
            my $stellantrieb_zu = 0;         # Wert für Stellantrieb geschlossen (%-Wert)
            my $laufzeit = 60*60*2;          # Laufzeit bis Auto Aus in sek.
            ### Ende Definitionen
            # Eigenen Aufruf-Zyklus auf 0 Sekunden setzen
            $plugin_info{$plugname.'_cycle'} = 0;
            #Wert für Handtuchtrockner lesen
            my $hk_wert = knx_read($hk_ga,300,1);
             
            #Prüfung, ob GA durch Schreibtransaktion angesprochen wurde
            if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $hk_ga ) { 
               knx_write($sommer_ga, $sommer_wert, 1); #Zur Sicherheit wird nochmal der Sommerwert für Heizungsaktor gesetzt
               #Kenner Laufzeit gestartet und Aufrufintervall des Plugin setzen
               if ($hk_wert == 1) {
                 $plugin_info{$plugname.'_sema'} = 1;
                 $plugin_info{$plugname.'_cycle'} = $laufzeit;
                 }
              
               if ($sommer_wert == 1) {
                 if ($hk_wert == 1) {
                   knx_write($patrone_ga, 1, 1);
                   knx_write($stellantrieb_ga, $stellantrieb_zu, 5.001);
                   return "E-Patrone An";
                   }
                 else {
                   knx_write($patrone_ga,0,1);
                   knx_write($stellantrieb_ga, $stellantrieb_auf, 5.001);
                   return "E-Patrone Aus";
                   }
                 }
               else {
                 knx_write($patrone_ga,0,1);
                 if ($hk_wert == 1) {
                   knx_write($stellantrieb_ga, $stellantrieb_auf, 5.001);
                   return "WW-Heizung An";
                   }
                 else {
                   knx_write($stellantrieb_ga, $stellantrieb_zu, 5.001);
                   return "WW-Heizung Aus";
                   }
                 }
               }
            #Ausführung wenn Aufrufintervall/Laufzeit abgelaufen ist
            elsif ($plugin_info{$plugname.'_sema'} == 1) {
               #Zurücksetzen Kenner Laufzeit gestartet und Aufrufintervall des Plugin
               $plugin_info{$plugname.'_sema'} = 0;
               $plugin_info{$plugname.'_cycle'} = 0; 
               knx_write($hk_ga,0,1);
               # Plugin an Gruppenadresse "anmelden"
               $plugin_subscribe{$hk_ga}{$plugname} = 1;   
               }
            P.S. @Swiss ich habe den Thread gelöscht, weil ich erst danach deine Antwort mit den Klammern gesehen habe.

            Kommentar


              #7
              Prima

              Ich werde es dann ggf. als Vorlage für mein freecooling Plugin benutzen
              Gruss Patrik alias swiss

              Kommentar


                #8
                Hallo zusammen,

                das Plugin macht leider noch nicht, was es soll. Wenn es durch die GA aufgerufen wird, wird der Wert "zuletzt ausgeführt" nicht auf 0 gesetzt.

                Wie kann ich den Wert denn auf 0 setzen, damit die korrekte Laufzeit, die mit dem Eintreffen auf der GA gestartet werden soll auch eingehalten wird?

                Danke
                Sascha

                Kommentar


                  #9
                  Das wird bewusst nicht zurückgesetzt, da sonst nie ein zyklischer Aufruf stattfindet, wenn inzwischen Telegramme eintreffen.

                  Absichtlich umgehen kann man es indem man den internen Wert setzt:
                  Code:
                  $plugin_info{$plugname.'_last'} = time();
                  Dann erfolgt der nächste zyklisch Aufruf in "jetzt + _cycle"

                  Einfacher und erheblich übersichtlicher für sowas wie einen 1h laufenden HHK wäre hier aber ein zyklischer Aufruf alle paar Minuten und dort einfach prüfen ob die Bedingungen noch zutreffen bzw. die gewünschte Zeit um ist..

                  Makki
                  EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                  -> Bitte KEINE PNs!

                  Kommentar


                    #10
                    Dankeschön! Es funktioniert!

                    Kommentar


                      #11
                      Hallo Sascha,

                      kannst Du bitte noch den nun funktionierenden Code nochmal posten, damit die komplette Lösung für alle verfügbar ist?

                      Ich hab mir erlaubt, den Thread von "Plugin will nicht" auf "Plugin zur Steuerung eines Handtuchtrockners" umzubenennen weil dann alle anderen Leser an dem Titel erkennen um was es geht.


                      LG

                      Stefan

                      Kommentar


                        #12
                        Fertiger Code

                        Hier der fertige Code, wie er bei mir am Laufen ist:
                        Code:
                        # Plugin zur Steuerung eines Handtuchtrockners
                        # Sommer > Heizen über E-Patrone
                        # Winter > Heizen über WW-Heizung
                        ### Definitionen
                        my $hk_ga = '4/2/100';                # Gruppenadresse zur Steuerung Handtuchtrockner (An/Aus)
                        my $sommer_ga = '4/0/0';              # Gruppenadresse Sommerbetrieb (An/Aus)
                        my $patrone_ga = '4/2/110';           # Gruppenadresse E-Heizpatrone (An/Aus)
                        my $stellantrieb_ga = '4/2/105';      # Gruppenadresse Stellantrieb (%-Wert)
                        my $stellantrieb_auf = 100;           # Wert für Stellantrieb offen (%-Wert)
                        my $stellantrieb_zu = 0;              # Wert für Stellantrieb geschlossen (%-Wert)
                        my $modus_hk = '1';                   # Konnex Betriebsmudus RTR wenn Handtuchtrockner läuft
                        my $modus_ga = '4/2/91';              # Zwangsbetriebsmodus RTR Bad
                        my $zwang_fbh_ga = '4/2/97';          # Zwangsmodus für Stellantrieb FBH offen
                        my $laufzeit = 60*60*2;               # Laufzeit bis Auto Aus in sek.
                        ### Ende Definitionen
                        # Eigenen Aufruf-Zyklus auf 0 Sekunden setzen
                        $plugin_info{$plugname.'_cycle'} = 0;
                        # Plugin an Gruppenadresse "anmelden"
                        $plugin_subscribe{$hk_ga}{$plugname} = 1;
                         
                        #Prüfung, ob GA durch Schreibtransaktion angesprochen wurde
                        if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $hk_ga ) { 
                           #Wert für Handtuchtrockner lesen
                           my $hk_wert = knx_read($hk_ga,300,1);
                           #Ausführungszeit setzen
                           $plugin_info{$plugname.'_last'} = time();
                         
                           #Wert für Sommerbetrieb lesen
                           my $sommer_wert = knx_read($sommer_ga,300,1);      
                           #Kenner Laufzeit gestartet und Aufrufintervall des Plugin setzen
                           if ($hk_wert == 1) {
                             $plugin_info{$plugname.'_sema'} = 1;
                             $plugin_info{$plugname.'_cycle'} = $laufzeit;
                             }
                           if ($sommer_wert == 1) {
                             if ($hk_wert == 1) {
                               knx_write($patrone_ga, 1, 1);                           ##Heizpatrone einschalten
                               knx_write($stellantrieb_ga, $stellantrieb_zu, 5.001);   ##Stellantrieb für HK schließen
                               return "E-Patrone An";
                               }
                             else {
                               knx_write($patrone_ga,0,1);                             ##Heizpatrone ausschalten
                               knx_write($stellantrieb_ga, $stellantrieb_auf, 5.001);  ##Stellantrieb für HK öffnen   
                               return "E-Patrone Aus";
                               }
                             }
                           else {
                             knx_write($patrone_ga,0,1);
                             if ($hk_wert == 1) {
                               knx_write($stellantrieb_ga, $stellantrieb_auf, 5.001);  ##Stellantrieb für HK öffnen
                               knx_write($modus_ga, $modus_hk, 5.010);                 ##Betriebsmodus auf Anwesend zwingen
                               knx_write($zwang_fbh_ga, 1, 1);                         ##Stellanrieb zwingen 100% öffnen
                               return "WW-Heizung An";
                               }
                             else {
                               knx_write($stellantrieb_ga, $stellantrieb_zu, 5.001);   ##Stellantrieb für HK schließen
                               knx_write($modus_ga, 0, 5.010);                         ##Betriebsmodus Zwang zurücksetzen
                               knx_write($zwang_fbh_ga, 0, 1);                         ##Stellanrieb Zwang zurücksetzen
                               return "WW-Heizung Aus";
                               }
                             }
                           }
                        #Ausführung wenn Aufrufintervall/Laufzeit abgelaufen ist
                        elsif ($plugin_info{$plugname.'_sema'} == 1) {
                           #Heizkörper ausschalten,Kenner Laufzeit gestartet und Aufrufintervall des Plugin zurücksetzen 
                           $plugin_info{$plugname.'_sema'} = 0;
                           $plugin_info{$plugname.'_cycle'} = 0; 
                           knx_write($hk_ga,0,1);
                           }
                        return "Warte auf Telegramm";
                        Ich will den Code aber noch ausbauen, so daß ich mit dem genialen Decoder Plugin die Laufzeit vorgeben kann. z. B. 2x kurz = 2 Stunden

                        Danke nochmal an alle, die mir geholfen haben!
                        Sascha

                        Kommentar

                        Lädt...
                        X