Ankündigung

Einklappen
Keine Ankündigung bisher.

zu viele Threads "idle"

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

    zu viele Threads "idle"

    ich habe ein Problem, nach ca. 24 Stunden wird mein py sehr langsam, dass liegt meiner MEinung nach daran, dass irgendetwas die Threats nicht richti schließt. Ich habe mich nun mit Telnet über Cli die Threats angeschaut und sehe, dass dort viele Lehrlaufthreats anscheinend erhalten bleiben:

    PHP-Code:
    10 Threads:
               
    Scheduler
                        idle
                            Aussen
    .Temperatur_Ofen_Luft-eval
                                                            
    strom.rest.WmRest
                                                                             strom_gesamt
                                                                                         Main
                                                                                             idle
                                                                                                 idle
                                                                                                     idle
                                                                                                         strom
    .rest.Momentanleistung_freq
                                                                                                                                         
    > lt
    10 Threads
    :
               
    Scheduler
                        strom
    .gesamt.Zaehlerstand
                                                 idle
                                                     Aussen
    .Temperatur_Ofen_Luft-eval
                                                                                     
    idle
                                                                                         Main
                                                                                             idle
                                                                                                 idle
                                                                                                     idle
                                                                                                         strom
    .rest.Zaehlerstand
                                                                                                                                
    > lt
    12 Threads
    :
               
    Scheduler
                        idle
                            strom
    .rest.WmRest
                                             idle
                                                 idle
                                                     idle
                                                         Main
                                                             Update_WMZ
                                                                       idle
                                                                           idle
                                                                               idle
                                                                                   idle 
    woher weiß ich nun was diese Lehrlaufprozesse verursacht?

    #2
    Das passiert, wenn viele Aktionen gleichzeitig ablaufen, z.B. wenn Du viele Items per Eval gleichzeitig aktualisierst,. oder wenn eine Logik nicht beendet wird. Hatte ich auch bei meiner RGBW Steuerung. Allerdings habe ich nie einen Slow-Down feststellen können- und ich hatte da 30 Threads. 12 Threads -die meisten davon Idle- sind jetzt eigentlich nichts weltbewegendes. Bist Du sicher, dass Dein Performance Problem daran liegt?

    Gruss
    Jochen.

    Kommentar


      #3
      Halo Jochen,

      danke für Deine Antwort - nein ich bin nicht sicher, ob es daran liegt. momentan ist das System aber wieder eingeschlafen (smarthome.py ist noch aktiv und schreibt ins log, ist aber z.B. für Smartvisu nicht mehr erreichbar, bzw. antwortet nicht rechtzeitig.
      Auch über Cli kann ich das System nicht mehr erreichen. Im Logo habe ich nun folgendes gefunden:

      PHP-Code:
      2015-06-04 10:30:54 ERROR    Scheduler    Needing more worker threads than the specified maximum of 20!
      2015-06-04 10:30:54 INFO     Scheduler    Threads: Scheduler: 1, strom_herd: 1, strom.rest.WmRest: 1, strom.Buero.Momentanleistung_freq: 1, strom_Buero: 1, strom.Buero.Zaehlerstand: 1, strom.WP.Momentanleistung_freq: 3, idle: 5, solar: 1, strom.rest.Zaehlerstand: 1, strom_rest: 1, strom.rest.Momentanleistung_freq: 1, strom.gesamt.Zaehlerstand: 1, Main: 1, strom.WP.Zaehlerstand: 2
      2015
      -06-04 10:30:54 INFO     Scheduler    Adding worker thread. Total: 21
      2015
      -06-04 10:30:54 INFO     Scheduler    Threads: Scheduler: 1, strom_herd: 1, Thread-21: 1, strom.rest.WmRest: 1, strom.Buero.Momentanleistung_freq: 1, strom_Buero: 1, strom.Buero.Zaehlerstand: 1, strom.WP.Momentanleistung_freq: 3, idle: 5, solar: 1, strom.rest.Zaehlerstand: 1, strom_rest: 1, strom.rest.Momentanleistung_freq: 1, strom.gesamt.Zaehlerstand: 1, Main: 1, strom.WP.Zaehlerstand: 2 
      anscheinend ist die Berechnung der Momentanleistung bzw. der Zugriff auf die Datenbank nicht möglich, meine Strom items sehen so aus:
      PHP-Code:
          [[Buero]]
              [[[
      Counter]]]
                  
      name = Buero_Counter
                  type 
      = num
                  cache 
      = on
                  knx_dpt 
      = 12
                  enforce_updates
      =yes
                  knx_listen 
      = 3/0/2
                  
              
      [[[Zaehlerstand]]]
                  
      name = Buero_Zaehlerstand
                  type 
      = num
                  cache 
      = on
                  sqlite 
      = yes
                  
      eval = sh.strom.Buero.Counter()/2000
                  eval_trigger 
      = strom.Buero.Counter
                  enforce_updates
      =yes
                  visu
      =yes
                      
                
      [[[Momentanleistung_freq]]]
                  
      name = Buero_Momentanleistung_freq
                  type 
      = num
                  sqlite 
      = yes
                  
      #Frequenzzähler: Jeder Counter=1/800kWh=3600/800kws=3600/800*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                  #Frequenzzähler: Jeder Counter=1/2000kWh=3600/2000kws=3600/2000*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                  
      eval = 0 if int(value) == 0 else 1800/sh.strom.Buero.Counter.prev_age()
                  
      autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
                  
      eval_trigger=strom.Buero.Counter 
      Ich hatte vorher einen Beaglebone, dieser ist aber leider kaputt gegangen und jetzt bin ich zurück auf den Raspberry. Auf dem Beaglebone hatte ich das Problem nicht - ich schätze es hat was mit sqlite bzw. der Zugriffsgeschwindigkeit auf die SD zu tun. Vielleicht sollte ich die Momentanleistung lieber nur alle 30 Sekunden aktualisieren und nicht mit jedem Impuls.

      Kommentar


        #4
        Also beim Pi solltest Du was Schreibzugriffe auf die SD angeht mit Bedacht umgehen, sonst verabschiedet die sich recht schnell. Wie's im Log aussieht, hast Du mehr als die geposteten Items so implementiert...
        Laufen die Logiken noch? Was sagen RAM und CPU-Last- läuft da was hoch?
        Die Granularität zu reduzieren ist sicher kein schlechter Ansatz, wobei ich nicht so recht glaube, dass das eigentliche Problem von da kommt.
        Verwendest Du das fertige Pi Image, den Develop oder Release Branch?

        Gruss
        Jochen

        Kommentar


          #5
          Hi,

          ich habe das fertige smarhome.pi image wobe ich auf develop gewechselt bin, Last ist momentan zweichen 0,9 und 1,2 wobei sie vorher innerhalb von ca. 3 Stunden auf über 2 gestiegen ist (dann war smarthome.py nicht mehr erreichbar). Die Logiken liefen dann noch aber teilweise mit 2 Minuten Verspätung.

          Ich habe insgesamt 7 dieser Stromitems. Ich habe jetzt bei der Berechnung des Reststromwertes etwas geändert, vielleicht lag der Hund hier begraben. Vorher hatte ich versucht die aktuelle Leistung nur alle 30 Sekunden zu berechnen, das hat aber auch nicht geholfen.

          Ich habe eine SLC Speicherkarte um die Lebenszeit zu verlängern und die Zugriffszeit zu verkürzen, naja es geht wohl doch nichts über einen Beaglebone mit fest verbautem Speicher. Smartvisu läuft auf einem externen Server.

          Kommentar


            #6
            Hallo Marco,

            die Threads aus Post #1 sehen unproblematisch aus.
            Bei #3 deuten sich Probleme an, da die Threadzahl so hoch geht und viele Threads mit ?trivialen? Evals beschäftigt sind.
            Spitzenreiter mit drei Threads hier strom.WP.Momentanleistung_freq: 3
            Hast Du evtl. einen Endless Loop gebaut mit den Triggern? Das würde die hohe Last erklären, ansonsten sollten die Eval den Pi eher langweilen.
            Oder wie oft kommt den so ein Impuls/s?

            Bis bald

            Marcus

            Kommentar


              #7
              Danke, dass Du es Dir anschaust. Also bei der WP kommen 1000 Impulse pro KW, die Pumpe zieht ca. 5-6KW, das sind 5000 - 6000 impulse in der Stunde also fast. 2 in der Sekunde, das könnte den counter schon ein wenig beschäftigen? Wäre es da schlauer den Zählerstand zyklisch zu aktualisieren?

              Kommentar


                #8
                Hallo,

                für mich würde eine Aktualisierung jede Minute oder alle fünf Minuten reichen, ob das für Dich reicht. Daher würde ich das empfehlen.
                Aber es kann auch nicht sein, das 2 eval / Sekunde das System lahm legen. Das glaube ich auch nicht.

                Wie gesagt, ich vermute eher ein endless loop

                endless loop: siehe loop endless
                loop endless: siehe endless loop

                Poste doch mal deine komplette Strom.conf. Vllt. kann ich einen Fehler sehen.

                Bis bald

                Marcus

                Kommentar


                  #9
                  danke für das Angebot, das nehme ich natürlich gerne an. Kann es eventuell an den gleichzeitigen Zugriffen auf die Datenbank liegen?

                  in der Zip Datei im Anhang:
                  strom.conf
                  logic.conf
                  sowie eine Bespiellogik

                  Angehängte Dateien

                  Kommentar


                    #10
                    Ich sehe keinen Anhang, ich sehe nur ein Fragezeichen.
                    Es gibt keine gleichzeitigen Zugriffe auf die Datenbank. Immer nur ein Zugriff zur gleichen Zeit. Die anderen Threads müssen warten. Aber ich denke das dürfte hier kein Problem sein.
                    Post doch mal den Kram direkt.

                    Bis bald

                    Marcus

                    Kommentar


                      #11
                      ja, habe versucht es als Zip anzuhängen, das scheint nicht zu gehen:
                      Wird jetzt länger...
                      strom.conf:

                      PHP-Code:
                      [strom]

                      [[
                      gesamt]]
                              [[[
                      Counter]]]
                                  
                      name = gesamt_Counter
                                  type 
                      = num
                                  cache 
                      = on
                                  sqlite 
                      = yes
                                  knx_dpt 
                      = 12
                                  knx_listen 
                      = 3/0/8
                                  enforce_updates
                      =yes            
                                  
                              
                      [[[Zaehlerstand]]]
                                  
                      name = gesamt_Zaehlerstand
                                  type 
                      = num
                                  cache 
                      = on
                                  sqlite 
                      = yes
                                  
                      eval = sh.strom.gesamt.Counter()/1000
                                  eval_trigger 
                      = strom.gesamt.Counter
                                  enforce_updates
                      =yes
                                  visu
                      =yes
                                  
                              
                      [[[Momentanleistung_freq]]]
                                  
                      name = gesamt_Momentanleistung_freq
                                  type 
                      = num
                                  cache 
                      = on
                                  sqlite 
                      = yes
                                  
                      #Frequenzzähler: Jeder Counter=1/800kWh=3600/800kws=3600/800*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  #Frequenzzähler: Jeder Counter=1/2000kWh=3600/2000kws=3600/2000*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  #Frequenzzähler: Jeder Counter=1/5000kWh=3600/5000kws=3600/5000*1000Ws = 720; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  
                      eval = 0 if int(value) == 0 else 3600/sh.strom.gesamt.Counter.prev_age()
                                  
                      autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
                                  
                      eval_trigger=strom.gesamt.Counter
                                  enforce_updates
                      =yes

                              
                      [[[kwh7d]]]
                                      
                      name = gesamt_kwh_7d
                                     type 
                      = num
                                  
                      #eval = sh.strom.gesamt.Zaehlerstand()- sh.strom.gesamt.Zaehlerstand.db('min','7d')
                                  #crontab = * * * * = 1
                                      #eval_trigger = strom.gesamt.Zaehlerstand
                                  
                      visu = yes
                                      

                              
                      [[[kwh24h]]]
                                      
                      name = gesamt_kwh_24h
                                     type 
                      = num
                                  
                      #eval = sh.strom.gesamt.Zaehlerstand()- sh.strom.gesamt.Zaehlerstand.db('min','1d')
                                  #crontab = * * * * = 1
                                      #eval_trigger = strom.gesamt.Zaehlerstand
                                  
                      visu = yes
                              
                              
                      [[[kwh1h]]]
                                      
                      name = gesamt_kwh_1h
                                     type 
                      = num
                                  
                      #eval = sh.strom.gesamt.Zaehlerstand()- sh.strom.gesamt.Zaehlerstand.db('min', '1h')    
                                  #crontab = * * * * = 1
                                      #eval_trigger = strom.gesamt.Zaehlerstand
                                  
                      visu = yes


                              
                      [[[tagesverbrauch]]]
                                  
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on

                              
                      [[[wochenverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on
                                  
                              
                      [[[monatsverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on
                          
                      [[herd]]
                              [[[
                      Counter]]]
                                  
                      name = Herd_Counter
                                 type 
                      = num
                              cache 
                      = on
                                  knx_dpt 
                      = 12
                                  knx_listen 
                      = 3/0/0
                              enforce_updates
                      =yes    
                              
                              
                      [[[Zaehlerstand]]]
                                  
                      name = Herd_Zaehlerstand
                                 type 
                      = num
                              cache 
                      = on
                              sqlite 
                      = yes
                                  
                      eval = sh.strom.herd.Counter()/800
                                  eval_trigger 
                      = strom.herd.Counter
                              enforce_updates
                      =yes    
                              visu
                      =yes

                              
                      [[[Momentanleistung_freq]]]
                                  
                      name = Herd_Momentanleistung_freq
                                 type 
                      = num
                                  sqlite 
                      = yes
                                  
                      #Frequenzzähler: Jeder Counter=1/800kWh=3600/800kws=3600/800*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  #Frequenzzähler: Jeder Counter=1/2000kWh=3600/2000kws=3600/2000*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  
                      eval = 0 if int(value) == 0 else 4500/sh.strom.herd.Counter.prev_age()
                              
                      autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
                                  
                      eval_trigger=strom.herd.Counter
                              
                              
                      [[[kwh7d]]]
                                 
                      name = herd_kwh7d
                                 type 
                      = num
                              
                      #eval = sh.strom.herd.Zaehlerstand()- sh.strom.herd.Zaehlerstand.db('min','7d')
                              #crontab = * * * * = 1
                                  #eval_trigger = strom.herd.Zaehlerstand
                              
                      visu = yes
                                      
                              
                      [[[kwh24h]]]
                                  
                      name = herd_kwh_24h
                                  type 
                      = num
                              
                      #eval = sh.strom.herd.Zaehlerstand()- sh.strom.herd.Zaehlerstand.db('min','1d')
                              #crontab = * * * * = 1
                                  #eval_trigger = strom.herd.Zaehlerstand
                              
                      enforce_updates=yes
                              visu 
                      = yes
                              
                              
                      [[[kwh1h]]]
                                  
                      name = herd_kwh_1h
                                  type 
                      = num
                              
                      #eval = sh.strom.herd.Zaehlerstand()- sh.strom.herd.Zaehlerstand.db('min', '1h')
                              #crontab = * * * * = 1
                                  #eval_trigger = strom.herd.Zaehlerstand
                              
                      enforce_updates=yes
                              visu 
                      = yes

                              
                      [[[tagesverbrauch]]]
                                  
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on

                              
                      [[[wochenverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on
                                  
                              
                      [[[monatsverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on
                                  
                          
                      [[WP]]
                              [[[
                      Counter]]]
                                  
                      name = WP_Counter
                                  type 
                      = num
                                  cache 
                      = on
                                  knx_dpt 
                      = 12
                                  enforce_updates
                      =yes
                                  knx_listen 
                      = 3/0/1
                              
                              
                      [[[Zaehlerstand]]]
                                  
                      name = WP_Zaehlerstand
                                  type 
                      = num
                                  cache 
                      = on
                                  sqlite 
                      = yes
                                  
                      eval = (sh.strom.WP.Counter()/800)+2476
                                  eval_trigger 
                      = strom.WP.Counter
                                  enforce_updates
                      =yes
                                  visu
                      =yes
                                  
                                    
                      [[[Momentanleistung_freq]]]
                                  
                      name = WP_Momentanleistung_freq
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  
                      #Frequenzzähler: Jeder Counter=1/800kWh=3600/800kws=3600/800*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  #Frequenzzähler: Jeder Counter=1/2000kWh=3600/2000kws=3600/2000*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  
                      eval = 0 if int(value) == 0 else 4500/sh.strom.WP.Counter.prev_age()
                                  
                      autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
                                  
                      eval_trigger=strom.WP.Counter

                              
                      [[[kwh7d]]]
                                     
                      name = WP_kwh7d
                                     type 
                      = num
                                  
                      #eval = (sh.strom.WP.Zaehlerstand()- sh.strom.WP.Zaehlerstand.db('min','7d') )
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.WP.Zaehlerstand
                                  
                      visu = yes
                                  
                              
                      [[[kwh24h]]]
                                  
                      name = WP_kwh_24h
                                  type 
                      = num
                                  
                      #eval = sh.strom.WP.Zaehlerstand() - sh.strom.WP.Zaehlerstand.db('min', '1d',)   # returns the kwh used in 24h
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.WP.Zaehlerstand
                                  
                      visu=yes

                              
                      [[[kwh1h]]]
                                      
                      name = WP_kwh_1h
                                      type 
                      = num
                                  
                      #eval = (sh.strom.WP.Zaehlerstand()- sh.strom.WP.Zaehlerstand.db('min', '1h',))
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.WP.Zaehlerstand
                                  
                      visu = yes

                              
                      [[[tagesverbrauch]]]
                                  
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on

                              
                      [[[wochenverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on
                                  
                              
                      [[[monatsverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on
                              
                                  

                          
                          
                      [[Buero]]
                              [[[
                      Counter]]]
                                  
                      name = Buero_Counter
                                  type 
                      = num
                                  cache 
                      = on
                                  knx_dpt 
                      = 12
                                  enforce_updates
                      =yes
                                  knx_listen 
                      = 3/0/2

                                  
                              
                      [[[Zaehlerstand]]]
                                  
                      name = Buero_Zaehlerstand
                                  type 
                      = num
                                  cache 
                      = on
                                  sqlite 
                      = yes
                                  
                      eval = sh.strom.Buero.Counter()/2000
                                  eval_trigger 
                      = strom.Buero.Counter
                                  enforce_updates
                      =yes
                                  visu
                      =yes
                                      
                                      
                      [[[old]]]
                                      
                      name = Buero_Counter
                                      type 
                      = num
                                      cache 
                      = on
                                      enforce_updates
                      =yes
                                      
                                
                      [[[Momentanleistung_freq]]]
                                  
                      name = Buero_Momentanleistung_freq
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  
                      #Frequenzzähler: Jeder Counter=1/800kWh=3600/800kws=3600/800*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  #Frequenzzähler: Jeder Counter=1/2000kWh=3600/2000kws=3600/2000*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  #eval = 0 if int(value) == 0 else 1800/sh.strom.Buero.Counter.prev_age()
                                  #autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
                                  #eval_trigger=strom.Buero.Counter
                                  
                              
                      [[[kwh7d]]]
                                     
                      name = Buero_kwh7d
                                     type 
                      = num
                                  
                      #eval = (sh.strom.Buero.Zaehlerstand()- sh.strom.Buero.Zaehlerstand.db('min','7d') )
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.Buero.Zaehlerstand
                                  
                      visu = yes
                                  
                              
                      [[[kwh24h]]]
                                  
                      name = Buero_kwh_24h
                                  type 
                      = num
                                  
                      #eval = sh.strom.Buero.Zaehlerstand() - sh.strom.Buero.Zaehlerstand.db('min', '1d',)   # returns the kwh used in 24h
                                  #crontab = * * * * = 1
                                  #eval_trigger=sh.strom.Buero.Zaehlerstand
                                  #enforce_updates=yes
                                  
                      visu=yes

                              
                      [[[kwh1h]]]
                                      
                      name = Buero_kwh_1h
                                      type 
                      = num
                                  
                      #eval = (sh.strom.Buero.Zaehlerstand()- sh.strom.Buero.Zaehlerstand.db('min', '1h',))
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.Buero.Zaehlerstand
                                  #enforce_updates=yes
                                  
                      visu = yes

                              
                      [[[tagesverbrauch]]]
                                  
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on

                              
                      [[[wochenverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on
                                  
                              
                      [[[monatsverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on
                          
                              
                          
                      [[Heizungspumpen]]
                              [[[
                      Counter]]]
                                  
                      name = Heizungspumpen_Counter
                                  type 
                      = num
                                  cache 
                      = on
                                  knx_dpt 
                      = 12
                                  knx_listen 
                      = 3/0/3
                                  enforce_updates
                      =yes
                                  
                                  
                              
                      [[[Zaehlerstand]]]
                                  
                      name = Heizungspumpen_Zaehlerstand
                                  type 
                      = num
                                  cache 
                      = on
                                  sqlite 
                      = yes
                                  
                      eval = sh.strom.Heizungspumpen.Counter()/2000
                                  eval_trigger 
                      = strom.Heizungspumpen.Counter
                                  enforce_updates
                      =yes
                                  visu
                      =yes
                                      
                                
                      [[[Momentanleistung_freq]]]
                                  
                      name = Heizungspumpen_Momentanleistung_freq
                                  type 
                      = num
                                  cache 
                      = on
                                  sqlite 
                      = yes
                                  
                      #Frequenzzähler: Jeder Counter=1/800kWh=3600/800kws=3600/800*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  #Frequenzzähler: Jeder Counter=1/2000kWh=3600/2000kws=3600/2000*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  
                      eval = 0 if int(value) == 0 else 1800/sh.strom.Heizungspumpen.Counter.prev_age()
                                  
                      autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
                                  
                      eval_trigger=strom.Heizungspumpen.Counter

                              
                      [[[kwh7d]]]
                                     
                      name = Heizungspumpen_kwh7d
                                     type 
                      = num
                                  
                      #eval = sh.strom.Heizungspumpen.Zaehlerstand()- sh.strom.Heizungspumpen.Zaehlerstand.db('min','7d')
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.Heizungspumpen.Zaehlerstand
                                  
                      visu = yes
                                  
                              
                      [[[kwh24h]]]
                                  
                      name = Heizungspumpen_kwh_24h
                                  type 
                      = num
                                  
                      #eval = sh.strom.Heizungspumpen.Zaehlerstand() - sh.strom.Heizungspumpen.Zaehlerstand.db('min', '1d',)   # returns the kwh used in 24h
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.Heizungspumpen.Zaehlerstand
                                  
                      visu=yes

                              
                      [[[kwh1h]]]
                                      
                      name = Heizungspumpen_kwh_1h
                                      type 
                      = num
                                  
                      #eval = sh.strom.Heizungspumpen.Zaehlerstand()- sh.strom.Heizungspumpen.Zaehlerstand.db('min', '1h',)
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.Heizungspumpen.Zaehlerstand
                                  
                      visu = yes                
                                  
                              
                      [[[tagesverbrauch]]]
                                  
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on

                              
                      [[[wochenverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on
                                  
                              
                      [[[monatsverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on

                              
                          
                      [[spuelmaschine]]
                              [[[
                      Counter]]]
                                  
                      name = spuelmaschine_Counter
                                  type 
                      = num            
                                  cache 
                      = on
                                  knx_dpt 
                      = 12
                                  knx_listen 
                      = 3/0/4
                                  enforce_updates
                      =yes
                              
                              
                      [[[Zaehlerstand]]]
                                  
                      name = spuelmaschine_Zaehlerstand
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  
                      eval = sh.strom.spuelmaschine.Counter()/2000
                                  eval_trigger 
                      = strom.spuelmaschine.Counter
                                  enforce_updates
                      =yes
                                  visu
                      =yes
                                  
                                
                      [[[Momentanleistung_freq]]]
                                  
                      name = spuelmaschine_Momentanleistung_freq
                                  type 
                      = num
                                  cache 
                      = on
                                  sqlite 
                      = yes
                                  
                      #Frequenzzähler: Jeder Counter=1/800kWh=3600/800kws=3600/800*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  #Frequenzzähler: Jeder Counter=1/2000kWh=3600/2000kws=3600/2000*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  
                      eval = 0 if int(value) == 0 else  1800/sh.strom.spuelmaschine.Counter.prev_age()
                                  
                      autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
                                  
                      eval_trigger = strom.spuelmaschine.Counter


                              
                      [[[kwh7d]]]
                                     
                      name = spuelmaschine_kwh7d
                                     type 
                      = num
                                  
                      #eval = (sh.strom.spuelmaschine.Zaehlerstand()- sh.strom.spuelmaschine.Zaehlerstand.db('min','7d') )
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.spuelmaschine.Zaehlerstand
                                  
                      visu = yes
                                  
                              
                      [[[kwh24h]]]
                                  
                      name = spuelmaschine_kwh_24h
                                  type 
                      = num
                                  
                      #eval = sh.strom.spuelmaschine.Zaehlerstand() - sh.strom.spuelmaschine.Zaehlerstand.db('min', '1d',)   # returns the kwh used in 24h
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.spuelmaschine.Zaehlerstand
                                  
                      visu=yes

                              
                      [[[kwh1h]]]
                                      
                      name = spuelmaschine_kwh_1h
                                      type 
                      = num
                                  
                      #eval = (sh.strom.spuelmaschine.Zaehlerstand()- sh.strom.spuelmaschine.Zaehlerstand.db('min', '1h',))
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.spuelmaschine.Zaehlerstand
                                  
                      visu = yes    

                              
                      [[[tagesverbrauch]]]
                                  
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on

                              
                      [[[wochenverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on
                                  
                              
                      [[[monatsverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on

                              
                              
                          
                      [[kuehlschrank]]
                              [[[
                      Counter]]]
                                  
                      name = kuehlschrank_Counter
                                  cache 
                      = on
                                  type 
                      = num
                                  knx_dpt 
                      = 12
                                  enforce_updates
                      =yes
                                  knx_listen 
                      = 3/0/5
                              
                              
                      [[[Zaehlerstand]]]
                                  
                      name = kuehlschrank_Zaehlerstand
                                  type 
                      = num
                                  cache 
                      = on
                                  sqlite 
                      = yes
                                  
                      eval = sh.strom.kuehlschrank.Counter()/2000
                                  eval_trigger 
                      = strom.kuehlschrank.Counter
                                  visu
                      =yes
                                  
                                    
                      [[[Momentanleistung_freq]]]
                                  
                      name = kuehlschrank_Momentanleistung_freq
                                  type 
                      = num
                                  cache 
                      = on
                                  sqlite 
                      = yes
                                  
                      #Frequenzzähler: Jeder Counter=1/800kWh=3600/800kws=3600/800*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  #Frequenzzähler: Jeder Counter=1/2000kWh=3600/2000kws=3600/2000*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  
                      eval = 0 if int(value) == 0 else 1800/sh.strom.kuehlschrank.Counter.prev_age()
                                  
                      autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
                                  
                      eval_trigger=strom.kuehlschrank.Counter
                              
                              
                              
                      [[[kwh7d]]]
                                     
                      name = kuehlschrank_kwh7d
                                     type 
                      = num
                                  
                      #eval = (sh.strom.kuehlschrank.Zaehlerstand()- sh.strom.kuehlschrank.Zaehlerstand.db('min','7d') )
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.kuehlschrank.Zaehlerstand
                                  
                      visu = yes
                                  
                              
                      [[[kwh24h]]]
                                  
                      name = kuehlschrank_kwh_24h
                                  type 
                      = num
                                  
                      #eval = sh.strom.kuehlschrank.Zaehlerstand() - sh.strom.kuehlschrank.Zaehlerstand.db('min', '1d',)   # returns the kwh used in 24h
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.kuehlschrank.Zaehlerstand
                                  
                      visu=yes

                              
                      [[[kwh1h]]]
                                      
                      name = kuehlschrank_kwh_1h
                                      type 
                      = num
                                  
                      #eval = (sh.strom.kuehlschrank.Zaehlerstand()- sh.strom.kuehlschrank.Zaehlerstand.db('min', '1h',))
                                      #crontab = * * * * = 1
                                  #eval_trigger = sh.strom.kuehlschrank.Zaehlerstand
                                  
                      visu = yes    

                              
                      [[[tagesverbrauch]]]
                                  
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on

                              
                      [[[wochenverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on
                                  
                              
                      [[[monatsverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on

                              
                          
                      [[waschmaschine]]
                              [[[
                      Counter]]]
                                  
                      name = waschmaschine_Counter
                                  cache 
                      = on
                                  type 
                      = num
                                  knx_dpt 
                      = 12
                                  knx_listen 
                      = 3/0/9
                                  enforce_updates
                      =yes
                              
                              
                      [[[Zaehlerstand]]]
                                  
                      name = waschmaschine_Zaehlerstand
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  
                      eval = sh.strom.waschmaschine.Counter()/2000
                                  eval_trigger 
                      = strom.waschmaschine.Counter
                                  enforce_updates
                      =yes
                                  visu
                      =yes
                                  
                                
                      [[[Momentanleistung_freq]]]
                                  
                      name = waschmaschine_Momentanleistung_freq
                                  type 
                      = num
                                  cache 
                      = on
                                  sqlite 
                      = yes
                                  
                      #Frequenzzähler: Jeder Counter=1/800kWh=3600/800kws=3600/800*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  #Frequenzzähler: Jeder Counter=1/2000kWh=3600/2000kws=3600/2000*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
                                  
                      eval = 0 if int(value) == 0 else 1800/sh.strom.waschmaschine.Counter.prev_age()
                                  
                      autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
                                  
                      eval_trigger=strom.waschmaschine.Counter

                              
                      [[[kwh7d]]]
                                     
                      name = waschmaschine_kwh7d
                                     type 
                      = num
                                  
                      #eval = (sh.strom.waschmaschine.Zaehlerstand()- sh.strom.waschmaschine.Zaehlerstand.db('min','7d') )
                                      #crontab = * * * * = 1
                                  #eval_trigger = strom.waschmaschine.Zaehlerstand
                                  
                      visu = yes
                                  
                              
                      [[[kwh24h]]]
                                  
                      name = waschmaschine_kwh_24h
                                  type 
                      = num
                                  
                      #eval = sh.strom.waschmaschine.Zaehlerstand() - sh.strom.waschmaschine.Zaehlerstand.db('min', '1d',)   # returns the kwh used in 24h
                                      #crontab = * * * * = 1
                                  #eval_trigger = strom.waschmaschine.Zaehlerstand
                                  
                      visu=yes

                              
                      [[[kwh1h]]]
                                      
                      name = waschmaschine_kwh_1h
                                      type 
                      = num
                                  
                      #eval = (sh.strom.waschmaschine.Zaehlerstand()- sh.strom.waschmaschine.Zaehlerstand.db('min', '1h',))
                                      #crontab = * * * * = 1
                                  #eval_trigger = strom.waschmaschine.Zaehlerstand
                                  
                      visu = yes

                              
                      [[[tagesverbrauch]]]
                                  
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on

                              
                      [[[wochenverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on
                                  
                              
                      [[[monatsverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on


                          
                      [[rest]]        
                              [[[
                      Zaehlerstand]]]
                                  
                      cache = on
                                  name 
                      = rest_Zaehlerstand
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  
                      #eval = sh.strom.rest.WmRest() + sh.strom.rest.Zaehlerstand()
                                  
                      eval = sh.strom.gesamt.Zaehlerstand() - sh.strom.herd.Zaehlerstand() - sh.strom.Buero.Zaehlerstand() - sh.strom.waschmaschine.Zaehlerstand() - sh.strom.kuehlschrank.Zaehlerstand() - sh.strom.spuelmaschine.Zaehlerstand() +322.62 # 322.62 = korrektur
                                  
                      eval_trigger = strom.gesamt.Zaehlerstand
                                  enforce_updates 
                      = yes
                          
                          
                              
                      #[[[WmRest]]]
                              
                      #    name = Wattsekunden_Rest
                              #    type = num
                              #    sqlite = yes
                              #    eval =  (sh.strom.rest.Momentanleistung_freq_temp.prev_value()/1000)/(3600/sh.strom.rest.Momentanleistung_freq_temp.prev_age())
                              #    eval_trigger = strom.rest.Momentanleistung_freq_temp
                              #    enforce_updates = yes
                                          
                              
                      [[[Momentanleistung_freq_temp]]]
                                  
                      name = rest_Momentanleistung_freq_temp
                                  type 
                      = num
                                  
                      #eval = 0 if int(value) == 0 else  sh.strom.gesamt.Momentanleistung_freq() - sh.strom.herd.Momentanleistung_freq() - sh.strom.kuehlschrank.Momentanleistung_freq() - sh.strom.waschmaschine.Momentanleistung_freq()-sh.strom.spuelmaschine.Momentanleistung_freq() - sh.strom.Buero.Momentanleistung_freq() - (sh.Wohnzimmer.VerbrauchBeamerAmpere()*230)
                                  #eval = sh.strom.gesamt.Momentanleistung_freq() - sh.strom.herd.Momentanleistung_freq() - sh.strom.kuehlschrank.Momentanleistung_freq() - sh.strom.waschmaschine.Momentanleistung_freq()-sh.strom.spuelmaschine.Momentanleistung_freq() - sh.strom.Buero.Momentanleistung_freq() - (sh.Wohnzimmer.VerbrauchBeamerAmpere()*230)
                                  #eval_trigger = strom.gesamt.Momentanleistung_freq
                                  #autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
                                  #enforce_updates=yes
                                  
                      eval = 0 if int(value) == 0 else (sh.strom.rest.Zaehlerstand()-sh.strom.rest.Zaehlerstand.prev_value()) * 3600000/sh.strom.rest.Zaehlerstand.prev_age()
                                  
                      autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
                                  
                      eval_trigger = strom.rest.Zaehlerstand


                              
                              
                               
                      [[[Momentanleistung_freq]]]
                                  
                      name = rest_Momentanleistung_freq
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  
                      eval = sh.strom.rest.Momentanleistung_freq_temp()
                                  
                      eval_trigger = strom.rest.Momentanleistung_freq_temp
                                  autotimer 
                      = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
                                  
                      enforce_updates=yes

                              
                      [[[kwh7d]]]
                                     
                      name = rest_kwh7d
                                     type 
                      = num
                                  
                      #eval = (sh.strom.rest.Zaehlerstand()- sh.strom.rest.Zaehlerstand.db('min','7d') )
                                      #crontab = * * * * = 1
                                  #eval_trigger = strom.rest.Zaehlerstand
                                  
                      visu = yes
                                  
                              
                      [[[kwh24h]]]
                                  
                      name = rest_kwh_24h
                                  type 
                      = num
                                  
                      eval = sh.strom.rest.Zaehlerstand() - sh.strom.rest.Zaehlerstand.db('min', '1d',)   # returns the kwh used in 24h
                                      #crontab = * * * * = 1
                                  #eval_trigger = strom.rest.Zaehlerstand
                                  #enforce_updates=yes
                                  
                      visu=yes

                              
                      [[[kwh1h]]]
                                      
                      name = rest_kwh_1h
                                  type 
                      = num
                                  
                      eval = sh.strom.rest.Zaehlerstand()- sh.strom.rest.Zaehlerstand.db('min', '1h',)
                                      
                      #crontab = * * * * = 1
                                  #eval_trigger = strom.rest.Zaehlerstand
                                  #enforce_updates=yes
                                  
                      visu = yes
                              
                              
                      [[[tagesverbrauch]]]
                                  
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on

                              
                      [[[wochenverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on
                                  
                              
                      [[[monatsverbrauch]]]
                                      
                      knx_dpt = 14
                                  type 
                      = num
                                  sqlite 
                      = yes
                                  cache 
                      = on 
                      logic.conf:

                      PHP-Code:
                      # logic.conf

                      [hello]
                          
                      filename = hello.py
                          crontab 
                      = init

                      #[dummy]
                       
                      #   filename = dummy_series.py
                        #    cycle = 300
                          
                          
                      [uvr]
                           
                      filename = uvr.py
                          cycle 
                      = 120

                      #[fenster]
                       
                      #      filename = fenster.py
                      #    cycle = 180

                      #[fenster_melanie]
                             
                      #filename = fenster_melanie.py
                          #cycle = 180

                      #[verschluss]
                      #    filename = verschluss.py
                      #    watch_item = Flur.TuerSchloss

                      #[verschluss_melanie]
                      #    filename = verschluss_melanie.py
                      #    watch_item = Flur.TuerSchloss

                      [zeit]
                          
                      filename = zeit.py
                          crontab 
                      = init | * * * *

                      [
                      strom_gesamt]
                          
                      filename = strom_gesamt.py
                          cycle 
                      = 60
                          
                      #watch_item = strom.gesamt.Zaehlerstand

                      [strom_herd]
                          
                      filename = strom_herd.py
                          cycle 
                      = 120
                          
                      #watch_item = strom.herd.Zaehlerstand

                      [strom_WP]
                          
                      filename = strom_WP.py
                          cycle 
                      = 120
                          
                      #watch_item = strom.WP.Zaehlerstand

                      [strom_Buero]
                          
                      filename = strom_Buero.py
                          cycle 
                      = 120
                          
                      #watch_item = strom.Buero.Zaehlerstand

                      [strom_Heizungspumen]
                          
                      filename = strom_Heizungspumpen.py
                          cycle 
                      = 120
                          
                      #watch_item = strom.Heizungspumpen.Zaehlerstand

                      [strom_spuelmaschine]
                          
                      filename = strom_spuelmaschine.py
                          cycle 
                      = 120

                      [strom_kuehlschrank]
                          
                      filename = strom_kuehlschrank.py
                          cycle 
                      = 120
                          
                      #watch_item = strom.kuehlschrank.Zaehlerstand

                      [strom_waschmaschine]
                          
                      filename = strom_waschmaschine.py
                          cycle 
                      = 120
                          
                      #watch_item = strom.waschmaschine.Zaehlerstand

                      [strom_rest]
                          
                      filename = strom_rest.py
                          cycle 
                      = 120
                          
                      #watch_item = strom.rest.Zaehlerstand

                      [solar]
                          
                      filename = solar.py
                          cycle 
                      = 120

                      [tagesverbrauch]
                          
                      filename = tagesverbrauch.py
                          crontab 
                      = 0 0 * *

                      [
                      wochenverbrauch]
                          
                      filename = wochenverbrauch.py
                          crontab 
                      = 0 0 * 6

                      [monatsverbrauch]
                          
                      filename = monatsverbrauch.py
                          crontab 
                      = 0 0 1 *

                      [
                      licht_bad_nachts]
                          
                      filename = licht_bad_nachts.py
                          watch_item 
                      = Bad.AlleSchalten

                      [licht_ankleide_nachts]
                          
                      filename = licht_ankleide_nachts.py
                          watch_item 
                      = Ankleide.Deckeschalten_alle | zentral.schlafmodus

                      [licht_bad_ug_nachts]
                          
                      filename = licht_bad_ug_nachts.py
                          watch_item 
                      = BadUg.AlleSchalten | zentral.schlafmodus


                      [fenster_bad]
                             
                      filename = fenster_bad.py
                          watch_item 
                      = Bad.Fenster

                      [musik_unten]
                             
                      filename = musik_unten.py
                          watch_item 
                      = BadUg.praesenz | Ankleide.praesenz | zentral.schlafmodus 
                      strom_gesamt.py (als Beispiel, die anderen sind identisch aufgebaut):

                      PHP-Code:
                      sh.strom.gesamt.kwh7d(sh.strom.gesamt.Zaehlerstand()- sh.strom.gesamt.Zaehlerstand.db('min','7d'))
                      sh.strom.gesamt.kwh24h(sh.strom.gesamt.Zaehlerstand()- sh.strom.gesamt.Zaehlerstand.db('min','1d'))
                      sh.strom.gesamt.kwh1h(sh.strom.gesamt.Zaehlerstand()- sh.strom.gesamt.Zaehlerstand.db('min','1h')) 

                      Kommentar


                        #12
                        Hallo,

                        das ist der Stand mit dem Du Probleme hast? Ich kann das spontan nichts problematisches feststellen.
                        Wie groß ist denn Deine SQLite Datenbank auf dem Pi?

                        Bis bald

                        Marcus

                        Kommentar


                          #13
                          Ach ja, zu Deiner ursprünglichen Frage, die Idle Prozesse an sich sind unproblematisch. Sie kommen von kurzzeitigen Lastspitzen bei der Verarbeitung.
                          Es kann nur zu Problemen/Engpässen kommen, wenn keine Idle Threads vorhanden sind um z.B. evals abzuarbeiten.

                          Bis bald

                          Marcus

                          Kommentar


                            #14
                            Hi Markus,

                            ja das war der Stand der Probleme machte, ich habe nun ein paar Sachen geändert (der Counter z.B. muss nicht in die DB), nun läuft es erst mal stabil, Load geht aber bei Großstromverbrauchern immer noch auf fast 2 hoch (danach dann aber wieder runter auf 0.5-1.0.
                            Um das auszuschließen habe ich die Datenbank gestern gelöscht und eine neue anlegen lassen, diese ist jetzt 2MB groß.

                            Kommentar


                              #15
                              Hallo,

                              melde Dich wieder wenn es wieder auftreten sollte.

                              Bis bald

                              Marcus

                              Kommentar

                              Lädt...
                              X