Ankündigung

Einklappen
Keine Ankündigung bisher.

Smarthome.py stürzt ab mit "deque mutated during iteration "

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

    Smarthome.py stürzt ab mit "deque mutated during iteration "

    Ich lasse smarthome.py (develop) und Visu auf meiner Synology laufen. Das ist gefühl ca. 1000 mal schneller, ich habe aber das Problem, dass smarthome.py sich regelmäßig (ca. 1-2 mal pro Tag aufhängt). Ich erhalte dann einen Websocket error, erst wenn ich Smarthome.py über die Konsole gestoppt und neu gestartet habe läuft es wieder bis zum nächsten Absturz.
    Bis jetzt habe ich in den Logs nichts verdächtiges finden können, Ephem läuft nicht (kriege ich auf der Synology nicht installiert), ich habe auch probiert Stück für Stück verschiedene Plugins zu deaktivieren - das hat aber keinen Erfolg gebracht.
    Im Log war bis jetzt einfach irgendwann kein Eintrag mehr, ohne dass es eine besondere Fehlermeldung gab. nun habe ich aber folgenden Eintrag genau vor dem Abstürz geloggt:
    PHP-Code:
    2014-12-20 14:16:15 ERROR    strom.rest.kwh1h Method strom.rest.kwh1h exceptiondeque mutated during iteration
    Traceback 
    (most recent call last):
      
    File "/usr/local/smarthome/lib/scheduler.py"line 346in _task
        obj
    (**value)
      
    File "/usr/local/smarthome/lib/item.py"line 336in __run_eval
        self
    .__update(valuecallersourcedest)
      
    File "/usr/local/smarthome/lib/item.py"line 383in __update
        self
    ._sh.trigger(name=item.id(), obj=item.__run_evalvalue=argsby=callersource=sourcedest=dest)
      
    File "/usr/local/smarthome/lib/scheduler.py"line 165in trigger
        self
    ._runc.notify()
      
    File "/volume1/@appstore/py3k/usr/local/lib/python3.4/threading.py"line 341in notify
        waiters_to_notify 
    _deque(_islice(all_waitersn))
    RuntimeErrordeque mutated during iteration 
    dieses steht in zusammenhang mit diesem Item:

    PHP-Code:
            [[[kwh1h]]]
                
    name rest_kwh_1h
            cache 
    on
                type 
    num
                sqlite 
    yes
            
    eval = sh.strom.rest.Zaehlerstand()- sh.strom.rest.Zaehlerstand.db('min''1h',)
                
    eval_trigger strom.rest.Zaehlerstand
            enforce_updates
    =yes
            visu 
    yes 
    diese eval Funktion nutze ich auch bei anderen Zähleritems.

    die gesamte Restberechnung sieht so aus:

    PHP-Code:
    [[rest]]        
            [[[
    Zaehlerstand]]]
                
    name rest_Zaehlerstand
                type 
    num
                cache 
    on
                sqlite 
    yes
                
    eval = sh.strom.rest.WmRest() + sh.strom.rest.Zaehlerstand()
                
    eval_trigger strom.rest.WmRest
                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
                sqlite 
    yes
                
    eval = if int(value) == else  sh.strom.gesamt.Momentanleistung_freq() - sh.strom.herd.Momentanleistung_freq() - sh.strom.kuehlschrank.Momentanleistung_freq() - sh.strom.waschmaschine.Momentanleistung_freq()-sh.strom.knxstrom.Momentanleistung_freq() - sh.strom.Buero.Momentanleistung_freq() - (sh.Wohnzimmer.VerbrauchBeamerAmpere()*230)
                
    eval_trigger strom.gesamt.Momentanleistung_freq 
                autotimer 
    1m # Reset to zero if no impulse comes within a minute (< 0.6kW)
                
    enforce_updates=yes
            
            
             
    [[[Momentanleistung_freq]]]
                
    name rest_Momentanleistung_freq
                type 
    num
                sqlite 
    yes
                
    eval = if int(value) == else  sh.strom.rest.Momentanleistung_freq_temp.db('avg','1i')
                
    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
                cache 
    on
                sqlite 
    yes
                
    eval = (sh.strom.rest.Zaehlerstand()- sh.strom.rest.Zaehlerstand.db('min','7d') ) 
                
    eval_trigger strom.rest.kwh24h
                visu 
    yes
                
            
    [[[kwh24h]]]
                
    name rest_kwh_24h
                type 
    num
                cache 
    on
                sqlite 
    yes
                
    eval = sh.strom.rest.Zaehlerstand() - sh.strom.rest.Zaehlerstand.db('min''1d',)   # returns the kwh used in 24h
                
    eval_triggerstrom.rest.kwh1h
                enforce_updates
    =yes
                visu
    =yes

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

    #2
    Hallo Marco,

    das sieht nach einem Python-Bug aus. Welche Version ist das denn?

    Bis bald

    Marcus

    Kommentar


      #3
      Hi Marcus,

      3.4.1

      gruß

      Kommentar


        #4
        Hallo Marco,

        ich denke ich kann hier nichts so schnell ändern.
        Ich bleibe dabei, das es sich um einen Python-Bug handelt.
        Bisher bist Du der einzige den es anscheinend betrifft.
        Und das war das erste und einzige Mal das der Fehler geloggt wurde?

        Bis bald

        Marcus

        Kommentar


          #5
          ja, ich habe gerade noch mal die letzten Logs durchsucht und den Fehler noch 2-3 mal in den letzten Logs gefunden, immer im Zusammenhang mit einen "Reststrom" item (teilweise auch 24H item).
          Es gibt aber offensichtlich keinen zeitlichen Zusammenhang mit den Abstürzen.
          Ich habe das Python3 Paket von Synology gegen das der Synocommunity (3.4.1-3) getauscht, vielleicht hilft das.
          Kann es sein, dass das System wegen des nicht vorhandenen Ephem abstürzt?
          Ich kann auf der Synology nur eine ältere Version von GCC installieren, damit kann ich aber kein ccache installieren und somit auch kein ephem...

          Kommentar


            #6
            Hallo,

            nein, das ziemlich sicher nichts mit dem fehlenden ephem zu tun.

            Bis bald

            Marcus

            Kommentar


              #7
              Log

              Das Pythonpaket zu ändern hat nicht geholfen. Ich hänge mal mein Log in den Anhang. Seltsamerweise ist es um 10:28 gestorben, es kommen dann aber um 14:16 noch mal logeinträge vom Whatsapp plugin.
              Angehängte Dateien

              Kommentar

              Lädt...
              X