Über die virtuellen Module im Fibaro Home Center 2 lassen sich viele Geräte im Netzwerk ansprechen und steuern. So auch dein Samsung TV.
Letztens hatte ich hier beschrieben, wie du deine Philips Hue Leuchten als virtuelles Modul in das Fibaro Home Center 2 einbinden kannst. Aber was nützt dir die tolle Lichtstimmung zum Kinofeeling oder Fernseher?
Solltest du einen netzwerkfähigen Samsung Smart TV haben, egal ob dieser per LAN oder WLAN mit deinem Netzwerk verbunden ist, kannst du ihn über das Fibaro HC2 steuern. Du kannst die gesamte Fernbedienung mit (fast) allen Befehlen als virtuelles Modul nachbauen. So ist es mit dem virtuellen Modul dann möglich, den Samsung Smart TV in Szenen einzubinden oder mit Z-Wave Schaltern, Fernbedienungen, Bewegungsmeldern ... ein- und auszuschalten, umzuschalten, das Menü oder den Guide zu öffnen und was auch immer du realisieren möchtest.
Virtuelles Modul anlegen
Auf der Weboberfläche des Fibaro Home Center 2 findest du unter dem Menüpunkt "Module" den Unterpunkt "Add or remove device". Über den Button "hinzufügen" erstellt du ein neues leeres Modul.
Vergebe dem neuen virtuellen Modul einen passenden Namen. Ich denke Samsung Smart TV ist sehr passend ;-) . Nun dem ganzen noch einen Raum zuordnen.
In das Feld IP Adresse, muss logischerweise die IP Adresse des Samsung Fernseher eingeben. Diese bekommst du entweder über deinen Router heraus, oder über das Menü deines Smart TV. Dort unter Netzwerk -> Netzwerkstatus prüfen, zeigt er dir die IP Adresse an. Tipp: Vergib deinem Samsung TV eine feste IP Adresse, damit du diese nicht ständig im virtuellen Modul anpassen musst.
Als TCP Port verwende den Port: 55000
Wechsel in die Registerkarte "Fortgeschritten" und füge ein neuen Button hinzu.
Das Feld "Label" ist letztendlich die Beschriftung des Buttons. Das Feld "ID" kannst du frei definieren, der Quellcode wird sich später nicht darauf beziehen. Wechsel zu LUA Code.
Kopiere den folgenden Code in den LUA Code des eben erstellten Button.
-- <configuration> -- selfId = fibaro:getSelfId() tvIpAddress = fibaro:get(selfId, "IPAddress") tvPort = 55000 keycodestring = "KEY_POWEROFF" tvAuthString = string.char(0x00,0x14,0x00,0x69,0x70,0x68,0x6f,0x6e,0x65,0x2e,0x2e,0x69,0x61,0x70,0x70,0x2e,0x73,0x61,0x6d,0x73,0x75,0x6e,0x67,0x38,0x00,0x64,0x00,0x14,0x00,0x4d,0x54,0x6b,0x79,0x4c,0x6a,0x45,0x32,0x4f,0x43,0x34,0x77,0x4c,0x6a,0x45,0x78,0x4d,0x41,0x3d,0x3d,0x18,0x00,0x4e,0x45,0x4d,0x74,0x4e,0x7a,0x49,0x74,0x51,0x6a,0x6b,0x74,0x4e,0x44,0x4d,0x74,0x4d,0x6a,0x51,0x74,0x4f,0x45,0x49,0x3d,0x04,0x00,0x54,0x51,0x3d,0x3d) -- </configuration> -- -- character table string local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' -- encoding to base64 function enc(data) return ((data:gsub('.', function(x) local r,b='',x:byte() for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end return r; end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) if (#x < 6) then return '' end local c=0 for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end return b:sub(c+1,c+1) end)..({ '', '==', '=' })[#data%3+1]) end -- helper function function num2bytes(num) local retStr="" for i=1,2 do retStr = retStr .. string.char(num%256) num = math.floor(num/256) end return retStr end tcpSocket = Net.FTcpSocket(tvIpAddress, tvPort) -- say hello to the TV ;) bytes, errorCode = tcpSocket:write(tvAuthString) keycodebase = string.char(0x00,0x13,0x00,0x69,0x70,0x68,0x6f,0x6e,0x65,0x2e,0x69,0x61,0x70,0x70,0x2e,0x73,0x61,0x6d,0x73,0x75,0x6e,0x67) -- payload payloadinit = string.char(0x00,0x00,0x00) keycode = enc(keycodestring) keycodesize = num2bytes(string.len(keycode)) payloadsize = num2bytes(string.len(payloadinit .. keycode ..keycodesize)) -- combining the message message = keycodebase .. payloadsize .. payloadinit .. keycodesize .. keycode -- sending keycode bytes, errorCode2 = tcpSocket:write(message) if errorCode == 0 and errorCode2 == 0 then -- printing log under virtual device fibaro:log("transfer OK: " .. keycodestring) else fibaro:log("transfer failed") end
Wenn du nun das virtuelle Modul speicherst, hast du bereits einen funktionierenden Ein- und Ausschalter für deinen Samsung Fernseher. Los probier es gleich mal aus!
Geht nicht aus? Richtig, wenn du alles richtig gemacht hast, wird auf deinem Fernseher jetzt eine Meldung erscheinen, welche dich fragt ob die Fernbedienung xxx berechtigt ist den Fernseher zu steuern. Mit der originalen (physischen) Fernbedienung wähle hier ok aus und bestätige dies. Danach versuche deinen neu erstellten Ausschalt-Button noch einmal.
[carousel arrows="display" buttons="display"]
[panel]
[/panel]
[panel]
[/panel]
[/carousel]
Geht?
Kurze Erklärung des Script.
Im Kopf des Script findest du folgendes Kommando.
selfId = fibaro:getSelfId() tvIpAddress = fibaro:get(selfId, "IPAddress")
Mit dem Befehl fibaro:get(selfID, "IPAdress") lesen wir die IP Adresse aus, welche du oben vom Samsung TV eingegeben hast. Diese schreiben wir in die Variable "tvIpAdress" welche später im Script weiter verwendet wird.
Der folgende keycodestring ist der eigentliche Befehl welchen wir an den Fernseher senden. In diesem Fall PowerOFF, also ausschalten. Das ist alles. Du kannst also das Script nehmen und dir soviel Buttons anlegen wie du benötigst. Das einzige was im gesamten Script geändert werden muss ist der Keystring. Alle verfügbaren Befehle zähle ich am Ende dieses Beitrags auf.
keycodestring = "KEY_POWEROFF"
Das war es schon. Alles kein Hexenwerk. Nun kannst du dieses virtuelle Modul in Szenen aufrufen um zum Beispiel in der Szene TV-Abend, die Jalousien herunter zu fahren, die Philips Hue Leuchten zu dimmen und den Samsung Fernseher einzuschalten.
Ich hab mal eine kleine Fernbedienung als virtuelles Modul nachgebaut. Diese kannst du dir hier herunterladen. Nach dem Download auf deinem PC entpacken und die *.vif Datei einfach in das Fibaro HC2 unter virtuelle Module importieren.
[icons icon="icon-folder-open" color="#1e73be" size="13"]Samsung Smart TV - virtuelles Modul
Die gängigsten keyCodes:
KEY_0 KEY_1 KEY_2 KEY_3 KEY_4 KEY_5 KEY_6 KEY_7 KEY_8 KEY_9 KEY_UP KEY_DOWN KEY_LEFT KEY_RIGHT KEY_MENU KEY_PRECH KEY_GUIDE KEY_INFO KEY_RETURN KEY_CH_LIST KEY_EXIT KEY_ENTER KEY_SOURCE KEY_AD #KEY_PLAY KEY_PAUSE KEY_MUTE KEY_PICTURE_SIZE KEY_VOLUP KEY_VOLDOWN KEY_TOOLS KEY_POWEROFF KEY_CHUP KEY_CHDOWN KEY_CONTENTS KEY_W_LINK #Media P KEY_RSS #Internet KEY_MTS #Dual KEY_CAPTION #Subt KEY_REWIND KEY_FF KEY_REC KEY_STOP KEY_TV
Alle verfügbaren keyCodes:
KEY_REWIND #KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_11, KEY_12, KEY_3SPEED, KEY_4_3, KEY_16_9, KEY_AD, KEY_ADDDEL, KEY_ALT_MHP, KEY_ANGLE, KEY_ANTENA, KEY_ANYNET, KEY_ANYVIEW, KEY_APP_LIST, KEY_ASPECT, KEY_AUTO_ARC_ANTENNA_AIR, KEY_AUTO_ARC_ANTENNA_CABLE, KEY_AUTO_ARC_ANTENNA_SATELLITE, KEY_AUTO_ARC_ANYNET_AUTO_START, KEY_AUTO_ARC_ANYNET_MODE_OK, KEY_AUTO_ARC_AUTOCOLOR_FAIL, KEY_AUTO_ARC_AUTOCOLOR_SUCCESS, KEY_AUTO_ARC_CAPTION_ENG, KEY_AUTO_ARC_CAPTION_KOR, KEY_AUTO_ARC_CAPTION_OFF, KEY_AUTO_ARC_CAPTION_ON, KEY_AUTO_ARC_C_FORCE_AGING, KEY_AUTO_ARC_JACK_IDENT, KEY_AUTO_ARC_LNA_OFF, KEY_AUTO_ARC_LNA_ON, KEY_AUTO_ARC_PIP_CH_CHANGE, KEY_AUTO_ARC_PIP_DOUBLE, KEY_AUTO_ARC_PIP_LARGE, KEY_AUTO_ARC_PIP_LEFT_BOTTOM, KEY_AUTO_ARC_PIP_LEFT_TOP, KEY_AUTO_ARC_PIP_RIGHT_BOTTOM, KEY_AUTO_ARC_PIP_RIGHT_TOP, KEY_AUTO_ARC_PIP_SMALL, KEY_AUTO_ARC_PIP_SOURCE_CHANGE, KEY_AUTO_ARC_PIP_WIDE, KEY_AUTO_ARC_RESET, KEY_AUTO_ARC_USBJACK_INSPECT, KEY_AUTO_FORMAT, KEY_AUTO_PROGRAM, KEY_AV1, KEY_AV2, KEY_AV3, KEY_BACK_MHP, KEY_BOOKMARK, KEY_CALLER_ID, KEY_CAPTION, KEY_CATV_MODE, KEY_CHDOWN, KEY_CHUP, KEY_CH_LIST, KEY_CLEAR, KEY_CLOCK_DISPLAY, KEY_COMPONENT1, KEY_COMPONENT2, KEY_CONTENTS, KEY_CONVERGENCE, KEY_CONVERT_AUDIO_MAINSUB, KEY_CUSTOM, KEY_CYAN, KEY_BLUE(KEY_CYAN), // Proxy for KEY_CYAN KEY_DEVICE_CONNECT, KEY_DISC_MENU, KEY_DMA, KEY_DNET, KEY_DNIe, KEY_DNSe, KEY_DOOR, KEY_DOWN, KEY_DSS_MODE, KEY_DTV, KEY_DTV_LINK, KEY_DTV_SIGNAL, KEY_DVD_MODE, KEY_DVI, KEY_DVR, KEY_DVR_MENU, KEY_DYNAMIC, KEY_ENTER, KEY_ENTERTAINMENT, KEY_ESAVING, KEY_EXIT, KEY_EXT1, KEY_EXT2, KEY_EXT3, KEY_EXT4, KEY_EXT5, KEY_EXT6, KEY_EXT7, KEY_EXT8, KEY_EXT9, KEY_EXT10, KEY_EXT11, KEY_EXT12, KEY_EXT13, KEY_EXT14, KEY_EXT15, KEY_EXT16, KEY_EXT17, KEY_EXT18, KEY_EXT19, KEY_EXT20, KEY_EXT21, KEY_EXT22, KEY_EXT23, KEY_EXT24, KEY_EXT25, KEY_EXT26, KEY_EXT27, KEY_EXT28, KEY_EXT29, KEY_EXT30, KEY_EXT31, KEY_EXT32, KEY_EXT33, KEY_EXT34, KEY_EXT35, KEY_EXT36, KEY_EXT37, KEY_EXT38, KEY_EXT39, KEY_EXT40, KEY_EXT41, KEY_FACTORY, KEY_FAVCH, KEY_FF, KEY_FF_, KEY_FM_RADIO, KEY_GAME, KEY_GREEN, KEY_GUIDE, KEY_HDMI, KEY_HDMI1, KEY_HDMI2, KEY_HDMI3, KEY_HDMI4, KEY_HELP, KEY_HOME, KEY_ID_INPUT, KEY_ID_SETUP, KEY_INFO, KEY_INSTANT_REPLAY, KEY_LEFT, KEY_LINK, KEY_LIVE, KEY_MAGIC_BRIGHT, KEY_MAGIC_CHANNEL, KEY_MDC, KEY_MENU, KEY_MIC, KEY_MORE, KEY_MOVIE1, KEY_MS, KEY_MTS, //Dual KEY_MUTE, KEY_NINE_SEPERATE, KEY_OPEN, KEY_PANNEL_CHDOWN, KEY_PANNEL_CHUP, KEY_PANNEL_ENTER, KEY_PANNEL_MENU, KEY_PANNEL_POWER, KEY_PANNEL_SOURCE, KEY_PANNEL_VOLDOW, KEY_PANNEL_VOLUP, KEY_PANORAMA, KEY_PAUSE, KEY_PCMODE, KEY_PERPECT_FOCUS, KEY_PICTURE_SIZE, KEY_PIP_CHDOWN, KEY_PIP_CHUP, KEY_PIP_ONOFF, KEY_PIP_SCAN, KEY_PIP_SIZE, KEY_PIP_SWAP, KEY_PLAY, KEY_PLUS100, KEY_PMODE, KEY_POWER, KEY_POWEROFF, KEY_POWERON, KEY_PRECH, KEY_PRINT, KEY_PROGRAM, KEY_QUICK_REPLAY, KEY_REC, KEY_RED, KEY_REPEAT, KEY_RESERVED1, KEY_RETURN, KEY_REWIND, KEY_REWIND_, KEY_RIGHT, KEY_RSS, // Internet KEY_INTERNET(KEY_RSS), // Proxy for KEY_RSS KEY_RSURF, KEY_SCALE, KEY_SEFFECT, KEY_SETUP_CLOCK_TIMER, KEY_SLEEP, KEY_SOUND_MODE, KEY_SOURCE, KEY_SRS, KEY_STANDARD, KEY_STB_MODE, KEY_STILL_PICTURE, KEY_STOP, KEY_SUB_TITLE, KEY_SVIDEO1, KEY_SVIDEO2, KEY_SVIDEO3, KEY_TOOLS, KEY_TOPMENU, KEY_TTX_MIX, KEY_TTX_SUBFACE, KEY_TURBO, KEY_TV, KEY_TV_MODE, KEY_UP, KEY_VCHIP, KEY_VCR_MODE, KEY_VOLDOWN, KEY_VOLUP, KEY_WHEEL_LEFT, KEY_WHEEL_RIGHT, KEY_W_LINK, // Media P KEY_YELLOW, KEY_ZOOM1, KEY_ZOOM2, KEY_ZOOM_IN, KEY_ZOOM_MOVE, KEY_ZOOM_OUT;