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    ThreadsScheduler1strom_herd1strom.rest.WmRest1strom.Buero.Momentanleistung_freq1strom_Buero1strom.Buero.Zaehlerstand1strom.WP.Momentanleistung_freq3idle5solar1strom.rest.Zaehlerstand1strom_rest1strom.rest.Momentanleistung_freq1strom.gesamt.Zaehlerstand1Main1strom.WP.Zaehlerstand2
      2015
      -06-04 10:30:54 INFO     Scheduler    Adding worker threadTotal21
      2015
      -06-04 10:30:54 INFO     Scheduler    ThreadsScheduler1strom_herd1Thread-211strom.rest.WmRest1strom.Buero.Momentanleistung_freq1strom_Buero1strom.Buero.Zaehlerstand1strom.WP.Momentanleistung_freq3idle5solar1strom.rest.Zaehlerstand1strom_rest1strom.rest.Momentanleistung_freq1strom.gesamt.Zaehlerstand1Main1strom.WP.Zaehlerstand
      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 = if int(value) == else 1800/sh.strom.Buero.Counter.prev_age()
                  
      autotimer 1m # 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 = if int(value) == else 3600/sh.strom.gesamt.Counter.prev_age()
                                  
                      autotimer 1m # 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 = if int(value) == else 4500/sh.strom.herd.Counter.prev_age()
                              
                      autotimer 1m # 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 = if int(value) == else 4500/sh.strom.WP.Counter.prev_age()
                                  
                      autotimer 1m # 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 = if int(value) == else 1800/sh.strom.Heizungspumpen.Counter.prev_age()
                                  
                      autotimer 1m # 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 = if int(value) == else  1800/sh.strom.spuelmaschine.Counter.prev_age()
                                  
                      autotimer 1m # 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 = if int(value) == else 1800/sh.strom.kuehlschrank.Counter.prev_age()
                                  
                      autotimer 1m # 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 = if int(value) == else 1800/sh.strom.waschmaschine.Counter.prev_age()
                                  
                      autotimer 1m # 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 = if int(value) == else (sh.strom.rest.Zaehlerstand()-sh.strom.rest.Zaehlerstand.prev_value()) * 3600000/sh.strom.rest.Zaehlerstand.prev_age()
                                  
                      autotimer 1m # 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 # 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