Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeit vom ntp-Binding auf den knx-Bus

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

    #16
    Update:
    Habe die GA in knx.things nochmal auf den Standard-Wert "0.0.0" gesetzt, und damit ist der Fehler weg!

    Darüber hinaus reagiert die Übertragung von openHAB auf den Bus jetzt wesentlich schneller. Offenbar darf die GA von openHAB nicht auf der gleichen Linie liegen, wie die anderen Teilnehmer auf dem Bus.

    Guter Start in die Woche :-)

    Kommentar


      #17
      Du meinst hier nicht eine GA (= GruppenAdresse), sondern die physikalische Adresse.

      Kommentar


        #18
        Stimmt, die physikalische Adresse meinte ich. Die in knx.things angegebene muss offenbar auf einer anderen Linie liegen als der Rest, der bei mir komplett auf 1.1.x liegt.

        Kommentar


          #19
          Also, wenn das so ist, ist es jedenfalls ein Fehler, es sollte ausreichen, eine komplett ungenutzte physikalische Adresse zu verwenden. Andererseits, solange es jetzt funktioniert...

          Kommentar


            #20
            Ich würde gern das Datum des NTP Bindings auf einem Glastaster Smart 2 anzeigen lassen. Kann ich den Datentyp 19.001 oder 11.001 irgendwie in einen String konvertieren und dann an den Bus senden, sodass ich das Datum dann als Statustext Datentyp 16.000 anzeigen kann?

            Danke

            Kommentar


              #21
              Das NTP Binding stellt auch einen Text-Channel zur Verfügung, der direkt String liefert. Ob das so funktioniert, kann ich aber nicht sagen, weil ich es noch nie ausprobiert habe.
              Ich bin mir nicht zu 100% sicher, was passiert, wenn Du den DPT 16.000 direkt angibst. Es ist möglich, dass das knx Binding dann automatisch wandelt, probiere es einfach aus. Ein Format wirst Du so allerdings nicht mit angeben können, weil es dafür kein Feld gibt.

              Wenn alle Stricke reißen, musst Du eine Rule nutzen, welche den Text jeweils generiert und gezielt über ein String Item an den passenden String Channel sendet.

              Kommentar


                #22
                Hey Leute,

                ähm lese ich das jetzt richtig? Ich kann Openhab 3 über das "NTP Binding" als NTP Server fungieren lassen und dies dann an den KNX Bus weiterschicken damit ich es dort wiederum für meine KNX Geräte nutzen kann ??? Und was ist KNX1 und KNX2 Binding... hab ich jetzt nicht gefunden im Openhab?

                Das wäre nämlich sehr cool da mein ABB IPR/S 3.1.1 Router keine Zeitfunktion mit sich bringt und die LED's meiner Berker Taster mir nämlich Nachts die Augen rausbrennen. Die haben nämlich Tag und Nacht Funktion was aber ohne Zeit am Bus logischerweise nicht funktioniert!

                Wie ist denn da das Best Practice bzw. wie geht man vor?
                Openhab 3.1.0:
                - NTP Binding bei Openhab installieren
                - NTP Server Thing bereitstellen mit Channels (mitgeliefert: "Datum und Zeit" [dateTime] / "Datum und Zeit [String])
                - Zwei KNX Objekte erstellen ... Zeit und Datum ?
                und dann ?
                ETS:
                - Zwei GA erstellen ... eins für Zeit und eins für Datum ?
                und dann ?


                Sorry für die blöde Fragerei aber das würde den Merten Zeitgeber sparen! Und ich finde auch keine saubere Anleitung...

                Grüße
                Andreas
                Zuletzt geändert von DonKuahn; 28.11.2021, 20:19.

                Kommentar


                  #23
                  Korrekt.
                  Du kannst mit dem ntp Binding Zeit und Datum für den KNX Bus zur Verfügung stellen.

                  Die Umsetzung geht ungefähr in der Form wie du sie beschrieben hast. Da führen verschiedene Wege nach Rom.
                  ich kann gerne morgen bei richtiger Tastatur noch ein Beispiel einfügen.

                  Knx1 und knx2 kannst du bei einer openHab 3 Installation vergessen. Wenn die hier sowas über den Weg läuft, werden dass entweder alte Posts oder eben vergleiche zwischen früher und heute sein.

                  Der Vollständigkeit halber:
                  KNX1 beschreibt die initiale Anbindung die es für openHAB gab und die sehr lange betrieben wurde.
                  In openHAB 2.x wurde ein aktualisiertes Binding (daher auch oft als knx2 benannt) auf neuer Hintergrundarchitektur veröffentlicht, was auch die Version ist die jetzt in openHAB 3 zur Anwendung kommt. In openHAB 2 konnte man noch alte bindings installieren, was jetzt nicht mehr möglich ist.
                  ​​​​​
                  Edit mit versprochenem Beispiel:

                  Hier mal ein Beispiel, welches komplett über die UI angelegt wurde und so live bei mir im Einsatz ist.
                  (Ich gehe anbei von einem konfiguriertem IP-Interface/Router aus, mit dem man schon auf erfolgreich auf den KNX-Bus kommt.)

                  NTP-Thing (YAML Code aus dem Code Tab in der UI):
                  Code:
                  UID: ntp:ntp:local
                  label: Local Time
                  thingTypeUID: ntp:ntp
                  configuration:
                  timeZone: Europe/Berlin
                  hostname: fritz.box
                  serverPort: 123
                  refreshInterval: 60
                  refreshNtp: 30
                  Das bringt dann die genannten 2 Channel mit.
                  Ich habe dann 2 Items damit verknüpft, wobei es auch mit einem gegangen wäre.

                  oh_ntp_channel_items.png

                  Dann habe ich ein KNX Thing für generische Informationen ohne Bezug zu einer physikalischen Adresse angelegt:
                  Code:
                  UID: knx:device:d951593da7:GenericKnxDevice
                  label: KNX Generic Group Adresses
                  thingTypeUID: knx:device
                  configuration:
                  pingInterval: 600
                  readInterval: 0
                  fetch: false
                  bridgeUID: knx:ip:d951593da7
                  channels:
                  - id: Datum
                  channelTypeUID: knx:datetime-control
                  label: Datum
                  description: null
                  configuration:
                  ga: 11.001:0/5/1
                  - id: Zeit
                  channelTypeUID: knx:datetime-control
                  label: Zeit
                  description: null
                  configuration:
                  ga: 10.001:0/5/2
                  - id: TagNacht
                  channelTypeUID: knx:switch-control
                  label: Tag/Nacht Umschaltung
                  description: null
                  configuration:
                  ga: 0/5/0
                  Der channel typ datetime-control ist wichtig, da der Status der ntp zeit von openhab kontrolliert wird und nicht aus dem knx bus heraus kommt.
                  Ansonten noch beachten, dass die Werte dann mit einem speziellen DPT in die Gruppenobjekte geschrieben werden.
                  Ansonsten sind dort nur noch die Items von obigem Screenshot verknüpft.

                  oh_knx_ntp_channel_items.png

                  Das gleiche dann für den Zeit-Channel und mit deinen Gruppenadressen.

                  Randinfo:
                  Oben in dem KNX Thing habe ich auch eine Tag/Nacht-Umschaltung per switch-control channel konfiguriert.
                  Ich nutze in openHAB das Astro-Binding, um mir mittels einer Rule 6 verschiedene Tageszeiten (Schlafen, Morgen, Vormittag, Mittag, Nachmittag, Abend) zu berechnen.

                  Abends und Nachts schalte ich dann um, was sich bei mir dann z.B. auf die Orientierungsleuchten in den Glastastern auswirkt.
                  Die können neben Zeit/Datum auch direkt Tag/Nacht als Objekt.
                  Möglicherweise wäre das ja auch was für deinen Anwendungsfall.
                  Angehängte Dateien
                  Zuletzt geändert von Confectrician; 29.11.2021, 06:37.

                  Kommentar


                    #24
                    Hey Confectrician

                    erstmal dickes Danke für die tolle Erklärung!

                    Ich stelle mir jetzt gerade nur die Frage ob das so einfach ist dass das nirgendwo stehen muss weil es für alle klar ist ...
                    ... oder ob nur ich das nicht weiß wie das funktioniert hat ?!


                    Also ich konnte dir bis dato auch komplett folgen. Hab auch alles genauso angefertigt wie du es geschrieben hast und habe mir auch das Astro Binding gezogen.

                    Hier allerdings brauch ich ja eigentlich nur zwei Zeitranges Tag und Nacht...
                    hab jetzt mal als "noon" (Start 07:00 / Ende 21:00) und "night" (Start 21:00 / Ende 07:00 ) definiert.

                    Da mir ja das Umschalten Tag / Nacht mit einer Zeit reicht. In diesem Fall also ein Switch Objekt im ETS mit einem Bit also 1.001 Schalten.

                    ETS.png

                    Hier habe ich jetzt auch, wie man sieht, unter der GA 5/1/0 das TagNachtSchalten mit dem Tastensensor verlinkt.

                    Dieser ist auch als Tag_Nacht_Schalten in meinem KNX-Thing in OH als "switch-control" hinterlegt

                    Code:
                    UID: knx:device:ABBIPRS311:KNX_Zeit_Datum
                    label: KNX_Zeit_Datum
                    thingTypeUID: knx:device
                    configuration:
                    pingInterval: 600
                    readInterval: 0
                    fetch: false
                    bridgeUID: knx:ip:ABBIPRS311
                    location: KNX_BUS
                    channels:
                    - id: OH_KNX_ZEIT
                    channelTypeUID: knx:datetime-control
                    label: OH_KNX_ZEIT
                    description: ""
                    configuration:
                    ga: 10.001:5/0/0
                    - id: OH_KNX_DATUM
                    channelTypeUID: knx:datetime-control
                    label: OH_KNX_DATUM
                    description: ""
                    configuration:
                    ga: 11.001:5/0/1
                    - id: Tag_Nacht_Schalten
                    channelTypeUID: knx:switch-control
                    label: Tag_Nacht_Schalten
                    description: ""
                    configuration:
                    ga: 5/1/0
                    Jetzt bringe ich nur den letzten Gedankengang nicht zusammen:

                    Wie sende ich nun den Tag (noon 7-21 Uhr) / Nacht (21-7 Uhr) Wechsel bzw. wie löse ich ihn aus das er an den Bus gesendet wird und von der GA 5/1/0 verarbeitet wird??

                    Du hast geschrieben du machst das mit einer Rule ... Die Rule wird dann wahrscheinlich den " noon - night " Wechsel an den KNX Bus senden. Aber wie definiere ich die Rule sauber? Da muss ich doch dann bestimmt irgendwie den Tag_Nacht_Schalten (switch-control) irgendwie so linken das es den " noon - night " Status bekommt.

                    Wenn du mir da noch helfen könntest drucke ich dein Bild aus und hänge es als "Employee-of-the-Month" neben meinen KNX Unterverteiler.

                    Grüße
                    Andreas

                    Kommentar


                      #25
                      Oha, hier werden Bestechungsversuche unternommen...

                      Das Astro Binding sendet zu verschiedenen Zeiten Trigger auf den Bus. Diese Trigger werden fast alle als Range Event definiert. z.B. das Range Event astro:sun:local:set#event wird mit dem Event START getriggert, wenn die Sonne untergeht und beginnt, die 0° Höhenlinie zu berühren. Wenn sie dann vollständig unter die 0° Höhenlinie gesunken ist und die Linie aufhört, zu berühren, wird das Event END getriggert.
                      Die Sonne ist von uns aus betrachtet näherungsweise ein Kreis, die Passage dauert etwa 2 Minuten (kommt aber auf Datum und Standort an). Wenn Du also ein Item haben möchtest, welches von Sonnenuntergang bis Sonnenaufgang ON ist, nutzt Du zwei Rules:
                      Code:
                      rule "Sonnenuntergang"
                      when
                          Channel "astro:sun:local:set#event" triggered START
                      then
                          Nacht.postUpdate(ON)
                      end
                      
                      rule "Sonnenaufgang"
                      when
                      Channel "astro:sun:local:rise#event" triggered START
                      then
                      Nacht.postUpdate(OFF)
                      end
                      Nun musst Du nur noch das Item Nacht mit dem Channel knx:device:ABBIPRS311:KNX_Zeit_Datum:Tag_Nacht_Sch alten koppeln.

                      Wenn Sonnenaufgang/Sonnenuntergang ungünstig sind, stehen noch viele andere Zeitpunkte zur Verfügung, bürgerliche, nautische und astronomische Dämmerung (entsprechend -6°, -12° und -18° Höhenlinie) und für jeden dieser Trigger kann man individuell Maximum und Minimum sowie einen Versatz eingeben, so dass Du beispielsweise immer auf Nacht schalten kannst, 7 Minuten vor der bürgerlichen Abenddämmerung, aber nicht vor 17 Uhr und nicht nach 22 Uhr.

                      Das Astro Binding ist durch seine schiere Anzahl Channel etwas unübersichtlich, wichtig ist, zu verstehen, dass es Datetime Channel und Event Channel gibt. Die Datetime Channel lassen sich mit Datetime Items koppeln, können aber nichts triggern. Die Event Channel können triggern, lassen sich aber nicht mit einem Item verkoppeln. Jeder Channel kann und muss individuell parametriert werden, es reicht also nicht, einen Versatz in rise#start einzutragen, es muss schon rise#event sein, damit der Trigger entsprechend verschoben wird. Umgekehrt muss rise#start ebenfalls eingetragen werden, damit die angezeigte Startzeit auch wirklich passt.
                      Zuletzt geändert von udo1toni; 30.11.2021, 14:22.

                      Kommentar


                        #26
                        Ich glaube mir hat allgemein noch ein Item Nacht gefehlt!

                        Dieses Item "NTP_Nacht" habe ich jetzt an den Channel "knx:device:ABBIPRS311:KNX_Zeit_Datum:Tag_Nacht_Sc halten" gekoppelt.

                        Item.png

                        Dann sieht die Rule für "EsWirdNacht" aber so aus...

                        Code:
                        triggers:
                        - id: "1"
                        configuration:
                        thingUID: astro:sun:local
                        channelUID: astro:sun:local:night#event
                        type: core.ChannelEventTrigger
                        conditions: []
                        actions:
                        - inputs: {}
                        id: "2"
                        configuration:
                        itemName: NTP_Nacht
                        state: ON
                        type: core.ItemStateUpdateAction
                        Nacht.png

                        ... und für die Rule "EsWirdTag" so aus!

                        Code:
                        triggers:
                        - id: "1"
                        configuration:
                        thingUID: astro:sun:local
                        channelUID: astro:sun:local:noon#event
                        type: core.ChannelEventTrigger
                        conditions: []
                        actions:
                        - inputs: {}
                        id: "2"
                        configuration:
                        itemName: NTP_Nacht
                        state: OFF
                        type: core.ItemStateUpdateAction
                        Tag.png

                        Passt das dann ???

                        Grüße
                        Andreas
                        Zuletzt geändert von DonKuahn; 30.11.2021, 17:41.

                        Kommentar


                          #27
                          Ich denke udo1toni hat das schon ganz gut beschrieben.
                          Der Vollständigkeit halber noch kurz meins vorgestellt.
                          (Und danach sollte man ggf. eher über einen eigenen Thread nachdenken, weil dass dann nicht mehr viel mit NTP auf KNX zu tun hat.)

                          Ich mach das noch etwas anders, weil ich den "Tageszeit Status" später noch anderweitig nutzen möchte.
                          Zum Beispiel könnte man eine Lichtstimmung je nach Tageszeit anders gestalten.
                          Das ist aber alles noch nicht umgesetzt bei mir.
                          Ich habe mir lediglich vorab die Arbeit gemacht, schon relativ viele Tageszeiten zu errechnen.

                          Hier die Rule:

                          oh_ToD_rule.png

                          Ich habe ein paar Astro Events (was man beliebig kompliziert gestalten kann, weil es so viele gibt) und einen Trigger der alle 2 Stunden rechnen lässt.
                          Dann wird eine Berechnung ausgeführt und in ein Item geschrieben.
                          Anschließend wird mit der frisch errechneten Tageszeit auch das KNX Tag/Nacht Item umgeschaltet.

                          Berechnung der Tageszeit
                          (Das ist Javascript - Die PHP Code Box habe ich nur für die Farbe genommen)

                          PHP-Code:
                          var logger Java.type('org.slf4j.LoggerFactory').getLogger('or g.openhab.rule.' ctx.ruleUID);

                          // Get current time
                          var now = new Date() // Just Date for a foramtted Log Entry
                          logger.info("Curent Time: " now.toString())

                          // Get current time of Day
                          var currentTimeOfDay itemRegistry.getItem("vTimeOfDay")
                          logger.info("Current Time of Day: " currentTimeOfDay.state)

                          // Get relevant times for calculation
                          var morning_start = new Date().setHours(6)
                          var 
                          day_start = new Date(itemRegistry.getItem("vSunrise_Time").state)
                          var 
                          noon_start = new Date(itemRegistry.getItem("vNoon_Time").state)
                          var 
                          afternoon_start = new Date(itemRegistry.getItem("vAfternoon_Time").state )
                          var 
                          evening_start = new Date(itemRegistry.getItem("vSunset_Time").state)
                          var 
                          bed_start = new Date().setHours(00100)

                          // Log entries for debugging, when needed

                          logger.info("morning_start: " morning_start.toString())
                          logger.info("day_start: " day_start.toString())
                          logger.info("noon_start: " noon_start.toString())
                          logger.info("afternoon_start: " afternoon_start.toString())
                          logger.info("evening_start: " evening_start.toString())
                          logger.info("bed_start: " bed_start.toString())


                          var 
                          calculatedTimeOfDay 0
                          now 
                          now.getTime() // Now as a Number for proper calculation

                          if(now bed_startcalculatedTimeOfDay 10 // Sleep
                          if(now morning_startcalculatedTimeOfDay 30 // Morning
                          if(now day_start.getTime()) calculatedTimeOfDay 50 // Day
                          if(now noon_start.getTime()) calculatedTimeOfDay 70 // Noon
                          if(now afternoon_start.getTime()) calculatedTimeOfDay 90 // Afternoon
                          if(now evening_start.getTime()) calculatedTimeOfDay 10 // Sleep

                          if(currentTimeOfDay.state != calculatedTimeOfDay){
                          logger.info("Current time of day is now " calculatedTimeOfDay);
                          events.sendCommand(currentTimeOfDaycalculatedTimeOfDay)


                          KNX Tag/Nacht Item (Ebenfalls Javascript):

                          PHP-Code:
                          var logger Java.type('org.slf4j.LoggerFactory').getLogger('or g.openhab.rule.' ctx.ruleUID)

                          // Get current time of Day
                          var currentTimeOfDay itemRegistry.getItem("vTimeOfDay").state
                          logger
                          .info("Checking -Time of Day- now for KNX Day/Night switching.")
                          logger.info("Current Time of Day: " currentTimeOfDay)
                          var 
                          knxDay itemRegistry.getItem("KNX_Generic_TagNacht")

                          if(
                          currentTimeOfDay >= 20 && currentTimeOfDay <= 90){
                          logger.info("Setting KNX Day/Night to DAY")
                          if(
                          knxDay.state != ON)
                          events.sendCommand(knxDayON)
                          }
                          else if(
                          currentTimeOfDay == 10){
                          logger.info("Setting KNX Day/Night to NIGHT")
                          if(
                          knxDay.state != ON)
                          events.sendCommand(knxDayON)
                          }
                          else {
                          logger.info("Time of Day could not be determined. Setting KNX Day/Night to DAY as workaround")
                          events.sendCommand(knxDayON)

                          Kommentar


                            #28
                            Jetzt funktionierts! Jetzt habe ich auch die Logik dahinter verstanden. Danke Jungs!

                            Kommentar

                            Lädt...
                            X