Ankündigung

Einklappen
Keine Ankündigung bisher.

PlugIn für IRTrans

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

    PlugIn für IRTrans

    Hallo zusammen,

    hier mein IRTrans-PlugIn für SmartHome.py. Auch bei dem PlugIn gilt: Für meinen Anwendungsfall funktioniert das PlugIn bisher recht gut, ich bin aber offen für jeden Verbesserungsvorschlag. :-)

    Funktionen:
    - Senden von zuvor angelernten Infrarot-Befehlen über Items
    - Empfangen von angelernten Befehlen und setzen von Zuständen bei zugeordneten Items

    Voraussetzungen:

    - IRTrans-Hardware mit integrierter IR-Datenbank
    oder
    - Installation von IRTransServer LAN (laut Webseite auch mit Mono unter Linux möglich: Link)

    Noch notwendige Anpassungen (werde ich bei Gelegenheit nachziehen):
    - Ein Verbindungsabbruch zwischen dem PlugIn und dem IRTrans wird bisher nicht abgefangen. Bei einem Neustart von IRTrans muss auch SH.py neu gestartet werden.
    - Wenn IRTrans ein Signal erkennt, das einem Item zugeordnet ist, wird bisher nur ein Timestamp in das entsprechende Item geschrieben. Das deckt wahrscheinlich nur meinen akuten Anwendungsfall ab, da ich die Timestamps weiterverarbeiten will. Somit ist die Änderung aber auch über Logiken abfangbar. Zukünftig wäre wahrscheinlich das Schreiben in eine Bool-Variable sinnvoller.

    Ich würde mich freuen, wenn der Code jemandem weiterhilft.

    Viele Grüße,

    David


    Zum Testen des PlugIns einfach in dem PlugIn-Verzeichnis einen Unterordner ‚irtrans‘ anlegen und die angefügten Files in das Verzeichnis kopieren (bei dem Raspberry-Image /usr/smarthome/plugins/irtrans/).

    Die Konfiguration muss angepasst werden, wie folgt:

    PlugIn-Konfiguration - /usr/smarthome/etc/plugin.conf

    Code:
    [irtrans]
      class_name = IRTrans
      class_path = plugins.irtrans
      host = 192.168.50.250
      port = 21000
    Beispiele für das Anlegen von Items:

    Code:
    [IRTransTest]
      name = IRTransTest
      # -------- Senden eines IR-Befehls --------
      [[irtrans_senden]]
        name = irtrans_senden
        type = bool
        irtrans_type = send
        irtrans_control = sonytv   # Name der Fernbedienung laut IRTrans-Datenbank
        irtrans_command = poweron   # Name des Befehls laut IRTrans-Datenbank
        
      # -------- Empfangen eines IR-Befehls --------
        [[irtrans_empfangen]]
        name = irtrans_empfangen
        type = str   # Da aktuell lediglich ein Timestamp geschrieben wird, wird hierbei 'type = str' vorausgesetzt.
        irtrans_type = recv
        irtrans_control = sonytv   # Name der Fernbedienung laut IRTrans-Datenbank
        irtrans_command = poweroff   # Name des Befehls laut IRTrans-Datenbank
        
      # -------- Anzeigen eines nicht zugewiesenen IR-Befehls --------
      [[irtrans_nicht_zugeordnet]]
        name = irtrans_nicht_zugeordnet
        type = str   # Bei einem erkannten Befehl, der keinem Item zugeordnet ist, wird hier der Name der Fernbedienung und des Befehls eingetragen. Daher wird 'type = str' vorausgesetzt.
        irtrans_show_unknown = true   #
    Angehängte Dateien

    #2
    Downloader Nr.3 sagt Danke.
    werde es am Wochenende mal testen.

    Bin mal gespannt was da noch kommt

    Kommentar


      #3
      auf jeden Fall muss das Zeugs ins git Repo...
      Derzeit zwischen Kistenauspacken und Garten anlegen.
      Baublog im Profil.

      Kommentar


        #4
        PlugIn für IRTrans

        Hehe, git war das Stichwort. Da gibt's schon etwas zu IRTrans. Ich Schau mir das in den nächsten Tagen mal, kann gut sein, dass meine Bastelei damit überflüssig war.


        Gesendet von meinem iPad mit Tapatalk HD

        Kommentar


          #5
          PlugIn für IRTrans

          Nene, das hab ich mal angefangen aber dann nicht weiter gemacht weil sich mein Bedarf geändert hat. Das war auch einer meiner ersten Gehversuche in sh.py. Es hat auch nie einen testbaren Stand ergeben, daher ist der Code mit Vorsicht zu genießen.

          Aber cool, dass es jetzt was gibt, falls ich mein irTrans doch noch aus der Versenkung hole.
          Mit freundlichen Grüßen
          Niko Will

          Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
          - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

          Kommentar


            #6
            Hallo,

            auch für dieses Plugin Danke.

            Das Plugin von Niko hat einen großen Vorteil, aus meiner Sicht, es verwendet das my_asynchat framework für das Connection-Handling.
            Dadurch werden die TCP-Verbindungen immer offen gehalten und es wird auch keine Thread für das Plugin 'verschwendet'.

            Vllt. kann man die Plugins ja kombinieren und das beste aus beiden nehmen?

            Bis bald

            Marcus

            Kommentar


              #7
              Hallo David,

              auch für Dich gilt:
              Du kannst Dir ja mal meinen neuen Plugin-Entwickler Guide ansehen und mir Deinen github-Account und Email-Adresse per PN zukommen lassen.

              Bis bald

              Marcus

              Kommentar


                #8
                Hallo,

                vielen Dank für die Rückmeldungen. Asynchat scheint wirklich die bessere Variante zu sein. Schade, dass ich das noch nicht kannte. ;-)

                Ich werd mir das am Wochenende noch mal anschauen und das Plugin anpassen. Je mehr ich mit SH.py mache, desto mehr Fehler fallen mir bei dem Plugin auf. Da ich mit git aber noch nicht gearbeitet hab und ich pep8 bisher noch garnicht gehört hatte, muss ich mir das mal in Ruhe anschauen. Ich melde mich hier, wenn ich einen neuen Stand oder Rückfragen hab.

                Danke und viele Grüße,

                David

                Kommentar


                  #9
                  Hallo Zusammen,

                  muss das Thema mal hoch holen, da ich gerade den irserver bzw. ASCII Client auf dem raspi zum laufen gebracht habe.

                  Gibt's da was neues zu berichten? Hab im git auch nichts mehr gefunden!
                  sg martin

                  Kommentar


                    #10
                    Hallo zusammen,

                    Ich hatte das PlugIn noch mal wegen SH.py 1.0 aktualisiert und einiges angepasst. Bei mir läuft es gut und macht was es soll, bei einem anderen User hier aus dem Forum, der grade den Beta-Test macht, gibt es aber noch Probleme.

                    Ich bin zur Zeit "leider" im Urlaub und kann da vom Tablet nur wenig tun. Sobald ich zurück bin poste ich hier mal den aktuellen Stand. Vielleicht kommen wir so auch dem Fehler schneller auf die Spur.

                    Soweit viele Grüße,

                    David

                    von unterwegs gesendet...

                    Kommentar


                      #11
                      Hallo David,

                      danke für die Info!
                      Freue mich schon auf deine Rückkehr
                      sg martin

                      Kommentar


                        #12
                        Schönen Abend!

                        habe jetzt folgenden Weg gewählt:

                        den irserver mit dem integrierten Webserver gestartet
                        /etc/init.d/
                        Code:
                        #! /bin/sh
                        # IRServer Debian/Knoppmyth RC script
                        # For IRTrans USB IR/VFD devices
                        
                        case "$1" in
                        start)
                        echo -n "Starting IRTrans daemon: irserver"
                        start-stop-daemon --start --quiet --exec /home/irtrans/irserver -- -daemon -http_port 90 -logfile /home/irtrans/irserver.log /dev/ttyUSB0
                        echo "."
                        ;;
                        stop)
                        echo -n "Stopping IRTrans daemon: irserver"
                        start-stop-daemon --stop --quiet --exec /home/irtrans/irserver
                        echo "."
                        ;;
                        *)
                        echo "Usage: $N {start|stop}" >&2
                        exit 1
                        ;;
                        esac
                        
                        exit 0
                        und dafür die items mit sh.tools.fetch_url konfiguriert
                        Code:
                        [ir]
                          name = irtrans
                          [[tv]]
                            name = sam-tv
                            [[[power]]]
                                  type = str
                                  visu_acl = rw
                                 enforce_updates = true
                                  eval = sh.tools.fetch_url('http://192.168.178.62:90/Send.htm?remote=sam-tv&command=power').decode() 
                            [[[source]]]
                                  type = str
                                  visu_acl = rw
                                 enforce_updates = true
                                  eval = sh.tools.fetch_url('http://192.168.178.62:90/Send.htm?remote=sam-tv&command=source').decode()
                            [[[1]]]
                                  type = str
                                  visu_acl = rw
                                 enforce_updates = true
                                  eval = sh.tools.fetch_url('http://192.168.178.62:90/Send.htm?remote=sam-tv&command=1').decode() 
                        ...
                        und in der smartvisu aufgerufen
                        Code:
                            <div class="block"> 
                                <div class="set-2" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true"> 
                                    <div data-role="collapsible" data-collapsed="false"> 
                                        <h3>Bedienung</h3> 
                                        <table width="100%"> 
                                            <tr> 
                                                <td align="middle" width="70%"> 
                                    <span data-role="controlgroup" data-type="horizontal"> 
                                                    {{ basic.button('TVv+', 'ir.tv.vp', 'TV Vol', 'plus', '', 'midi') }} 
                                        {{ basic.button('TVv-', 'ir.tv.vm', 'TV Vol', 'minus', '', 'midi') }} 
                                    </span> 
                        ...
                        Ergebnis siehe anbei, das Ganze funktioniert auch ohne gröbere Zeitverzögerung.
                        Im nächsten Schritt muss ich mir die Logiken im sh.py mal näher ansehen - evt. geht die html Übergabe Richtung irtrans Webserver ohne den Umweg der items (zusammenstöpseln der Befehle in der logic). Da muss ich mich aber mal intensiver damit beschäftigen. Bei Erfolg gibts weitere Info.
                        Angehängte Dateien
                        sg martin

                        Kommentar


                          #13
                          Hallo Martin,

                          sorry, dass ich erst jetzt antworte. Der Weg von Dir sieht nicht schlecht aus. So hatte ich es auch zuerst angedacht. Allerdings kann man damit keine IR-Codes empfangen und darauf reagieren. Daher hab ich mich dann für den aufwändigeren Weg entschieden.

                          Als Anlage der aktuelle Stand meines PlugIns. Würde mich freuen, wenn es jemand testen würde. Wie schon angesprochen, Macflei war so nett das PlugIn schon mal zu testen. Dabei ist ein Fehler aufgetreten, den ich bisher nicht nachvollziehen kann. Bei jedem Senden einer Taste kommt die Meldung zurück, dass die Taste im IRTrans nicht bekannt ist. Das ist jedoch gegengeprüft und passt.

                          Bei mir tut das PlugIn, wie es soll. Ich steuere damit meine Medienanlage und nutzte auch den IR-Empfang um Szenen, Licht und Co. zu steuern. Bisher kam es zu keinem Fehler. Daher wären weitere Tester hilfreich.

                          Aber vorher noch eines, das ich gebetsmühlenartig wiederholen werde, bis es jedem bewusst ist ;-) : Ich bin absolut kein Entwickler. Ich arbeite nach dem Copy&Paste-Prinzip solange, bis es funktioniert. Es gibt sicherlich jede Menge Verbesserungspotential. Ich bin dankbar für jeden Hinweis und werde mich bestimmt auch mal genauer mit Python-Entwicklung beschäftigen. Da ich zur Zeit aber sehr eingespannt bin, ist mein persönliches Ziel mit "funktioniert und macht nichts kaputt" erst mal erreicht. ;-) Deswegen würde ich mich freuen, wenn der Code jemandem hilft und entsprechend korrigiert oder angepasst wird.

                          Aber zum PlugIn:

                          @Macflei: Die Bugs mit der fehlhaften Log-Ausgabe und das peinliche item(0) habe ich korrigerte. Das zweite stammt wohl noch aus der Zeit, als ich enforce_updates nicht kannte.

                          PlugIn-Config:
                          Code:
                          # plugin.conf
                          
                          [irtrans]
                              class_name = IRTrans
                              class_path = plugins.irtrans
                              host = 127.0.0.1 #Adresse des LAN Controller oder des IRTrans-Servers
                              port = 21000
                          Beispiel-Item-Configs:

                          Code:
                          Bei Tastendruck der Fernbedienung KNX-Aktor schalten:
                              [[ABBAktorA]]
                                  name = ABBAktor A
                                  visu_acl = rw
                                  type = bool
                                  knx_dpt = 1
                                  knx_send = 0/0/1
                                  knx_listen = 0/0/1
                                  knx_init = 0/0/1
                                  ir_type = switch
                                  ir_remote = %NAME_DER_FERNBEDIENUNG%
                                  ir_toggle = %NAME_DER_TASTE%
                                  
                          IR-Command senden (bei Tasten mit Bool-Status):
                              [[samsungtv_power]]
                                  name = TV
                                  visu_acl = rw
                                  type = bool
                                  ir_type = switch
                                  ir_remote = %NAME_DER_FERNBEDIENUNG%
                                  ir_on = %NAME_DER_TASTE_FÜR_AN%
                                  ir_off = %NAME_DER_TASTE_FÜR_AUS%
                                  ir_toggle = %NAME_DER_TASTE_FÜR_WECHSELN%
                          # Entweder "ir_toggle" oder "ir_on/ir_off" müssen gesetzt sein
                                  
                          IR-Command senden (als Trigger):
                              [[samsungtv_volplus]]
                                  name = Vol+
                                  visu_acl = rw
                                  type = bool
                                  enforce_updates = true
                                  ir_type = trigger
                                  ir_remote = %NAME_DER_FERNBEDIENUNG%
                                  ir_trigger = %NAME_DER_TASTE%
                          Würde mich freuen, wenn jemand Feedback gibt.

                          Danke und viele Grüße,

                          David
                          Angehängte Dateien

                          Kommentar


                            #14
                            Hallo David,

                            Für mich war das Code senden 1.Prio. Hätte wohl nicht mehr lange gedauert und ich wäre über das gestolpert:
                            Allerdings kann man damit keine IR-Codes empfangen und darauf reagieren.
                            Gerne teste ich das Plugin und versuche so gut wie möglich Rückmeldung zu geben, zu helfen, .. - steige leider selber oft viel zu wenig durch

                            P.S.: auch mein Motto:
                            Aber vorher noch eines, das ich gebetsmühlenartig wiederholen werde, bis es jedem bewusst ist ;-) : Ich bin absolut kein Entwickler. Ich arbeite nach dem Copy&Paste-Prinzip solange, bis es funktioniert. Es gibt sicherlich jede Menge Verbesserungspotential. Ich bin dankbar für jeden Hinweis und werde mich bestimmt auch mal genauer mit Python-Entwicklung beschäftigen. Da ich zur Zeit aber sehr eingespannt bin, ist mein persönliches Ziel mit "funktioniert und macht nichts kaputt" erst mal erreicht. ;-) Deswegen würde ich mich freuen, wenn der Code jemandem hilft und entsprechend korrigiert oder angepasst wird.
                            & freue mich daher ebenso über gute Ratschläge u.Ä.

                            P.S.2: Bzgl.
                            Macflei war so nett das PlugIn schon mal zu testen. Dabei ist ein Fehler aufgetreten, den ich bisher nicht nachvollziehen kann. Bei jedem Senden einer Taste kommt die Meldung zurück, dass die Taste im IRTrans nicht bekannt ist.
                            habe ich einen Verdacht, da es mir AFAIR ähnlich erging, als ich die *.rem umbenannt oder selbst angelegt habe. Da gibt's irgendwo ein file, wo die rem's nochmals abgelegt sind und der irserver beim Start nach schaut. Muss ich dann mal eruieren & rückmelden.
                            sg martin

                            Kommentar


                              #15
                              Zitat von martin.neu Beitrag anzeigen
                              P.S.2: Bzgl. habe ich einen Verdacht, da es mir AFAIR ähnlich erging, als ich die *.rem umbenannt oder selbst angelegt habe. Da gibt's irgendwo ein file, wo die rem's nochmals abgelegt sind und der irserver beim Start nach schaut. Muss ich dann mal eruieren & rückmelden.
                              Nein, daran liegt es leider nicht. Wir haben das mal manuell über Telnet durchspielt und da haben die Tasten mit gleicher Bezeichnung funktioniert. Es muss also am PlugIn in Verbindung mit dem IRTrans-Typ liegen. Da es bei mir aber funktioniert (ich habe den IRTrans LAN Controller), kann ich das nur schwer testen. Umso mehr freue ich mich über Deine Rückmeldung. :-)

                              Viele Grüße,

                              David

                              Kommentar

                              Lädt...
                              X