As a reference for anyone trying to figure out a way to control their AVR, I just thought I'd post my very ugly, unfinished proof of concept...
You can use it to control your TX-NR609 (or 509/709/etc.) with a simple bash script on a Linux (or any unix system with a bash like shell and netcat (nc)) system.
I might look around for a basic Android tablet though... :P
Code:
#!/bin/bash
#
# Simple script to control my Onkyo TX-NR609 from any linux host
# using just bash (or sh) and netcat (nc), works on my Nokia N900.
# Set the IP and PORT of your AVR
IP=192.168.1.132
PORT=60128
########################################
if [ $# -lt 1 ]; then
echo "$0 mute, unmute, off, on, vup, vdown, ..."
exit 1
fi
# Command to send:
for i in "$@";
do
case $i in
forcemute)
COMMAND='!1AMT01'
echo "Muting"
;;
forceunmute)
COMMAND='!1AMT00'
echo "Unmuting"
;;
mute)
COMMAND='!1AMTTG'
echo "Toggling Mute"
;;
mutestat)
COMMAND='!1AMTQSTN'
echo "Mute Status"
;;
off)
COMMAND='!1PWR00'
echo "Power off"
;;
on)
COMMAND='!1PWR01'
echo "Power on"
;;
vup)
COMMAND='!1MVLUP'
echo "Volume up"
;;
vdown)
COMMAND='!1MVLDOWN'
echo "Volume down"
;;
pwrstat)
COMMAND='!1PWRQSTN'
echo "Power Status"
;;
z2on)
COMMAND='!1ZPW01'
echo "Zone 2 on"
;;
z2off)
COMMAND='!1ZPW00'
echo "Zone 2 off"
;;
z2stat)
COMMAND='!1ZPWQSTN'
echo "Zone 2 Status"
;;
z2vdown)
COMMAND='!1ZVLDOWN'
echo "Zone 2 Volume Down"
;;
z2vup)
COMMAND='!1ZVLUP'
echo "Zone 2 Volume Up"
;;
z2vstat)
COMMAND='!1ZVLQSTN'
echo "Zone 2 Volume Stat"
;;
*)
echo "$0 mute, unmute, off, on, vup, vdown, ..."
exit 1
;;
esac
############
# String to send is :
ISCP="ISCP\\x00\\x00\\x00\\x10\\x00\\x00\\x00"
LENGTH=$(echo "\\x$(printf "%0.2x" $(echo $COMMAND | wc -c ))")
MID="\\x01\\x00\\x00\\x00"
CMD=${COMMAND} # Just to show the command's structure. :-P
END="\\x0D"
##########
# Mute example :
# echo -e 'ISCP\\x00\\x00\\x00\\x10\\x00\\x00\\x00\\x08\\x01\\x00\\x00\\x00!1AMT00\\x0D' | nc $IP $PORT
# (-i 1) allows you to get the status information sent back, not used at the moment...
echo -en "${ISCP}${LENGTH}${MID}${CMD}${END}" | nc -i 1 $IP $PORT
# A little pause if more than one argument is used, you can't send commands too quickly it seems!
if [ $# -gt 1 ] ; then
sleep 1;
fi
done