Ankündigung

Einklappen
Keine Ankündigung bisher.

Beispiel für Item type=list

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

    Beispiel für Item type=list

    Hallo,

    in der *.conf kann man ja u.a. Listen oder Arrays definieren, indem man type=list angibt. Gibt es dazu ein Beispiel, wie man dann die einzelnen Objekte innerhalb der Liste/Arrays anspricht?
    • Anlegen einer neuen Zeile
    • Lesen/Schreiben einer Zeile oder Zelle
    • Löschen einer Zeile

    Das Ganze betrifft ja sowohl Python als auch die Widgets.

    Beispiel wäre toll. Ansonsten würde mir reichen, wenn ich die Befehle wüsste, mit denen ich oben aufgeführte Operationen durchführe.

    Danke vorab.

    Gruß
    Peter

    #2
    Hallo Peter,

    für den Backenteil:

    Code:
    sh.meinlitstenitem(['erster', 'zweiter', 'dritter'])
    Siehe auch Python Dokumentation zu Listen.

    Bis bald

    Marcus

    Kommentar


      #3
      Hallo Marcus,

      Backend funktioniert. Bin einfach davon ausgegangen, dass ich mit type=list ein normales Python-Array oder eine Python-Liste bekomme und habe dann die Python-Funktionen für Arrays und Listen verwendet.

      Für den Zugriff aus sV habe ich das Status.log nur minimal verändern müssen, das passt auch.

      Mein Problem: Wenn ein neuer Eintrag in die Liste geschrieben wird, dann startet zwar das visu.js und läuft auch sauber durch. Allerdings bekommt es keine aktualisierten Daten. Der Log zeigt mir, dass die Einträge in meiner Liste genauso passieren, wie geplant, d.h. das Backend funktioniert. Komischerweise wird die Update-Funktion des Widgets gestartet, d.h. sV muss mitbekommen haben, dass sich etwas verändert hat. Aber sowohl response[0] als auch widget.get(...) liefern immer wieder die alten Daten. Habe ich mit Firebug überprüft. Wenn ich F5 klicke, dann werden die aktuellen Daten angezeigt.

      Any ideas?

      Danke und Gruß
      Peter

      Kommentar


        #4
        Vor einem ähnlichen Problem mit dem type = list stehe ich auch gerade:


        Code:
          [[[[Licht]]]]
        [[[[Licht]]]]
        name = Licht
        sv_widget = {{ device.dimmer('item', 'Deckenspots', 'item.on', 'item.value', 0, 100, 1) }}
        
            [[[[[on]]]]]
                type = bool
                visu_acl = rw
                #sv_widget = {{ basic.flip('item', 'item') }}
                knx_dpt = 1
                knx_cache = 1/1/50
                knx_send = 1/1/50
            [[[[[value]]]]]
                type = num
                visu_acl = rw
                sv_widget = Wert: {{ basic.float('item', 'item', '%') }}
                knx_dpt = 5.001
                knx_send = 1/1/51
                knx_cache = 1/1/51
            [[[[[dim]]]]]
                #todo: kein Dimmen auf/ab bisher
                type = list
                visu_acl = rw
                sv_widget = {{ basic.button('item', 'item', 'text', 'arrow_u', [COLOR=Red][B]'[1,6]'[/B][/COLOR], 'mini') }}
                knx_dpt = 3
                enforce_updates = true
                #knx_cache = 0/1/52
                knx_send = 1/1/52
        Ich weiß ja, das ich eine Liste schicken muss, aber ich habe leider den Syntax im sv_widget nicht herausgefunden.

        [1,6] -> value Array does not match type list
        '[1,6]' -> value [1,6] does not match type list.
        ['1,6'] -> value Array does not match type list

        Folgendes geht aber:
        Code:
        sh.Haus.EG.Kueche.Licht.dim([1,6])
        Kann mir hier jemand nen Hinweis geben?
        Wiregate #288

        Kommentar


          #5
          Hi Tobi,

          Zitat von tobiB Beitrag anzeigen
          Kann mir hier jemand nen Hinweis geben?
          ich kann hier leider nichts vernünftiges machen. Man muss der smartVISU beibringen bei [] eine Liste/Array zu schicken und nicht den String 'Array'.

          Bis bald

          Marcus

          Kommentar


            #6
            Geht doch

            Falls jemand nochmal über die Zuweisung und Abfrage bei "type = list" stolpert (siehe Threadersteller) - da ich grade diversen "Kleinkram" abarbeite, hab ich mir das hier zusammengegoogelt (funktioniert, braucht halt nur ein Hilfsitem vom Typ str anstatt list):

            Code:
             [ventilation]
              
               [[fanspeed]]
                    name = Aktuelle KWL-Stufe 0..8, aus der Anlage ausgelesen
                    type = num
                    helios_var = fanspeed
                    visu_acl = rw
              
               [[consumption_per_fanspeed]]
                    name = Verbrauch in W je Stufe 0..8 (Herstellerangaben)
                    type = str
                    value = "0 20 36 50 72 92 130 160 194"   # die "Liste"
                    visu_acl = r
              
               [[current_electrial_consumption]]
                    name = Verbrauch für aktuell eingestellte KWL-Stufe
                    type = num
                    eval = sh.ventilation.consumption_per_fanspeed().split()[sh.ventilation.fanspeed()]
                    eval_trigger = ventilation.fanspeed
            also:
            - Hilfsitem als str definieren, die Liste da reintun
            - hilfsitem().split()[index] ins eval beim Zielitem

            Alle Versuche, eine Liste direkt im Item zu definieren, waren nicht von Erfolg gekrönt (vielleicht hab ich mich auch nur zu dusselig angestellt).

            Zugegeben - sieht ein bisschen komisch aus und funktioniert wohl so nur für 'statische' Listen, aber es geht. Vielleicht hilft's ja jemandem ...

            /tom

            Kommentar


              #7
              Hallo,

              In der Oberfläche // Twig verwendet man collapse(). Vielleicht ist das ein Hinweis .

              Michel

              Kommentar


                #8
                Hallo Michel,

                mir ging es darum, einen Weg aufzuzeigen, wie man trotzdem Listen in Items verwenden kann, ohne für die Zuweisung der Listeneinträge extra eine Logik erstellen zu müssen. Finde ich irgendwie "transparenter". Hab's wie gesagt anders nicht hinbekommen, vielleicht gibt's ja einen Weg ...

                /tom

                Kommentar


                  #9
                  Hallo Tom,

                  bei Deinem Beispiel hätte ich jetzt verstanden, dass Du bei z.B. bei Lüfterstufe 1 den Wert 20 bekommen willst. Ich hätte das nicht mit einer Liste gemacht, sondern mit einem dict.
                  Code:
                  type = dict
                  value = {0: 0, 1: 20, 2: 36, usw.}
                  mit
                  Code:
                  eval = sh.item()[1]
                  müsstest Du dann 20 zurückbekommen.

                  Ist aber Python Theorie, musst Du mal ausprobieren.

                  Michel

                  Kommentar


                    #10
                    Danke, probiere ich heute Abend mal aus, da es so einleuchtender ist - mit dict hatte ich nur bisher noch nicht gearbeitet ...

                    /tom

                    Kommentar


                      #11
                      Hallo,

                      geht nur im interactiven modus / logik / plugin einzugeben, nicht in der item.conf, siehe:

                      https://knx-user-forum.de/smarthome-...-moeglich.html

                      Michel

                      Kommentar

                      Lädt...
                      X