Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugins auslagern - eBus/KNX Daemon

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

    #31
    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).
    Angehängte Dateien

    Kommentar


      #32
      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


        #33
        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


          #34
          Zitat von JuMi2006 Beitrag anzeigen
          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.
          Ende Februar hatte ich das damalige SVN gezogen. Vor ca. einer Woche habe ich dann knxd runtergeworfen und das knxd-0.1_all.deb aus dem trunc installiert.

          Kommentar


            #35
            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"); 
                } 
            }
            Funktioniert hier wirklich hervorragend. Vielleicht hilft das ein wenig.
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              #36
              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


                #37
                @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üße
                Umgezogen? Ja! ... Fertig? Nein!
                Baustelle 2.0 !

                Kommentar


                  #38
                  Hab knxd jetzt mal aus dem svn aktualisiert. Werd das bis morgen mal beobachten und wieder berichten.

                  Kommentar


                    #39
                    Soll das mit dem Senden bei Änderung erstmal global einstellbar sein?
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      #40
                      Global wäre gut. Dann kann man das erstmal testen.

                      Kommentar


                        #41
                        Ist im SVN eingebaut:

                        SourceForge.net Repository - [openautomation] Revision 1703
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          #42
                          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


                            #43
                            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


                              #44
                              Ohne Plugin heisst, dass ich dieses nur löschen muss (also in dem Ordner/etc/knxd/plugins/)?

                              Kommentar


                                #45
                                Ja einfach löschen.
                                Umgezogen? Ja! ... Fertig? Nein!
                                Baustelle 2.0 !

                                Kommentar

                                Lädt...
                                X