Ankündigung

Einklappen
Keine Ankündigung bisher.

Smarthome.pi an Tebis TS Anlage

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

    Smarthome.pi an Tebis TS Anlage

    Hallo zusammen,

    ich habe wie in anderen Threads beschrieben meinen Raspi B+ mit dem Smarthome.pi Image zum Laufen gebracht und greife damit auf eine Hausinstallation aus dem Jahr 2001 zu, die mit dem Hager-System "Tebis TS" aufgebaut ist. Dieses System wird nicht wie bei KNX üblich mit der ETS programmiert, sondern mittels eines Verknüpfungsgeräts, das in die Installation integriert ist. Das Protokoll ist proprietär für diese Baureihe, aber man kann über den eibd sehr gut auf dem Bus mithören und die Gruppenadressen identifizieren, die beim Drücken der einzelnen Schalter angesprochen werden.

    Nach Konfiguration der items und Anlegen der html-Seiten kann ich im ganzen Haus das Licht über die SmartVisu steuern. Allerdings gibt es noch ein kleines Problem mit dem Status Update:

    Die Tasterschnittstellen (oder das Verknüpfungsgerät?) geben dem Datensatz jeweils noch die Nummer des Eingangs mit. Nehmen wir einmal an, dass ich 4 Taster an einem Schnittstellenbaustein TS 304 betreibe und alle mit dem demselben Aktor verknüpfe, dann bekomme ich je nach gedrücktem Taster auf dem Bus die Werte 02, 12, 22 und 32 (jeweils Hex) für den Wert "Ein" sowie 00, 10, 20, 30 Hex für "Aus". Zwar kann ich über smarthome.py jeden dieser Werte ausgeben, aber sobald mehrere Taster von verschiedenen Eingängen mit demselben Aktor verknüpft sind, bekommt Smarthome.py über KNX_listen nicht mehr den richtigen Status mit, weil ich Smarthome.py nur einen definierten Wert für "Ein" mitgeben kann (aber nicht 4 verschiedene). Effekt ist, dass SmartVisu dann den falchen Status anzeigt. Das Tebis System reagiert dabei unabhängig von der Verknüpfung auf allen Aktoren gutmütig auf das Schreiben der Werte 02 und 00.

    Aktuell muss ich mit dem Datentyp "num" arbeiten und verwende KNX_DPT=5. Um den Status bei KNX_listen richtig zu erfassen, bräuchte ich in Smarthome.py einen Datentyp von 4 Bit, der die kodierten Schnittstelleneingänge ignoriert, oder ich müsste gleich nach dem Einlesen die Rohdaten per AND-Funktion mit 0F Hex (0000 1111 Bin) manipulieren.

    Hat jemand eine Idee, oder schon eine funktionierende Lösung, wie dies geht?

    Danke und Gruß
    Wolfram

    P.S.: Ob ich per groupread auch Daten auslesen kann, habe ich nicht heraus gefunden. Ein Lesen auf den zum Schreiben verwendeten GAs bringt entweder gar keine Antwort, oder es werden Aktoren mit ganz anderen GAs geschaltet. Leider finde ich im Netz keinerlei Doku zu dem Protokoll von Tebis TS.

    #2
    Moin Wolfram,

    wenn Du es sauber machen willst, numm das KNX plugin und versuche das für Dein Tebis System aufzubohren.

    In der Zwischenzeit kannst Du evtl. sowas wie ein Master/Slave machen. Ein Masteritem bekommt die Infos bei Meldung auf dem KNX, da kannst Du ja num und DPT 5 beibehalten für's erste. Wenn sich da was tut, dann rufst Du eine Logik auf und diese Logik untersucht dann welcher beteiligte Taster sich geändert hat und aktualisiert dann Deine Slave-Items.

    Gruß,
    Bernd

    Kommentar


      #3
      lieber gleich sauber übers KNX plugin

      Moin Bernd,

      danke für Deine guten Tipps. Als Anfänger hatte ich mangels Python-Kenntnissen und Zeit erst mal Schiss vor der Lösung über das KNX-Plugin. Da ich aber auch noch keine Ahnung von Logiken habe, schien mir der Weg über die Logiken noch aufwendiger.

      Also hab ich mir das KNX plugin vorgenommen. Das ist so genial übersichtlich und strukturiert, dass man sich dann doch schnell zurecht findet.

      Ich habe jetzt in der Datei dpts.py einfach einen neuen Data Point kreiert, den ich 5999 genannt habe und für den ich die Funktionen encode und decode einfach vom Data Point 5 kopiert habe. In der decoder-Funktion habe ich dann lediglich noch über ein bitweises AND die oberen 4 Bit ausgeblendet. Im Code sieht das dann wie folgt aus (Ergänzung in blau):
      Code:
      def de5999(payload):
          # artificial data point for tebis TS
          if len(payload) != 1:
              return None
          return struct.unpack('>B', payload)[0] [COLOR=Blue]& 0x0f[/COLOR]
      Jetzt am Ende der dpts.py noch den Data Point in die beiden Listen für encode und decode eintragen und den neuen Datenpunkt in die items aufnehmen und es funzt auf Anhieb.

      Die Lösung ist sicherlich nicht sonderlich elegant, aber darauf kommt es mir erst mal nicht an.

      Thema somit für mich gelöst und dokumentiert.

      Danke und Gruß
      Wolfram

      Kommentar


        #4
        Hi Wolfram,

        prima, das Du es so schnell hinbekommen hast. Du mußt nur bei einem Update aufpassen, das das Plugin dann nicht einfach überschrieben wird.

        Gruß,
        Bernd

        Kommentar


          #5
          Jalousien unter Tebis TS

          Hallo zusammen,

          nachdem sich der neue Data Point für die Lichtsteuerung gut bewährt hat, ist der nächste Schritt die Jalousiesteuerung. Leider habe ich für die Hager-Aktoren TS 220 selbst nach intensiver Google-Recherche keine Doku der Protokolle. Wenn jemand hier eine Quelle kennt, wäre ich für einen Hinweis dankbar.

          Nach Analyse des Datenverkehrs auf dem Bus haben die Aktoren jeweils nur eine Gruppenadresse, an die über die Tasterschnittstellen verschiedene binär kodierte Werte geschickt werden.

          Bit 7 (MSB) und 6 vermutlich ohne Bedeutung
          Bit 5 und 4 Kodierung des Eingangs der Tasterschnittstelle
          Bit 3 und 2 Bewegungsrichtung (01 = auf, 10 = ab)
          Bit 1 und 0 Tasteraktion (00 = dauernd gedrückt, 01 = losgelassen, 11 =Tippbetrieb)

          Auf dem Bus kann ich mit Groupwrite alle Aktoren mit den 4 niederwertigsten Bits ansteuern und erhalte die erwarteten Reaktionen.

          Mit diesen Angaben ist es einfach, eine manuelle Steuerung über die Visu zu programmieren, indem man die Taster nachbildet. Ein automatisches Anfahren von Positionen (Höhe und Anstellwinkel der Lamellen) geht so allerdings nicht. Die Lamellen könnte man über die Anzahl der Tippschritte einstellen, während mir für die Höhe der Jalousien nur eine Zeitsteuerung einfällt. Um Smarthome hier nicht während der Laufzeit der Jalousie mit Wartezeit zu blockieren, müsste man den Startzeitpunkt registrieren und dann einen Event-Trigger auf einen Zeitpunkt setzen, an dem die Bewegung gestoppt wird. Natürlich muss man sich alle Stellungen merken und bei der Lamellenposition auch noch das Spiel heraus rechnen.

          Meine Frage: hat jemand schon die entsprechenden Widgets programmiert und kann sie zur Verfügung stellen? (Auch hier habe ich schon lange gegoogelt und im Forum gesucht).

          Danke, Gruß
          Wolfram

          Kommentar

          Lädt...
          X