Ankündigung

Einklappen
Keine Ankündigung bisher.

Plot eines "dict" Elements? Sonoff Stromverbrauch, value über MQTT

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

    Plot eines "dict" Elements? Sonoff Stromverbrauch, value über MQTT

    Hallo zusammen,

    ich hab folgende Frage, ich hab ein Item definiert:

    [Sonoff]
    [[ENERGIE]]
    name = Leiste2_ENERGIE
    type = dict
    mqtt_topic_in = 'tele/sonoff/ENERGIE'
    sqlite = yes


    Das Item wird durch das MQTT Plugin mit einem dict array befüllt, in dem Item steht dann folgendes:

    {'Faktor': 0.0, 'Spannung': 0, 'gestern': 0.195, 'Total': 0.547, 'Punkt': 0, 'Zeit': '2017.12.14 09:21:51', 'heute': 0.009, 'Leistung': 0, 'Strom': 0.0}

    Auf einen bestimmten Wert kann ich glaub ich mit:

    sh.Sonoff.ENERGIE()[Spannung]

    drauf zugreifen, aber wie kann ich über Spannung einen plot anzeigen lassen?

    Das wäre ja ein normaler Plot eines normalen Items:

    {{ plot.period('p1', 'Kueche.Temperatur.IST', 'max', '24h', 0, 0, '', '', '', '', '', ['24 Stunden', 'Temperatur in C']) }}

    kann ich überhaupt einen Plot über ein dict Item erstellen?

    Grüße,
    nano

    #2
    Zitat von nano81 Beitrag anzeigen
    kann ich überhaupt einen Plot über ein dict Item erstellen?
    Nein. Du kannst Plots überhaupt nicht über Items erstellen, sondern nur über deren historischen Werte, welche mit dem database- oder dem sqlite-Plugin gespeichert wurden. Sonst kennt SmartHomeNG nur den aktuellen Wert.

    Damit in deinem konkreten Fall die Werte in der Datenbank gespeichert werden können, musst du das dict zerlegen. Das könnte etwa so gehen:
    Code:
    [Sonoff]
        [[ENERGIE]]
            ... deine bestehende config ...
            [[[Spannung]]]
                type = num
                eval_trigger = Sonoff.ENERGIE
                eval = value['Spannung']
                database = yes
    Vorher noch das database-Plugin (oder alternativ sqlite) einrichten, falls du dieses noch nicht verwendest.

    Danach kannst du den Plot über Sonoff.ENERGIE.Spannung machen.
    Zuletzt geändert von smai; 14.12.2017, 10:59.

    Kommentar


      #3
      Hi, danke für deine Antwort.

      Ich glaub grad eher das das Item dict nicht richtig gefüllt is, ich hab mal versucht ein dict Item selber zu füllen mit ein paar Elementen:

      type = dict
      value = {'Leistung': 0, 'Zeit': '2017.12.14 13:32:55', 'Spannung': 0}

      2017-12-14 13:46:53 ERROR Main Item Sonoff.Leiste2.Test: value {'Leistung': 0, 'Zeit': '2017.12.14 13:32:55', 'Spannung': 0} does not match type dict.

      is die Syntax hier falsch?

      Kommentar


        #4
        Mh ist das vl ein json ? hatte dicts in smarthomeng noch nie gebraucht, Aber du koenntest es als string speichern, dann per eval ne logic triggern und zerlegen wie dus brauchst?

        Kommentar


          #5
          Eigentlich sieht der Wert richtig aus, die Syntax für python dict ist in der Tat ähnlich wie JSON.
          Ich bin mir nicht sicher, ob ein das value-Attribut mit einem dict gefüttert werden kann.

          Da dies definitiv SmartHomeNG betrifft, schiebe ich das Thema ins andere Forum.

          Kommentar


            #6
            Ok hab was rausgefunden ich kann in Items.conf keine dict oder list Items füllen...nur über logiken oder plugins.
            Code:
            [Sonoff]
                [[Leiste2]]
                    [[[ENERGIE]]]
                        type = dict
                        mqtt_topic_in = 'tele/sonoff2/ENERGIE'
                    [[[gestern]]]
                        type = num

            Dann war mein Problem noch folgendes, ich konnte kein Wert aus dem dict Item holen. Versucht hab ich folgendes in einer Logic:

            Code:
            [B]sh.Sonoff.Leiste2.ENERGIE()['gestern'][/B]
            da bekomme ich eine Fehlermeldung

            Wenn ich aber den Umweg über eine Variable geh:

            Code:
            [B]MQTT_String = sh.Sonoff.Leiste2.ENERGIE()
            MQTT_String['gestern'][/B]
            geht es!

            jetzt kann ich einfach den Wert in "gestern" schreiben mit:

            Code:
            [B]sh.Sonoff.Leiste2.gestern(MQTT_String['gestern'])[/B]
            aber über eine Logic is das schon ziemlich Umständlich....
            Zuletzt geändert von bmx; 14.12.2017, 15:37. Grund: Bitte [ CODE ] ... [ / CODE ] nutzen!

            Kommentar


              #7
              Zitat von Bonze Beitrag anzeigen
              Mh ist das vl ein json ? hatte dicts in smarthomeng noch nie gebraucht, Aber du koenntest es als string speichern, dann per eval ne logic triggern und zerlegen wie dus brauchst?
              Hi,
              ja an sich ne gute Idee aber nicht ganz so einfach, da ich die Werte die über MQTT kommen immer in einer anderen Reihenfolge sind....manchmal steht Spannung als erstes, manchamal aber auch die Zeit....

              Kommentar


                #8
                Was spricht gegen das eval, hat dieses nicht funktioniert?

                Kommentar


                  #9
                  eval = value['Spannung'] hat bei mir nicht funktioniert! nur innerhalb einer Logic und dann auch nur über den Umweg über eine Variable wie ich oben beschrieben hab!

                  Kommentar

                  Lädt...
                  X