diff --git a/command_watcher.sh b/command_watcher.sh new file mode 100755 index 0000000..3700ce9 --- /dev/null +++ b/command_watcher.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +COMMAND_FILE=/tmp/command +COMMAND_FILE_TMP=/tmp/command_tmp + +lounge_light() { + echo "not implemented" +} + +lounge_light_toggle() { + ./light.sh +} + +cd "$(dirname $0)" +touch "$COMMAND_FILE" +chmod 666 "$COMMAND_FILE" +while inotifywait -qq -e close_write "$COMMAND_FILE"; do + mv "$COMMAND_FILE" "$COMMAND_FILE_TMP" + sleep .1 # wait for possible further/parallel writes to end + while IFS='' read -r line || [[ -n "$line" ]]; do + echo "Text read from file: $line" + case "$line" in + lounge_light_toggle) + lounge_light_toggle + ;; + lounge_light*) + lounge_light "$COMMAND" + ;; + *) + echo "ERROR; available commands:" >&2 + echo "lounge_light lounge_light_toggle" >&2 + ;; + esac + done < "$COMMAND_FILE_TMP" + rm "$COMMAND_FILE_TMP" + touch "$COMMAND_FILE" + chmod 666 "$COMMAND_FILE" +done diff --git a/run.sh b/run.sh index 6e89659..3ca46c7 100755 --- a/run.sh +++ b/run.sh @@ -1,6 +1,7 @@ #!/bin/bash cd "$(dirname $0)" + ( while true; do /usr/bin/python3 chch-power.py >/dev/null 2>&1 @@ -8,3 +9,11 @@ cd "$(dirname $0)" done ) & disown $! + +( + while true; do + ./command_watcher.sh >/dev/null 2>&1 + sleep 1 + done +) & +disown $! diff --git a/shell.sh b/shell.sh index 2f9a1d8..b017f67 100755 --- a/shell.sh +++ b/shell.sh @@ -5,6 +5,8 @@ # cat .ssh/authorized_keys # command="/home/automation/chch-power/shell.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA... +COMMAND_FILE=/tmp/command + status() { STATUS="$(cat /tmp/status)" if [ -z "$STATUS" ]; then @@ -13,14 +15,32 @@ status() { echo "$STATUS" } +lounge_light() { + COMMAND="lounge_light $1" + echo "$COMMAND" >> $COMMAND_FILE + echo "OK $COMMAND" +} + +lounge_light_toggle() { + COMMAND="lounge_light_toggle" + echo "$COMMAND" >> $COMMAND_FILE + echo "OK $COMMAND" +} + read COMMAND case "$COMMAND" in status) status ;; + lounge_light_toggle) + lounge_light_toggle + ;; + lounge_light*) + lounge_light "$(echo $COMMAND | cut -d" " -f2 | grep -oe "[a-z]\?[0-9a-fA-F]*" | head -n1)" + ;; *) echo "ERROR; available commands:" >&2 - echo "status" >&2 + echo "status lounge_light lounge_light_toggle" >&2 exit 1 ;; esac