From 340d6bc31504b2b0e819e4256eff6ab0f693e1de Mon Sep 17 00:00:00 2001 From: Josh North Date: Mon, 1 Jan 2018 08:30:33 -0500 Subject: [PATCH] Add 'p' --- p | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 p diff --git a/p b/p new file mode 100644 index 0000000..8c417e6 --- /dev/null +++ b/p @@ -0,0 +1,89 @@ +#!/bin/bash +# AUTHOR: Josh North +# EMAIL: josh.north@point808.com +# BRIEF: Script to control dumb telnet-accessible power strips. Created with +# clean output for use in Home Assistant or other automation but could +# be used as a standalone app as well. +# USAGE: Make it executeable and run with -h to get usage flags. +# You will also probably want to set up a cron task to make it run as a +# sort of fake service. +# SETTINGS: +TEMPDIR="/tmp" +SCRIPTNAME=${0##*/} +show_help() +{ +echo " + USAGE: $0 [-h] [-d device] [-s plug] [-o plug] [-f plug] [-p] + -h Help - show this help text + -d fqdn Device - FQDN or IP of device to control + -s plug Status of given plug # + -o plug Turn ON given plug # + -f plug Turn OFF given plug # + -p Process pending jobs (to be called from cron, ex below) + * * * * * ${0} --host pdu01 --process >/dev/null 2>&1 + * * * * * sleep 10; ${0} --host pdu01 --process >/dev/null 2>&1 + * * * * * sleep 20; ${0} --host pdu01 --process >/dev/null 2>&1 + * * * * * sleep 30; ${0} --host pdu01 --process >/dev/null 2>&1 + * * * * * sleep 40; ${0} --host pdu01 --process >/dev/null 2>&1 + * * * * * sleep 50; ${0} --host pdu01 --process >/dev/null 2>&1 +" +} +OPTIND=1 +while getopts ":o:f:s:d:ph" FLAG; do + case "$FLAG" in + d) + HOST=$OPTARG + ;; + o) + ON=$OPTARG + ;; + f) + OFF=$OPTARG + ;; + s) + STATUS=$OPTARG + ;; + p) + PROCESS=1 + ;; + h) + show_help + ;; + \?) + echo "Invalid option: -$OPTARG. Use -h flag for usage instructions." + exit + ;; + esac +done +shift $((OPTIND-1)) + +if [ -z ${STATUS} ] + then + : + else + cat $TEMPDIR/$SCRIPTNAME-$HOST-STATUS | grep -A 6 'Plug | Name' | grep -A 5 '+--------' | grep -v '+--------' | awk '$1 ~ /^'$STATUS'$/{ print $7; }' +fi +if [ -z ${ON} ] + then + : + else + echo "/On $ON" >> $TEMPDIR/$SCRIPTNAME-$HOST-QUEUE +fi +if [ -z ${OFF} ] + then + : + else + echo "/Off $OFF" >> $TEMPDIR/$SCRIPTNAME-$HOST-QUEUE +fi +if [ -z ${PROCESS} ] + then + : + else + if [ -f $TEMPDIR/$SCRIPTNAME-$HOST-QUEUE ]; then + echo "/S" >> $TEMPDIR/$SCRIPTNAME-$HOST-QUEUE + echo "/X" >> $TEMPDIR/$SCRIPTNAME-$HOST-QUEUE + { cat $TEMPDIR/$SCRIPTNAME-$HOST-QUEUE; sleep 1; } | telnet $HOST > $TEMPDIR/$SCRIPTNAME-$HOST-STATUS 2>/dev/null + truncate -s 0 $TEMPDIR/$SCRIPTNAME-$HOST-QUEUE + fi +fi +exit \ No newline at end of file