Управляем Samsung SmartTV через bash скрипты

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Ответить
kulpinivan
Сообщения: 25
Зарегистрирован: 25 ноя 2012, 23:23

Управляем Samsung SmartTV через bash скрипты

Сообщение kulpinivan » 25 мар 2016, 18:37

Хочу поделиться информацией, может кому то она окажется полезной.
Нашел в интернете скрипт который позволяет управлять практически всеми функциями Samsung SmartTV. Но к сожалению НЕ УМЕЕТ включать тв если тот выключен.
Никаких дополнительных программ и оборудования не требуется. Опробовано на 2 тв F и H серий.
Собственно сам скрипт:
#!/bin/bash

printHelp () {
printf "===============================================================================\n"
printf "%-8s" KEY_0
printf "%-8s" KEY_1
printf "%-8s" KEY_2
printf "%-8s" KEY_3
printf "%-8s" KEY_4
printf "%-8s" KEY_5
printf "%-8s" KEY_6
printf "%-8s" KEY_7
printf "%-8s" KEY_8
printf "%-8s\n" KEY_9

printf "%-14s" KEY_UP
printf "%-14s" KEY_DOWN
printf "%-14s" KEY_LEFT
printf "%-14s\n" KEY_RIGHT
printf "%-14s" KEY_EXIT
printf "%-14s" KEY_ENTER
printf "%-14s" KEY_RETURN
printf "%-14s" KEY_INFO
printf "%-14s\n" KEY_TOOLS

printf "%-14s" KEY_MENU
printf "%-14s" KEY_PRECH
printf "%-14s" KEY_GUIDE
printf "%-14s" KEY_CH_LIST
printf "%-14s" KEY_SOURCE
printf "%-14s\n" KEY_AD # Subtitles
printf "%-14s" KEY_PLAY
printf "%-14s" KEY_PAUSE
printf "%-14s" KEY_MUTE
printf "%-14s" KEY_VOLUP
printf "%-14s" KEY_VOLDOWN
printf "%-14s\n" KEY_POWEROFF
printf "%-14s" KEY_CHUP
printf "%-14s" KEY_CHDOWN
printf "%-14s" KEY_CONTENTS
printf "%-14s" KEY_W_LINK # Media (Smart HUB)
printf "%-14s" KEY_RSS # Internet (Smart HUB)
printf "%-14s\n" KEY_MTS # Mono/Stereo
printf "%-14s" KEY_CAPTION # Subtitles
printf "%-14s" KEY_REWIND
printf "%-14s" KEY_FF
printf "%-14s" KEY_REC
printf "%-14s" KEY_STOP
printf "%-14s\n" KEY_PICTURE_SIZE
printf "Special keys:\n"
printf "%-14s" KEY_TV
printf "%-14s" KEY_FACTORY
printf "%-14s" KEY_3SPEED
printf "%-14s" KEY_ESAVING
printf "%-14s" KEY_SRS
printf "\n===============================================================================\n"
}

getLenChar () {
printf "#x%02X" $1
}

if [ -z $1 ]
then
printHelp
exit 0
fi

TVIP="192.168.12.4"; #IP Address of TV
SRCIP="192.168.12.8"; #IP сервера
#MAC=`ifconfig eth0 | grep "Ethernet" | cut -d ' ' -f 12`; # Used for the access control/validation, but not after that AFAIK
MAC="f4-7b-5e-12-32-aa" # мас адрес тв
APPSTR="bashRemote.iapp.samsung"; #What the iPhone app reports
TVAPPSTR="bashRemote.UE40EH5307.iapp.samsung"; #указать номер модели
NAME="bashRemote"; #What gets reported when it asks for permission/also shows in General->Wireless Remote Control menu

SRCIP_ENC=`echo -n "$SRCIP" | base64`
SRCIP_ENC_LEN=$(getLenChar ${#SRCIP_ENC})

MAC_ENC=`echo -n "$MAC" | base64`
MAC_ENC_LEN=$(getLenChar ${#MAC_ENC})
NAME_ENC=`echo -n "$NAME" | base64`
NAME_ENC_LEN=$(getLenChar ${#NAME_ENC})
APPSTR_LEN=$(getLenChar ${#APPSTR})
TVAPPSTR_LEN=$(getLenChar ${#TVAPPSTR})

INNER_HEADER="d#x00$SRCIP_ENC_LEN#x00$SRCIP_ENC$MAC_ENC_LEN#x00$MAC_ENC$NAME_ENC_LEN#x00$NAME_ENC"
IH_TR=`echo -n "$INNER_HEADER" | sed -e "s/#x../0/g"` # collapse 0xYY values to one char for length calc
INNER_HEADER_LEN=$(getLenChar ${#IH_TR})

HEADER="#x00$APPSTR_LEN#x00$APPSTR$INNER_HEADER_LEN#x00$INNER_HEADER"

HEADER2="#x00$APPSTR_LEN#x00$APPSTR#x02#x00#xC8#x00"

for TEXT in "$@"
do

#KEY
TEXT_ENC=`echo -n "$TEXT" | base64`
TEXT_ENC_LEN=$(getLenChar ${#TEXT_ENC})

# Is Text?
if [[ "${TEXT:0:4}" =~ KEY_.* ]]
then
echo "Sending key..."
INNER_PAYLOAD="#x00#x00#x00$TEXT_ENC_LEN#x00$TEXT_ENC"
else
echo "Sending text($TEXT)..."
INNER_PAYLOAD="#x01#x00$TEXT_ENC_LEN#x00$TEXT_ENC"
fi

IP_TR=`echo -n "$INNER_PAYLOAD" | sed -e "s/#x../0/g"` # collapse #xYY values to one char for length calc
INNER_PAYLOAD_LEN=$(getLenChar ${#IP_TR})

if [[ "${TEXT:0:4}" =~ KEY_.* ]]
then
PAYLOAD="#x00$TVAPPSTR_LEN#x00$TVAPPSTR$INNER_PAYLOAD_LEN#x00$INNER_PAYLOAD"
else
PAYLOAD="#x01$TVAPPSTR_LEN#x00$TVAPPSTR$INNER_PAYLOAD_LEN#x00$INNER_PAYLOAD"
fi

# Create packet - replace #xYY codes with \xYY for echo
ALL_CODED=`echo -n "$HEADER$HEADER2$PAYLOAD" | sed -e "s/#x/\\\\\\x/g"
#tr -s '#' '\\'` # gives warning

echo -e "$ALL_CODED" | nc $TVIP 55000 | grep "ccccc" # | xxd
done

exit 0

# some more key mappings from https://github.com/tomquist/SamyGo-Android-Remote/

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;

настройки выделил красным
использование: user@sh:~$ ./bashRemote KEY_1 #включит 1 канал
а user@sh:~$ ./bashRemote KEY_1 KEY_2 KEY_VOLUP KEY_VOLUP #включит 12 канал и добавит громкость на 2 пункта
а дальше уже полет фантазии...

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Управляем Samsung SmartTV через bash скрипты

Сообщение empenoso » 27 мар 2016, 08:49

У меня LG с ethernet портом - кроме как по DLNA больше ничего не удалось сделать по управлению.
А вот что в связке с VeraLite получилось: http://www.youtube.com/watch?v=loqQnzBoiRI

Ответить