Ankündigung

Einklappen
Keine Ankündigung bisher.

Werte aus Openweathermap an KNX

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

    Werte aus Openweathermap an KNX

    Moin zusammen,

    folgendes möchte ich erreichen:
    1) Binding Openweathermap ruft aktuelle Wetterdaten ab (läuft)
    2) Aktuelle Außentemperatur wird an Gruppenadresse geschickt, Anzeige als Statuswert des MDT Glastaster II.

    Einfach/elegant wäre es gewesen, die Verbindung direkt per Channel linking herzustellen. Allerdings kommt von Openweathermap ein String an, bspw. "2.23 °C" und KNX akzeptiert nur eine Zahl als Datentyp. Ergo muss ich den Wert irgendwie parsen und dann an KNX schicken.

    Wer hat eine gute Idee dazu?

    #2
    Als 16bit ?

    Wird der Wert gelesen?
    current - temperature - Number:Temperature - Current temperature.

    eventuelle muss hier
    Number:Temperature localCurrentTemperature "Current temperature [%.1f %unit%]" <temperature> { channel="openweathermap:weather-and-forecast:api:local:current#temperature"

    etwas im Code geändert werden...
    Zuletzt geändert von Allesreinwasgeht; 29.01.2019, 20:56.
    just solutions

    Kommentar


      #3
      Vielleicht helfen ein paar weitere Angaben:

      Deklaration der KNX GA:
      Code:
      Thing device allg_virtual "KNX allg generisch" [
          ] {
              Type number-control     : Temp_aussen           "Außentemperatur" [ ga="9.001:11/1/0" ]
              Type number-control     : luftfeuchte           "Luftfeuchtigkeit" [ ga="9.007:11/1/1" ]
              Type number-control     : windgeschwindigkeit           "Windgeschwindigkeit" [ ga="9.005:11/1/2" ]
          }
      Der Versuch, die Kanäle direkt zu verknüpfen klappt nicht:
      Code:
      Number:Temperature localCurrentTemperature "Außentemperatur [%.1f %unit%]" <temperature> { channel="openweathermap:weather-and-forecast:api:local:current#temperature", channel="knx:device:bridge:allg_virtual:Temp_aussen"}
      Alternativ hatte ich mal folgendes probiert, klappt auch nicht:
      Code:
      Number localCurrentTemperature "Aussentemperatur [%.1f]" <temperature> { channel="openweathermap:weather-and-forecast:api:local:current#temperature", channel="knx:device:bridge:allg_virtual:Temp_aussen"}
      Es wird erst gar kein Wert an den KNX-Bus geschickt. Im Diagnosemodus der ETS5 ist keine 11er GA zu verzeichnen gewesen.

      Kommentar


        #4
        Und wenn du den Wert zuerst als 16bit utf entgegen nimmst und nicht als 9.001?

        28.001

        oder mal

        %.1f%

        testen
        Zuletzt geändert von Allesreinwasgeht; 30.01.2019, 23:34. Grund: Add
        just solutions

        Kommentar


          #5
          und wenn du das per Regel machst?
          --
          Gruß
          Lothar

          Kommentar


            #6
            Das Problem ist hier, dass die Channels zueinander inkompatibel sind. Number:Temperature und Number unterscheiden sich. openHAB weiß schlicht nicht, wie der Wert umzusetzen ist. Daran wird sich nichts ändern, solange das knx2 Binding nicht mit UoM (Units of Measurement) umgehen kann.
            Der einzige Ausweg ist eine Regel, die die Umrechnung vornimmt. Da auf beiden Seiten °C verwendet werden, besteht die "Umrechnung" hier nur im Entfernen der Unit:
            Code:
            Number:Temperature localCurrentTemperature "Außentemperatur [%.1f %unit%]" <temperature> { channel="openweathermap:weather-and-forecast:api:local:current#temperature" }
            Number knxCurrentTemperature "Außentemperatur [%.1f °C]" <temperature> { channel="knx:device:bridge:allg_virtual:Temp_aussen" }
            Code:
            rule "send Temp to knx"
            when
                Item localCurrentTemperature changed
            then
                if(localCurrentTemperature instanceof QuantityType) {
                     knxCurrentTemperature.sendCommand(localCurrentTemperature as QuantityType<Number>)
                }
            end

            Kommentar


              #7
              Vielen Dank für die Antworten.

              Ich habe die Einheiten entfernt. Jetzt klappt es mit der Anzeige. Im PaperUI steht logischerweise auch keine Einheit mehr.

              Also entweder Einheiten entfernen und Kanäle verbinden oder eine Regel schreiben.

              Kommentar


                #8
                Nein, das geht schon beides gleichzeitig. Allerdings habe ich offensichtlich nicht mitbekommen, dass openHAB sich inzwischen anders verhält. Versuche es mal in der Rule so (vorher natürlich die Einheit wieder einbauen)
                Code:
                rule "send Temp to knx"
                when
                    Item localCurrentTemperature changed
                then
                    if(localCurrentTemperature.state instanceof Number) {
                         knxCurrentTemperature.sendCommand((localCurrentTemperature.state as Number).floatValue)
                    }
                end

                Kommentar


                  #9
                  Ev. hilft das hier dir weiter, habe es gerade gefunden, da ich mich auch für dieses Thema interssiere.
                  Meine Station hat eine korrosion am Temperaturfühler und ich zur zeit keine Zeit um ihn zu wechseln.

                  https://www.knxshop4u.ch/de/homeserv...rmap-bausteine

                  Kommentar


                    #10
                    Hallo zusammen,

                    der Beitrag ist schon sehr alt, aber der Titel trifft genau mein Problem.

                    Vorab - ich habe schon viel von KNX in Openhab eingebunden udn angezeigt, aber ich habe bislang noch keine Werte aus Openhab zum KNX Bus gesendet.
                    Daher, entschuldigt vielleicht meine vielen Fehler.


                    Was funktioniert...
                    Die aktuelle Temperatur vom OpenWeatherMap in einer Sitemap anzeigen. (Item lautet "Aussentemperatur" und wurde als Number angelegt.)


                    Was habe ich sonst noch gemacht...

                    Einen KNX Channel unter meinem Thing "Generic Group Adresses" angelegt:
                    - Channel: Aussentemperatur_KNX
                    - Number-control
                    - Adresse: 9.001:0/0/4

                    Diesen Channel mit folgendem Item verlinkt:
                    - Item: Aussentemperatur_KNX
                    - Number

                    Eine Rule angelegt:
                    Code:
                    rule "send Temp to KNX"
                    when
                        Item Aussentemperatur changed
                    then
                        Aussentemperatur_KNX.sendCommand((Aussentemperatur.state as Number).floatValue)
                    end​

                    Was habe ich alles falsch gemacht?

                    Bin vorab sehr dankbar für eure Unterstützung...
                    Maxe

                    Kommentar


                      #11
                      Moin Maxe,

                      ich war gerade dabei, die meine Config zu schicken, aber: mittlerweile habe ich meine KNX-Wetterstation in Betrieb genommen... Deshalb kann ich dir leider nicht weiterhelfen.

                      Hast du auf dem Bus geschaut, ob der Wert dort erscheint?

                      Kommentar


                        #12
                        Na ja, Du hast Dir mutmaßlich zu viel Mühe gemacht

                        Zunächst der Unterschied zwischen "normalen" und *-control Channels: Beim "normalen" Channel ist openHAB die Bedienoberfläche, knx liefert Zustände und akzeptiert Befehle.
                        Bei den *-control Channels ist es genau andersherum. knx ist die "Bedienoberfläche", openHAB liefert Zustände und akzeptiert Befehle. Beispiel Lichtschalter und Schaltaktor: der knx Schaltaktor wird als switch Channel angelegt. Er meldet seinen Schaltzustand und reagiert auf den Befehl zum Schalten. Ein knx Wandtaster, der zum Steuern von Nicht-knx-Leuchten verwendet werden soll, wird als switch-control angelegt. openHAB sendet den Zustand und reagiert auf den Schaltbefehl.

                        In openHAB macht sich dieser Unterschied darin bemerkbar, dass ankommende Telegramme normaler Channel immer und ausschließlich als Update des Status gewertet werden. Hat sich durch das Update auch der Zustand eines Items geändert, so ergibt sich ein changed Ereignis. Umgekehrt kann openHAB nur durch ein sendCommand() den knx Aktor steuern oder auch z.B. Sollwerte an knx senden.
                        Bei einem *-control Channel ist es wieder genau andersrum, ankommende Telegramme werden nun als received command gewertet. Im Umkehrschluss muss der Status als postUpdate() an den knx Bus gesendet werden (!).

                        Warum das Ganze? Nun, ein knx Switch sendet einen Befehl an openHAB, dieser Befehl wird als Befehl(!) an das Item durchgereicht. Wenn das Item nun mit einem weiteren Channel verlinkt ist, wird dieser Channel den Befehl ebenfalls empfangen (!) und entsprechend reagieren. Umgekehrt sendet ein Channel ein Update, woraufhin das verlinkte Item seinen Status ändert. Ist nun ein *-control Channel mit diesem Item verlinkt, so wird das Update des Status direkt an den knx Bus durchgereicht.

                        Das bedeutet: Du kannst Deine Rule löschen. Ebenso kannst Du das Item Aussentemperatur_KNX löschen. Du musst lediglich den knx number-control Channel mit dem Item Aussentemperatur verlinken.
                        Eine Falle gibt es dabei noch, das ist QuantityType (oder UoM, Units of Measurement). Falls das Item Aussentemperatur vom Typ Number:Temperature ist, und Dein openHAB mindestens auf Version 4.0 läuft, sollte alles sofort korrekt funktionieren, der DPT9.001 ist ja Temperatur in °C. Falls die Version nicht erfüllt ist, kommt es etwas darauf an, in welchem exakten Format der Wert im Item angeliefert wird.

                        Kommentar


                          #13
                          Hallo udo1toni,

                          manchmal ist es so einfach - wenn man weiß wie :-)

                          Herzlichen Dank für deine Unterstützung, es funktioniert auf Anhieb einwandfrei!

                          Liebe Grüße und dir ein schönes Wochenende...
                          Maxe

                          Kommentar


                            #14
                            Hallo nochmal,

                            jetzt hänge ich bei meinem nächsten Schritt doch wieder.

                            Ich habe in Anlehnung an deinen Beitrag hier:
                            Steuerung der Poolheizung um Außentemperatur erweitern - openhabforum.de

                            Folgendes versucht:
                            Code:
                            rule "Vorhergesagte max Aussentemperatur"
                             when
                                Time cron "0 0 0 * * ?"
                             then
                                var maxTemp = 0
                                gOWM.members.filter[ i |
                                    i.name.contains("Temp") && i.name.contains("Fc") && (i.state instanceof Number)
                                ].forEach [ j |
                                    if((j.state as Number) > maxTemp)
                                        maxTemp = (j.state as Number)
                                ]
                                
                                //maxTemp = 88
                                Aussentemperatur_Vorhersage.sendCommand(maxTemp)
                            end​​
                            Die Formel scheint zu funktionieren, weil der maximale Wert wird im Item angezeigt aber nicht auf dem KNX Bus.

                            Wenn ich "maxTemp = 88" testweise einkommentiere, dann wird es zusätzlich auch sauber auf dem KNX Bus rausgeschickt.

                            Passt irgendwas mit den Werten in der Formel nicht?
                            Warum funktioniert die manuelle 88?

                            Hast du mir nochmal einen Tipp?

                            Liebe Grüße Maxe

                            PS: Ich verwende openHAB 3.3.0.M3
                            Zuletzt geändert von Maxe1983; 21.06.2024, 20:43.

                            Kommentar


                              #15
                              Wenn das Item Aussentemperatur_Vorhersage mit dem besagten number-control Channel verlinkt ist, musst Du .postUpdate() verwenden, nicht .sendCommand()

                              Kommentar

                              Lädt...
                              X