This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Rudimentary telnet control over Pioneer AVR Receiver
#1
Music 
I thought I'd share this work in progress. I am an amateur both in Lua and in KNX... so take with a huge grain of salt. 

All it does is open a socket to a defined IP and Port and send a telnet command... then add an "Enter"... then wait for an answer. It closes right after that, as the Pioneer does not like more than one telnet connection at a time and I don't want to hog the port.

Copy this code into a user library. I called mine user.telnet

Code:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
--Sends a single telnet command to a host and port --it returns one line answer function telnetsend(host, port, command)  nextline = '\r\n'  local socket = require("socket")  local tcp = assert(socket.tcp())  res, err = tcp:connect(host, port)  res, err = tcp:send(command .. nextline)  local answer = tcp:receive('*l')  tcp:close()  return answer end --Sets the volume to a numeric value --takes into account, that Pioneer increments the volume in --2 step intervals. Takes a host ip and port as input. function setvolume(host, port, volumelevel)  local currentvolume = getvolume(host, port)  if volumelevel > currentvolume then    for i = currentvolume, volumelevel -1, 2 do      telnetsend(host,port,VOLUME_UP)    end  else    for i = volumelevel, currentvolume-1, 2 do      telnetsend(host,port,VOLUME_DOWN)    end  end    currentvolume = getvolume(host, port)  return currentvolume end --Returns the current volume function getvolume(host, port)    local currentvolume = tonumber(string.sub(telnetsend(host,port,VOLUME_QUERY), 5))  return currentvolume   end --Turns reciever on off function soundonoff(host, port, onoff)  if onoff == true then    telnetsend(host,port,POWER_ON)    local status = telnetsend(host,port,POWER_QUERY)    if status == POWER_ONSTATE then      return true    else      alert("Could not turn on sound")    end      else    telnetsend(host,port,POWER_OFF)    local status = telnetsend(host,port,POWER_QUERY)    if status == POWER_OFFSTATE then      return false    else      alert("Could not turn off sound")    end  end end


and put this code into a separate user.script. I called mine user.pioneer

All it does is define a huge amount of variables with the correct telnet commands for the Pioneer avr 529 I have. Change, reduce as needed. There are most probably errors in the codes, as these where copied and pasted from around the web.

Code:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
   -- Main zone       POWER_ON="PO"       POWER_OFF="PF"    POWER_QUERY="?P"    POWER_ONSTATE="PWR2"    POWER_OFFSTATE="PWR0"        -- Volume    VOLUME_UP="VU"    VOLUME_DOWN="VD"    VOLUME_QUERY="?V"    VOLUME_SET="VL"        -- Mute    MUTE=    "MO"    UNMUTE=    "MF"    MUTE_QUERY="?M"    -- Source / Input channel    SOURCE_QUERY="?F"    SOURCE_UP=    "FU"    SOURCE_DOWN="FD"    SOURCE_SET=    "%02dFN"    SOURCE_DVD=    "04FN"    SOURCE_BD=    "25FN"    SOURCE_TVSAT="05FN"    SOURCE_DVR_BDR="15FN"    SOURCE_VIDEO1="10FN"    SOURCE_VIDEO2="14FN"    SOURCE_HDMI1="19FN"    SOURCE_HDMI2="20FN"    SOURCE_HDMI3="21FN"    SOURCE_HDMI4="22FN"    SOURCE_HDMI5="23FN"    SOURCE_HMG=    "26FN"    SOURCE_IPOD_USB="17FN"    SOURCE_XMRADIO="18FN"    SOURCE_CD="01FN"    SOURCE_CDR_TAPE="03FN"    SOURCE_TUNER="02FN"    SOURCE_PHONO="00FN"    SOURCE_MULTICH_IN="12FN"    SOURCE_ADAPTER_PORT="33FN"    SOURCE_HDMI_CYCL="31FN"        -- Listening mode    LISTENING_MODE="%04dSR"     LISTENING_MODE_QUERY="?L"          -- tone control     TONE_ON="TO1"     TONE_BYPASS="TO0"     TONE_QUERY="?TO"         -- bass control     BASS_INCREMENT="BI"     BASS_DECREMENT="BD"     BASS_QUERY="?BA"          -- treble control     TREBLE_INCREMENT="TI"     TREBLE_DECREMENT="TD"     TREBLE_QUERY="?TR"          -- Speaker configuration     SPEAKERS="%01dSPK"     SPEAKERS_OFF="0SPK"     SPEAKERS_A="1SPK"     SPEAKERS_B="2SPK"     SPEAKERS_A_B="3SPK"          -- HDMI outputs configuration     HDMI_OUTPUT="%01dHO"     HDMI_OUT_ALL="0HO"     HDMI_OUT_1="1HO"     HDMI_OUT_2="2HO"          -- HDMI audio configuration     HDMI_AUDIO_AMP="0HA"     HDMI_AUDIO_THROUGH="1HA"          -- PQLS setting     PQLS_OFF="0PQ"     PQLS_AUTO="1PQ"          -- Zone 2 control     ZONE2_POWER_ON=        "APO"     ZONE2_POWER_OFF="APF"     ZONE2_POWER_QUERY="?AP"     ZONE2_INPUT="%02dZS"     ZONE2_INPUT_DVD="04ZS"     ZONE2_INPUT_TV_SAT="05ZS"     ZONE2_INPUT_DVR_BDR="15ZS"     ZONE2_INPUT_VIDEO1="10ZS"     ZONE2_INPUT_VIDEO2="14ZS"     ZONE2_INPUT_HMG="26ZS"     ZONE2_INPUT_IPOD="17ZS"     ZONE2_INPUT_XMRADIO="18ZS"     ZONE2_INPUT_CD=    "01ZS"     ZONE2_INPUT_CDR_TAPE="03ZS"     ZONE2_INPUT_TUNER="02ZS"     ZONE2_INPUT_ADAPTER="33ZS"     ZONE2_INPUT_SIRIUS="27ZS"     ZONE2_INPUT_QUERY="?ZS"     ZONE2_VOLUME_UP="ZU"     ZONE2_VOLUME_DOWN="ZD"     ZONE2_VOLUME=    "%02ZV",    "ZV"     ZONE2_VOLUME_QUERY="?ZV"     ZONE2_MUTE=        "Z2MO"     ZONE2_UNMUTE=    "Z2MF"     ZONE2_MUTE_QUERY="?Z2M"          -- zone 3 control     ZONE3_POWER_ON=        "BPO"     ZONE3_POWER_OFF="BPF"     ZONE3_POWER_QUERY="?BP"     ZONE3_INPUT="%02dZT"     ZONE3_INPUT_DVD="04ZT"     ZONE3_INPUT_TV_SAT="05ZT"     ZONE3_INPUT_DVR_BDR="15ZT"     ZONE3_INPUT_VIDEO1="10ZT"     ZONE3_INPUT_VIDEO2="14ZT"     ZONE3_INPUT_HMG="26ZT"     ZONE3_INPUT_IPOD="17ZT"     ZONE3_INPUT_XMRADIO="18ZT"     ZONE3_INPUT_CD=    "01ZT"     ZONE3_INPUT_CDR_TAPE="03ZT"     ZONE3_INPUT_TUNER="02ZT"     ZONE3_INPUT_ADAPTER="33ZT"     ZONE3_INPUT_SIRIUS="27ZT"     ZONE3_INPUT_QUERY="?ZT"     ZONE3_VOLUME_UP="YU"     ZONE3_VOLUME_DOWN="YD"     ZONE3_VOLUME=    "%02YV"     ZONE3_VOLUME_QUERY="?YV"     ZONE3_MUTE=        "Z3MO"     ZONE3_UNMUTE=    "Z3MF"     ZONE3_MUTE_QUERY="?Z3M"          -- radio tuner     TUNER_FREQ_INCREMENT="TFI"     TUNER_FREQ_DECREMENT="TFD"     TUNER_FREQ_QUERY_AM="?FR"     TUNER_FREQ_QUERY_FM="?FR"     TUNER_BAND=        "TB"     TUNER_PRESET=    "%01dTP"     TUNER_CLASS=    "TC"     TUNER_PRESET_INCREMENT="TPI"     TUNER_PRESET_DECREMENT="TPD"     TUNER_PRESET_QUERY="?TP"          -- iPod control     IPOD_PLAY=            "00IP"     IPOD_PAUSE=        "01IP"     IPOD_STOP=            "02IP"     IPOD_PREVIOS=        "03IP"     IPOD_NEXT=            "04IP"     IPOD_REV=            "05IP"     IPOD_FWD=            "06IP"     IPOD_REPEAT=        "07IP"     IPOD_SHUFFLE=        "08IP"     IPOD_DISPLAY=        "09IP"     IPOD_CONTROL=        "10IP"     IPOD_CURSOR_UP=    "13IP"     IPOD_CURSOR_DOWN="14IP"     IPOD_CURSOR_LEFT="15IP"     IPOD_CURSOR_RIGHT="16IP"     IPOD_ENTER=        "17IP"     IPOD_RETURN=        "18IP"     IPOD_TOP_MENU=        "19IP"     IPOD_KEY_OFF=        "KOF"          ADAPTER_PLAY_PAUSE="20BT"     ADAPTER_PLAY="10BT"     ADAPTER_PAUSE="11BT"     ADAPTER_STOP="12BT"     ADAPTER_PREVIOUS="13BT"     ADAPTER_NEXT="14BT"     ADAPTER_REV="15BT"     ADAPTER_FWD="16BT"        -- Home Media Gateway (HMG) control    HMG_NUMKEY="%02dNW"    HMG_NUMKEY_0="00NW"    HMG_NUMKEY_1="01NW"    HMG_NUMKEY_2="02NW"    HMG_NUMKEY_3="03NW"    HMG_NUMKEY_4="04NW"    HMG_NUMKEY_5="05NW"    HMG_NUMKEY_6="06NW"    HMG_NUMKEY_7="07NW"    HMG_NUMKEY_8="08NW"    HMG_NUMKEY_9="09NW"    HMG_PLAY="10NW"    HMG_PAUSE="11NW"    HMG_PREV="12NW"    HMG_NEXT="13NW"    HMG_DISPLAY="18NW"    HMG_STOP="20NW"    HMG_UP=    "26NW"    HMG_DOWN="27NW"    HMG_RIGHT="28NW"    HMG_LEFT="29NW"    HMG_ENTER="30NW"    HMG_RETURN="31NW"    HMG_PROGRAM="32NW"    HMG_CLEAR="33NW"    HMG_REPEAT="34NW"    HMG_RANDOM="35NW"    HMG_MENU="36NW"    HMG_EDIT="37NW"    HMG_CLASS="38NW"        -- display info text    DISPLAY_INFO_QUERY="?FL"

Lastly call the above user libraries from a KNX object like the following:

Code:
12345
require('user.telnet') require('user.pioneer') --we write the returned set volume to the status object grp.write('11/2/2', soundonoff('192.168.0.24',8102,event.getvalue()))

The 11/2/2 Object is the status object, that gets written with the return value of soundonoff.
Reply


Forum Jump: