Ankündigung

Einklappen
Keine Ankündigung bisher.

Umwälzpumpensteuerung für Kaminofen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [WireGate-Plugin] Umwälzpumpensteuerung für Kaminofen

    Hallo zusammen,

    angespornt durch die vielen anderen Plugins in letzter Zeit habe ich mich nun auch an mein Erstes gewagt.

    Bisher hatte ich dies mit linknx realisiert, hat mir aber nie wirklich gefallen und wollte es nun "richtig" machen... es wurde z.B. die Bewegungsfahrt ergänzt, da mir die Pumpe über den Sommer schon im ersten Jahr fest geworden ist.

    Da es mein erstes Plugin und auch mein erster Perl Programmierversuch ist bzw. ich eigentlich mir passende Schnipsel aus anderen Plugins zusammenkopiert habe, würde ich mich freuen wenn mal ein paar Profis drüber schauen ob es so funktioniert?

    Getestet hab ichs noch nicht... muss ja nicht meine Wassertasche zum Kochen bringen wenn ihr mir vorher schon sagen könnt was nicht passt

    Freuen würde ich mich über Verbesserungsvorschläge und Tips wie ich die "Offenen Punkte" noch realisieren kann.

    Danke schonmal

    circulating pump wood burner.pl:
    Code:
    ##############################################################################################################################
    # 
    # Plugin: Umwälzpumpensteuerung für Kaminofen
    # Datei: circulating pump wood burner.pl
    # V0.1 2012-08-27
    # Copyright: Christian Neumeier (neumeier.christian@gmx.de)
    # License: GPL (v3)
    #
    ##############################################################################################################################
    #
    # Temperaturgeführte Steuerung der Umwälzpumpe für wassergeführten Kaminofen
    # - Umwälzpumpe über vordefinierte Temperaturen Ein- und wieder Ausschalten
    # - Festwerden der Pumpe vermeiden -> wenn die Pumpe eine bestimmte Zeit nicht gelaufen ist einfach kurz starten
    #
    ##############################################################################################################################
    #
    # Änderungshistorie:
    # 20120827 - nEiMi - V0.1 Erste Version
    #
    ##############################################################################################################################
    #
    # Offene Punkte:
    # - Alarm wenn keine Temperatur mehr auf dem Bus gesendet wird -> defekter Fühler
    # - Laufzeit für Bewegungsfahrt, bis jetzt wird mit Eintreffen der nächsten zu niedrigen Temperatur sofort wieder abgeschaltet
    #
    ##############################################################################################################################
    #
    # plugin_info-Werte
    # - Letzter_Einschaltzeitpunkt: Timestamp als die Pumpe das letzte mal gelaufen ist
    #
    ##############################################################################################################################
    
    # Variablen aus Confi-Datei definieren
    my($GA_Temp_Kamin,$GA_Pumpe_EA,$Temp_Ein,$Temp_Aus,$Zeit_Bewegungsfahrt,$Zeit_Alarm,$Dauer_Bewegungsfahrt);
    # Confi-Datei einlesen
    &readConf;
    
    # Eigenen Aufruf-Zyklus auf 0 Sekunden setzen
    $plugin_info{$plugname.'_cycle'} = 0;
    # Plugin an Gruppenadresse "anmelden"
    $plugin_subscribe{$GA_Temp_Kamin}{$plugname} = 1;
    
    # Temperatur von Bus lesen
    my $Temp_Kamin = knx_read($GA_Temp_Kamin,300);
    # Umwälzpumpe Ein/Aus von Bus lesen
    my $Pumpe_EA = knx_read($GA_Pumpe_EA,300);
    
    # wenn Kamintemperatur grössergleich vordefinierter Einschalttemperatur und Pumpe Aus
    if (($Temp_Kamin => $Temp_Ein) && ($Pumpe_EA = 0)) {
    # dann Umwälzpumpe einschalten
    knx_write($GA_Pumpe_EA,1);
    # letzten Einschlatzeitpunkt merken
    $plugin_info{$plugname.'_Letzter_Einschaltzeitpunkt'} = time();
    }
    # wenn Kamintemperatur kleinergleich vordefinierter Ausschalttemperatur und Pumpe Ein
    elsif (($Temp_Kamin <= $Temp_Aus) && ($Pumpe_EA = 1)) {
    # dann Umwälzpumpe ausschalten
    knx_write($GA_Pumpe_EA,0);
    }
    # wenn Pumpe länger als die vordefinierte Zeit nicht mehr gelaufen ist
    elsif (($plugin_info{$plugname.'_Letzter_Einschaltzeitpunkt'} + $Zeit_Bewegungsfahrt) < time()) {
    # dann Umwälzpumpe einschalten
    knx_write($GA_Pumpe_EA,1);
    # letzten Einschlatzeitpunkt merken
    $plugin_info{$plugname.'_Letzter_Einschaltzeitpunkt'} = time();
    }
    circulating pump wood burner.conf:
    Code:
    ##############################################################################################################################
    # 
    # Plugin: Umwälzpumpensteuerung für Kaminofen
    # Datei: circulating pump wood burner.conf
    # V0.1 2012-08-27
    # Copyright: Christian Neumeier (neumeier.christian@gmx.de)
    # License: GPL (v3)
    #
    ##############################################################################################################################
    
    $GA_Temp_Kamin = '2/0/25'; # Gruppenadresse des Temperaturfühlers im Kaminofen
    $GA_Pumpe_EA = '9/0/10'; # Gruppenadresse der Umwälzpumpe Ein/Aus
    $Temp_Ein = '65'; # Temperatur bei der die Pumpe einschalten soll
    $Temp_Aus = '60'; # Temperatur bei der die Pumpe wieder ausschalten soll
    $Zeit_Bewegungsfahrt = '1209600'; # Zeit in Sekunden nach der die Pumpe wieder mal eine Bewegungsfahrt machen soll(hier 14 Tage)
    
    # noch nicht benötigte Variablen
    $Zeit_Alarm = '600'; # Zeit in Sekunden nach der Alarm geschlagen wird  wenn keine Temperatur mehr gesendet worden ist(Fühler defekt)
    $Dauer_Bewegungsfahrt = '15'; # Zeit in Sekunden wie lange die Bewegungsfahrt dauern soll
    cu Yfkt5A
    DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
    microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

    #2
    Da ich leider keine Antwort erhalten habe, wurde der Ofen heute angefeuert...

    Leider funzt das Script so nicht...

    Im Webif erscheint beim Rückgabewert: Undefined subroutine
    &main::readConf called at (eval 3062) line 36.

    Dachte eigentlich die brauche ich damit die Konfi-Datei gelesen wird.

    Habe dann aber die entsprechende Zeile auskommentiert, mit dem Erfolg dass garnichts mehr passiert.

    Wie kann ich prüfen woran es liegt bzw. wo das Script hängt?

    Edit:
    Habe gerade entdeckt das die Plugininfos im Webif angezeigt werden und deshalb jetzt direkt unter
    Code:
    $plugin_subscribe{$GA_Temp_Kamin}{$plugname} = 1;
    folgende Zeile eingefügt
    Code:
    $plugin_info{$plugname.'_GA_Temp_Kamin'} = $GA_Temp_Kamin;
    Im Webif bleibt diese leer, heisst also für mich das die Konfi garnicht eingelesen wird und er daher die GA auf die reagiert werden soll gar nicht bekannt ist...

    Wie lese ich die Konfi richtig ein?

    Edit 2:
    Hab jetzt mal die Konfi direkt in das Script mit eingebaut, lese nun den Status des Aktors und ein paar Pluginfos hinzugefügt:
    Code:
    # Variablen aus Confi-Datei definieren
    my($GA_Temp_Kamin,$GA_Pumpe_EA,$GA_Status_Pumpe_EA,$Temp_Ein,$Temp_Aus,$Zeit_Bewegungsfahrt,$Zeit_Alarm,$Dauer_Bewegungsfahrt);
    # Confi-Datei einlesen
    #&readConf();
    $GA_Temp_Kamin = '12/2/55'; # Gruppenadresse des Temperaturfühlers im Kaminofen
    $GA_Pumpe_EA = '6/1/1'; # Gruppenadresse der Umwälzpumpe Ein/Aus
    $GA_Status_Pumpe_EA = '6/0/1'; # Gruppenadresse Status der Umwälzpumpe Ein/Aus
    $Temp_Ein = '65'; # Temperatur bei der die Pumpe einschalten soll
    $Temp_Aus = '60'; # Temperatur bei der die Pumpe wieder ausschalten soll
    $Zeit_Bewegungsfahrt = '1209600'; # Zeit in Sekunden nach der die Pumpe wieder mal eine Bewegungsfahrt machen soll(hier 14 Tage)
    
    
    # Eigenen Aufruf-Zyklus auf 0 Sekunden setzen
    $plugin_info{$plugname.'_cycle'} = 30;
    # Plugin an Gruppenadresse "anmelden"
    $plugin_subscribe{$GA_Temp_Kamin}{$plugname} = 1;
    
    # Plugininfos:
    $plugin_info{$plugname.'_GA_Temp_Kamin'} = $GA_Temp_Kamin;
    $plugin_info{$plugname.'_GA_Pumpe_EA'} = $GA_Pumpe_EA;
    $plugin_info{$plugname.'_Temp_Ein'} = $Temp_Ein;
    $plugin_info{$plugname.'_Temp_Aus'} = $Temp_Aus;
    $plugin_info{$plugname.'_Zeit_Bewegungsfahrt'} = $Zeit_Bewegungsfahrt;
    
    # Temperatur von Bus lesen
    my $Temp_Kamin = knx_read($GA_Temp_Kamin,300);
    # Umwälzpumpe Ein/Aus von Bus lesen
    my $Pumpe_EA = knx_read($GA_Status_Pumpe_EA,300);
    
    # Plugininfos:
    $plugin_info{$plugname.'_Temp_Kamin'} = $Temp_Kamin;
    $plugin_info{$plugname.'_Pumpe_EA'} = $Pumpe_EA;
    
    # wenn Kamintemperatur grössergleich vordefinierter Einschalttemperatur und Pumpe Aus
    if (($Temp_Kamin => $Temp_Ein) && ($Pumpe_EA == 0)) {
    # dann Umwälzpumpe einschalten
    knx_write($GA_Pumpe_EA,1);
    # letzten Einschlatzeitpunkt merken
    $plugin_info{$plugname.'_Letzter_Einschaltzeitpunkt'} = time();
    }
    # wenn Kamintemperatur kleinergleich vordefinierter Ausschalttemperatur und Pumpe Ein
    elsif (($Temp_Kamin <= $Temp_Aus) && ($Pumpe_EA == 1)) {
    # dann Umwälzpumpe ausschalten
    knx_write($GA_Pumpe_EA,0);
    }
    # wenn Pumpe länger als die vordefinierte Zeit nicht mehr gelaufen ist
    elsif (($plugin_info{$plugname.'_Letzter_Einschaltzeitpunkt'} + $Zeit_Bewegungsfahrt) < time()) {
    # dann Umwälzpumpe einschalten
    knx_write($GA_Pumpe_EA,1);
    # letzten Einschlatzeitpunkt merken
    $plugin_info{$plugname.'_Letzter_Einschaltzeitpunkt'} = time();
    }
    bis auf die Info Pumpe_EA werden nun alle angezeigt, warum diese nicht? Der Aktor sendet fleissig auf den Bus...
    cu Yfkt5A
    DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
    microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

    Kommentar


      #3
      So, hab das Script vorerst auf das wesentliche gekürzt und so funktioniert es jetzt auch:
      Code:
      # Variablen aus Confi-Datei definieren
      my($GA_Temp_Kamin,$GA_Pumpe_EA,$GA_Status_Pumpe_EA,$Temp_Ein,$Temp_Aus,$Zeit_Bewegungsfahrt,$Zeit_Alarm,$Dauer_Bewegungsfahrt);
      # Confi-Datei einlesen
      #&readConf();
      $GA_Temp_Kamin = '12/2/55'; # Gruppenadresse des Temperaturfühlers im Kaminofen
      $GA_Pumpe_EA = '6/1/1'; # Gruppenadresse der Umwälzpumpe Ein/Aus
      $GA_Status_Pumpe_EA = '6/0/1'; # Gruppenadresse Status der Umwälzpumpe Ein/Aus
      $Temp_Ein = '75'; # Temperatur bei der die Pumpe einschalten soll
      $Temp_Aus = '65'; # Temperatur bei der die Pumpe wieder ausschalten soll
      $Zeit_Bewegungsfahrt = '1209600'; # 1209600 Zeit in Sekunden nach der die Pumpe wieder mal eine Bewegungsfahrt machen soll(hier 14 Tage)
      
      
      # Eigenen Aufruf-Zyklus auf 0 Sekunden setzen
      $plugin_info{$plugname.'_cycle'} = 0;
      # Plugin an Gruppenadresse "anmelden"
      $plugin_subscribe{$GA_Temp_Kamin}{$plugname} = 1;
      
      # Plugininfos:
      $plugin_info{$plugname.'_GA_Temp_Kamin'} = $GA_Temp_Kamin;
      $plugin_info{$plugname.'_GA_Pumpe_EA'} = $GA_Pumpe_EA;
      $plugin_info{$plugname.'_Temp_Ein'} = $Temp_Ein;
      $plugin_info{$plugname.'_Temp_Aus'} = $Temp_Aus;
      my $Zeit_Bewegungsfahrt_Tage = $Zeit_Bewegungsfahrt/=60*60*24;
      $plugin_info{$plugname.'_Zeit_Bewegungsfahrt'} = $Zeit_Bewegungsfahrt_Tage." Tage";
      
      # Temperatur von Bus lesen
      my $Temp_Kamin = knx_read($GA_Temp_Kamin,0);
      # Umwälzpumpe Ein/Aus von Bus lesen
      my $Pumpe_EA = knx_read($GA_Status_Pumpe_EA,0);
      
      # Plugininfos:
      $plugin_info{$plugname.'_Temp_Kamin'} = $Temp_Kamin;
      $plugin_info{$plugname.'_Pumpe_EA'} = $Pumpe_EA;
      
      # wenn Kamintemperatur grössergleich vordefinierter Einschalttemperatur und Pumpe Aus
      if ($Temp_Kamin >= $Temp_Ein && $Pumpe_EA == 0) {
          # dann Umwälzpumpe einschalten
          knx_write($GA_Pumpe_EA,1);
          # letzten Einschlatzeitpunkt merken    
          $plugin_info{$plugname.'_Letzter_Einschaltzeitpunkt'} = localtime();
          # Zeitpunkt der Bewegungsfahrt berechnen
          $plugin_info{$plugname.'_Naechste_Bewegungsfahrt'} = localtime(time + $Zeit_Bewegungsfahrt);
          }
      # wenn Kamintemperatur kleinergleich vordefinierter Ausschalttemperatur und Pumpe Ein
      elsif ($Temp_Kamin <= $Temp_Aus && $Pumpe_EA == 1) {
          # dann Umwälzpumpe ausschalten
          knx_write($GA_Pumpe_EA,0);
          }
      Den Teil mit der Bewegungsfahrt habe ich nun vorerst rausgenommen, ausserdem weiss ich immer noch nicht wie ich die Konfi in die seperate Datei auslagern kann.
      cu Yfkt5A
      DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
      microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

      Kommentar

      Lädt...
      X