Ankündigung

Einklappen
Keine Ankündigung bisher.

Openhab - Kommawerte anzeigen / MQTT

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

    Openhab - Kommawerte anzeigen / MQTT

    Hallo zusammen,

    ich beginne so langsam damit, mein Haus mit selbstgebauten Sensoren auszustatten und habe mich nach langem Überlegen und lesen für Openhab entschieden.
    Die Kommunikation soll bei mir komplett über MQTT laufen. Allerdings habe ich derzeit das Problem, das ich die Werte (z.B. Temperatur) in OpenHAB nicht als "Number" in die Sitemap eingebunden bekomme - Als "String" wiederum gehts.
    Mein Item sieht so aus:

    Number Temp0 {mqtt="<[mqtt:/Env/Temp0:state:default"}

    Der Link in der Sitemap so:

    Text item=Temp0 label="Temp Außenluft [%.1f °C]"

    In der Sitemap wird nur ein "-" anstatt des Wertes angezeigt, obwohl das event.log loggt, dass der Wert Temp0 aktualisiert wurde.

    Ich vermute das Problem liegt irgendwo in der Konvertierung zwischen Float / String. Den Wert 24.5 sende ich als String an MQTT.
    Kann ich den in Openhab irgendwie wieder in eine Kommazahl (Float) verwandeln?

    Oder muss ich die Zahl nicht als String, sondern als Bytes senden?
    Da heute MIstwetter ist, habe ich schon einige Stunden darin investiert, aber noch keine Lösung gefunden.

    Habt Ihr einen Tipp für mich?
    Grüße

    Andreas

    #2
    Also grundsätzlich geht das. Ich schicke von einem Raspberry Pi die Temperatur und Luftfeuchtigkeitswerte an MQTT von wo openHAB die Werte annimmt und anzeigt / persistiert. Also im Grunde genau der gleiche Aufbau wie bei Dir. Dabei schicke ich diese Werte ebenfalls als Strings zum MQTT-Topic ("22.5" beispielsweise für die Temperatur) wobei hierbei eine Python-Bibliothek zum Einsatz kommt.

    Ich werde heute Abend mal die betreffenden Stellen (also Item und Sitemap) vergleichen um zu sehen ob da irgendein Unterschied zu sehen ist. Findest Du in den Logs irgendwelche anderen Anhaltspunkte ? Vielleicht irgendwelche Konvertierungsfehler ?

    Kommentar


      #3
      Hi
      vom Gefühl her würde ich sagen das das an der item / sitemap Config liegt:

      Number Temp0 "Temp Außenluft [%.1f °C]" {mqtt="<[mqtt:/Env/Temp0:state:default"}

      Der Link in der Sitemap sollte so sein:

      Text item=Temp0

      probiers mal so aus.

      Grüsse
      Karsten

      Kommentar


        #4
        Hallo,

        danke für die Tipps. Ich werde es heute abend gleich mal probieren.

        @Reddick: Wäre toll, wenn Du mir das mal raussuchen könntest.

        @Karsten: Ich verstehe das so, dass ich das "Label" aus der Sitemap in die Item-Definition nehme?

        Was ich noch nicht ganz verstanden habe, ist: Wie konvertiert/erkennt Openhab eingehende Werte? Und wo kann ich nachsehen, was er mit eingehenden Werten macht?
        Im Events.log schreibt er nur rein, dass er den Wert für Temp0 aktualisiert hat auf " 23.5" (Leerzeichen davor). Im Openhab.log steht nichts auffälliges drin..

        Grüße

        Andreas

        Kommentar


          #5
          Ja - die labels sollten beim Item sein.

          Betreffend des Leerzeichens - hmm - da könnte ein Problem werden für ein Number Item.

          Eine Umformatierung erfolgt im OH meist über eine Regel. Eventuell äquivalent zu dem hier:
          https://groups.google.com/forum/#!searchin/openhab/string$20to$20number/openhab/MsaLuck5U0g/ZTx6n90ISwoJ

          Für deinen Fall:

          Temp0 aktualisiert hat auf " 23.5"

          buffer=VariableName.state.toString.split(" ")
          var number MyNumber = buffer.get(2) as DecimalType

          Grüsse
          Karsten

          Kommentar


            #6
            Ok,

            soeben probiert. Funktioniert nicht. Problem scheint wirklich die Zahl zu sein, die als Text erkannt wird.

            Wie baue ich diese Regel ein? Den Code verstehe ich ja. Nur weiss ich gerade nicht, wie ich das einbinde. Über ein Script auf das ich dann vom Item aus verweise?

            Oder eine Frage in Richtung MQTT: Kann ich damit Kommawerte übertragen, die auf der anderen Seite auch wieder als Kommawert erkannt werden? Eigentlich müsste es doch möglich sein, die 4Byte des Typs float zu senden und auf der Empfängerseite diese 4Bytes wieder als Float zusammenzubauen......
            Scheint eine harte Nuss zu sein für ein Anfänger, aber da muss ich mich wohl durchbeißen!

            Spontane Idee: Würde OPenhab einen String ("23.5") ohne Leerzeichen als Kommazahl erkennen können?

            Kommentar


              #7
              Wie baue ich diese Regel ein? Den Code verstehe ich ja. Nur weiss ich gerade nicht, wie ich das einbinde. Über ein Script auf das ich dann vom Item aus verweise?
              NEUES Item Hinzufügen:
              Number Temp0value "Temp [%.2f °C]"

              regel:
              rule "Temp0 Update to decimal"

              when
              Item Temp0 received update
              then
              var buffer=Temp0.state.toString.split(" ")
              Temp0value = buffer.get(2) as DecimalType

              end

              Ins unreine geschrieben - da ich keine Testwerte habe.

              zu MQTT kann ich leider (noch) nix sagen.

              Wenn Werte als Number kommen kann OH das auch so lesen - habe den Fall in Verbindung mit einem Exec Binding Aufruf. Wobei da nur eine einfache Integer kommt.

              Grüsse
              Karsten

              Kommentar


                #8
                Also ich habe auch mal ein wenig damit herumgespielt und kann bestätigen dass die Events bei mir ohne führendes Leerzeichen anzeigt werden (und das ist so wie es bei mir aktuell läuft):

                $ mosquitto_sub -t Bedroom/temperature
                23.20

                Sobald ich aber beispielsweise der Temperatur im Sender ein Leerzeichen voranstelle werden auch bei mir die Werte nicht mehr in der Sitemap angezeigt. Im openhab.log findet sich aber dann :

                17:28:29.141 DEBUG org.openhab.ui.internal.items.ItemUIRegistryImpl[708]- matchStateToValue: Decimal format exception: java.lang.NumberFormatException: For input string: "Uninitialized"

                Diese Fehlermeldung ist natürlich unglücklich da sie nicht einmal angibt bei welchem Item das Parsen fehlgeschlagen ist. Hier gäbe es Raum für Verbesserung ;-).

                Scheinbar kommt der Parser mit dem führenden Leerzeichen nicht klar. Kannst Du mal prüfen ob Du dem Sender der Events das führende Leerzeichen abgewöhnen kannst ? Das wäre die einfachste und wahrscheinlich auch sauberste Lösung.

                Kommentar


                  #9
                  Hi,

                  ich wollte eine kurze Rückmeldung geben. Es lag tatsächlich an den Leerzeichen. Ich habe mein Programm nun umgestrickt und nun kann ich Zahlen per MQTT senden, ohne störende Zeichen im String.

                  Klappt alles wieder wunderbar
                  DANKE!!!!

                  Grüße
                  Andreas

                  Kommentar


                    #10
                    freut uns

                    Kommentar


                      #11
                      Hallo
                      Ich vermute, ich habe das Problem, dass ich von meiner Heizungssteuerung Werte mit Komma zurückbekomme ud ich das so nicht als "Number" darstellen kann.
                      Ich hab versucht, die oben erwähnte Rule bei mir ienzubauen. Hat aber leider nichts gebracht.
                      Ich habs geschafft, dass ich den Temperaturwert als String rausschneide und auch so als Item darstellen kann.
                      Wenn ich den Beitrag oben richtig verstanden habe, brauch ich nur ein zweites Item definieren und das mit Hilfe der "Rule" undefinieren und in der Sitemap zusätzlich darstellen.
                      Was kann ich sonst noch machen, wenns nicht funkltioniert ?

                      Danke

                      Kommentar

                      Lädt...
                      X