Ankündigung

Einklappen
Keine Ankündigung bisher.

Listenelemente aus python dictionary anzeigen

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

    Listenelemente aus python dictionary anzeigen

    Ich würde gerne eine Liste von Fehlermeldungen, in der Visu ausgeben. Eine Möglichkeit wäre mir für jeweils Items mit einzelnen Werten mit Smarthome.py zu generieren und mir diese dann in einer Tabelle anzeigen zu lassen. ggf. wäre es aber auch möglich die Liste direkt in smartvisu anzuzeigen. Ich kann die Ausgabe von Smarthome.py in ein Python dictionary umwandeln, wenn dies für die Smartvisu kommunikation helfen würde.

    Ich erhalte von einem Server diese Liste (das wären als Beispiel zwei Meldungen) von denen ich nur das Datum und die Message anzeigen lassen möchte, dazu noch einen "löschen Button" dieser müsste mit einem Verweis auf die Entsprechende Meldung an smarthome.py senden, dann wird die Meldung auf dem Server gelöscht):
    PHP-Code:
    {"alm_sn":"XXX","alert_id":"c01262d5-04fd-459f-8e7c-a7064af21fa9","headline":"Maher benotigt Hilfe.","date":"2016-07-27T10:03:15.377Z","message":"Maher hat sich festgefahren. Ihr Indego hat sich festgefahren. Bitte stellen Sie den Maher auf eine ebene Rasenflache und folgen Sie den Anweisungen im Display des Mahers.","read_status":"unread","flag":"warning"},{"alm_sn":"XXXX","alert_id":"5d5b5efc-7974-4f46-827b-50c3e42fb129","headline":"Maher benotigt Hilfe.","date":"2016-07-26T07:36:04.509Z","message":"Maher hat sich festgefahren. Ihr Indego hat sich festgefahren. Bitte stellen Sie den Maher auf eine ebene Rasenflache und folgen Sie den Anweisungen im Display des Mahers.","read_status":"unread","flag":"warning"
    Und würde es gerne ähnlich wie das Log oder Calender.List ausgeben. Ich habe mir die widgets angeschaut und fand das dahinterstehende PHP etc. recht komplex und wenn ich es richtig gesehen habe, arbeitet kein widget mit einem python dictionary?!
    Zuletzt geändert von Marcov; 27.07.2016, 22:11.

    #2
    Marcov
    kaum bestellt, schon geliefert (auf einen Trabi hättest Du doppelt so lange warten müssen).

    Basierend auf einer Idee von Bonze habe ich ein Widget "status.activelist" erstellt, das beliebige json-Meldungen anzeigen kann. Man kann darin einen Titel, einen Untertitel und einen Level angeben. Letzterer wird verwendet, um aus der Sprachdatei das Icon und die zugehörige Farbe zu holen (wie beim Kalender). Vordefiniert sind "info", "warning" und "error". Titel wäre in Deinem Beispiel "headline", Level wäre "flag" usw. Klickt man auf die Schaltfläche, wird der Inhalt der Meldung angezeigt:
    activelist.png
    Der Aufruf ist
    Code:
    {{ status.activelist('', 'bath.list', 'headline', 'date', 'message', 'flag') }}
    Einen Zähler habe ich jetzt nicht implementiert. Das macht IMHO im Backend mehr Sinn - dort wo die Meldungen empfangen und verwaltet werden. Der Code ist jetzt im develop zum Testen bereitgestellt.

    Gruß
    Wolfram

    Kommentar


      #3
      Hallo Marcov,

      kannst Du hier auch was dazu finden. Auf der Basis deines Plugins habe ich erweitert

      Viele Grüsse

      Andre

      Kommentar


        #4
        Toll was daraus geworden ist, ich schäme mich etwas, weil ich an der Weiterentwicklung nicht mitgeholfen habe, ich habe aber privat und beruflich zu viel um die Ohren und bin nach wie vor auf SmarthomeNg 1.4 und smartvisu 2.8. Ich hoffe mal Zeit zu finden mein System zu aktualsieren und von der tollen Weiterentwicklung zu profitieren.

        Kommentar


          #5
          Hi wvhn

          Ich habe das widget gerade für meinen Ondilo ICO versucht.
          Das item ICO.Nachrichten sieht so aus:

          Code:
          ICO:
              Messwerte:
                  Temperatur:
                      type: num
                      database: yes
                  Redoxpotential:
                      type: num
                      database: yes
                  pH:
                      type: num
                      database: yes
                  TDS:
                      type: num
                      database: yes
                  Batterie:
                      type: num
                  Signalstaerke:
                      type: num
              Nachrichten:
                  type: str
          und hat aktuell folgenden Inhalt, genau eine Nachricht:

          Code:
          {"id":6498501,"title":"Geben Sie 4 g Chlor hinzu","message":"Ich empfehle Ihnen, Chlor zuzusetzen, um eine gute Desinfektion Ihres Wassers zu gew\u00e4hrleisten.","created_at":"2022-01-23T14:30:57+0000","updated_at":"2022-01-23T14:30:57+0000","status":"waiting","deadline":"2022-01-29T00:00:00+0000"}
          Screenshot 2022-01-23 164214.png
          Das widget habe ich so eingebaut:

          Code:
          {{ status.activelist('', 'ICO.Nachrichten', 'title', 'created_at', 'message', 'status') }}
          Alles, was ich bekomme, ist das:

          Screenshot 2022-01-23 164757.png

          Und das sind noch eine ganze Menge mehr leere Nachrichten. Ganz weit unten hörts dann auf
          Ich finde den Fehler einfach nicht.

          SV 3.1.0
          SHNG 1.8.2

          EDIT: Ebenfalls versucht: der JSON String mit eckigen Klammern außen rum und noch eine mit den eckigen Klammern und einem ';' am Ende, so wie ich es in der Doku in widget_status.activelist.html gefunden habe. Selbes Ergebnis.

          Gruß, Martin
          Zuletzt geändert von Sipple; 23.01.2022, 17:05.

          Kommentar


            #6
            Hi Martin,
            ich denke, es liegt am item-Typ. Das widget benötigt list oder dict, damit die Daten als json-Objekt ankommen.

            Gruß
            Wolfram

            Kommentar


              #7
              Hi Sipple ,

              das Widget erwartet zwingend ein Array. Es wird über die Länge iteriert.

              Auszug aus dem Widget-Code :

              Code:
              for (var i = 0; i < data.length; i++) {
              showMessage(data[i]);
              };
              Das heißt Du musst Deine Nachrichten, die als Dict kommen, in ein list-Item hinzufügen : (z.B. in einer Logik)

              Code:
              myOldArray = sh.ICO.Nachrichten()
              myNewMessage = {"id":6498501,"title":"Geben Sie 4 g Chlor hinzu","message":"Ich empfehle Ihnen, Chlor zuzusetzen, um eine gute Desinfektion Ihres Wassers zu gew\u00e4hrleisten.","created_at":"2022-01-23T14:30:57+0000","updated_at":"2022-01-23T14:30:57+0000","status":"waiting","deadline":"2 022-01-29T00:00:00+0000"}
              myOldArray.append(myNewMessage)
              sh.ICO.Nachrichten(myOldArray)
              Nochmal im Backend bei den items prüfen ob der Wert als Array initial gefüllt wird - Inhalt sollte : [] sein (geschlossene eckige Klammern)

              mit folgeden Widget bekommst Du Deine Inhalte dann :

              Code:
              status.activelist('','ICO.Nachrichten','title','created_at','message','level')
              Wobei ich nicht sagen kann für was der "level" gut ist

              Wenn Du noch ein Icon in der Liste haben möchtest musst Du dieses in Dein Dict "mogeln" bevor Du es zum Array hinzufügts:

              z.B. :

              Code:
              myNewMessage['icon'] = 'scene_pool'
              Der eigentlich Inhalt wird erst beim Anklicken geöffnet.

              Sieht dann im Widget-Assistenten so aus :

              WA.jpg

              Viele Grüsse Andre

              Kommentar


                #8
                Sevus wvhn und AndreK


                Der entscheidende Hinweis war der Item-Typ. Geändert von str auf list, meine Experimente in der Logik rückgängig gemacht und schon geht's.

                Zitat von AndreK Sipple Beitrag anzeigen
                Wobei ich nicht sagen kann für was der "level" gut ist

                Wenn Du noch ein Icon in der Liste haben möchtest musst Du dieses in Dein Dict "mogeln" bevor Du es zum Array hinzufügts:
                Das ist relativ einfach. "level" ist in meinem Fall "status" und hat bei jeder noch nicht bestätigten Meldung vom ICO den Wert "waiting". Damit kann man das gewünschte Icon und die Farbe einstellen, indem man in der /lang/de.ini oder custom.ini z.B. das einträgt:

                Code:
                [status_event_format]
                info[icon] = info_info
                info[color] = green
                warning[icon] = info_warning
                warning[color] = gold
                waiting[icon] = message_info
                waiting[color] = blue
                error[icon] = info_error
                error[color] = red
                Und jetzt sieht das so aus:

                Screenshot 2022-01-23 202435.png
                Danke und Gruß

                Martin

                Kommentar


                  #9


                  und wieder was dazu gelernt

                  Kommentar


                    #10
                    Und ich erst

                    Kommentar


                      #11
                      Eine Frage noch: Es scheint so zu sein, dass neue status.activelist Einträge immer "geöffnet" angezeigt werden, also mit der Zusatzbeschreibung darunter wie im Bild in Post #8 (Ich empfehle Ihnen, ......).
                      Das wär nicht weiter schlimm, aber manchmal habe ich so viele Einträge in der Liste, dass dann die Blockhöhe nicht mehr ausreicht. Die ist bei mir aus optischen Gründen fest, sonst wäre es egal. Wären die Einträge immer erst mal geschlossen, passen eigentlich immer alle rein ohne dass es unschöne Effekte gibt.
                      Lässt sich das einfach ändern?

                      Kommentar


                        #12
                        Ja. durch ein Update auf v3.2. Da ist das Thema gelöst.

                        Gruß
                        Wolfram

                        Kommentar


                          #13
                          Ah wunderbar.
                          Hab grad erst ein altes NUC mit Bullsey, SHNG 1.9.2 und SV3.2 installiert und bin am umziehen. Läuft schon recht gut, abgesehen von einigen Errors im SHNG Log wegen Websocket etc. Da bin ich aber in bester Gesellschaft.

                          Kommentar

                          Lädt...
                          X