SmartHomeNG - Plugin SmartTV



Um einen SamsungTV in die Visu einzubinden, stehen einem verschiedene Möglichkeiten zur Verfügung. Hier wird 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. die Lautstärke 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/

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 und das Widget "multimedia.station" 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>
    <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>
    <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>