Ankündigung

Einklappen
Keine Ankündigung bisher.

Anzeige von Prozentwert aus KNX Wetterstation

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

    Anzeige von Prozentwert aus KNX Wetterstation

    Hallo zusammen,

    ich habe OH2.4 mit KNX2 Binding im Einsatz.

    Unter anderem lasse ich mir die Werte von meiner Gira Wetterstation in der BasicUI anzeigen.

    So z.B. die relative Luftfeuchte, der Wert kommt als Dezimalwert mit DPT9.007 in der Form 0.84 (= 84,0%) vom KNX Bus.

    OH interpretiert den Wert aber als 1% (d.h. es wird vermutlich fehlinterpretiert als 0,84% und dann aufgerundet).

    Hier meine Konfiguration:

    *.things
    Code:
    Type number        : OU_Dachterasse_Wetterstation_Relative_Luftfeuchte   "Luftfeuchte (relativ)" [ ga="9.007:<8/1/2" ]
    *.item
    Code:
    Number    OU_Dachterasse_Wetterstation_Relative_Luftfeuchte   "Luftfeuchte (relativ) [%d %%]" <humidity>    (OU)           {channel="knx:device:bridge:generic:OU_Dachterasse_Wetterstation_Relative_Luftfeuchte"}
    Logausgabe des Wertes vom KNX Bus
    Code:
    2018-12-30 18:39:57.518 [vent.ItemStateChangedEvent] - OU_Dachterasse_Wetterstation_Relative_Luftfeuchte changed from 0.82000000 to 0.84000000
    Was kann ich tun, um in der BasicUI den richtigen Wert angezeigt zu bekommen?

    #2
    %d als Formatierung wertet die Zahl 100 als 100%. Du kannst %.2f verwenden, um die Zahl in der Form 0.84 darzustellen, was zwar nicht die Lösung ist, aber immerhin siehst Du dann den Zahlwert.

    Kommentar


      #3
      Danke, jetzt bekomme ich schonmal die 0,84% als Wert angezeigt.

      Was kann ich nun tun, um daraus 84% werden zu lassen?

      Kommentar


        #4
        Zitat von Peiper Beitrag anzeigen
        Was kann ich nun tun, um daraus 84% werden zu lassen?
        Erstmal wenig

        Du kannst natürlich ein Proxy Item verwenden, in welches Du dann per Rule bei jeder Wertänderung den Wert mit 100 multipliziert hineinschreibst, aber das ist mindestens lästig, je nach Anzahl betroffener Items artet es in Arbeit aus. Man müsste dann die Proxy Items geschickt benennen und alle betroffenen Items in einer Gruppe zusammenfassen, um die Rule einfach zu halten:
        Code:
        rule "Prozentwerte"
        when
            Member of gProzentOriginal changed
        then
            gProzentProxy.members.filter[m|                    // suche das passende ProxyItem
                m.name.contains(triggeringItem.name)
            ].head.postUpdate(                                 // aktualisiere den Wert
                if (!(triggeringItem.state instanceof Number)) // falls der Status keine Zahl ist
                    NULL                                       // NULL
                else
                    (triggeringItem.state as Number) * 100     // ansonsten die Zahl mit 100 multiplizier
            )
        end
        Alle OriginalItems befinden sich in der Gruppe gProzentOriginal.
        Die Namen der OriginalItems müssen so gestaltet sein, dass kein Teilstring eines Itemnamens der vollständige String eines anderen Itemnamens ist. z.B.
        MyProzent1 und MyProzent12 ist nicht erlaubt, weil der erste String vollständig im zweiten String auftaucht. MyProzent_1 und MyProzent12 sind aber erlaubt.
        Alle ProxyItems befinden sich in der Gruppe gProzentProxy.
        Die Namen der ProxyItems entsprechen denen der OriginalItems, nur dass irgendwo (vorn oder hinten) noch etwas anderes dabei steht, z.B. jeweils "Proxy". Soll heißen, das OriginalItem heißt z.B. MyProzent_1 und das Proxy Item heißt ProxyMyProzent_1 oder MyProzent_1Proxy.
        Wenn ein OriginalItem seinen Wert ändert, startet die Rule, sucht das passende Proxy Item dazu heraus und ändert dessen Wert entsprechend.

        Der Code passt auch in eine Zeile, die Formatierung habe ich nur gewählt, um etwas verständlicher zu machen, was da passiert. Die Kommentare kannst Du also gerne weg löschen und die Umbrüche herausnehmen.
        Zuletzt geändert von udo1toni; 01.01.2019, 18:49.

        Kommentar


          #5
          Vielen Dank für deine Hilfe! :-)

          Ich habe dein Skript nur noch etwas vereinfacht, da es (aktuell) nur der Wert der relativen Luftfeuchte ist, welcher Probleme macht.

          Code:
          rule "RULE_OU_Dachterasse_Wetterstation_Relative_Luftfeuchte_Berechnen"
          when
          Item OU_Dachterasse_Wetterstation_Relative_Luftfeuchte changed
          then
          OU_Dachterasse_Wetterstation_Relative_Luftfeuchte_Proxy.postUpdate((OU_Dachterasse_Wetterstation_Relative_Luftfeuchte.state as Number) * 100)
          end

          Kommentar


            #6
            .9Ja, sicher, solange es nur um ein einzigen Item geht, kann man das auch direkt erschlagen. Aber nicht vergessen, die Rule wird einen Fehler schmeißen, sobald das Item mal keinen Status vom Typ Number hält. Sauberer wäre also
            Code:
            rule "RULE_OU_Dachterasse_Wetterstation_Relative_Luftfeuchte_Berechnen"
            when
                Item OU_Dachterasse_Wetterstation_Relative_Luftfeuchte changed
            then
                if(OU_Dachterasse_Wetterstation_Relative_Luftfeuchte.state instanceof Number)
                    OU_Dachterasse_Wetterstation_Relative_Luftfeuchte_Proxy.postUpdate((OU_Dachterasse_Wetterstation_Relative_Luftfeuchte.state as Number) * 100)
                else
                    OU_Dachterasse_Wetterstation_Relative_Luftfeuchte_Proxy.postUpdate(NULL)
            end

            Kommentar


              #7
              Danke, habe ich zur Fehlerbehandlung noch eingebaut.

              Kommentar

              Lädt...
              X