Ankündigung

Einklappen
Keine Ankündigung bisher.

Außentemperatur an KNX-Bus senden und Wettercharts

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

    Außentemperatur an KNX-Bus senden und Wettercharts

    Hallo,

    ich versuche gerade ein paar Sachen in OH zu realisieren und komme auch mit der Suche nicht weiter.

    Erreichen möchte ich folgendes mit meinen OH der auf einem Synology läuft:

    - Außentemperatur und einige andere Werte vom Internet holen (für 4 Orte)
    - eine Chart erstellen und visualisieren in OH
    - den lokalen Temperaturwert an den KNX-Bus schicken und bei Änderung aktualisieren

    Ergebnis ist im Moment:

    - Temperaturen werden abgeholt
    - im OH sichtbar - Abholdatum ist aber um eine Stunde versetzt
    - jede Sekunde wird die Außentemperatur an den Bus geschickt (Overkill) - habe dies zufällig im Gruppenmonitor gesehen
    - Wettercharts nicht vorhanden leeres Feld

    meine Konfigs:

    Items:

    Number Hannover_Temperatur "Temperatur [%.1f °C]" <temperature> (Wettergrafik) {weather="locationId=hannover, type=temperature, property=current", knx="0/0/3"}

    Number Hannover_Luftfeuchtigkeit "Luftfeuchtigkeit [%d %%]" <water> {weather="locationId=hannover, type=atmosphere, property=humidity"}

    Number Hannover_Luftdruck "Luftdruck [%.0f mb]" {weather="locationId=hannover, type=atmosphere, property=pressure"}

    Number Hannover_Bewoelkung "Bewölkung [%.0f %%]" <sun_clouds> {weather="locationId=hannover, type=clouds, property=percent"}

    DateTime Hannover_Letztes_Update "Letztes Update [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" <clock> {weather="locationId=hannover, type=condition, property=lastUpdate"}

    Number Hannover_Windgeschwindigkeit "Windgeschwindigkeit [%.0f km/h]" <wind> {weather="locationId=hannover, type=wind, property=speed"}

    String Hannover_Windrichtung "Windrichtung [%s]" <wind> {weather="locationId=hannover, type=wind, property=direction"}

    Number Wettergrafik_Zeitraum "Temperatur - Zeitraum"
    Sitemap:

    Frame label="Wetter Hannover" {
    Text item=Hannover_Temperatur valuecolor=[>30="red",>25="orange",>15="green",>5="orange",< =5 ="blue"]
    {
    Frame
    {
    Text item=Hannover_Temperatur valuecolor=[>30="red",>25="orange",>15="green",>5="orange",< =5 ="blue"]
    Text item=Hannover_Luftfeuchtigkeit
    Text item=Hannover_Luftdruck
    Text item=Hannover_Bewoelkung
    Text item=Hannover_Windgeschwindigkeit
    Text item=Hannover_Windrichtung
    Text item=Hannover_Letztes_Update
    }
    Frame
    {
    Switch item=Wettergrafik_Zeitraum label="Zeitraum" mappings=[0="Stunde", 1="Tag", 2="Woche"]
    Chart item=Wettergrafik period=h refresh=6000 visibility=[Wettergrafik_Zeitraum==0, Wettergrafik_Zeitraum=="Uninitialized"]
    Chart item=Wettergrafik period=D refresh=30000 visibility=[Wettergrafik_Zeitraum==1]
    Chart item=Wettergrafik period=W refresh=30000 visibility=[Wettergrafik_Zeitraum==2]
    }
    }
    }
    Persistence:

    Items {
    DemoSwitch,NoOfLights,Window_GF_Toilet,Heating* : strategy = everyChange, everyMinute, restoreOnStartup

    // let's only store temperature values in rrd
    Temperature*,Weather_Chart*,Wettergrafik* : strategy = everyMinute, restoreOnStartup
    }
    Ich habe erstmal die GA rausgenommen um den Bus zu entlasten, würde es aber gerne wieder reinnehmen um die RTRs mit
    Daten zu füttern.

    kann mir jemand helfen ?

    gruss

    gpowa
    Zuletzt geändert von gpowa; 08.11.2015, 16:33.

    #2
    Du hast für das Stunden-Wetterchart den Refresh auf 6 Sekunden gesetzt. Keine Ahnung, ob das Auswirkungen hat, aber vermutlich werden die Wetterdaten eh nicht so oft abgeholt.
    Wie sieht denn die Definition des weather-Bindings in der openhab.cfg aus? (Aber da ist der Mindest-Pollabstand eine Minute, wenn ich mich richtig erinnere)

    Die Definition für everyMinute im Persistence-File ist auch in Ordnung? (openHAB verwendet quartz, das arbeitet sekundengenau, die erste Stelle in der cron-Definition ist also die Sekunde, nicht die Minute)
    Für ein Problem an dieser Stelle spricht auch das fehlende Chart.

    Was die Anzeige des Updates betrifft, könnte ich mir vorstellen, dass das weather-Binding hier UTC zurückliefert.

    Grundsätzlich sollte alles, was Du Dir vorstellst mit Deiner Konfiguration auch genau so funktionieren, auf den ersten Blick sehe ich jedenfalls nichts anderes als bei mir, ich schicke die Außentemperatur auf dem gleichen Weg zum knx-Bus.

    Kommentar


      #3
      Hallo,

      Zitat von udo1toni Beitrag anzeigen
      Du hast für das Stunden-Wetterchart den Refresh auf 6 Sekunden gesetzt. Keine Ahnung, ob das Auswirkungen hat,
      Ok danke, das wusste ich nicht, habe dies geändert und OH neu gestartet ... kein Unterschied.

      Zitat von udo1toni Beitrag anzeigen
      Wie sieht denn die Definition des weather-Bindings in der openhab.cfg aus?
      Also ich hatte noch das Http-Binding dring, welches ich deaktiviert habe und dort stand:

      ############################### HTTP Binding ##########################################
      #http:weather.url=http://weather.yahooapis.com/forecastrss?w=657169&u=c
      #http:weather.updateInterval=60000
      Und im Weather-Binding:

      ################################### Weather Binding ###################################

      weather:apikey.Wunderground=geheimerschlüssel
      weather:location.hannover.name=Hannover
      weather:location.hannover.latitude=52.3456
      weather:location.hannover.longitude=9.7908
      weather:location.hannover.provider=Wunderground
      weather:location.hannover.language=de
      weather:location.hannover.updateInterval=30

      weather:apikey.Wunderground=geheimerschlüssel
      weather:location.leon.name=Leon
      weather:location.leon.latitude=39.2639
      weather:location.leon.longitude=21.5344
      weather:location.leon.provider=Wunderground
      weather:location.leon.language=de
      weather:location.leon.updateInterval=120

      Zitat von udo1toni Beitrag anzeigen
      Die Definition für everyMinute im Persistence-File ist auch in Ordnung? die erste Stelle in der cron-Definition ist also die Sekunde, nicht die Minute)
      Das ist die komplette persistence:


      // persistence strategies have a name and a definition and are referred to in the "Items" section
      Strategies {
      // for rrd charts, we need a cron strategy
      everyMinute : "0 * * * ?"
      }

      Items {
      DemoSwitch,NoOfLights,Window_GF_Toilet,Heating* : strategy = everyChange, everyMinute, restoreOnStartup

      // let's only store temperature values in rrd
      Temperature*,Weather_Chart*,Wettergrafik* : strategy = everyMinute, restoreOnStartup
      }
      Ich habe diese Testweise komplett entfernt aus der Config - Die Schreibbefehle von der Außentemperatur kommen trotzdem alle 1 Sekunde.
      # Zeit Dienst Flags Prio Quelladresse Quelle Zieladresse Ziel Rout Typ DPT Info
      41304 04.11.2015 21:05 vom Bus Low 0.0.1 - 0/0/3 Außentemperatur 4 Schreiben 9.* 2-Byte Gleitkommawert 05 14 | 13
      Zitat von udo1toni Beitrag anzeigen
      Was die Anzeige des Updates betrifft, könnte ich mir vorstellen, dass das weather-Binding hier UTC zurückliefert.
      Wo ändert man das bei Wunderground ?


      Gruss und Danke

      Kommentar


        #4
        Was das sekündliche Schreiben betrifft, fällt mir dazu nichts ein. Oder doch, hast Du vielleicht eine Rule aktiv, die auf das Item zugreift?

        Stundenversatz: probier doch mal observationTime, die habe ich bei mir auch drin und die wird bei mir auch korrekt angezeigt. Falls diese bei Dir auch eine Stunde verkehrt ist, tippe ich auf einen Fehler in den locales oder der Timezone des Rechners und/oder von openHAB.

        Kommentar


          #5
          Ok,

          probiere ich ich wenn ich Zuhaus bin aus. Rules habe ich zwei, die sind "Paste and copy" weil ich mich damit noch nicht befasst habe:

          wetter.rules

          import org.openhab.core.library.types.* rule "Visualisiere Vorhersage" when Item Vorhersage changed then val temperature = (Vorhersage.state as DecimalType).intValue // berechne einen Farbwert zwischen 0 (=rot/warm/30°C) und 240 (=blau/kalt/10°F) var hue = 240 - (temperature - 10) * 12 if(hue < 0) hue = 0 if(hue > 240) hue = 240 Licht.sendCommand(hue + ",100,10") end
          Default.rules


          import org.openhab.core.library.types.* import org.openhab.core.persistence.* import org.openhab.model.script.actions.* var Number counter = 1 var Timer timer = null rule "Incoming call" when Item Call_Incoming changed to ON then if (IncomingNumber.contains("234") && (Destination.equals("345") { sendCommand(VPNServer, ON) } end rule "Wackeup" when Time cron "0 30 06 ? * MON-FRI " then callScript("dimmlight") end

          ist da was drin vielleicht ?

          gpowa

          Kommentar


            #6
            Nee, sieht erstmal unverdächtig aus.

            Wahrscheinlich sollte man da systematisch dran gehen, allerdings bin ich auch nur Endanwender und kenne da nicht die beste Stategie.

            Auf jeden Fall kannst Du openHAB mal mit der start_debug.sh starten (oder läuft das bei Dir unter Windows? Dann natürlich start_debug.bat)
            Damit bekommst Du wesentlich mehr Informationen darüber, was auf dem Bus passiert, vielleicht lässt sich dann der Übertäter besser einkreisen (Interessant sind die openHAB-Ausgaben, die dann sekündlich über das Senden berichten)

            Kommentar


              #7
              Das ist leider das Problem, das ganze läuft auf einem Synology Nas als Packet. Und da finde ich auch kein Log-Datei, dazu muss ich mir irgendwie root-Zugriff verschaffen. Dann kann ich auch nach der "local" schauen. Ich teste mal und sag dann noch Bescheid was bei rum gekommen ist.

              gpowa

              Kommentar


                #8
                So habe zwei Problem lösen können: Chart und Zeit!

                Found the issue. The string identification cannot be the same.

                Number tempCorridor "Temperature [%.1f °C]" <temperature> (TempIndoor, gCorridor) {mqtt="<[cc:SnS/1/1/V_TEMP:state:default]"} Number tempLiving "Temperature [%.1f °C]" <temperature> (TempIndoor, gLiving) {mqtt="<[cc:tmp/msr/TS00:state:default]"} Changed to:

                Number tempCorridor "Corridor [%.1f °C]" <temperature> (TempIndoor, gCorridor) {mqtt="<[cc:SnS/1/1/V_TEMP:state:default]"} Number tempLiving "Living [%.1f °C]" <temperature> (TempIndoor, gLiving) {mqtt="<[cc:tmp/msr/TS00:state:default]"}
                Zeit hat sich von selbst eingestellt.

                gpowa
                Zuletzt geändert von gpowa; 05.11.2015, 20:33.

                Kommentar


                  #9
                  Das mit der Außentemperatur ist leider noch geblieben, aber jetzt habe ich ein Log dazu:


                  20:14:59.648 [DEBUG] [.b.knx.internal.bus.KNXBinding:169 ] - Received groupWrite Event.
                  20:14:59.648 [INFO ] [tuwien.auto.calimero :51 ] - [KNXnet/IP receiver] link 192.168.1.28:3671: indication from 0.0.1
                  20:14:59.649 [WARN ] [.w.internal.bus.WeatherBinding:113 ] - Received command for readonly item Hannover_Temperatur, republishing state
                  20:14:59.650 [INFO ] [runtime.busevents :22 ] - Hannover_Temperatur received command 14.0
                  20:14:59.652 [DEBUG] [.b.knx.internal.bus.KNXBinding:113 ] - Received update (item='Hannover_Temperatur', state='14.00')
                  20:14:59.652 [INFO ] [tuwien.auto.calimero :51 ] - [EventAdmin Async Event Dispatcher Thread] link 192.168.1.28:3671: send message to 0/0/3, wait for confirmation
                  20:14:59.655 [INFO ] [tuwien.auto.calimero :51 ] - [KNXnet/IP receiver] link 192.168.1.28:3671: confirmation of 0/0/3
                  20:14:59.655 [DEBUG] [.b.knx.internal.bus.KNXBinding:138 ] - Wrote value '14.00' to datapoint 'command DP 0/0/3 Hannover_Temperatur, DPT main 0 id 9.001, low priority'
                  20:14:59.656 [INFO ] [runtime.busevents :26 ] - Hannover_Temperatur state updated to 14.00
                  20:14:59.687 [INFO ] [tuwien.auto.calimero :51 ] - [KNXnet/IP receiver] link 192.168.1.28:3671: indication from 0.0.1
                  20:14:59.687 [DEBUG] [.b.knx.internal.bus.KNXBinding:169 ] - Received groupWrite Event.
                  20:14:59.688 [WARN ] [.w.internal.bus.WeatherBinding:113 ] - Received command for readonly item Hannover_Temperatur, republishing state
                  20:14:59.689 [INFO ] [runtime.busevents :22 ] - Hannover_Temperatur received command 14.0
                  20:14:59.691 [DEBUG] [.b.knx.internal.bus.KNXBinding:113 ] - Received update (item='Hannover_Temperatur', state='14.00')
                  20:14:59.691 [INFO ] [tuwien.auto.calimero :51 ] - [EventAdmin Async Event Dispatcher Thread] link 192.168.1.28:3671: send message to 0/0/3, wait for confirmation
                  20:14:59.694 [INFO ] [tuwien.auto.calimero :51 ] - [KNXnet/IP receiver] link 192.168.1.28:3671: confirmation of 0/0/3
                  20:14:59.694 [DEBUG] [.b.knx.internal.bus.KNXBinding:138 ] - Wrote value '14.00' to datapoint 'command DP 0/0/3 Hannover_Temperatur, DPT main 0 id 9.001, low priority'
                  gpowa

                  Kommentar


                    #10
                    Also, für mich sieht es so aus, als würde ein knx-Gerät quasi als Antwort ebenfalls die Temperatur senden. Schau mal nach, ob Du da fündig wirst und das abschalten kannst (Notmaßnahme: eine leere GA als erste Adresse in allen betreffenden Busteilnehmern eintragen, dann kann niemand mehr auf der 0/0/3 senden)

                    Kommentar


                      #11
                      Das sieht wie eine Feedback Schleife aus. openHAB sendet Events, die es selbst auf den KNX Bus geschickt hat, auch noch mal auf den internen Event Bus. Das scheint das Weather Binding nicht zu verstehen (zurecht) und seinerseits den Wert raus zu schicken usw usw.

                      Das ist ein Bug in openHAB, aber aus kompatibilitätgründen der default. Such mal in deiner openHAB Config nach "knx:ignorelocalevents" und setz das auf true.

                      Kommentar


                        #12
                        Das kann ich so nicht bestätigen, bei mir funktioniert das (schon immer) ohne diesen Parameter)

                        Kommentar


                          #13
                          Da der Wert von Gerät 0.0.1 kommt, ist es sehr wahrscheinlich dass es sich dabei um den IP Router handelt. Also schickt irgend eine Software den Wert, was dann vermutlich openHAB ist. Ist aber alles nur , insofern kann ich auch komplett daneben liegen.

                          Das es bei dir funktioniert, könnte (wieder nur geraten) daran liegen, dass du kein KNX/IP nutzt oder es im Tunnel Mode nutzt?

                          Kommentar


                            #14
                            Stimmt, ich nutze den Tunnel Mode, über die knx-Konfiguration hatten wir aber noch gar nicht gesprochen. gpowa : Wie ist denn knx bei Dir angebunden? Wie sieht die Konfiguration aus?

                            Kommentar


                              #15
                              Hallo,

                              ich habe hier mal hin und hergebastelt und mal so einiges geprüft. Aber Vorweg vielleicht meine Konfig:

                              - Synology NAS mit Openhab 1.71
                              - Raspberry mit Siemens BCU und eibd als Tunnel (0.0.0)

                              OH.cfg wie folgt

                              ################################ KNX Binding ##########################################
                              knx:ip=192.168.1.28
                              knx:ignorelocalevents=true
                              knx:type=TUNNEL
                              knxport=3671
                              knx:localIp=192.168.1.210
                              Wetter

                              ################################### Weather Binding ###################################
                              weather:apikey.OpenWeatherMap=geheimerschlüssel
                              weather:apikey.Wunderground=geheimerschlüssel

                              weather:location.hannover.name=Hannover
                              weather:location.hannover.latitude=52.3456
                              weather:location.hannover.longitude=9.7908
                              weather:location.hannover.provider=Wunderground
                              weather:location.hannover.language=de
                              weather:location.hannover.updateInterval=30

                              # Hannover location configuration, you can specify multiple locations
                              weather:location.leon.name=Leon
                              weather:location.leon.latitude=52.3456
                              weather:location.leon.longitude=9.7908
                              weather:location.leon.provider=OpenWeatherMap
                              weather:location.leon.language=de
                              weather:location.leon.updateInterval=30
                              Wie man sieht war
                              knx:ignorelocalevents=true
                              schon auf true und ein ändern auf false hat nichts gebracht.
                              Das ändern auf OpenWeathermap hat auch leider keine Verbessung gebracht.

                              Das einzigste was zumindest keine Werte schreiben läßt ist:

                              Number KNX_Temperatur "Hannover [%.2f °C]" <temperature> {weather="locationId=hannover, type=temperature", knx="0/0/3"}
                              Ich teste jetzt mal ob der überhaupt die Außentemperatur ohne den Wert "property" schreibt.

                              Gruss

                              gpowa
                              Zuletzt geändert von gpowa; 07.11.2015, 21:00.

                              Kommentar

                              Lädt...
                              X