So I’ve begun using X10 for some non-essential systems at home (AC, lights, etc.). I am using a firecracker and the following script, which I will put a nice little iPhone-compatible interface around:
#!/bin/sh # # The X10 devices are controlled via a "firecracker" on ttyS1 # # Copyright (C) 2009 Jon Masters# # Distributed under GNU General Public License version 2. # X10_FC_PORT="/dev/ttyS1" X10_BR_COMMAND="/usr/bin/br --port $X10_FC_PORT" # e.g. TARGETS=("device1" "device2"...) TARGETS=("device1") # e.g. MODULES=("A1" "A2"...) MODULES=("A1") TARGET="$1" COMMAND="$2" x10_set_module_state() { module=$1 state=$2 if [ "xon" == "x$state" ] then $X10_BR_COMMAND $module on else if [ "xoff" == "x$state" ] then $X10_BR_COMMAND $module off fi fi } x10_set_module_state_all() { state=$1 for ((i=0;i< $((${#TARGETS[@]}));i++)); do echo "setting module ${TARGETS[${i}]} to $state" x10_set_module_state ${MODULES[${i}]} $state echo "waiting for module ${TARGETS[${i}]} to settle" usleep 500000 done } in_array() { haystack=( "$@" ) haystack_size=( "${#haystack[@]}" ) needle=${haystack[$((${haystack_size}-1))]} for ((i=0;i<$(($haystack_size-1));i++)); do h=${haystack[${i}]}; [ "x$h" == "x$needle" ] && return $i done return 255 } if [ "x$TARGET" == "x" ] || [ "x$COMMAND" == "x" ]; then echo "Usage: ippower | " echo "" echo "TARGETS: ${TARGETS[@]}" echo "COMMANDS: on off" echo "" exit 1 fi if [ "xall" == "x$TARGET" ] then if [ "xon" == "x$COMMAND" ] then echo "turning on all modules" x10_set_module_state_all on elif [ "xoff" == "x$COMMAND" ] then echo "turning off all modules" x10_set_module_state_all off fi else in_array "${TARGETS[@]}" "$TARGET"; item=$? if [ 255 -ne $item ] then MODULE="${MODULES[$item]}" #echo "TARGET: $TARGET" #echo "MODULE: $MODULE" if [ "xon" == "x$COMMAND" ] then x10_set_module_state $MODULE on echo "requested module $TARGET on" elif [ "xoff" == "x$COMMAND" ] then x10_set_module_state $MODULE off echo "requested module $TARGET off" fi else echo "Unknown target: $TARGET" fi fi
Jon.