Zurück   KNX-User-Forum > Öffentlicher Bereich > KNX EIB Forum > Code-Schnipsel
knx-user-forum - International KNX Award Winner 2010


Links
Kalender
Spende

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 02.09.2012, 10:08
Benutzer
 
Registriert seit: 15.03.2010
Ort: Bayern
Beiträge: 108
nEiMi ist zur Zeit noch ein unbeschriebenes Blatt
Beitrag 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 nEiMi
1-Wire(Wiregate), DALI(ABB DG/S1.1), HTPC(XBMC+VDR), Dreambox 7020S, QNAP TS-509, Zehnder ComfoAir 200 L Luxe
01.04.11 Eingezogen, aber natürlich längst noch nicht alles fertig... Sockelleisten, Übergangsleisten, Hobbyraum fliesen, Garten, Aussenanlagen und Automatisieren/Optimieren...
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #2  
Alt 05.09.2012, 23:05
Benutzer
 
Registriert seit: 15.03.2010
Ort: Bayern
Beiträge: 108
nEiMi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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 nEiMi
1-Wire(Wiregate), DALI(ABB DG/S1.1), HTPC(XBMC+VDR), Dreambox 7020S, QNAP TS-509, Zehnder ComfoAir 200 L Luxe
01.04.11 Eingezogen, aber natürlich längst noch nicht alles fertig... Sockelleisten, Übergangsleisten, Hobbyraum fliesen, Garten, Aussenanlagen und Automatisieren/Optimieren...

Geändert von nEiMi (06.09.2012 um 00:18 Uhr) Grund: selber weitergetestet
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #3  
Alt 24.09.2012, 23:07
Benutzer
 
Registriert seit: 15.03.2010
Ort: Bayern
Beiträge: 108
nEiMi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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 nEiMi
1-Wire(Wiregate), DALI(ABB DG/S1.1), HTPC(XBMC+VDR), Dreambox 7020S, QNAP TS-509, Zehnder ComfoAir 200 L Luxe
01.04.11 Eingezogen, aber natürlich längst noch nicht alles fertig... Sockelleisten, Übergangsleisten, Hobbyraum fliesen, Garten, Aussenanlagen und Automatisieren/Optimieren...
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort

Stichworte
umwälzpumpe, wiregate

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[KNX/EIB] Heizungssteuerung Solar Pelletofen Kaminofen mit Wassertasche + Visulaisierung rkshorty KNX EIB Forum 32 20.11.2011 13:39
PT100 für Rauchgasmessung am Kaminofen nEiMi KNX EIB Forum 8 23.02.2011 17:08
[KNX/EIB] Temperaturwächter Kaminofen mini KNX EIB Forum 14 15.02.2011 20:05
Fussbodenheizung und Kaminofen wie Regeln? frischling KNX EIB Forum 28 10.07.2009 22:25
OT: Die Heizungssteuerung in Verbindung mit einem Kaminofen redstar Sonstiges / Verwaltung / Archiv 1 05.02.2008 23:10


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:42 Uhr.



SEO by vBSEO