SmartHomeNG - Plugin SmartTV




Um einen SamsungTV in die Visu einzubinden, stehen einem verschiedene Möglichkeiten zur Verfügung. Hier wird jetzt einmal die Möglichkeit beschrieben über ein Popup zur Senderauswahl zu gelangen (KLICK auf das farbige TV-Icon) und zum anderen öfter benötigte Funktionen wie z.B. lauter, leiser etc. aus einem Block heraus zu steuern ( s. unten Steuerung I und Steuerung II ).

Steuerung über Popup

1. Plugin einbinden:

Das benötigte Plugin liefert SmartHomeNG (SmartTV) und wir müssen es nur noch in die plugin.yaml einfügen. Diese finden wir unter:
/usr/smarthome/etc/plugin.yaml
Hier fügen wir nun folgendes ein : was passen wir an?
  • host - Die IP unter welcher der Samsung TV zu erreichen ist
  • port - nur notwendig wenn man vom Standartport abweichen möchte ( dann auch die # löschen )
  • tvid - nur notwendig wenn man mehrer Samsung TVs einbinden möchte ( dann auch die # löschen )
Dann die plugin.yaml speichern.

2. Items erstellen:

Als nächstes erstellen wir die Items. Dazu erstellen wir im Item-Verzeichnis via WinSCP eine neue Datei und nennen diese der Einfachheit halber samsungtv.yaml
Ein kleines Beispielitem für den TV könnte so aussehen:
Hier arbeitet das Plugin mit Keys:
  • smarttv: KEY_MUTE - Befehl der den Mute-Key auslöst
  • smarttv: KEY_1 | KEY_0 | KEY_2 | KEY_ENTER - Befehl der eine Keyfolge "1 0 2 Enter" auslöst ( z.B. Programmplatz )
  • knx_listen: 0/0/7 - in Verbindung mit knx_dpt = 1 kann so z.B über eine GA der Sender gewechselt werden
Eine komplette Liste der Keys gibt es in der Doku zum Plugin.

3. In die html einbinden:

Hier muß man sich nun als erstes einige Senderlogos besorgen und diese z.B. in folgendem Verzeichnis abspeichern:
/web/smartvisu/pics/station/

Die Senderlogos und Steuerungsicons aus diesem Beispiel kann ich auf Mailanfrage gerne übermitteln.

Weiterhin müssen wir später eine Referenz auf das Widget setzen. Dies machen wir in dem wir folgende Zeile vor den Widgetcode setzen.
{% import "multimedia.html" as multimedia %}

Als Widget verwenden wir "multimedia.station". Ein Beispielcode sieht so aus:
{{ multimedia.station('CH1', 'tv.RTL', 'pics/station/rtl.png', 1, 'midi') }}

Zusammenfassend bringen wir nun ein Popup-Fenster mit dem Senderlogo, das Widget "multimedia.station" und die Referenz auf dieses Widget zusammen. Der Beispielcode dafür sieht wie folgt aus:

Senderauswahl

Close


Um nun mehrere Senderlogos in das Popup zu bringen, fügen wir einfach mehrere Widgetcodes hinzu:

Senderauswahl

Close


Steuerung über Blocks


Steuerung II

Ein weiteres Beispiel, um die Steuerung von weiteren Funktionstasten wie lauter, leiser etc. in Blocks darzustellen, sieht wie folgt aus.
Die in diesem Beispiel verwendeten Icons müssen als *.png in dem folgenden erstellten Verzeichnis liegen:
/var/www/html/smartvisu/pics/station/steuerung

Die verwendeten Widgets sind ebenfalls wieder "multimedia.station". Beispiel:
{{ multimedia.station('ST1', 'tv.Source', 'pics/station/steuerung/source.png', 1, 'midi') }}

Hier nun noch die Besipiele der Items und des html-Code:

Beispiel aus samsungtv.yaml (Klick mich)

 [tv]
    [[mute]]
        name = MuteTV
        type = bool
        visu_acl = rw
        smarttv = KEY_MUTE
        smarttv_id = 1
        enforce_updates = true
    [[Up]]
        name = UpTV
        type = bool
        visu_acl = rw
        smarttv = KEY_UP
        smarttv_id = 1
        enforce_updates = true
    [[Down]]
        name = DownTV
        type = bool
        visu_acl = rw
        smarttv = KEY_DOWN
        smarttv_id = 1
        enforce_updates = true
    [[Left]]
        name = LeftTV
        type = bool
        visu_acl = rw
        smarttv = KEY_LEFT
        smarttv_id = 1
        enforce_updates = true
    [[Right]]
        name = RightTV
        type = bool
        visu_acl = rw
        smarttv = KEY_RIGHT
        smarttv_id = 1
        enforce_updates = true
    [[VolUP]]
        name = VolUpTV
        type = bool
        visu_acl = rw
        knx_dpt = 1
        knx_listen = 3/1/1
        smarttv = KEY_VOLUP
        smarttv_id = 1
        enforce_updates = true
    [[VolDown]]
        name = VolDownTV
        type = bool
        visu_acl = rw
        knx_dpt = 1
        knx_listen = 3/1/2
        smarttv = KEY_VOLDOWN
        smarttv_id = 1
        enforce_updates = true
    [[TOOLS]]
        name = ToolsTV
        type = bool
        visu_acl = rw
        smarttv = KEY_TOOLS
        smarttv_id = 1
        enforce_updates = true
    [[Source]]
        name = SourceTV
        type = bool
        visu_acl = rw
        smarttv = KEY_SOURCE
        smarttv_id = 1
        enforce_updates = true
    [[ChDOWN]]
        name = ChDownTV
        type = bool
        visu_acl = rw
        smarttv = KEY_CHDOWN
        smarttv_id = 1
        enforce_updates = true
    [[ChUP]]
        name = ChUpTV
        type = bool
        visu_acl = rw
        smarttv = KEY_CHUP
        smarttv_id = 1
        enforce_updates = true
    [[ChList]]
        name = ChListTV
        type = bool
        visu_acl = rw
        smarttv = KEY_CH_LIST
        smarttv_id = 1
        enforce_updates = true
    [[PreCh]]
        name = PreChListTV
        type = bool
        visu_acl = rw
        smarttv = KEY_PRECH
        smarttv_id = 1
        enforce_updates = true
    [[TopMenu]]
        name = TopMEnuTV
        type = bool
        visu_acl = rw
        smarttv = KEY_TOPMENU
        smarttv_id = 1
        enforce_updates = true
    [[Guide]]
        name = GuideTV
        type = bool
        visu_acl = rw
        smarttv = KEY_GUIDE
        smarttv_id = 1
        enforce_updates = true
    [[HDMI]]
        name = HDMITV
        type = bool
        visu_acl = rw
        smarttv = KEY_HDMI
        smarttv_id = 1
        enforce_updates = true
    [[TV]]
        name = TVTV
        type = bool
        visu_acl = rw
        smarttv = KEY_TV
        smarttv_id = 1
        enforce_updates = true
    [[AppList]]
        name = AppListTV
        type = bool
        visu_acl = rw
        smarttv = KEY_APP_LIST
        smarttv_id = 1
        enforce_updates = true
    [[ENTERTAINMENT]]
        name = ENTERTAINMENTTV
        type = bool
        visu_acl = rw
        smarttv = KEY_ENTERTAINMENT
        smarttv_id = 1
        enforce_updates = true
    [[Enter]]
        name = EnterTV
        type = bool
        visu_acl = rw
        smarttv = KEY_ENTER
        smarttv_id = 1
        enforce_updates = true
    [[onoff]]
        name = onoffTV
        type = bool
        visu_acl = rw
        smarttv = KEY_ONOFF
        smarttv_id = 1
        enforce_updates = true
    [[Power]]
        name = PowerTV
        type = bool
        visu_acl = rw
        smarttv = KEY_POWER
        smarttv_id = 1
        enforce_updates = true
    [[PowerOff]]
        name = PowerTV
        type = bool
        visu_acl = rw
        knx_dpt = 1
        knx_listen = 3/1/0
        knx_send = 3/1/0
        smarttv = KEY_POWEROFF
        smarttv_id = 1
        enforce_updates = true
    [[INFO]]
        name = InfoTV
        type = bool
        visu_acl = rw
        smarttv = KEY_INFO
        smarttv_id = 1
        enforce_updates = true
    [[TTX_MIX]]
        name = TTXTV
        type = bool
        visu_acl = rw
        smarttv = KEY_TTX_MIX
        smarttv_id = 1
        enforce_updates = true
    [[Return]]
        name = ReturnTV
        type = bool
        visu_acl = rw
        smarttv = KEY_RETURN
        smarttv_id = 1
        enforce_updates = true
    [[Save]]
        name = SaveTV
        type = bool
        visu_acl = rw
        smarttv = KEY_ESAVING
        smarttv_id = 1
        enforce_updates = true
    [[Home]]
        name = SaveTV
        type = bool
        visu_acl = rw
        smarttv = KEY_HOME
        smarttv_id = 1
        enforce_updates = true
    [[Exit]]
        name = SaveTV
        type = bool
        visu_acl = rw
        smarttv = KEY_EXIT
        smarttv_id = 1
        enforce_updates = true
    [[Internet]]
        name = SaveTV
        type = bool
        visu_acl = rw
        smarttv = KEY_INTERNET
        smarttv_id = 1
        enforce_updates = true

Beispiel html (Klick mich)

    <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>Steuerung I</h3>
{% import "multimedia.html" as multimedia %}
    <table width="100%">
                {{ multimedia.station('ST1', 'tv.Source', 'pics/station/steuerung/Source.png', 1, 'midi') }}
                {{ multimedia.station('ST2', 'tv.Up', 'pics/station/steuerung/Pfeil_hoch.png', 1, 'midi') }}
                {{ multimedia.station('ST3', 'tv.TTX_MIX', 'pics/station/steuerung/Text.png', 1, 'midi') }}
    </table>
    <table width="100%">
                {{ multimedia.station('ST4', 'tv.Left', 'pics/station/steuerung/Pfeil_links.png', 1, 'midi') }}
                {{ multimedia.station('ST5', 'tv.Enter', 'pics/station/steuerung/Ok_sign.png', 1, 'midi') }}
                {{ multimedia.station('ST6', 'tv.Right', 'pics/station/steuerung/Pfeil_rechts.png', 1, 'midi') }}
    </table>
    <table width="100%">
                {{ multimedia.station('ST7', 'tv.Return', 'pics/station/steuerung/Return.png', 1, 'midi') }}
                {{ multimedia.station('ST8', 'tv.Down', 'pics/station/steuerung/Pfeil_runter.png', 1, 'midi') }}
                {{ multimedia.station('ST9', 'tv.Exit', 'pics/station/steuerung/Exit.png', 1, 'midi') }}
    </table>
    </div>

    </div>
    </div>
    <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>Steuerung II</h3>
{% import "multimedia.html" as multimedia %}
    <table width="100%">
                {{ multimedia.station('ST10', 'tv.VolDown', 'pics/station/steuerung/Volume_down.png', 1, 'midi') }}
                {{ multimedia.station('ST11', 'tv.mute', 'pics/station/steuerung/Mute.png', 1, 'midi') }}
                {{ multimedia.station('ST12', 'tv.VolUP', 'pics/station/steuerung/Volume_up.png', 1, 'midi') }}
    </table>
    <table width="100%">
                {{ multimedia.station('ST13', 'tv.ChDOWN', 'pics/station/steuerung/Chanel_down.png', 1, 'midi') }}
                {{ multimedia.station('ST14', 'tv.INFO', 'pics/station/steuerung/Info.png', 1, 'midi') }}
                {{ multimedia.station('ST15', 'tv.ChUP', 'pics/station/steuerung/Chanel_up.png', 1, 'midi') }}
    </table>
    <table width="100%">
                {{ multimedia.station('ST17', 'tv.Internet', 'pics/station/steuerung/Home.png', 1, 'midi') }}
    </table>
    </div>

    </div>
    </div>