Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit cache = yes

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

    Problem mit cache = yes

    Hallo,

    ich breche mir gerade die Finger mit dem smarthome cache.

    Mein entsprechendes Item:

    [[HModus]]
    [[[Automatik]]]
    name = Betriebsart im Automatikmodus
    type = bool
    visu = yes
    visu_acl = rw
    knx_dpt = 1
    cache = yes
    sv_widget {{ basic.checkbox(item, item, Automatik) }}

    Leider werden die Werte aber nicht gespeichert. Ind er Logdatei finde ich dann folgendes:

    2014-10-24 14:13:01 INFO Main Init Items
    2014-10-24 14:13:03 WARNING Main Item system.HModus.Automatik: problem reading cache: [Errno 2] Datei oder Verzeichnis nicht gefunden: '/usr/local/smarthome/var/cache/system.HModus.Automatik'
    2014-10-24 14:13:05 INFO Main Start Plugins

    Das Verzeichnis ist aber da und auch beschreibbar. Wenn ich mit "touch" die Datei anlege, ändert sich zwar der Fehlertext, das Problem bleibt aber bestehen.
    Kann mir da jemand helfen?

    #2
    Ist normal und auch nur eine Warning und hat auf die Funktion keinen Einfluss.

    Mich stören die Meldungen auch, daher starte ich dann sh.cli und mache manuell ein update auf den Wert.

    Sobald ein Wert vorhanden ist oder bei bools der Wert einmal True geworden ist wird die Cache-Datei automatisch angelegt und keine Warning mehr angezeigt.
    Wie gesagt, rein funktional keine Auswirkung.

    Daher würde ich in Deinem Fall prüfen inwieweit der Wert wirklich beim Item ankommt, denn dann stimmt was grundlegendes nicht.

    @Marcus: Muß wegen einiger Logik-Konsistenzen auch auf Cache zurückgreifen und stosse auf die "unschöne" Warning und helfe dann manuell nach.

    Insb. bei Alert-Items kann es durchaus sonst vorkommen, das es nie einen Alarm gibt (Ich klopf auf Holz ) und daher das Item auch nicht einmal True wird, sprich die Warning bleibt bis zum Tag der Abschaltung bestehen.

    Könnte man in die SH-Startroutinen nicht eine automatische Anlegeroutine miteinbauen, welche dann eben einen False anlegt und ggf. auch eine Warning ausgibt? Wäre m.E. hilfreich und auch nicht schädlicher.

    Cheers,
    Oliver

    Kommentar


      #3
      Hallo Oliver,

      in develop wird das cache angelegt, falls es nicht existiert.
      Eine Warnung beim ersten Start gibt es noch.

      Bis bald

      Marcus

      Kommentar


        #4
        Hi Marcus,

        danke, muß dann aber nagelneu sein, denn bis dato klappt das bei mir nicht, sorry, oder aber bei mir gibt's noch ein anderes Problem...

        Gibt es die Funktion schon länger?

        Cheers,
        Oliver

        Kommentar


          #5
          Mensch Marcus,

          DANKE! Ist ja frisch aus der Presse und schneller als die Polizei erlaubt!

          Teste das gleich mal aus!

          Cheers,
          Oliver

          Kommentar


            #6
            Leider gibt es bei mir in Zusammenhang mit dem UZSU-Plugin da doch ein übles Problem - aber erst seit dem neuen item.py. Davor gab es zwar die Fehlermeldung bezüglich Cache, aber sonst lief alles prima. Jetzt passiert folgendes:

            Code:
            2014-10-30 13:27:25,091 ERROR    Main         Item essen.l45d_deckenlicht.kalt.dimmen: value OrderedDict([('type', 'dict'), ('uzsu_item', 'essen.l45d_deckenlicht.kalt.dimmen'), ('cache', 'True')]) does not match type num. -- item.py:__init__:256
            2014-10-30 13:27:25,098 ERROR    Main         Item essen.l45d_deckenlicht.kalt.dimmen: problem creating:  -- item.py:__init__:221
            Traceback (most recent call last):
              File "/usr/local/smarthome/lib/item.py", line 219, in __init__
                child = Item(smarthome, self, child_path, value)
              File "/usr/local/smarthome/lib/item.py", line 254, in __init__
                self._value = self.cast(self._value)
              File "/usr/local/smarthome/lib/item.py", line 94, in _cast_num
                raise ValueError
            ValueError

            Kommentar


              #7
              Hi, interessant. Die Meldung hatte ich auch bekommen, hatte aber einen wahren Grund bei mir, nämlich das ich für einen Bool Wert noch Typ num drin hatte.
              Ansonsten läuft es bei mir prima, sprich auch keine Fehlermeldungen bei der UZSU (neben dem üblichen mit der Sun-Berechnung), allerdings spreche ich über die UZSU auch wirklich nur Bools an.
              Kannst Du mal bitte das angemeckerte Item posten?

              Kommentar


                #8
                Hätt ich auch gleich machen können

                Code:
                ['essen']
                    [['l45d_deckenlicht']]
                        [[['warm']]]
                            knx_send = 3/0/21
                            knx_dpt = 1
                            visu_acl = rw
                            type = bool
                            knx_init = 3/0/27
                            cache = True
                            enforce_updates  = yes
                            [[[['dimmen']]]]
                                knx_send = 3/0/23
                                knx_dpt = 5
                                visu_acl = rw
                                type = num
                                knx_init = 3/0/28
                                cache = True
                                enforce_updates  = yes
                                [[[[['zeitschalter']]]]]
                                type = dict
                                uzsu_item = essen.l45d_deckenlicht.warm.dimmen
                                cache = True
                        [[['kalt']]]
                            knx_send = 3/0/24
                            knx_dpt = 1
                            visu_acl = rw
                            type = bool
                            knx_init = 3/0/29
                            cache = True
                            enforce_updates  = yes
                            [[[['dimmen']]]]
                                knx_send = 3/0/26
                                knx_dpt = 5
                                visu_acl = rw
                                type = num
                                knx_init = 3/0/30
                                cache = True
                                enforce_updates  = yes
                                [[[[['zeitschalter']]]]]
                                type = dict
                                uzsu_item = essen.l45d_deckenlicht.kalt.dimmen
                                cache = True
                Andere Meldungen waren, dass "rw" als Wert eingetragen ist, dies aber kein Bool wäre, etc. irgendwo ist Smarthome da mit meinen Items wohl verwirrt..?

                Kommentar


                  #9
                  Hi,

                  Du, oder das Plugin versuchen in essen.l45d_deckenlicht.kalt.dimmen ein Dictionary zu schreiben. Du hast es aber als num definiert.

                  Bis bald

                  Marcus

                  Kommentar


                    #10
                    Hmmm, versteh ich noch nicht ganz.
                    Eigtl. müsste ja in essen.l45d_deckenlicht.kalt.dimmen.zeitschalter das Dictionary geschrieben werden und nicht in das übergeordnete Element?

                    Hab jetzt noch ein paar Tests gemacht, mit dem UZSU hat es nix zu tun. Habe mal alle Cache Files gelöscht, dann gestartet. Beim ersten Start nur die übliche Meldung, dass File fehlt.
                    Beim zweiten Start alles Errors: beim Anlegen der Cachefiles scheint was gröber nicht zu funktionieren.

                    Ich habe den Codeteil zum Erstellen der Files raus genommen und jetzt läuft auch alles ganz normal, auch nach Löschen aller Cachefiles.

                    Kommentar


                      #11
                      Um nun nicht zwischen den Threads hin und her springen zu müssen 2 Fragen:
                      1. Wie fütterst Du Deine UZSU? Mit dem Widget? Falls ja siehe 2., falls nein, was steht denn drin wenn Du Dir das dict in sh.cli anzeigen lässt?
                      2. Schon mal visu_acl = rw bei Deinem DICT Wert versucht?

                      Kommentar


                        #12
                        Danke für die Hilfe.. ich hab's ausm UZSU Thread wieder raus genommen, da es nicht daran liegt. Es war glaub eher Zufall, denn gerade die paar USZU Items hatten bis dato halt kein Cache File.

                        Das visu_acl hab ich beim UZSU dict ja eh dabei. Und ja, ich nutz es via Widget, was prinzipiell auch alles prima funktioniert.

                        Kommentar


                          #13
                          Ooops. Nun hat es mich aber auch kräftig erwischt.... Warum auch immer kommt es mit der neuen item.py irgendwann zu Problemen nach diversen Neustarts. Dabei scheint der Bezug des Values bei der Typprüfung irgendwelche Values anzuziehen, welche dann bspw. nicht mehr Bool sind und entweder ein TypeError oder ein ValueError angezogen wird. Auch ein Austausch der item.py hat dann nicht mehr geholfen. Erst ein Löschen der Cache-Files hat dann die Items wieder sauber synchronisiert.

                          @Marcus: Es werden auch bei mir dann in 80% der Items Fehler in den Zeilen 219, 254 und 76 geworfen.
                          Da knapp 800 Items betroffen waren wäre das Log hier zum posten zu umfangreich, kann Dir das aber gerne via Email zukommen lassen.

                          Cheers,
                          Oliver

                          Kommentar


                            #14
                            Hallo Oliver,

                            ja, Du kannst mir gerne das Log schicken. Pack am besten auch noch ältere dazu.
                            Die Fehler aus den genannten Zeilen sind erst mal O.K. Es ist die Frage woher die 'falschen' Werte kommen.

                            Bis bald

                            Marcus

                            Kommentar


                              #15
                              Hallo Marcus,

                              das Problem habe ich auch auf develop. Bei einem Item mit type = dict (ist beim UZSU zwangsweise so), habe das aber einmal ganz generisch gemacht. 1. Versuch (Dachdatei nicht da)
                              Code:
                              2014-11-16 13:52:12 WARNING  Main         Item kg.test: problem reading cache: [Errno 2] Datei oder Verzeichnis nicht gefunden: '/usr/smarthome/var/cache/kg.test'
                              2. Versuch: Fehlermeldung mit dem typecast
                              Code:
                              2014-11-16 13:53:00 ERROR    Main         Item kg.test: value on does not match type dict.
                              2014-11-16 13:53:00 ERROR    Main         Item kg.test: problem creating: 
                              Traceback (most recent call last):
                                File "/usr/smarthome/lib/item.py", line 219, in __init__
                                  child = Item(smarthome, self, child_path, value)
                                File "/usr/smarthome/lib/item.py", line 254, in __init__
                                  self._value = self.cast(self._value)
                                File "/usr/smarthome/lib/item.py", line 53, in _cast_dict
                                  raise ValueError
                              ValueError
                              Da Ganze mal quergecheckt mit Type = num:
                              1. Versuch (Cachedatei war nicht da !)
                              Code:
                              2014-11-16 13:54:20 WARNING  Main         Item kg.test: problem reading cache: [Errno 2] Datei oder Verzeichnis nicht gefunden: '/usr/smarthome/var/cache/kg.test'
                              2. Versuch
                              Code:
                              2014-11-16 13:57:27 ERROR    Main         Item kg.test: value on does not match type num.
                              2014-11-16 13:57:27 ERROR    Main         Item kg.test: problem creating: 
                              Traceback (most recent call last):
                                File "/usr/smarthome/lib/item.py", line 219, in __init__
                                  child = Item(smarthome, self, child_path, value)
                                File "/usr/smarthome/lib/item.py", line 254, in __init__
                                  self._value = self.cast(self._value)
                                File "/usr/smarthome/lib/item.py", line 94, in _cast_num
                                  raise ValueError
                              ValueError
                              Wenn ich in die Cache Datei reinschaue:
                              Code:
                              <80>^CX^B^@^@^@[COLOR="Red"]on[/COLOR]q^@.
                              steht dort der Wert drin, der mich cache = gesetzt wird. Und zwar on, True usw.. Bei einer beliebigen Zeichenkette kommt dann ein Parsingfehler auf cache, was ja erwartungskonform ist.

                              Mit der Änderung in item.py: 1. Versuch (Cachedatei fehlt)
                              Code:
                              2014-11-16 14:07:27 WARNING  Main         Item kg.test: problem reading cache: [Errno 2] Datei oder Verzeichnis nicht gefunden: '/usr/smarthome/var/cache/kg.test'
                              2. Versuch
                              keine Fehlermeldung mehr.

                              Aus meine Sicht Fehler in der item.py beim Schreiben des Caches: In Zeile 264 steht:
                              Code:
                                              _cache_write(self._cache, value)
                              richtig aus meiner Sicht wäre
                              Code:
                                              _cache_write(self._cache, self._value)
                              Damit scheint es zu funktionieren !

                              Michel

                              Kommentar

                              Lädt...
                              X