From 6b5e0c778e7b4c1652525956f7a63eb1d7ea9166 Mon Sep 17 00:00:00 2001 From: siinus Date: Thu, 11 Jun 2020 23:47:57 +0300 Subject: [PATCH] Add NEC projector http controls --- projektor/control.sh | 168 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100755 projektor/control.sh diff --git a/projektor/control.sh b/projektor/control.sh new file mode 100755 index 0000000..f0d9b06 --- /dev/null +++ b/projektor/control.sh @@ -0,0 +1,168 @@ +#!/bin/bash + +PROJECTOR_HOSTNAME='projektor' + +display_help() +{ + echo "Usage: $0 [option...] []" >&2 + echo + echo " -h, --help Show this message" + echo " -f, --force" + echo + echo "Commands:" + echo " get " + echo " set " + echo " switch " + echo + echo "Settings:" + echo " power" + echo " mute" + echo " freeze" + echo + echo "Examples:" + echo " get mute" + echo " set freeze on" + echo " switch power" + exit 1 +} + +send_request() +{ + D="" + for a in $@ + do + D="$D%$a" + done + URL="http://$PROJECTOR_HOSTNAME/cgi-bin/pjctrl.cgi.elf?D=$D" + echo $(curl -s $URL | sed 's/\[//; s/\]//' | xargs -d ',') +} + +get_power() +{ + STATUS=(`send_request 06 00 85 00 00 01 01 87`) + echo ${STATUS[7]} +} + +set_power() +{ + if [[ $1 -eq 1 ]]; + then + STATUS=`send_request 05 02 00 00 00 00` + else + STATUS=`send_request 05 02 01 00 00 00` + fi +} + +switch_power() +{ + STATUS=`get_power` + if [[ $STATUS -eq 1 ]]; + then + STATUS=`set_power 0` + else + STATUS=`set_power 1` + fi +} + +get_mute() +{ + STATUS=(`send_request 06 00 85 00 00 01 03 89`) + echo ${STATUS[5]} +} + +set_mute() +{ + if [[ $1 -eq 1 ]]; + then + STATUS=`send_request 05 02 10 00 00 00 13` + else + STATUS=`send_request 05 02 11 00 00 00 13` + fi +} + +switch_mute() +{ + STATUS=`get_mute` + if [[ $STATUS -eq 1 ]]; + then + STATUS=`set_mute 0` + else + STATUS=`set_mute 1` + fi +} + +get_freeze() +{ + STATUS=(`send_request 06 00 BF 00 00 01 02 C2`) + echo ${STATUS[14]} +} + +set_freeze() +{ + if [[ $1 -eq 1 ]]; + then + STATUS=`send_request 06 01 98 00 00 01 01 00` + else + STATUS=`send_request 06 01 98 00 00 01 02 00` + fi + echo $STATUS +} + +switch_freeze() +{ + STATUS=`get_freeze` + if [[ $STATUS -eq 1 ]]; + then + STATUS=`set_freeze 0` + else + STATUS=`set_freeze 1` + fi +} + + +# options +while : +do + case "$1" in + -h | --help) + display_help + exit 0 + ;; + -f | --force) + echo "Nothing to force, man" + shift + ;; + --) + shift + break + ;; + -*) + display_help + exit 1 + ;; + *) + break + ;; + esac +done + +# commands +case "$1" in + get | set | switch) + FNAME="$1_$2" + if [[ `type -t $FNAME` == '' ]] + then + echo "Invalid parameter for $1" + display_help + exit 1 + fi + OPT=`sed 's/on/1/; s/off/0/' <<< $3` + $FNAME $OPT + ;; + *) + echo 'Invalid command' + display_help + exit 1 + ;; +esac +