Ankündigung

Einklappen
Keine Ankündigung bisher.

Strings in KNX GAs schreiben

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

    Strings in KNX GAs schreiben

    Hallo zusammen,

    ich habe in Openhab meinen Saugroboter und Mähroboter angebunden.
    Ich möchte nun Statusdaten die teilweise als Strings hinterlegt sind in eine KNX GA schreiben.

    Wie kann ich das im Openhab realisieren?

    Viele Grüße
    Sascha

    #2
    Hallo,
    das machst du am besten über rules. Beispiel:

    Code:
    [COLOR=#c586c0]rule [/COLOR][COLOR=#ce9178]"Roboter"[/COLOR]
    [COLOR=#c586c0]when[/COLOR]
    [COLOR=#569cd6]Item [/COLOR][COLOR=#4ec9b0]Roboter_Status[/COLOR][COLOR=#d4d4d4] changed[/COLOR]
    [COLOR=#c586c0]then[/COLOR]
       Roboter_Status_knx.sendCommand(Roboter_Status.state)
       // Alternativ
       Roboter_Status_knx.SendCommand("Mein Freitext")
    [COLOR=#c586c0]end[/COLOR]
    EDIT: Code angepasst, siehe nächsten Post!

    Viele Grüße
    Zuletzt geändert von Brainbug; 18.07.2019, 14:35.

    Kommentar


      #3
      Fast...

      Wenn es an knx geschickt werden soll, muss das immer mit sendCommand passieren, postUpdate ändert nur den Status auf dem eventBus (also den Status des Items), während sendCommand den Befehl an den knx Bus schickt.

      Ein Switch Item kann nur die Befehle ON und OFF senden, wenn es um freie String geht, funktioniert also nur ein String Item. Die Frage ist aber vor allem, wie die Status auf dem knx Bus dargestellt werden sollen. Wenn auch dort ein 14-Byte-String zum Einsatz kommt, ist die Sache simpel, aber vielleicht willst Du den Status eher über eine Zahl darstellen.

      Kommentar


        #4
        Hallo zusammen,

        vielen Dank für den Input.

        Könntet ihr mir ein Beispiel geben, wie es aussehen würde, wenn ich mit einem String arbeite?

        Z.b. wenn im String "Ladestation" steht. Wie schreibe ich den dann aus dem ITEM in die GA aus dem KNX?

        Viele Grüße
        Sascha

        Kommentar


          #5
          Na so:
          Code:
          rule"Roboter Status an knx senden"
          when
              Item Roboter_Status changed
          then
              Roboter_Status_knx.sendCommand(Roboter_Status.state)
          end
          Jedes Mal, wenn Roboter_Status sich ändert, wird das an Roboter_Status_knx gespiegelt.

          Kommentar


            #6
            Zitat von udo1toni Beitrag anzeigen
            Fast...

            Wenn es an knx geschickt werden soll, muss das immer mit sendCommand passieren, postUpdate ändert nur den Status auf dem eventBus (also den Status des Items), während sendCommand den Befehl an den knx Bus schickt.

            Ein Switch Item kann nur die Befehle ON und OFF senden, wenn es um freie String geht, funktioniert also nur ein String Item. Die Frage ist aber vor allem, wie die Status auf dem knx Bus dargestellt werden sollen. Wenn auch dort ein 14-Byte-String zum Einsatz kommt, ist die Sache simpel, aber vielleicht willst Du den Status eher über eine Zahl darstellen.
            Hallo,
            danke! Hab leider received update und postUpdate durcheinanderbekommen. Beispiel oben angepasst.

            Viele Grüße

            Kommentar


              #7
              Vielen Dank für den Input.

              Echt toll.

              Soweit habe ich es umgesetzt.

              In der ETS habe ich 14 Byte aber nicht zu Auswahl. Was nehmt ihr da?

              Kommentar


                #8
                Der Typ des Telegramms wird durch die verknüpften Kommunikationsobjekte vorgegeben. Wo soll der Text denn auftauchen (was für ein Device)?

                Kommentar


                  #9
                  Ich habe eine Visu, wo ich die GA auf ein Textfeld ziehen kann, dass dann den Inhalt anzeigt.

                  Gibt es überhaupt in der ETS den Datentyp string sodass ich in die GA einen Text schreiben kann? Oder muss ich hier mit Werten arbeiten?

                  Kommentar


                    #10
                    Wie gesagt, die ETS hat mit den Datentypen erst mal nichts am Hut, sie verbindet lediglich passende Datentypen miteinander ohne zu meckern, wenn man aber Kommunikationsobjekte miteinander verbindet, deren Datenwortlänge nicht zueinander passt, meckert ETS das an.
                    Auf dem knx Bus werden nur Datentelegramme transportiert, heißt, man kann am Datenpaket nur die Länge des Payload erkennen, nicht aber, welcher Datentyp enthalten ist. Diese Information ist nur im Kommunikationsobjekt hinterlegt.
                    Wenn eine Visu Text vom Bus anzeigt, dann nutzt sie mit hoher Wahrscheinlichkeit DPT16, das sind 14 Zeichen. Alternativ könnte auch noch DPT24 Verwendung finden, womit man auch noch längere Zeichenketten übertragen kann, allerdings werden hier einige zusätzliche Tricks angewendet. Die Länge ergibt sich aus dem maximalen Payload und den darum liegenden Frames. Bei DPT24 werden die Zeichenketten als Sequenz gesendet, wenn ich das richtig in Erinnerung habe. DPT24 wird von openHAB nicht unterstützt, bleibt also nur DPT16.000 oder DPT16.001

                    knx ist nicht dazu gedacht, Strings zu übertragen, auch wenn 9600Bit/s mehr als ausreichend dafür sind, muss man im Hinterkopf behalten, dass vielleicht noch jemand das Licht schalten will, Temperaturwerte zur Steuerung übertragen werden müssen, die Uhrzeit auf dem Bus unterwegs ist usw.

                    Dass man in ETS unter verschiedenen DPT wählen kann, liegt übrigens daran, dass ETS einen Gruppenmonitor besitzt, es muss also die Möglichkeit geben, ETS mitzuteilen, wie die Daten zu interpretieren sind, kein Techniker hat Lust, nur Rohdaten zu Gesicht zu bekommen, wenn er einen Bus debuggt.
                    Zuletzt geändert von udo1toni; 19.07.2019, 01:38.

                    Kommentar


                      #11
                      Meinst du es ist besser bestimmte Stati dann mit 0 oder 1 zu versorgen und damit eine Intepretation auszulösen?

                      Kommentar


                        #12
                        Wie meinst Du das?

                        Kommentar


                          #13
                          Ich baue mir GAs die dann in Openhab in einer Rule für einen bestimmten Status mit 1 oder 0 beschrieben werde und dann interpretiere ich diese wieder im Panel mit einem Text.

                          Ich glaube den String direkt übergeben, das wird wohl nicht funktionieren.

                          Kommentar


                            #14
                            Wie erwähnt, sollte der DPT 16 funktionieren. Deine Panelsoftware solte DPT16 auch auswerten können.

                            openHAB kennt allerdings kein 1 oder 0 als Status. - mal abgesehen vom Number Item, dann jedoch auch 2, 3, 4, 5.78945,

                            Du kannst also
                            • Switch Items verwenden und dann mit ON/OFF auf dem knx Bus 1/0 als Bit senden,
                            • ein Number Item verwenden und die verschiedenen Status als Zahl versenden (keine Ahnung, welche Status das sind, aber es werden ja mehr als zwei sein, spontan fiele mir Ready, Mowing, Charging, Error, OFF ein, aber ich habe keinen solchen Roboter.) oder auch
                            • ein String Item verwenden und dies auf den Bus schicken, wie erwähnt mit DPT16.001.
                            Jeder dieser Wege sollte funktionieren, wobei Du beim letzten Weg auf 14 Zeichen beschränkt bist, dafür bei den anderen beiden Varianten mit mehr oder weniger Aufwand auf der anderen Seite die gesendeten Befehle in Strings umsetzen musst.

                            Kommentar


                              #15
                              Wie ist denn dann die übliche Vorgehensweise zur Übertragung von Meldungstexten an z.B. den MDT Glastaster?
                              Ich hatte geplant openhab als "Logik"Server zu nutzen, so dass bei bestimmten Zuständen ein Meldungstext erstellt wird (z.B. Fenster Kinderzimmer offen, Alarmanlage aktiv, Rasenmäher festgefahren etc.) diesen String hätte ich nun auch an eine GA geschrieben und diese dann als Status Text auf dem Glastaster angezeigt.
                              Oder sollte man es gänzlich vermeiden Strings auf den Bus zu senden?

                              Kommentar

                              Lädt...
                              X