Hab den knxd seit Ende Februar laufen (mit zwei Wochen Unterbrechung). Bislang habe ich nicht auf den Spreicherverbrauch geachtet. Wenn ich mir die rrd ansehen, sieht es jedoch so aus, als würde knxd regelmäßig neustarten, wenn ca. 20MB voll sind (ich nehme an die Einheit ist MB, rrd im Anhang).
Ankündigung
Einklappen
Keine Ankündigung bisher.
Plugins auslagern - eBus/KNX Daemon
Einklappen
Dieses Thema ist geschlossen.
X
X
-
Puh ... der verbrät auf dem WireGate 20.00 MB / Tag.
Jetzt weiß ich nicht welche Revision des Plugins da bei Dir vorher drauf war, also müsste man das jetzt noch mal beobachten.
Nur so zum Vergleich, der knxd braucht auf dem Pi mit wheezy 0.01 MB / Woche.
Das macht jetzt erstmal nichts ist aber durchaus interessant.Umgezogen? Ja! ... Fertig? Nein!
Baustelle 2.0 !
Kommentar
-
Vielleicht noch eine Sache, die mir gerade auffällt:
knxd schreib ja zyklisch auf den Bus, unabhängig davon, ob sich ein Wert geändert hat oder nicht.
Jetzt möchte ich z.B. den Betriebsmodus verwenden (plugin_subscribe), um bei WW Speicherladung auch die Zirkulationspumpe laufen zu lassen. Nun wird alle X Sekunden das wiregate Plugin aufgerufen, weil knxd den Betriebsmodus schreibt (obwohl keine Änderung des Modus vorliegt).
Das ist zunächst kein wirkliches Problem, irritiert jedoch etwas, da es doch eher typisch ist Werte nur bei Änderung auf den Bus zu schreiben. Vielleicht ist das auch nur Geschmackssache.
Kommentar
-
Zitat von JuMi2006 Beitrag anzeigenPuh ... der verbrät auf dem WireGate 20.00 MB / Tag.
Jetzt weiß ich nicht welche Revision des Plugins da bei Dir vorher drauf war, also müsste man das jetzt noch mal beobachten.
Kommentar
-
Ja ist Geschmackssache. Das Problem liegt da aber im ebusd. Da hab ich aber heute Nacht drüber gegrübelt und mir was überlegt was ich mit Roland mal abklopfen müsste. Das ist dann aber definitiv ein ebusd-Feature.
Ich kann Dir sonst mein WW-Zirkulation-Plugin mal anhängen. Dies beinhaltet auch ein PWM-Modul. Vorgehensweise ist bei mir folgende:
Die Zirkualtionspumpe hängt am Schaltaktor, Spannungsversorgung ist der Ausgang für die Zirkulationspumpe in der Wärmepumpe.
WW-Bereitung ist an der WP folgendermaßen eingestellt: 6:30 - 7:00 und 8:00-22:30. Zirkulationspumpe auf 100%.
In der Woche sind wir bis 8:00 spätestens aus dem Haus, die halbe Stunde von 6:30 bis 7:00 reicht um im Zweifel das Wasser auf Duschtemperatur zu bringen. Verlassen wir das Haus wird über ein zweites Plugin die WW-Betriebsart von "Auto" auf "Aus" gestellt. Der Schaltaktor macht dann zwar weiter sein PWM aber die Zirkulationspumpe bekommt keinen Strom. Bei Vaillant wird die nur zugeschaltet wenn auch die (zeitliche) Freigabe für WW erfolgt.
Damit habe ich dann auch an Feiertagen und bei Krankheit ab 8:00 warmes Wasser. Wenn den ganzen Tag/Wochenende keiner da ist dann wird auch kein WW bereitet. Das sind hier insgesamt 3 Plugins:
- Präsenz
- Zirkulationspumpe
- WW-Modus
Die Präsenz wird über iButtons ausgewertet.
Code:###Zirkulationspumpe ### MAIN ### # Variablen definieren my $time = time(); my $ww; my $zirk_ga = '8/4/1'; #GA Zirkulationspumpe my $praesenz_ga = '0/7/0'; #GA fuer Meldung der Praesenz my $base_time = 60; #Zykuluszeit in Minuten my $on_perc = 7; #Einschaltdauer in Prozent my $ww_ga = '8/6/1'; #GA fuer Statusuebertragung Heizung my $ww_ga_val = '8'; #Wert fuer WW-Bereitung von GA $plugin_subscribe{$ww_ga}{$plugname} = 1; $plugin_info{$plugname.'_cycle'} = 60; ### CHECK WARMWASSERBEREITUNG if (knx_read($ww_ga,300) == $ww_ga_val) { $ww = 1; #plugin_log($plugname, "WW-Bereitung"); }else{} ### MAIN / VERARBEITUNG if ($ww == 1) { #Zirkulation waehrend WW-Bereitung knx_write($zirk_ga,1,1.001); plugin_log($plugname, "WW-Bereitung"); } else { & pwm; #plugin_log($plugname, "PWM"); } return; #-------------S U B S -------------# ### PWM ### sub pwm{ my $on_time = (($base_time/100)*$on_perc); my $off_time = ($base_time - $on_time); $on_time *= 60; #Minuten in Sekunden umrechnen $off_time *= 60; #Minuten in Sekunden umrechnen if ($plugin_info{$plugname.'_state'} eq 'pwm-off') #status = aus { if (($plugin_info{$plugname.'_stat-time'} + $off_time) <= $time) #zyklus aus ist vorbei { #ANSCHALTEN knx_write($zirk_ga,1,1.001); #STATUS = EIN setzen $plugin_info{$plugname.'_state'} = 'pwm-on'; #ANZEIT = jetzt $plugin_info{$plugname.'_stat-time'} = $time; } else { #Senden wiederholen# #knx_write($zirk_ga,0,1.001); } } else {} if ($plugin_info{$plugname.'_state'} eq 'pwm-on') #status = an { if (($plugin_info{$plugname.'_stat-time'} + $on_time) <= $time) #zyklus an ist vorbei { #AUSCHALTEN knx_write($zirk_ga,0,1.001); #STATUS = AUS setzen $plugin_info{$plugname.'_state'} = 'pwm-off'; #AUSZEIT = JETZT $plugin_info{$plugname.'_stat-time'} = $time; } else { #Senden wiederholen# #knx_write($zirk_ga,1,1.001); } } else {} if (($plugin_info{$plugname.'_stat-time'} + $on_time + $off_time) <= $time) #initialisierung { #ANSCHALTEN knx_write($zirk_ga,1,1.001); #STATUS = EIN setzen $plugin_info{$plugname.'_state'} = 'pwm-on'; #ANZEIT = jetzt $plugin_info{$plugname.'_stat-time'} = $time; plugin_log($plugname, "INITIALISIERUNG nach Abwesenheit"); } else {} }
Code:#WW-Modus #return; my $ww_mode_set_ga = "8/7/200"; my $ww_mode_get_ga = "8/6/200"; my $ww_mode_val_auto = 3; my $ww_mode_val_off = 2; my $praesenz_ga = "0/7/0"; $plugin_subscribe{$praesenz_ga}{$plugname} = 1; $plugin_info{$plugname.'_cycle'} = 30; if (knx_read($praesenz_ga,300,1) == 0){ if (knx_read($ww_mode_get_ga,300,1) == $ww_mode_val_auto) { knx_write($ww_mode_set_ga,$ww_mode_val_off,1); plugin_log($plugname, "WW-Modus aus"); } } else { if (knx_read($ww_mode_get_ga,300,1) == $ww_mode_val_off) { knx_write($ww_mode_set_ga,$ww_mode_val_auto,1); plugin_log($plugname, "WW-Modus auto"); } }
Umgezogen? Ja! ... Fertig? Nein!
Baustelle 2.0 !
Kommentar
-
Kleiner Zusatz, man könnte das senden auf den Bus natürlich auch verhindern sofern der Wert sich nicht geändert hat ... ich bin allerdings eher der Freund von zyklischen Telegrammen.
Das müsste dann optional sein, ich lass mir was einfallen.
EDIT:
Momentan müsste man das global so halten, wo sollte sich dass denn optimalerweise Konfigurieren lassen?
Lokale RRDs wären erstmal nicht betroffen, nur wenn man Remote RRDs erzeugen will macht das natürlich keinen Sinn.
Der Ansatz steht.Umgezogen? Ja! ... Fertig? Nein!
Baustelle 2.0 !
Kommentar
-
@XueSheng:
Ich habs jetzt mal ins SVN geladen und dabei noch ein paar Sachen bzgl. memleaks gändert. Wäre nett wenn Du es mal testen könntest.
Der Name des Plugins ist jetzt auf eBus_plugin.pl festgelegt ... ich versuche ihn nicht mehr zu ändern.
GrüßeUmgezogen? Ja! ... Fertig? Nein!
Baustelle 2.0 !
Kommentar
-
Kurzes Feedback:
"Nicht-zyklisches" senden scheint zu funktionieren. Soweit ich das in meinen Logs überblicken konnte, sind alle relevanten Statusänderungen gesendet worden.
Speicherverbrauch hat sich zwar verbessert, ist jedoch noch immer jendseits von Gut und Böse. Vorher sind die 20MB innerhalb von 2-3h vollgelaufen. Nun dauert es etwas über 6h, bis der Speicher die 20MB Grenze erreicht.
Kommentar
-
Die gute Nachricht:
Hat sich verbessert
Die schlechte Nachricht:
Mehr geht wohl nicht.
Scheint also mehr oder weniger ein Plattform-Problem zu sein. Bei Roland und mir läuft der unauffällig durch und das jenseits von 20MB.
Kannst Du den knxd mal ohne Plugin laufen lassen?Umgezogen? Ja! ... Fertig? Nein!
Baustelle 2.0 !
Kommentar
Kommentar