Can it!!! The "incessant logs" are the only reason that you have a working driver available to you!!!
BTW... @albertsmark Thanks!!
Can it!!! The "incessant logs" are the only reason that you have a working driver available to you!!!
BTW... @albertsmark Thanks!!
new version...
/**
* Sharp Aquos TV for Hubitat
* Works on Sharp TVs
* asynchronous, polling control of most Sharp TVs made from 2010 through 2015
*
* VERY losely based on: https://github.com/halkeye/sharp.aquos.devicetype.groovy
* Modified for Hubitat by CybrMage
*/
def version() {return "v0.29"}
import groovy.transform.Field
@Field static java.util.concurrent.Semaphore mutex = new java.util.concurrent.Semaphore(1)
@Field static volatile String currentHandler = "parse"
@Field static volatile String tv_channel_DC2U = ""
@Field static volatile String tv_channel_DC2L = ""
@Field static volatile String tv_channel_DC10 = ""
@Field static volatile String tv_channel_DC11 = ""
@Field static volatile Integer SequenceNumber = 0
@Field static volatile Integer ParseSequence = 0
@Field static volatile Long LastMutex = 0
preferences {
input("destIp", "text", title: "IP", description: "The IP Address of the Sharp TV",required:true)
input("destPort", "number", title: "Port", description: "The IP port of the Sharp TV", required:true)
input("login", "text", title: "Login", description: "The login username")
input("password", "password", title: "Password", description: "The login password")
input ("logDebug", "bool", title: "Enable debug logging", defaultValue: true)
def pollTime = [:]
pollTime << ["1" : "Retry every minute"]
pollTime << ["5" : "Retry every 5 minutes"]
pollTime << ["10" : "Retry every 10 minutes"]
pollTime << ["15" : "Retry every 15 minutes"]
pollTime << ["30" : "Retry every 30 minutes"]
pollTime << ["60" : "Retry every 1 hour"]
input ("pollRate", "enum", title: "Device poll rate", options: pollTime, defaultValue: "5")
// input("altMUTE", "bool", title: "Use alternate MUTE method", description: "(enable if MUTE/UNMUTE do not work)", defaultValue: false)
}
metadata {
definition (name: "Sharp Aquos TV", namespace: "SharpAquos", author: "various") {
capability "Actuator"
capability "AudioVolume"
// capability "TV"
capability "Initialize"
capability "Switch"
capability "Refresh"
attribute "input", "string"
attribute "inputName", "string"
attribute "3DMode", "string"
attribute "3DModeName", "string"
attribute "SleepTimer", "string"
attribute "SleepTimerSetting", "string"
attribute "ViewMode", "string"
attribute "ViewModeName", "string"
attribute "SurroundMode", "string"
attribute "SurroundModeName", "string"
attribute "VideoMode", "string"
attribute "VideoModeName", "string"
attribute "channel_type", "string"
attribute "channel_source", "string"
attribute "channel", "string"
command "channelUp"
command "channelDown"
// command "on"
// command "off"
command "toggleMute"
// command "mute"
// command "unmute"
command "set3DMode", [[name:"3D Mode", type: "ENUM", description: "Select a 3D Mode", constraints: getvalid3DModes()]]
command "setSleepTimer", [[name:"Sleep Timer Setting", type: "ENUM", description: "Set a Sleep Timer", constraints: getvalidSleepTimes()]]
command "setViewMode", [[name: "View Mode ID*", type: "NUMBER"]]
command "setSurroundMode", [[name: "Surround Mode ID*", type: "NUMBER"]]
command "setVideoMode", [[name: "AV Mode ID*", type: "NUMBER"]]
command "inputNext"
command "inputSelect", [[name: "Input ID*", type: "NUMBER"]]
command "inputRemoteCommand", [[name: "Remote Control Command ID*", type: "NUMBER"]]
command "setChannel", [[name:"ChannelType", type: "ENUM", description: "Select channel Type", constraints: ["Analog","Digital"]],[name:"ChannelSource", type: "ENUM", description: "Select channel Source", constraints: ["Air","Cable"]],[name:"ChannelID", type:"STRING"]]
command "testParse", [[name: "Handler*", type:"STRING"],[name: "Data*", type: "STRING"]]
command "testCommand", [[name: "CMD*", type:"STRING"],[name: "PARAM*", type: "STRING"]]
// command "volumeUp"
// command "volumeDown"
}
}
def refresh() {
getDeviceState()
}
def initialize() {
log_debug "initialize - Driver " + version()
unschedule()
mutex.release()
closeSocket()
pauseExecution(500)
if ((destIp == null)||(destIp == "")) {
log_debug "Initialize error. TV IP Address not set"
return
}
if ((destPort == null)||(destPort == "")) {
log_debug "request error. TV IP Port not set"
return
}
pollRate = pollRate ?: "5"
log_debug "initialize - IP: ${destIp} PORT: ${destPort} USER: ${login} PASS: ${password} Poll Rate: ${pollRate}"
currentHandler = "parse"
// set the deviceNetworkIdentifier. Ideally, this should be the MAC address of the device
// If the MAC can not be determined, use the IP address
def TVmac = null
def macTries = 0
while ((macTries < 5) && (TVmac == null)) {
macTries++
TVmac = getMACFromIP(destIp)
if (TVmac == null) {
log_debug "initialize - TV mac address not yet available. Retry in 1 second."
pauseExecution(1000)
}
}
if (TVmac != null) {
device.deviceNetworkId = "$TVmac"
} else {
device.deviceNetworkId = convertIPtoHex(destIp)
}
log_debug "initialize - Set DNI = [${device.deviceNetworkId}]"
if (openSocket() == false) {
log_debug "initialize - Could not connect to TV. Retry pending"
runIn(60,"initialize")
return
}
switch(pollRate) {
case "1" :
runEvery1Minute("getDeviceState")
log_debug("initialize - Poll Rate to every 1 minute")
break
case "5" :
runEvery5Minutes("getDeviceState")
log_debug("initialize - Poll Rate set to every 5 minutes")
break
case "10" :
runEvery10Minutes("getDeviceState")
log_debug("initialize - Poll Rate set to every 10 minutes")
break
case "15" :
runEvery15Minutes("getDeviceState")
log_debug("initialize - Poll Rate set to every 15 minutes")
break
case "30" :
runEvery30Minutes("getDeviceState")
log_debug("initialize - Poll Rate set to every 30 minutes")
break
case "60" :
runEvery1hour("getDeviceState")
log_debug("initialize - Poll Rate set to every 1 hour")
break
}
request("RSPW","2")
getDeviceState()
}
def closeSocket() {
log_debug("closeSocket: Socket close requested.")
state.socketState = "closing"
interfaces.rawSocket.close()
state.socketState = "closed"
pauseExecution(1000)
mutex.release()
log_debug("closeSocket: Socket closed.")
}
def openSocket() {
if (state.socketState == "open") {
log_debug("openSocket: Socket already opened.")
return true
}
log_debug("openSocket: Connecting to ${destIp}:${destPort}")
try {
interfaces.rawSocket.connect(destIp,destPort as int, readDelay: 50)
pauseExecution(1000)
state.socketState = "open"
log_debug("openSocket: Socket opened.")
return true
}
catch(e) {
log_debug("openSocket: exception = [${e}]")
state.socketState == "closed"
return false
}
}
def updated() {
log_debug "updated - IP: ${destIp} PORT: ${destPort} USER: ${login} PASS: ${password}"
initialize()
}
def installed() {
log_debug "installed"
}
// global constants
def getvalidSleepTimes() {
return [
0: "Off",
1: "30 Minutes",
2: "60 Minutes",
3: "90 Minutes",
4: "120 Minutes"
]
}
def getvalid3DModes() {
return [
0: "3D Off",
1: "2D to 3D",
2: "SBS",
3: "TAB",
4: "3D to 2D (SBS)",
5: "3D to 2D (TAB)",
6: "3D auto",
7: "2D auto"
]
}
def getvalidViewModes() {
return [
1: "Side Bar",
2: "S.Stretch",
3: "Zoom",
4: "Stretch",
5: "Normal [PC]",
6: "Zoom [PC]",
7: "Stretch [PC]",
8: "Dot by Dot",
9: "Full Screen",
10: "Auto",
11: "Original"
]
}
def getvalidSurroundModes() {
return [
1: "Normal (On)",
2: "Off",
4: "3D Hall",
5: "3D Movie",
6: "3D Standard",
7: "3D Stadium"
]
}
def getvalidVideoModes() {
return [
1: "STANDARD",
2: "MOVIE",
3: "GAME",
4: "USER",
5: "DYNAMIC (Fixed)",
6: "DYNAMIC",
7: "PC",
8: "x.v.Color",
14: "STANDARD (3D)",
15: "MOVIE (3D)",
16: "GAME (3D)",
100: "AUTO"
]
}
// NOTE: valid inputs based on LE84x/LE74x models.
// They may need to be modified to reflect the inputs on other models
def getvalidInputs() {
return [
0: "TV",
1: "HDMI IN 1",
2: "HDMI IN 2",
3: "HDMI IN 3",
4: "HDMI IN 4",
5: "COMPONENT",
6: "VIDEO 1",
7: "VIDEO 2",
8: "PC IN"
]
}
def getvalidRemoteCommands() {
return [
0: "0",
1: "1",
2: "2",
3: "3",
4: "4",
5: "5",
6: "6",
7: "7",
8: "8",
9: "9",
10: ".",
11: "ENT",
12: "POWER",
13: "DISPLAY",
14: "POWER (SOURCE)",
15: "REWIND",
16: "PLAY",
17: "FAST FORWARD",
18: "PAUSE",
19: "SKIP BACK",
20: "STOP",
21: "SKIP FORWARD",
22: "REC",
23: "OPTION",
24: "SLEEP",
27: "CC",
28: "AV MODE",
29: "VIEW MODE",
30: "FLASHBACK",
31: "MUTE",
32: "VOL -",
33: "VOL +",
34: "CH Up",
35: "CH Down",
36: "INPUT",
38: "MENU",
39: "SmartCentral",
40: "ENTER",
41: "UP",
42: "DOWN",
43: "LEFT",
44: "RIGHT",
45: "RETURN",
46: "EXIT",
47: "FAVORITE CH",
48: "3D Surround",
49: "AUDIO",
50: "A (red)",
51: "B (green)",
52: "C (blue)",
53: "D (yellow)",
54: "FREEZE",
55: "FAV APP 1",
56: "FAV APP 2",
57: "FAV APP 3",
58: "3D",
59: "NETFLIX",
60: "AAL",
61: "MANUAL"
]
}
// This is the primary parser for the device responses
def parse(String rawData) {
def PID = ParseSequence++
log_debug("parse ${PID} - RAW DATA [${rawData}] HANDLER [${currentHandler}]")
if ((rawData == null) || (rawData == "")) {
log_debug "parse ${PID} - command response 'NULL'"
// release the mutex on error
releaseMutex()
return
}
if (rawData == "4552520D") {
// received 'ERR' response...
log_debug "parse ${PID} - command response [ERR]"
releaseMutex(PID)
return
} else if (rawData == "4F4B0D") {
// received 'OK' response...
if (currentHandler == "parse") {
log_debug "parse ${PID} - command response [OK]"
releaseMutex(PID)
return
} else {
log_debug "parse ${PID} - command response [OK] - data pending"
return
}
} else if (rawData.take(6) == "4F4B0D") {
while (rawData.take(6) == "4F4B0D") {
rawData = rawData.substring(6)
}
}
log_debug "parse ${PID} - Processing DATA [${rawData}] HANDLER [${currentHandler}]"
def resp = new String(hubitat.helper.HexUtils.hexStringToByteArray(rawData))
if ((resp == null) || (resp == "")) {
log_debug "parse ${PID} - Could not decode command response [${rawData}]"
// release the mutex on error
releaseMutex(PID)
return
}
resp = resp.tokenize("\r")
if ((resp != null) && (resp[0] != "")) {
log_debug "parse ${PID} - command response [${resp}] - handler [${currentHandler}]"
if ((resp != null) && (resp != "") && (resp.size() > 0)) {
if (currentHandler == "parseVolume") parseVolume(resp[0])
if (currentHandler == "parseMute") parseMute(resp[0])
if (currentHandler == "parsePower") parsePower(resp[0])
if (currentHandler == "parseInput") parseInput(resp[0])
if (currentHandler == "parseViewMode") parseViewMode(resp[0])
if (currentHandler == "parseSurroundMode") parseSurroundMode(resp[0])
if (currentHandler == "parseVideoMode") parseVideoMode(resp[0])
if (currentHandler == "parse3DMode") parse3DMode(resp[0])
if (currentHandler == "parseSleepTimer") parseSleepTimer(resp[0])
if (currentHandler == "parseDCCH") parseDCCH(resp[0])
if (currentHandler == "parseDA2P") parseDA2P(resp[0])
if (currentHandler == "parseDC2U") parseDC2U(resp[0])
if (currentHandler == "parseDC2L") parseDC2L(resp[0])
if (currentHandler == "parseDC10") parseDC10(resp[0])
if (currentHandler == "parseDC11") parseDC11(resp[0])
if (currentHandler == "parse") {
log_debug "parse ${PID}- Could not process command response [${resp}]"
}
}
} else {
log_debug "parse ${PID} - Could not decode command response [${resp}]"
}
// release the mutex on completion
releaseMutex(PID)
}
def parseVolume(resp) {
log_debug "parseVolume - response '${resp}'"
def VOLdata = resp.toInteger()
sendEvent(name: "volume", value: VOLdata ?: 0)
log_debug "parseVolume - SET - volume [${VOLdata ?: 0}]"
}
def parseMute(resp) {
log_debug "parseMute - response '${resp}'"
def MUTEdata = resp.toInteger()
def val = (MUTEdata == 2) ? "unmuted" : "muted"
sendEvent(name: "mute", value: val)
log_debug "parseMute - SET - mute [${val}]"
}
def parsePower(resp) {
log_debug "parsePower - response '${resp}'"
def POWRdata = resp.toInteger()
def val = (POWRdata == 1) ? "on" : "off"
sendEvent(name: "power", value: val)
sendEvent(name: "switch", value: val)
log_debug "parsePower - SET - power [${val}]"
}
def parseInput(resp) {
log_debug "parseInput - response '${resp}'"
val = resp.toInteger()
if ((val != null) && (validInputs[val] != null)) {
sendEvent(name: "input", value: val)
sendEvent(name: "inputName", value: validInputs[val])
log_debug "parseInput - SET - input [${val}] InputName [${validInputs[val]}]"
} else {
log_debug "parseInput - ERROR - Invalid Input [${val}]"
}
}
def parse3DMode(resp) {
log_debug "parse3DMode - response '${resp}'"
val = resp.toInteger()
if ((val != null) && (valid3DModes[val] != null)) {
sendEvent(name: "3DMode", value: val)
sendEvent(name: "3DModeName", value: valid3DModes[val])
log_debug "parse3DMode - SET - 3DMode [${val}] 3DModeName [${valid3DModes[val]}]"
} else {
log_debug "parse3DMode - ERROR - Invalid 3DMode [${val}]"
}
}
def parseSleepTimer(resp) {
log_debug "parseSleepTimer - response '${resp}'"
val = resp.toInteger()
if ((val != null) && (validSleepTimes[val] != null)) {
sendEvent(name: "SleepTimer", value: val)
sendEvent(name: "SleepTimerSetting", value: validSleepTimes[val])
log_debug "parseSleepTimer - SET - SleepTimer [${val}] SleepTimerSetting [${validSleepTimes[val]}]"
} else {
log_debug "parseSleepTimer - ERROR - Invalid SleepTimer [${val}]"
}
}
def parseViewMode(resp) {
log_debug "parseViewMode - response '${resp}'"
val = resp.toInteger()
if ((val != null) && (validViewModes[val] != null)) {
sendEvent(name: "ViewMode", value: val)
sendEvent(name: "ViewModeName", value: validViewModes[val])
log_debug "parseViewMode - SET - ViewMode [${val}] ViewModeName [${validViewModes[val]}]"
} else {
log_debug "parseViewMode - ERROR - Invalid ViewMode [${val}]"
}
}
def parseSurroundMode(resp) {
log_debug "parseSurround - response '${resp}'"
val = resp.toInteger()
if ((val != null) && (validSurroundModes[val] != null)) {
sendEvent(name: "SurroundMode", value: val)
sendEvent(name: "SurroundModeName", value: validSurroundModes[val])
log_debug "parseSurroundMode - SET - SurroundMode [${val}] SurroundModeName [${validSurroundModes[val]}]"
} else {
log_debug "parseSurroundMode - ERROR - Invalid SurroundMode [${val}]"
}
}
def parseVideoMode(resp) {
log_debug "parseVideoMode - response '${resp}'"
val = resp.toInteger()
if ((val != null) && (validVideoModes[val] != null)) {
sendEvent(name: "VideoMode", value: val)
sendEvent(name: "VideoModeName", value: validVideoModes[val])
log_debug "parseVideoMode - SET - VideoMode [${val}] VideoModeName [${validSurroundModes[val]}]"
} else {
log_debug "parseVideoMode - ERROR - Invalid VideoMode [${val}]"
}
}
def parseDCCH(resp) {
log_debug "parseDCCH - response '${resp}'"
sendEvent(name: "channel_type", value: "Analog")
sendEvent(name: "channel_source", value: "Air/Cable")
sendEvent(name: "channel", value: resp)
log_debug "parseDCCH - SET - channel_type [Analog] channel_source [Air/Cable] channel [${resp}]"
}
def parseDA2P(resp) {
// TV returns channel data in a different format than required to set the channel...
log_debug "parseDA2P - response '${resp}'"
sendEvent(name: "channel_type", value: "Digital")
sendEvent(name: "channel_source", value: "Air")
// def channel = resp.tokenize(".")
// def chMajor = chnl[0].toInteger()
// def chMinor = chnl[1].toInteger()
// def channel = chMajor.toString() + "." + chMinor.toString()
sendEvent(name: "channel", value: resp)
log_debug "parseDA2P - SET - channel_type [Digital] channel_source [Air] channel [${resp}]"
}
def parseDC2U(resp) {
log_debug "parseDC2U - response '${resp}'"
sendEvent(name: "channel_type", value: "Digital")
sendEvent(name: "channel_source", value: "Cable")
tv_channel_DC2U = resp.toInteger()
def channel = resp.toInteger().toString() + ".0"
sendEvent(name: "channel", value: channel)
log_debug "parseDC2U - SET - channel_type [Digital] channel_source [Air] channel [${channel}]"
}
def parseDC2L(resp) {
log_debug "parseDC2L - response '${resp}'"
sendEvent(name: "channel_type", value: "Digital")
sendEvent(name: "channel_source", value: "Cable")
tv_channel_DC2L = resp.toInteger()
def channel = tv_channel_DC2U + "." + tv_channel_DC2L
sendEvent(name: "channel", value: channel)
log_debug "parseDC2L - SET - channel_type [Digital] channel_source [Air] channel [${channel}]"
}
def parseDC10(resp) {
log_debug "parseDC10 - response '${resp}'"
sendEvent(name: "channel_type", value: "Digital")
sendEvent(name: "channel_source", value: "Cable")
tv_channel_DC10 = resp
def channel = (tv_channel_DC10 ?: "?") + resp.toInteger().toString()
sendEvent(name: "channel", value: channel)
log_debug "parseDC10 - SET - channel_type [Digital] channel_source [Air] channel [${channel}]"
}
def parseDC11(resp) {
log_debug "parseDC11 - response '${resp}'"
sendEvent(name: "channel_type", value: "Digital")
sendEvent(name: "channel_source", value: "Cable")
tv_channel_DC11 = resp
def channel = tv_channel_DC11 + (tv_channel_DC10 ?: "????")
sendEvent(name: "channel", value: channel)
log_debug "parseDC11 - SET - channel_type [Digital] channel_source [Air] channel [${channel}]"
}
def getDeviceState() {
log_debug("getDeviceState() Starting")
request("POWR","?","parsePower")
request("MUTE","?","parseMute")
request("VOLM","?","parseVolume")
request("IAVD","?","parseInput")
request("WIDE","?","parseViewMode")
request("ACSU","?","parseSurroundMode")
request("AVMD","?","parseVideoMode")
request("TDCH","?","parse3DMode")
request("OFTM","?","parseSleepTimer")
getChannelStatus()
log_debug("getDeviceState() Completed.")
}
def getChannelStatus() {
log_debug("getChannelStatus() Starting")
request("DCCH","?","parseDCCH")
request("DA2P","?","parseDA2P")
request("DC2U","?","parseDC2U")
request("DC2L","?","parseDC2L")
request("DC10","?","parseDC10")
request("DC11","?","parseDC11")
log_debug("getChannelStatus() Completed.")
}
// device commands
def setVolume(val) {
log_debug("setVolume(${val})")
if (val < 0) { val = 0 }
if (val > 60) { val = 60 }
val = sprintf("%d",val)
sendEvent(name: "mute", value: "unmuted")
sendEvent(name: "volume", value: val)
request("VOLM",val)
}
def toggleMute() {
log_debug("toggleMute()")
request("RCKY","31")
pauseExecution(250)
request("MUTE","?","parseMute")
log_debug("toggleMute() - completed")
}
def mute() {
def currentMute = device.latestValue("mute")
log_debug("mute() Currently: [${currentMute}]")
// if (currentMute == "muted") {
// log_debug("mute() - Already muted - command complete")
// return
// }
// if (altMUTE != true) {
request("MUTE","1")
// } else {
// request("RCKY","31")
// }
pauseExecution(250)
request("MUTE","?","parseMute")
log_debug("mute() - completed")
}
def unmute() {
def currentMute = device.latestValue("mute")
log_debug("unmute() Currently: [${currentMute}]")
// log_debug("unmute() Currently: [${currentMute}] altMUTE [${altMUTE}]")
// if (currentMute == "unmuted") {
// log_debug("unmute() - Already unmuted - command complete")
// return
// }
// if (altMUTE != true) {
request("MUTE","2")
// } else {
// request("RCKY","31")
// }
pauseExecution(250)
request("MUTE","?","parseMute")
log_debug("mute() - completed")
}
def volumeUp() {
log_debug("volumeUp()")
request("RCKY","33")
request("VOLM","?","parseVolume")
}
def volumeDown() {
log_debug("volumeDown()")
request("RCKY","32")
request("VOLM","?","parseVolume")
}
def inputNext() {
log_debug("inputNext()")
def current = device.currentValue("input")
def selectedInputs = ["1","2","3","4","5","6","7","8","1"]
def semaphore = 0
for(selectedInput in selectedInputs) {
if(semaphore == 1) {
return inputSelect(selectedInput)
}
if(current == selectedInput) {
semaphore = 1
}
}
return inputSelect(selectedInputs[0])
}
def inputRemoteCommand(cmd) {
log_debug("inputRemoteCommand(${cmd})")
def cmdInt = cmd.toInteger()
if ((cmdInt == null) || (validRemoteCommands[cmdInt] == null)) {
log_debug("inputRemoteCommand - invalid command (${cmd})")
}
log_debug("executing inputRemoteCommand('${validRemoteCommands[cmdInt]}')")
request("RCKY",cmdInt.toString())
}
def inputSelect(channel) {
log_debug("inputSelect(${channel})")
sendEvent(name: "input", value: channel)
if ((channel == 0) || (channel == "0")) {
// 0 = TV - not handled by IAVD command
request("ITVD","0", "parseInput")
} else {
request("IAVD",channel.toString(), "parseInput")
}
}
def on() {
log_debug("Turn on TV")
request("POWR","1")
request("POWR","?", "parsePower")
}
def off() {
log_debug("Turn off TV")
request("POWR","0")
request("POWR","?", "parsePower")
}
def channelUp() {
log_debug("Channel Up")
request("CHUP","0")
}
def channelDown() {
log_debug("Channel Down")
request("CHDW","0")
}
def set3DMode(Mode) {
def idx = null
getvalid3DModes().each { key, value -> if (value == Mode) idx = key }
log_debug("set3DMode(${Mode}) IDX: [${idx}]")
if (idx == null) {
log_debug("set3DMode(${Mode}) - ERROR - 3D Mode is not valid")
return
}
request("TDCH",idx.toString())
request("TDCH","?","parse3DMode")
}
def setSleepTimer(Mode) {
def idx = null
getvalidSleepTimes().each { key, value -> if (value == Mode) idx = key }
log_debug("setSleepTimer(${Mode}) IDX: [${idx}]")
if (idx == null) {
log_debug("setSleepTimer(${Mode}) - ERROR - Sleep Timer value is not valid")
return
}
request("OFTM",idx.toString())
request("OFTM","?","parseSleepTimer")
}
def setViewMode(Mode) {
log_debug("setViewMode(${Mode})")
if (validViewModes[Mode as int] == null) {
log_debug("setViewMode(${Mode}) - Invalid View mode ID")
return
}
log_debug("setViewMode - Setting view mode (${Mode} = ${validViewModes[Mode as int]}]")
request("WIDE",Mode.toString())
request("WIDE","?","parseViewMode")
}
def setSurroundMode(Mode) {
log_debug("setSurroundMode(${Mode})")
if (validSurroundModes[Mode as int] == null) {
log_debug("setSurroundMode(${Mode}) - Invalid Surround mode ID")
return
}
log_debug("setSurroundMode - Setting view mode (${Mode} = ${validSurroundModes[Mode as int]}]")
request("ACSU",Mode.toString())
request("ACSU","?","parseSurroundMode")
}
def setVideoMode(Mode) {
log_debug("setVideoMode(${Mode})")
if (validVideoModes[Mode as int] == null) {
log_debug("setVideoMode(${Mode}) - Invalid Video mode ID")
return
}
log_debug("setVideoMode - Setting video mode (${Mode} = ${validVideoModes[Mode as int]}]")
request("AVMD",Mode.toString())
request("AVMD","?","parseVideoMode")
}
def setChannel(String Type, String Source, String ID) {
log_debug("setChannel(\"${Type}\",\"${Source}\",\"${ID}\")")
def setID = null
try {
setID = ID.toFloat()
} catch(e) {
log_debug("setChannel - ERROR - Invalid channel Identifier")
return
}
if (Type == "Analog") {
// analog channel... Air = 2 - 69, cable = 1 - 135
try {
setID = ID.toInteger()
} catch(e) {
log_debug("setChannel - ERROR - Invalid channel Identifier for Analog channels")
return
}
if (Source == "Air") {
if ((setID < 2) || (setID > 69)) {
log_debug("setChannel - ERROR - Invalid channel Identifier for Analog Air channels")
return
}
} else {
if ((setID < 1) || (setID > 135)) {
log_debug("setChannel - ERROR - Invalid channel Identifier for Analog Cable channels")
return
}
}
request("DCCH",setID.toString())
} else {
if (Source == "Air") {
if (ID.length() == 4) {
def chanx = ID.substring(0,1)+"."+ID.substring(2,3)
ID = chanx
}
if (ID.contains(".")) {
def chan = ID.tokenize(".")
def chanMajor = chan[0].toInteger()
def chanMinor = chan[1].toInteger()
if ((chanMajor < 0) || (chanMajor > 99) || (chanMinor < 0) || (chanMinor > 99)) {
log_debug("setChannel - ERROR - Invalid channel Identifier for Digital Air channels")
return
}
setID = ("00"+chanMajor.toString()).substring(-2) + ("00"+chanMinor.toString()).substring(-2)
}
request("DA2P",setID)
} else {
// Digital cable channels
if (ID.contains(".")) {
// two part channel numbers
def chan = ID.tokenize(".")
def chanMajor = chan[0].toInteger()
def chanMinor = chan[1].toInteger()
if ((chanMajor < 0) || (chanMajor > 999) || (chanMinor < 0) || (chanMinor > 999)) {
log_debug("setChannel - ERROR - Invalid channel Identifier for Digital Cable channels")
return
}
setID = ("000" + chanMajor.toString()).reverse().take(3).reverse() + "." + ("000" + chanMinor.toString()).reverse().take(3).reverse()
request("DC2U",("000" + chanMajor.toString()).reverse().take(3).reverse())
request("DC2L",("000" + chanMinor.toString()).reverse().take(3).reverse())
} else {
// one part channel numbers
setID = ID.toInteger()
if (setID > 99999) {
log_debug("setChannel - ERROR - Invalid channel Identifier for Digital Cable channels")
return
}
if (setID < 10000) {
request("DC10",setID.toString())
request("DC11","0")
} else {
request("DC10",(setID.toString()).reverse().take(4).reverse())
request("DC11",(setID.toString()).take(1))
}
}
}
}
if (setID == null) {
log_debug("setChannel - ERROR Could not determine channels to set for [${Type}][${Source}][${ID}]")
return
}
log_debug("setChannel - Setting [${Type}][${Source}] Channel [${setID}]")
pauseExecution(250)
getChannelStatus()
}
// support functions
def testParse(String handler, String Response) {
log_debug "testParse - Handler '${handler}' [${Response}]"
currentHandler = handler
parse(Response)
}
def testCommand(String CMD, String PARAMS) {
log_debug "rawCommand - CMD [${CMD}] PARAMS [${PARAMS}]"
request(CMD,PARAMS)
}
def getMutex(Integer PId = null) {
def MaxMutexLock = 60
def permitTries = 0
def permit = false
def PID = (PId == null) ? "?"+(SequenceNumber-1).toString()+"?" : PId
if ((state.socketState == "closing") || (state.socketState == "closed")) {
log_debug("getMutex ${PID} - Failed to acquired mutex permit - socket closed")
return false
}
while ((permitTries < MaxMutexLock) && (permit == false)) {
permitTries++
permit = mutex.tryAcquire()
if (permit == false) {
if (permitTries == 1) {
log_debug("getMutex ${PID} - mutex permit not yet available. Waiting up to 60 seconds.")
def MutexLag = now() - LastMutex
if (MutexLag > (MaxMutexLock * 2)) {
log_debug("getMutex ${PID} - Detected stale mutex - forcing mutex release.")
mutex.release()
}
}
pauseExecution(1000)
}
}
if (permit) {
LastMutex = now()
log_debug("getMutex ${PID} - Acquired mutex permit")
} else {
log_debug("getMutex ${PID} - Failed to acquired mutex permit")
}
return permit
}
//def releaseMutex(Integer PId = null) {
// def PID = (PId == null) ? "?"+(SequenceNumber-1).toString()+"?" : PId
// log_debug("releaseMutex ${PID} - Released mutex permit")
// mutex.release()
//}
def releaseMutex(PId = null) {
def PID = (PId == null) ? "?"+(SequenceNumber-1).toString()+"?" : PId
log_debug("releaseMutex ${PID} - Released mutex permit")
mutex.release()
}
def request(String CMD, String Params , String callbackHandler = "parse") {
// block the thread if the mutex is locked
// def CR = "\r\n" // required for emulator
def CR = "\r" // required for actual TV
def PID = SequenceNumber++
if ((state.socketState == "closed") || (state.socketState == "closing")) {
log_debug("request - ERROR. TV connection is closed. Attempting reconnect.")
// release the mutex on error
releaseMutex()
if (openSocket() == false) {
log_debug("request - ERROR. Unable to reconnect to TV.")
return
}
}
if (getMutex(PID) == false) {
log_debug("request ${PID} - Socket [${state.socketState}] CMD [${CMD}] Params [${Params}] Handler [${callbackHandler}]")
log_debug("request ${PID} - ERROR. Unable to acquire mutex permit.")
return
}
log_debug("request ${PID} - Socket [${state.socketState}] CMD [${CMD}] Params [${Params}] Handler [${callbackHandler}]")
if (destIp == null) {
log_debug("request ${PID} - ERROR. TV IP Address not set")
// release the mutex on error
releaseMutex(PID)
}
def Credentials = ""
if (destPort == null) {
log_debug("request ${PID} - ERROR. TV IP Port not set")
// release the mutex on error
releaseMutex(PID)
return
}
if (login != null) {
if ((password == null) || (password == "")) {
log_debug("request ${PID} - ERROR. TV login username is set, so login password must also be set")
// release the mutex on error
releaseMutex(PID)
return
}
Credentials = login + "\r" + password + "\r"
}
CMD = CMD + " "
Params = Params + " "
def Command = Credentials + CMD.take(4) + Params.take(4)
currentHandler = callbackHandler
// log_debug("request - Trying raw socket...")
try {
log_debug("request ${PID} - request = [" + Command + "] to ${destIp}:${destPort}")
interfaces.rawSocket.sendMessage(Command + CR)
}
catch(e) {
log_debug("request - rawSocket - Caught exception '${e}'")
// release the mutex on error
releaseMutex(PID)
return
}
pauseExecution(250)
}
def socketStatus(String message) {
log_debug("socketStatus - Socket [${state.socketState}] Message [${message}]")
// error is implied - release any open mutex
releaseMutex()
if (state.socketState == "closed") { return }
switch(message) {
case "send error: Broken pipe (Write failed)":
state.socketState = "closed"
log_debug("socketStatus - Write Failed - Attempting reconnect")
openSocket()
return
break;
case "receive error: Stream closed.":
// if (state.socketState != "closing") {
// log_debug("socketStatus - Stream Closed - Attempting reconnect")
// return openSocket()
// }
state.socketState = "closed"
return
break;
case "send error: Socket closed":
state.socketState = "closed"
log_debug("socketStatus - Socket Closed - Attempting reconnect")
return openSocket()
break;
}
log_debug("socketStatus - UNHANDLED socket status [${message}]")
}
private log_debug(debugData) {
log.debug("SharpAquos - " + debugData)
}
private String convertIPtoHex(ipAddress) {
String hex = ipAddress.tokenize( '.' ).collect { String.format( '%02X', it.toInteger() ) }.join()
return hex
}
private String convertPortToHex(port) {
String hexport = port.toString().format( '%04X', port.toInteger() )
return hexport
}
Ha ha ha, ok, ok
Actually, I'm struggling to copy/paste it. This page keeps seizing up on my phone. Weird.
@cybrmage has done a masterful job in creating this driver, especially since he doesn't own a Sharp Aqua TV . I am sorry to everyone for the long logs, its the only way I know how let him now his progress. I will edit them down later when @cybrmage says its ok.
Having said that.........more logs of the install and initial save....
dev:8972019-12-14 01:04:50.051 am debugSharpAquos - getDeviceState() Completed.
dev:8972019-12-14 01:04:50.043 am debugSharpAquos - getChannelStatus() Completed.
dev:8972019-12-14 01:04:49.906 am debugSharpAquos - releaseMutex 617 - Released mutex permit
dev:8972019-12-14 01:04:49.902 am debugSharpAquos - parse 617 - command response [ERR]
dev:8972019-12-14 01:04:49.899 am debugSharpAquos - parse 617 - RAW DATA [4552520D] HANDLER [parseDC11]
dev:8972019-12-14 01:04:49.768 am debugSharpAquos - request 695 - request = [DC11? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:49.753 am debugSharpAquos - getMutex 695 - Acquired mutex permit
dev:8972019-12-14 01:04:49.742 am debugSharpAquos - request 695 - Socket [open] CMD [DC11] Params [?] Handler [parseDC11]
dev:8972019-12-14 01:04:49.658 am debugSharpAquos - releaseMutex 616 - Released mutex permit
dev:8972019-12-14 01:04:49.652 am debugSharpAquos - parse 616 - command response [ERR]
dev:8972019-12-14 01:04:49.648 am debugSharpAquos - parse 616 - RAW DATA [4552520D] HANDLER [parseDC10]
dev:8972019-12-14 01:04:49.566 am debugSharpAquos - releaseMutex 615 - Released mutex permit
dev:8972019-12-14 01:04:49.562 am debugSharpAquos - parse 615 - command response [ERR]
dev:8972019-12-14 01:04:49.558 am debugSharpAquos - parse 615 - RAW DATA [4552520D] HANDLER [parseDC10]
dev:8972019-12-14 01:04:49.486 am debugSharpAquos - request 694 - request = [DC10? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:49.468 am debugSharpAquos - getMutex 694 - Acquired mutex permit
dev:8972019-12-14 01:04:49.464 am debugSharpAquos - request 694 - Socket [open] CMD [DC10] Params [?] Handler [parseDC10]
dev:8972019-12-14 01:04:49.210 am debugSharpAquos - request 693 - request = [DC2L? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:49.202 am debugSharpAquos - getMutex 693 - Acquired mutex permit
dev:8972019-12-14 01:04:49.198 am debugSharpAquos - request 693 - Socket [open] CMD [DC2L] Params [?] Handler [parseDC2L]
dev:8972019-12-14 01:04:49.023 am debugSharpAquos - releaseMutex 614 - Released mutex permit
dev:8972019-12-14 01:04:49.020 am debugSharpAquos - parse 614 - command response [ERR]
dev:8972019-12-14 01:04:49.016 am debugSharpAquos - parse 614 - RAW DATA [4552520D] HANDLER [parseDC2U]
dev:8972019-12-14 01:04:48.942 am debugSharpAquos - request 692 - request = [DC2U? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:48.937 am debugSharpAquos - getMutex 692 - Acquired mutex permit
dev:8972019-12-14 01:04:48.933 am debugSharpAquos - request 692 - Socket [open] CMD [DC2U] Params [?] Handler [parseDC2U]
dev:8972019-12-14 01:04:48.893 am errorjava.lang.NumberFormatException: For input string: "7." on line 544 (parse)
dev:8972019-12-14 01:04:48.812 am debugSharpAquos - parseDA2P - response '7.1'
dev:8972019-12-14 01:04:48.803 am debugSharpAquos - parse 613 - command response [[7.1]] - handler [parseDA2P]
dev:8972019-12-14 01:04:48.798 am debugSharpAquos - parse 613 - Processing DATA [372E310D] HANDLER [parseDA2P]
dev:8972019-12-14 01:04:48.793 am debugSharpAquos - parse 613 - RAW DATA [372E310D] HANDLER [parseDA2P]
dev:8972019-12-14 01:04:48.675 am debugSharpAquos - request 691 - request = [DA2P? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:48.670 am debugSharpAquos - getMutex 691 - Acquired mutex permit
dev:8972019-12-14 01:04:48.666 am debugSharpAquos - request 691 - Socket [open] CMD [DA2P] Params [?] Handler [parseDA2P]
dev:8972019-12-14 01:04:48.574 am debugSharpAquos - releaseMutex 612 - Released mutex permit
dev:8972019-12-14 01:04:48.567 am debugSharpAquos - parse 612 - command response [ERR]
dev:8972019-12-14 01:04:48.559 am debugSharpAquos - parse 612 - RAW DATA [4552520D] HANDLER [parseDCCH]
dev:8972019-12-14 01:04:48.412 am debugSharpAquos - request 690 - request = [DCCH? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:48.397 am debugSharpAquos - getMutex 690 - Acquired mutex permit
dev:8972019-12-14 01:04:48.393 am debugSharpAquos - request 690 - Socket [open] CMD [DCCH] Params [?] Handler [parseDCCH]
dev:8972019-12-14 01:04:48.368 am debugSharpAquos - getChannelStatus() Starting
dev:8972019-12-14 01:04:48.259 am debugSharpAquos - releaseMutex 611 - Released mutex permit
dev:8972019-12-14 01:04:48.255 am debugSharpAquos - parseSleepTimer - SET - SleepTimer [0] SleepTimerSetting [Off]
dev:8972019-12-14 01:04:48.234 am debugSharpAquos - parseSleepTimer - response '0'
dev:8972019-12-14 01:04:48.222 am debugSharpAquos - parse 611 - command response [[0]] - handler [parseSleepTimer]
dev:8972019-12-14 01:04:48.216 am debugSharpAquos - parse 611 - Processing DATA [300D] HANDLER [parseSleepTimer]
dev:8972019-12-14 01:04:48.194 am debugSharpAquos - parse 611 - RAW DATA [300D] HANDLER [parseSleepTimer]
dev:8972019-12-14 01:04:48.106 am debugSharpAquos - request 689 - request = [OFTM? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:48.100 am debugSharpAquos - getMutex 689 - Acquired mutex permit
dev:8972019-12-14 01:04:48.091 am debugSharpAquos - request 689 - Socket [open] CMD [OFTM] Params [?] Handler [parseSleepTimer]
dev:8972019-12-14 01:04:47.958 am debugSharpAquos - releaseMutex 610 - Released mutex permit
dev:8972019-12-14 01:04:47.955 am debugSharpAquos - parse3DMode - SET - 3DMode [0] 3DModeName [3D Off]
dev:8972019-12-14 01:04:47.945 am debugSharpAquos - parse3DMode - response '0'
dev:8972019-12-14 01:04:47.936 am debugSharpAquos - parse 610 - command response [[0]] - handler [parse3DMode]
dev:8972019-12-14 01:04:47.931 am debugSharpAquos - parse 610 - Processing DATA [300D] HANDLER [parse3DMode]
dev:8972019-12-14 01:04:47.927 am debugSharpAquos - parse 610 - RAW DATA [300D] HANDLER [parse3DMode]
dev:8972019-12-14 01:04:47.836 am debugSharpAquos - request 688 - request = [TDCH? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:47.816 am debugSharpAquos - getMutex 688 - Acquired mutex permit
dev:8972019-12-14 01:04:47.812 am debugSharpAquos - request 688 - Socket [open] CMD [TDCH] Params [?] Handler [parse3DMode]
dev:8972019-12-14 01:04:47.789 am debugSharpAquos - releaseMutex 609 - Released mutex permit
dev:8972019-12-14 01:04:47.785 am debugSharpAquos - parseVideoMode - SET - VideoMode [4] VideoModeName [3D Hall]
dev:8972019-12-14 01:04:47.765 am debugSharpAquos - parseVideoMode - response '4'
dev:8972019-12-14 01:04:47.751 am debugSharpAquos - parse 609 - command response [[4]] - handler [parseVideoMode]
dev:8972019-12-14 01:04:47.732 am debugSharpAquos - parse 609 - Processing DATA [340D] HANDLER [parseVideoMode]
dev:8972019-12-14 01:04:47.716 am debugSharpAquos - parse 609 - RAW DATA [340D] HANDLER [parseVideoMode]
dev:8972019-12-14 01:04:47.553 am debugSharpAquos - request 687 - request = [AVMD? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:47.546 am debugSharpAquos - getMutex 687 - Acquired mutex permit
dev:8972019-12-14 01:04:47.542 am debugSharpAquos - request 687 - Socket [open] CMD [AVMD] Params [?] Handler [parseVideoMode]
dev:8972019-12-14 01:04:47.457 am debugSharpAquos - releaseMutex 608 - Released mutex permit
dev:8972019-12-14 01:04:47.446 am debugSharpAquos - parseSurroundMode - SET - SurroundMode [2] SurroundModeName [Off]
dev:8972019-12-14 01:04:47.426 am debugSharpAquos - parseSurround - response '2'
dev:8972019-12-14 01:04:47.416 am debugSharpAquos - parse 608 - command response [[2]] - handler [parseSurroundMode]
dev:8972019-12-14 01:04:47.411 am debugSharpAquos - parse 608 - Processing DATA [320D] HANDLER [parseSurroundMode]
dev:8972019-12-14 01:04:47.396 am debugSharpAquos - parse 608 - RAW DATA [320D] HANDLER [parseSurroundMode]
dev:8972019-12-14 01:04:47.284 am debugSharpAquos - request 686 - request = [ACSU? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:47.274 am debugSharpAquos - getMutex 686 - Acquired mutex permit
dev:8972019-12-14 01:04:47.266 am debugSharpAquos - request 686 - Socket [open] CMD [ACSU] Params [?] Handler [parseSurroundMode]
dev:8972019-12-14 01:04:47.185 am debugSharpAquos - releaseMutex 607 - Released mutex permit
dev:8972019-12-14 01:04:47.181 am debugSharpAquos - parseViewMode - SET - ViewMode [8] ViewModeName [Dot by Dot]
dev:8972019-12-14 01:04:47.160 am debugSharpAquos - parseViewMode - response '8'
dev:8972019-12-14 01:04:47.149 am debugSharpAquos - parse 607 - command response [[8]] - handler [parseViewMode]
dev:8972019-12-14 01:04:47.144 am debugSharpAquos - parse 607 - Processing DATA [380D] HANDLER [parseViewMode]
dev:8972019-12-14 01:04:47.139 am debugSharpAquos - parse 607 - RAW DATA [380D] HANDLER [parseViewMode]
dev:8972019-12-14 01:04:46.998 am debugSharpAquos - request 685 - request = [WIDE? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:46.992 am debugSharpAquos - getMutex 685 - Acquired mutex permit
dev:8972019-12-14 01:04:46.358 am debugSharpAquos - releaseMutex 606 - Released mutex permit
dev:8972019-12-14 01:04:46.347 am debugSharpAquos - parseInput - SET - input [1] InputName [HDMI IN 1]
dev:8972019-12-14 01:04:46.315 am debugSharpAquos - parseInput - response '1'
dev:8972019-12-14 01:04:46.307 am debugSharpAquos - parse 606 - command response [[1]] - handler [parseInput]
dev:8972019-12-14 01:04:46.299 am debugSharpAquos - parse 606 - Processing DATA [310D] HANDLER [parseInput]
dev:8972019-12-14 01:04:46.290 am debugSharpAquos - parse 606 - RAW DATA [310D] HANDLER [parseInput]
dev:8972019-12-14 01:04:46.042 am debugSharpAquos - releaseMutex 605 - Released mutex permit
dev:8972019-12-14 01:04:46.025 am debugSharpAquos - getMutex 685 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 01:04:45.997 am debugSharpAquos - getMutex 685 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 01:04:45.992 am debugSharpAquos - request 685 - Socket [open] CMD [WIDE] Params [?] Handler [parseViewMode]
dev:8972019-12-14 01:04:45.988 am debugSharpAquos - parseInput - SET - input [2] InputName [HDMI IN 2]
dev:8972019-12-14 01:04:45.907 am debugSharpAquos - parseInput - response '2'
dev:8972019-12-14 01:04:45.870 am debugSharpAquos - parse 605 - command response [[2]] - handler [parseInput]
dev:8972019-12-14 01:04:45.855 am debugSharpAquos - parse 605 - Processing DATA [320D] HANDLER [parseInput]
dev:8972019-12-14 01:04:45.742 am debugSharpAquos - parse 605 - RAW DATA [320D] HANDLER [parseInput]
dev:8972019-12-14 01:04:45.702 am debugSharpAquos - request 684 - request = [IAVD? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:45.688 am debugSharpAquos - getMutex 684 - Acquired mutex permit
dev:8972019-12-14 01:04:45.685 am debugSharpAquos - request 684 - Socket [open] CMD [IAVD] Params [?] Handler [parseInput]
dev:8972019-12-14 01:04:45.599 am debugSharpAquos - releaseMutex 604 - Released mutex permit
dev:8972019-12-14 01:04:45.583 am debugSharpAquos - parseVolume - SET - volume [2]
dev:8972019-12-14 01:04:45.578 am debugSharpAquos - parseVolume - response '2'
dev:8972019-12-14 01:04:45.559 am debugSharpAquos - parse 604 - command response [[2]] - handler [parseVolume]
dev:8972019-12-14 01:04:45.540 am debugSharpAquos - parse 604 - Processing DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 01:04:45.536 am debugSharpAquos - parse 604 - RAW DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 01:04:45.419 am debugSharpAquos - request 683 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:45.413 am debugSharpAquos - getMutex 683 - Acquired mutex permit
dev:8972019-12-14 01:04:45.409 am debugSharpAquos - request 683 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 01:04:45.276 am debugSharpAquos - releaseMutex 603 - Released mutex permit
dev:8972019-12-14 01:04:45.250 am debugSharpAquos - parseMute - SET - mute [muted]
dev:8972019-12-14 01:04:45.241 am debugSharpAquos - parseMute - response '1'
dev:8972019-12-14 01:04:45.217 am debugSharpAquos - parse 603 - command response [[1]] - handler [parseMute]
dev:8972019-12-14 01:04:45.165 am debugSharpAquos - request 682 - request = [MUTE? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:45.148 am debugSharpAquos - parse 603 - Processing DATA [310D] HANDLER [parsePower]
dev:8972019-12-14 01:04:45.145 am debugSharpAquos - getMutex 682 - Acquired mutex permit
dev:8972019-12-14 01:04:45.124 am debugSharpAquos - request 682 - Socket [open] CMD [MUTE] Params [?] Handler [parseMute]
dev:8972019-12-14 01:04:45.112 am debugSharpAquos - parse 603 - RAW DATA [310D] HANDLER [parsePower]
dev:8972019-12-14 01:04:44.772 am debugSharpAquos - request 681 - request = [POWR? ] to 192.168.254.205:10002
dev:8972019-12-14 01:04:44.751 am debugSharpAquos - getMutex 681 - Acquired mutex permit
dev:8972019-12-14 01:04:44.688 am debugSharpAquos - request 681 - Socket [open] CMD [POWR] Params [?] Handler [parsePower]
dev:8972019-12-14 01:04:44.666 am debugSharpAquos - getDeviceState() Starting
Looks like you either grabbed older logs, or the update didn't save...
Tried it again.....looks like it save.
dev:8972019-12-14 01:51:09.429 am debugSharpAquos - getDeviceState() Completed.
dev:8972019-12-14 01:51:09.415 am debugSharpAquos - getChannelStatus() Completed.
dev:8972019-12-14 01:51:09.271 am debugSharpAquos - releaseMutex 15 - Released mutex permit
dev:8972019-12-14 01:51:09.267 am debugSharpAquos - parse 15 - command response [ERR]
dev:8972019-12-14 01:51:09.263 am debugSharpAquos - parse 15 - RAW DATA [4552520D] HANDLER [parseDC11]
dev:8972019-12-14 01:51:09.184 am debugSharpAquos - releaseMutex 14 - Released mutex permit
dev:8972019-12-14 01:51:09.181 am debugSharpAquos - parse 14 - command response [ERR]
dev:8972019-12-14 01:51:09.175 am debugSharpAquos - parse 14 - RAW DATA [4552520D] HANDLER [parseDC11]
dev:8972019-12-14 01:51:09.154 am debugSharpAquos - request 15 - request = [DC11? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:09.144 am debugSharpAquos - request 15 - Socket [open] CMD [DC11] Params [?] Handler [parseDC11]
dev:8972019-12-14 01:51:09.139 am debugSharpAquos - getMutex 15 - Acquired mutex permit
dev:8972019-12-14 01:51:09.008 am debugSharpAquos - releaseMutex 13 - Released mutex permit
dev:8972019-12-14 01:51:09.001 am debugSharpAquos - parse 13 - command response [ERR]
dev:8972019-12-14 01:51:08.993 am debugSharpAquos - parse 13 - RAW DATA [4552520D] HANDLER [parseDC10]
dev:8972019-12-14 01:51:08.884 am debugSharpAquos - request 14 - request = [DC10? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:08.862 am debugSharpAquos - request 14 - Socket [open] CMD [DC10] Params [?] Handler [parseDC10]
dev:8972019-12-14 01:51:08.857 am debugSharpAquos - getMutex 14 - Acquired mutex permit
dev:8972019-12-14 01:51:08.831 am debugSharpAquos - releaseMutex 12 - Released mutex permit
dev:8972019-12-14 01:51:08.826 am debugSharpAquos - parse 12 - command response [ERR]
dev:8972019-12-14 01:51:08.822 am debugSharpAquos - parse 12 - RAW DATA [4552520D] HANDLER [parseDC2L]
dev:8972019-12-14 01:51:08.689 am errorjava.lang.NumberFormatException: For input string: "7.1" on line 567 (parse)
dev:8972019-12-14 01:51:08.657 am debugSharpAquos - parseDC2L - response '7.1'
dev:8972019-12-14 01:51:08.653 am debugSharpAquos - request 13 - request = [DC2L? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:08.634 am debugSharpAquos - parse 11 - command response [[7.1]] - handler [parseDC2L]
dev:8972019-12-14 01:51:08.611 am debugSharpAquos - parse 11 - Processing DATA [372E310D] HANDLER [parseDC2U]
dev:8972019-12-14 01:51:08.598 am debugSharpAquos - request 13 - Socket [open] CMD [DC2L] Params [?] Handler [parseDC2L]
dev:8972019-12-14 01:51:08.594 am debugSharpAquos - parse 11 - RAW DATA [372E310D] HANDLER [parseDC2U]
dev:8972019-12-14 01:51:08.588 am debugSharpAquos - getMutex 13 - Acquired mutex permit
dev:8972019-12-14 01:51:08.429 am debugSharpAquos - releaseMutex 10 - Released mutex permit
dev:8972019-12-14 01:51:08.418 am debugSharpAquos - parse 10 - command response [ERR]
dev:8972019-12-14 01:51:08.406 am debugSharpAquos - parse 10 - RAW DATA [4552520D] HANDLER [parseDC2U]
dev:8972019-12-14 01:51:08.336 am debugSharpAquos - request 12 - request = [DC2U? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:08.318 am debugSharpAquos - request 12 - Socket [open] CMD [DC2U] Params [?] Handler [parseDC2U]
dev:8972019-12-14 01:51:08.313 am debugSharpAquos - getMutex 12 - Acquired mutex permit
dev:8972019-12-14 01:51:08.198 am debugSharpAquos - releaseMutex 9 - Released mutex permit
dev:8972019-12-14 01:51:08.194 am debugSharpAquos - parseDA2P - SET - channel_type [Digital] channel_source [Air] channel [0]
dev:8972019-12-14 01:51:08.166 am debugSharpAquos - parseDA2P - response '0'
dev:8972019-12-14 01:51:08.160 am debugSharpAquos - parse 9 - command response [[0]] - handler [parseDA2P]
dev:8972019-12-14 01:51:08.152 am debugSharpAquos - parse 9 - Processing DATA [300D] HANDLER [parseDA2P]
dev:8972019-12-14 01:51:08.147 am debugSharpAquos - parse 9 - RAW DATA [300D] HANDLER [parseDA2P]
dev:8972019-12-14 01:51:08.053 am debugSharpAquos - request 11 - request = [DA2P? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:08.020 am debugSharpAquos - request 11 - Socket [open] CMD [DA2P] Params [?] Handler [parseDA2P]
dev:8972019-12-14 01:51:08.015 am debugSharpAquos - getMutex 11 - Acquired mutex permit
dev:8972019-12-14 01:51:07.758 am debugSharpAquos - request 10 - request = [DCCH? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:07.751 am debugSharpAquos - request 10 - Socket [open] CMD [DCCH] Params [?] Handler [parseDCCH]
dev:8972019-12-14 01:51:07.746 am debugSharpAquos - getMutex 10 - Acquired mutex permit
dev:8972019-12-14 01:51:07.741 am debugSharpAquos - getChannelStatus() Starting
dev:8972019-12-14 01:51:07.483 am debugSharpAquos - request 9 - request = [OFTM? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:07.467 am debugSharpAquos - request 9 - Socket [open] CMD [OFTM] Params [?] Handler [parseSleepTimer]
dev:8972019-12-14 01:51:07.454 am debugSharpAquos - getMutex 9 - Acquired mutex permit
dev:8972019-12-14 01:51:07.424 am debugSharpAquos - releaseMutex 8 - Released mutex permit
dev:8972019-12-14 01:51:07.416 am debugSharpAquos - parse3DMode - SET - 3DMode [0] 3DModeName [3D Off]
dev:8972019-12-14 01:51:07.392 am debugSharpAquos - parse3DMode - response '0'
dev:8972019-12-14 01:51:07.378 am debugSharpAquos - parse 8 - command response [[0]] - handler [parse3DMode]
dev:8972019-12-14 01:51:07.368 am debugSharpAquos - parse 8 - Processing DATA [300D] HANDLER [parse3DMode]
dev:8972019-12-14 01:51:07.359 am debugSharpAquos - parse 8 - RAW DATA [300D] HANDLER [parse3DMode]
dev:8972019-12-14 01:51:07.194 am debugSharpAquos - request 8 - request = [TDCH? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:07.188 am debugSharpAquos - request 8 - Socket [open] CMD [TDCH] Params [?] Handler [parse3DMode]
dev:8972019-12-14 01:51:07.183 am debugSharpAquos - getMutex 8 - Acquired mutex permit
dev:8972019-12-14 01:51:07.108 am debugSharpAquos - releaseMutex 7 - Released mutex permit
dev:8972019-12-14 01:51:07.103 am debugSharpAquos - parseVideoMode - SET - VideoMode [4] VideoModeName [3D Hall]
dev:8972019-12-14 01:51:07.098 am debugSharpAquos - parseVideoMode - response '4'
dev:8972019-12-14 01:51:07.090 am debugSharpAquos - parse 7 - command response [[4]] - handler [parseVideoMode]
dev:8972019-12-14 01:51:07.087 am debugSharpAquos - parse 7 - Processing DATA [340D] HANDLER [parseVideoMode]
dev:8972019-12-14 01:51:07.025 am debugSharpAquos - parse 7 - RAW DATA [340D] HANDLER [parseVideoMode]
dev:8972019-12-14 01:51:06.926 am debugSharpAquos - request 7 - request = [AVMD? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:06.920 am debugSharpAquos - request 7 - Socket [open] CMD [AVMD] Params [?] Handler [parseVideoMode]
dev:8972019-12-14 01:51:06.899 am debugSharpAquos - getMutex 7 - Acquired mutex permit
dev:8972019-12-14 01:51:06.828 am debugSharpAquos - releaseMutex 6 - Released mutex permit
dev:8972019-12-14 01:51:06.824 am debugSharpAquos - parseSurroundMode - SET - SurroundMode [2] SurroundModeName [Off]
dev:8972019-12-14 01:51:06.821 am debugSharpAquos - parseSurround - response '2'
dev:8972019-12-14 01:51:06.802 am debugSharpAquos - parse 6 - command response [[2]] - handler [parseSurroundMode]
dev:8972019-12-14 01:51:06.798 am debugSharpAquos - parse 6 - Processing DATA [320D] HANDLER [parseSurroundMode]
dev:8972019-12-14 01:51:06.783 am debugSharpAquos - parse 6 - RAW DATA [320D] HANDLER [parseSurroundMode]
dev:8972019-12-14 01:51:06.652 am debugSharpAquos - request 6 - request = [ACSU? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:06.648 am debugSharpAquos - request 6 - Socket [open] CMD [ACSU] Params [?] Handler [parseSurroundMode]
dev:8972019-12-14 01:51:06.631 am debugSharpAquos - getMutex 6 - Acquired mutex permit
dev:8972019-12-14 01:51:06.627 am debugSharpAquos - releaseMutex 5 - Released mutex permit
dev:8972019-12-14 01:51:06.623 am debugSharpAquos - parseViewMode - SET - ViewMode [8] ViewModeName [Dot by Dot]
dev:8972019-12-14 01:51:06.607 am debugSharpAquos - parseViewMode - response '8'
dev:8972019-12-14 01:51:06.597 am debugSharpAquos - parse 5 - command response [[8]] - handler [parseViewMode]
dev:8972019-12-14 01:51:06.592 am debugSharpAquos - parse 5 - Processing DATA [380D] HANDLER [parseViewMode]
dev:8972019-12-14 01:51:06.588 am debugSharpAquos - parse 5 - RAW DATA [380D] HANDLER [parseViewMode]
dev:8972019-12-14 01:51:06.365 am debugSharpAquos - request 5 - request = [WIDE? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:06.356 am debugSharpAquos - request 5 - Socket [open] CMD [WIDE] Params [?] Handler [parseViewMode]
dev:8972019-12-14 01:51:06.346 am debugSharpAquos - getMutex 5 - Acquired mutex permit
dev:8972019-12-14 01:51:06.318 am debugSharpAquos - releaseMutex 4 - Released mutex permit
dev:8972019-12-14 01:51:06.300 am debugSharpAquos - parseInput - SET - input [1] InputName [HDMI IN 1]
dev:8972019-12-14 01:51:06.274 am debugSharpAquos - parseInput - response '1'
dev:8972019-12-14 01:51:06.261 am debugSharpAquos - parse 4 - command response [[1]] - handler [parseInput]
dev:8972019-12-14 01:51:06.247 am debugSharpAquos - parse 4 - Processing DATA [310D] HANDLER [parseInput]
dev:8972019-12-14 01:51:06.237 am debugSharpAquos - parse 4 - RAW DATA [310D] HANDLER [parseInput]
dev:8972019-12-14 01:51:06.095 am debugSharpAquos - request 4 - request = [IAVD? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:06.090 am debugSharpAquos - request 4 - Socket [open] CMD [IAVD] Params [?] Handler [parseInput]
dev:8972019-12-14 01:51:06.086 am debugSharpAquos - releaseMutex 3 - Released mutex permit
dev:8972019-12-14 01:51:06.082 am debugSharpAquos - parseVolume - SET - volume [2]
dev:8972019-12-14 01:51:06.078 am debugSharpAquos - parseVolume - response '2'
dev:8972019-12-14 01:51:06.070 am debugSharpAquos - getMutex 4 - Acquired mutex permit
dev:8972019-12-14 01:51:06.066 am debugSharpAquos - parse 3 - command response [[2]] - handler [parseVolume]
dev:8972019-12-14 01:51:06.059 am debugSharpAquos - parse 3 - Processing DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 01:51:06.055 am debugSharpAquos - parse 3 - RAW DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 01:51:05.807 am debugSharpAquos - request 3 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:05.801 am debugSharpAquos - request 3 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 01:51:05.796 am debugSharpAquos - getMutex 3 - Acquired mutex permit
dev:8972019-12-14 01:51:05.764 am debugSharpAquos - releaseMutex 2 - Released mutex permit
dev:8972019-12-14 01:51:05.758 am debugSharpAquos - parseMute - SET - mute [unmuted]
dev:8972019-12-14 01:51:05.755 am debugSharpAquos - parseMute - response '2'
dev:8972019-12-14 01:51:05.745 am debugSharpAquos - parse 2 - command response [[2]] - handler [parseMute]
dev:8972019-12-14 01:51:05.741 am debugSharpAquos - parse 2 - Processing DATA [320D] HANDLER [parseMute]
dev:8972019-12-14 01:51:05.728 am debugSharpAquos - parse 2 - RAW DATA [320D] HANDLER [parseMute]
dev:8972019-12-14 01:51:05.539 am debugSharpAquos - request 2 - request = [MUTE? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:05.533 am debugSharpAquos - request 2 - Socket [open] CMD [MUTE] Params [?] Handler [parseMute]
dev:8972019-12-14 01:51:05.527 am debugSharpAquos - getMutex 2 - Acquired mutex permit
dev:8972019-12-14 01:51:05.462 am debugSharpAquos - releaseMutex 1 - Released mutex permit
dev:8972019-12-14 01:51:05.458 am debugSharpAquos - parsePower - SET - power [on]
dev:8972019-12-14 01:51:05.432 am debugSharpAquos - parsePower - response '1'
dev:8972019-12-14 01:51:05.423 am debugSharpAquos - parse 1 - command response [[1]] - handler [parsePower]
dev:8972019-12-14 01:51:05.394 am debugSharpAquos - parse 1 - Processing DATA [310D] HANDLER [parsePower]
dev:8972019-12-14 01:51:05.390 am debugSharpAquos - parse 1 - RAW DATA [310D] HANDLER [parsePower]
dev:8972019-12-14 01:51:05.272 am debugSharpAquos - request 1 - request = [POWR? ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:05.266 am debugSharpAquos - request 1 - Socket [open] CMD [POWR] Params [?] Handler [parsePower]
dev:8972019-12-14 01:51:05.261 am debugSharpAquos - getMutex 1 - Acquired mutex permit
dev:8972019-12-14 01:51:05.252 am debugSharpAquos - getDeviceState() Starting
dev:8972019-12-14 01:51:05.191 am debugSharpAquos - releaseMutex 0 - Released mutex permit
dev:8972019-12-14 01:51:05.181 am debugSharpAquos - parse 0 - command response [OK]
dev:8972019-12-14 01:51:05.175 am debugSharpAquos - parse 0 - RAW DATA [4F4B0D] HANDLER [parse]
dev:8972019-12-14 01:51:04.978 am debugSharpAquos - request 0 - request = [RSPW2 ] to 192.168.254.205:10002
dev:8972019-12-14 01:51:04.971 am debugSharpAquos - request 0 - Socket [open] CMD [RSPW] Params [2] Handler [parse]
dev:8972019-12-14 01:51:04.966 am debugSharpAquos - getMutex 0 - Acquired mutex permit
dev:8972019-12-14 01:51:04.948 am debugSharpAquos - initialize - Poll Rate set to every 5 minutes
dev:8972019-12-14 01:51:04.891 am debugSharpAquos - openSocket: Socket opened.
dev:8972019-12-14 01:51:03.866 am debugSharpAquos - openSocket: Connecting to 192.168.254.205:10002
dev:8972019-12-14 01:51:03.855 am debugSharpAquos - initialize - Set DNI = [9CC7D1ED5F5F]
dev:8972019-12-14 01:51:03.837 am debugSharpAquos - initialize - IP: 192.168.254.205 PORT: 10002 USER: null PASS: null Poll Rate: 5
dev:8972019-12-14 01:51:03.327 am debugSharpAquos - closeSocket: Socket closed.
dev:8972019-12-14 01:51:02.475 am debugSharpAquos - releaseMutex ?-1? - Released mutex permit
dev:8972019-12-14 01:51:02.464 am debugSharpAquos - socketStatus - Socket [open] Message [receive error: Stream closed.]
dev:8972019-12-14 01:51:02.273 am debugSharpAquos - closeSocket: Socket close requested.
dev:8972019-12-14 01:51:02.198 am debugSharpAquos - initialize - Driver v0.29
dev:8972019-12-14 01:51:02.195 am debugSharpAquos - updated - IP: 192.168.254.205 PORT: 10002 USER: null PASS: null
Better, thanks...
new update:
[Old version removed]
Looks like a few errors.....
dev:8972019-12-14 02:55:22.790 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 490 (parse)
dev:8972019-12-14 02:55:22.763 am debugSharpAquos - parseSleepTimer - response 'ERR'
dev:8972019-12-14 02:55:22.760 am debugSharpAquos - parse 16 - command response [[ERR, ERR]] - handler [parseSleepTimer]
dev:8972019-12-14 02:55:22.756 am debugSharpAquos - parse 16 - Processing DATA [4552520D4552520D] HANDLER [parseSleepTimer]
dev:8972019-12-14 02:55:22.741 am debugSharpAquos - parse 16 - RAW DATA [4552520D4552520D] HANDLER [parseSleepTimer]
dev:8972019-12-14 02:55:22.736 am debugSharpAquos - getDeviceState() Completed.
dev:8972019-12-14 02:55:22.466 am debugSharpAquos - request 18 - request = [OFTM? ] to 192.168.254.205:10002
dev:8972019-12-14 02:55:22.461 am debugSharpAquos - request 18 - Socket [open] CMD [OFTM] Params [?] Handler [parseSleepTimer]
dev:8972019-12-14 02:55:22.456 am debugSharpAquos - getMutex 18 - Acquired mutex permit
dev:8972019-12-14 02:55:21.451 am debugSharpAquos - getMutex 18 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 02:55:21.447 am debugSharpAquos - getMutex 18 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 02:55:21.344 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 478 (parse)
dev:8972019-12-14 02:55:21.313 am debugSharpAquos - parse3DMode - response 'ERR'
dev:8972019-12-14 02:55:21.305 am debugSharpAquos - parse 15 - command response [[ERR, ERR]] - handler [parse3DMode]
dev:8972019-12-14 02:55:21.299 am debugSharpAquos - parse 15 - Processing DATA [4552520D4552520D] HANDLER [parse3DMode]
dev:8972019-12-14 02:55:21.295 am debugSharpAquos - parse 15 - RAW DATA [4552520D4552520D] HANDLER [parse3DMode]
dev:8972019-12-14 02:55:21.191 am debugSharpAquos - request 17 - request = [TDCH? ] to 192.168.254.205:10002
dev:8972019-12-14 02:55:21.186 am debugSharpAquos - request 17 - Socket [open] CMD [TDCH] Params [?] Handler [parse3DMode]
dev:8972019-12-14 02:55:21.181 am debugSharpAquos - getMutex 17 - Acquired mutex permit
dev:8972019-12-14 02:55:20.173 am debugSharpAquos - getMutex 17 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 02:55:20.164 am debugSharpAquos - getMutex 17 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 02:55:20.077 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 526 (parse)
dev:8972019-12-14 02:55:20.044 am debugSharpAquos - parseVideoMode - response 'ERR'
dev:8972019-12-14 02:55:20.040 am debugSharpAquos - parse 14 - command response [[ERR, ERR]] - handler [parseVideoMode]
dev:8972019-12-14 02:55:20.036 am debugSharpAquos - parse 14 - Processing DATA [4552520D4552520D] HANDLER [parseVideoMode]
dev:8972019-12-14 02:55:20.032 am debugSharpAquos - parse 14 - RAW DATA [4552520D4552520D] HANDLER [parseVideoMode]
dev:8972019-12-14 02:55:19.904 am debugSharpAquos - request 16 - request = [AVMD? ] to 192.168.254.205:10002
dev:8972019-12-14 02:55:19.894 am debugSharpAquos - request 16 - Socket [open] CMD [AVMD] Params [?] Handler [parseVideoMode]
dev:8972019-12-14 02:55:19.884 am debugSharpAquos - getMutex 16 - Acquired mutex permit
dev:8972019-12-14 02:55:18.879 am debugSharpAquos - getMutex 16 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 02:55:18.865 am debugSharpAquos - getMutex 16 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 02:55:18.792 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 514 (parse)
dev:8972019-12-14 02:55:18.749 am debugSharpAquos - parseSurround - response 'ERR'
dev:8972019-12-14 02:55:18.741 am debugSharpAquos - parse 13 - command response [[ERR, ERR]] - handler [parseSurroundMode]
dev:8972019-12-14 02:55:18.731 am debugSharpAquos - parse 13 - Processing DATA [4552520D4552520D] HANDLER [parseSurroundMode]
dev:8972019-12-14 02:55:18.711 am debugSharpAquos - parse 13 - RAW DATA [4552520D4552520D] HANDLER [parseSurroundMode]
dev:8972019-12-14 02:55:18.605 am debugSharpAquos - request 15 - request = [ACSU? ] to 192.168.254.205:10002
dev:8972019-12-14 02:55:18.588 am debugSharpAquos - request 15 - Socket [open] CMD [ACSU] Params [?] Handler [parseSurroundMode]
dev:8972019-12-14 02:55:18.582 am debugSharpAquos - getMutex 15 - Acquired mutex permit
dev:8972019-12-14 02:55:17.574 am debugSharpAquos - getMutex 15 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 02:55:17.566 am debugSharpAquos - getMutex 15 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 02:55:17.497 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 502 (parse)
dev:8972019-12-14 02:55:17.446 am debugSharpAquos - parseViewMode - response 'ERR'
dev:8972019-12-14 02:55:17.442 am debugSharpAquos - parse 12 - command response [[ERR, ERR]] - handler [parseViewMode]
dev:8972019-12-14 02:55:17.431 am debugSharpAquos - parse 12 - Processing DATA [4552520D4552520D] HANDLER [parseViewMode]
dev:8972019-12-14 02:55:17.426 am debugSharpAquos - parse 12 - RAW DATA [4552520D4552520D] HANDLER [parseViewMode]
dev:8972019-12-14 02:55:17.308 am debugSharpAquos - request 14 - request = [WIDE? ] to 192.168.254.205:10002
dev:8972019-12-14 02:55:17.302 am debugSharpAquos - request 14 - Socket [open] CMD [WIDE] Params [?] Handler [parseViewMode]
dev:8972019-12-14 02:55:17.296 am debugSharpAquos - getMutex 14 - Acquired mutex permit
dev:8972019-12-14 02:55:16.292 am debugSharpAquos - getMutex 14 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 02:55:16.288 am debugSharpAquos - getMutex 14 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 02:55:16.170 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 466 (parse)
dev:8972019-12-14 02:55:16.141 am debugSharpAquos - parseInput - response 'ERR'
dev:8972019-12-14 02:55:16.137 am debugSharpAquos - parse 11 - command response [[ERR, ERR]] - handler [parseInput]
dev:8972019-12-14 02:55:16.131 am debugSharpAquos - parse 11 - Processing DATA [4552520D4552520D] HANDLER [parseInput]
dev:8972019-12-14 02:55:16.126 am debugSharpAquos - parse 11 - RAW DATA [4552520D4552520D] HANDLER [parseInput]
dev:8972019-12-14 02:55:16.032 am debugSharpAquos - request 13 - request = [IAVD? ] to 192.168.254.205:10002
dev:8972019-12-14 02:55:16.024 am debugSharpAquos - request 13 - Socket [open] CMD [IAVD] Params [?] Handler [parseInput]
dev:8972019-12-14 02:55:16.013 am debugSharpAquos - getMutex 13 - Acquired mutex permit
dev:8972019-12-14 02:55:14.983 am debugSharpAquos - getMutex 13 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 02:55:14.979 am debugSharpAquos - getMutex 13 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 02:55:14.858 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 442 (parse)
dev:8972019-12-14 02:55:14.826 am debugSharpAquos - parseVolume - response 'ERR'
dev:8972019-12-14 02:55:14.822 am debugSharpAquos - parse 10 - command response [[ERR, ERR]] - handler [parseVolume]
dev:8972019-12-14 02:55:14.816 am debugSharpAquos - parse 10 - Processing DATA [4552520D4552520D] HANDLER [parseVolume]
dev:8972019-12-14 02:55:14.812 am debugSharpAquos - parse 10 - RAW DATA [4552520D4552520D] HANDLER [parseVolume]
dev:8972019-12-14 02:55:14.724 am debugSharpAquos - request 12 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 02:55:14.715 am debugSharpAquos - request 12 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 02:55:14.711 am debugSharpAquos - getMutex 12 - Acquired mutex permit
dev:8972019-12-14 02:55:14.568 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 449 (parse)
dev:8972019-12-14 02:55:14.529 am debugSharpAquos - parseMute - response 'ERR'
dev:8972019-12-14 02:55:14.520 am debugSharpAquos - parse 9 - command response [[ERR, ERR]] - handler [parseMute]
dev:8972019-12-14 02:55:14.515 am debugSharpAquos - parse 9 - Processing DATA [4552520D4552520D] HANDLER [parseMute]
dev:8972019-12-14 02:55:14.510 am debugSharpAquos - parse 9 - RAW DATA [4552520D4552520D] HANDLER [parseMute]
dev:8972019-12-14 02:55:14.448 am debugSharpAquos - request 11 - request = [MUTE? ] to 192.168.254.205:10002
dev:8972019-12-14 02:55:14.442 am debugSharpAquos - request 11 - Socket [open] CMD [MUTE] Params [?] Handler [parseMute]
dev:8972019-12-14 02:55:14.437 am debugSharpAquos - getMutex 11 - Acquired mutex permit
dev:8972019-12-14 02:55:14.341 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 457 (parse)
dev:8972019-12-14 02:55:14.301 am debugSharpAquos - parsePower - response 'ERR'
dev:8972019-12-14 02:55:14.292 am debugSharpAquos - parse 8 - command response [[ERR, 0]] - handler [parsePower]
dev:8972019-12-14 02:55:14.286 am debugSharpAquos - parse 8 - Processing DATA [4552520D300D] HANDLER [parsePower]
dev:8972019-12-14 02:55:14.282 am debugSharpAquos - parse 8 - RAW DATA [4552520D300D] HANDLER [parsePower]
dev:8972019-12-14 02:55:14.183 am debugSharpAquos - request 10 - request = [POWR? ] to 192.168.254.205:10002
dev:8972019-12-14 02:55:14.173 am debugSharpAquos - request 10 - Socket [open] CMD [POWR] Params [?] Handler [parsePower]
dev:8972019-12-14 02:55:14.164 am debugSharpAquos - getMutex 10 - Acquired mutex permit
dev:8972019-12-14 02:55:14.156 am debugSharpAquos - getDeviceState() Starting
dev:8972019-12-14 02:55:14.054 am debugSharpAquos - releaseMutex 7 - Released mutex permit
dev:8972019-12-14 02:55:14.045 am debugSharpAquos - parse 7- Could not process command response [[ERR, OK]]
dev:8972019-12-14 02:55:14.040 am debugSharpAquos - parse 7 - command response [[ERR, OK]] - handler [parse]
dev:8972019-12-14 02:55:14.035 am debugSharpAquos - parse 7 - Processing DATA [4552520D4F4B0D] HANDLER [parse]
dev:8972019-12-14 02:55:14.031 am debugSharpAquos - parse 7 - RAW DATA [4552520D4F4B0D] HANDLER [parse]
dev:8972019-12-14 02:55:13.903 am debugSharpAquos - request 9 - request = [RSPW2 ] to 192.168.254.205:10002
dev:8972019-12-14 02:55:13.897 am debugSharpAquos - request 9 - Socket [open] CMD [RSPW] Params [2] Handler [parse]
dev:8972019-12-14 02:55:13.892 am debugSharpAquos - getMutex 9 - Acquired mutex permit
dev:8972019-12-14 02:55:13.885 am debugSharpAquos - initialize - Poll Rate set to every 5 minutes
dev:8972019-12-14 02:55:13.828 am debugSharpAquos - openSocket: Socket opened.
dev:8972019-12-14 02:55:12.810 am debugSharpAquos - openSocket: Connecting to 192.168.254.205:10002
dev:8972019-12-14 02:55:12.803 am debugSharpAquos - initialize - Set DNI = [9CC7D1ED5F5F]
dev:8972019-12-14 02:55:12.760 am debugSharpAquos - initialize - IP: 192.168.254.205 PORT: 10002 USER: null PASS: null Poll Rate: 5
dev:8972019-12-14 02:55:12.250 am debugSharpAquos - closeSocket: Socket closed.
dev:8972019-12-14 02:55:11.341 am debugSharpAquos - releaseMutex ?8? - Released mutex permit
dev:8972019-12-14 02:55:11.337 am debugSharpAquos - socketStatus - Socket [open] Message [receive error: Stream closed.]
dev:8972019-12-14 02:55:11.227 am debugSharpAquos - closeSocket: Socket close requested.
dev:8972019-12-14 02:55:11.121 am debugSharpAquos - initialize - Driver v0.30
dev:8972019-12-14 02:55:11.117 am debugSharpAquos - updated - IP: 192.168.254.205 PORT: 10002 USER: null PASS: null
dev:8972019-12-14 02:54:40.325 am debugSharpAquos - getDeviceState() Completed.
dev:8972019-12-14 02:54:40.170 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 490 (parse)
dev:8972019-12-14 02:54:40.122 am debugSharpAquos - parseSleepTimer - response 'ERR'
dev:8972019-12-14 02:54:40.108 am debugSharpAquos - parse 6 - command response [[ERR, ERR]] - handler [parseSleepTimer]
dev:8972019-12-14 02:54:40.097 am debugSharpAquos - parse 6 - Processing DATA [4552520D4552520D] HANDLER [parseSleepTimer]
dev:8972019-12-14 02:54:40.087 am debugSharpAquos - parse 6 - RAW DATA [4552520D4552520D] HANDLER [parseSleepTimer]
dev:8972019-12-14 02:54:39.937 am debugSharpAquos - request 8 - request = [OFTM? ] to 192.168.254.205:10002
dev:8972019-12-14 02:54:39.927 am debugSharpAquos - request 8 - Socket [open] CMD [OFTM] Params [?] Handler [parseSleepTimer]
dev:8972019-12-14 02:54:39.917 am debugSharpAquos - getMutex 8 - Acquired mutex permit
dev:8972019-12-14 02:54:38.913 am debugSharpAquos - getMutex 8 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 02:54:38.897 am debugSharpAquos - getMutex 8 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 02:54:38.864 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 478 (parse)
dev:8972019-12-14 02:54:38.813 am debugSharpAquos - parse3DMode - response 'ERR'
dev:8972019-12-14 02:54:38.791 am debugSharpAquos - parse 5 - command response [[ERR, ERR]] - handler [parse3DMode]
dev:8972019-12-14 02:54:38.785 am debugSharpAquos - parse 5 - Processing DATA [4552520D4552520D] HANDLER [parse3DMode]
dev:8972019-12-14 02:54:38.772 am debugSharpAquos - parse 5 - RAW DATA [4552520D4552520D] HANDLER [parse3DMode]
dev:8972019-12-14 02:54:38.634 am debugSharpAquos - request 7 - request = [TDCH? ] to 192.168.254.205:10002
dev:8972019-12-14 02:54:38.611 am debugSharpAquos - request 7 - Socket [open] CMD [TDCH] Params [?] Handler [parse3DMode]
dev:8972019-12-14 02:54:38.594 am debugSharpAquos - getMutex 7 - Acquired mutex permit
dev:8972019-12-14 02:54:37.590 am debugSharpAquos - getMutex 7 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 02:54:37.586 am debugSharpAquos - getMutex 7 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 02:54:37.541 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 526 (parse)
dev:8972019-12-14 02:54:37.494 am debugSharpAquos - parseVideoMode - response 'ERR'
dev:8972019-12-14 02:54:37.479 am debugSharpAquos - parse 4 - command response [[ERR, ERR]] - handler [parseVideoMode]
dev:8972019-12-14 02:54:37.468 am debugSharpAquos - parse 4 - Processing DATA [4552520D4552520D] HANDLER [parseVideoMode]
dev:8972019-12-14 02:54:37.463 am debugSharpAquos - parse 4 - RAW DATA [4552520D4552520D] HANDLER [parseVideoMode]
dev:8972019-12-14 02:54:37.322 am debugSharpAquos - request 6 - request = [AVMD? ] to 192.168.254.205:10002
dev:8972019-12-14 02:54:37.316 am debugSharpAquos - request 6 - Socket [open] CMD [AVMD] Params [?] Handler [parseVideoMode]
dev:8972019-12-14 02:54:37.295 am debugSharpAquos - getMutex 6 - Acquired mutex permit
dev:8972019-12-14 02:54:36.270 am debugSharpAquos - getMutex 6 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 02:54:36.265 am debugSharpAquos - getMutex 6 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 02:54:36.213 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 514 (parse)
dev:8972019-12-14 02:54:36.144 am debugSharpAquos - parseSurround - response 'ERR'
dev:8972019-12-14 02:54:36.130 am debugSharpAquos - parse 3 - command response [[ERR, ERR]] - handler [parseSurroundMode]
dev:8972019-12-14 02:54:36.119 am debugSharpAquos - parse 3 - Processing DATA [4552520D4552520D] HANDLER [parseSurroundMode]
dev:8972019-12-14 02:54:36.110 am debugSharpAquos - parse 3 - RAW DATA [4552520D4552520D] HANDLER [parseSurroundMode]
dev:8972019-12-14 02:54:36.002 am debugSharpAquos - request 5 - request = [ACSU? ] to 192.168.254.205:10002
dev:8972019-12-14 02:54:35.985 am debugSharpAquos - request 5 - Socket [open] CMD [ACSU] Params [?] Handler [parseSurroundMode]
dev:8972019-12-14 02:54:35.975 am debugSharpAquos - getMutex 5 - Acquired mutex permit
dev:8972019-12-14 02:54:35.158 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 502 (parse)
dev:8972019-12-14 02:54:35.111 am debugSharpAquos - parseViewMode - response 'ERR'
dev:8972019-12-14 02:54:35.097 am debugSharpAquos - parse 2 - command response [[ERR, ERR]] - handler [parseViewMode]
dev:8972019-12-14 02:54:35.089 am debugSharpAquos - parse 2 - Processing DATA [4552520D4552520D] HANDLER [parseViewMode]
dev:8972019-12-14 02:54:35.084 am debugSharpAquos - parse 2 - RAW DATA [4552520D4552520D] HANDLER [parseViewMode]
dev:8972019-12-14 02:54:34.966 am debugSharpAquos - getMutex 5 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 02:54:34.957 am debugSharpAquos - getMutex 5 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 02:54:34.696 am debugSharpAquos - request 4 - request = [WIDE? ] to 192.168.254.205:10002
dev:8972019-12-14 02:54:34.668 am debugSharpAquos - request 4 - Socket [open] CMD [WIDE] Params [?] Handler [parseViewMode]
dev:8972019-12-14 02:54:34.654 am debugSharpAquos - getMutex 4 - Acquired mutex permit
dev:8972019-12-14 02:54:34.605 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 466 (parse)
dev:8972019-12-14 02:54:34.563 am debugSharpAquos - parseInput - response 'ERR'
dev:8972019-12-14 02:54:34.554 am debugSharpAquos - parse 1 - command response [[ERR, ERR]] - handler [parseInput]
dev:8972019-12-14 02:54:34.547 am debugSharpAquos - parse 1 - Processing DATA [4552520D4552520D] HANDLER [parseInput]
dev:8972019-12-14 02:54:34.542 am debugSharpAquos - parse 1 - RAW DATA [4552520D4552520D] HANDLER [parseInput]
dev:8972019-12-14 02:54:34.470 am debugSharpAquos - openSocket: Socket opened.
dev:8972019-12-14 02:54:34.420 am debugSharpAquos - request 3 - request = [IAVD? ] to 192.168.254.205:10002
dev:8972019-12-14 02:54:34.404 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 442 (parse)
dev:8972019-12-14 02:54:34.400 am debugSharpAquos - request 3 - Socket [open] CMD [IAVD] Params [?] Handler [parseInput]
dev:8972019-12-14 02:54:34.395 am debugSharpAquos - getMutex 3 - Acquired mutex permit
dev:8972019-12-14 02:54:34.323 am debugSharpAquos - parseVolume - response 'ERR'
dev:8972019-12-14 02:54:34.313 am debugSharpAquos - parse 0 - command response [[ERR, ERR]] - handler [parseVolume]
dev:8972019-12-14 02:54:34.276 am debugSharpAquos - parse 0 - Processing DATA [4552520D4552520D] HANDLER [parseVolume]
dev:8972019-12-14 02:54:34.270 am debugSharpAquos - parse 0 - RAW DATA [4552520D4552520D] HANDLER [parseVolume]
dev:8972019-12-14 02:54:34.115 am debugSharpAquos - request 2 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 02:54:34.105 am debugSharpAquos - request 2 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 02:54:34.095 am debugSharpAquos - getMutex 2 - Acquired mutex permit
dev:8972019-12-14 02:54:33.591 am debugSharpAquos - releaseMutex ?2? - Released mutex permit
dev:8972019-12-14 02:54:33.587 am debugSharpAquos - socketStatus - Socket [open] Message [receive error: Stream closed.]
dev:8972019-12-14 02:54:33.436 am debugSharpAquos - openSocket: Connecting to 192.168.254.205:10002
dev:8972019-12-14 02:54:33.431 am debugSharpAquos - socketStatus - Write Failed - Attempting reconnect
dev:8972019-12-14 02:54:33.423 am debugSharpAquos - releaseMutex ?2? - Released mutex permit
dev:8972019-12-14 02:54:33.415 am debugSharpAquos - socketStatus - Socket [open] Message [send error: Broken pipe (Write failed)]
dev:8972019-12-14 02:54:33.090 am debugSharpAquos - getMutex 2 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 02:54:33.081 am debugSharpAquos - getMutex 2 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 02:54:32.813 am debugSharpAquos - request 1 - request = [MUTE? ] to 192.168.254.205:10002
dev:8972019-12-14 02:54:32.802 am debugSharpAquos - request 1 - Socket [open] CMD [MUTE] Params [?] Handler [parseMute]
dev:8972019-12-14 02:54:32.795 am debugSharpAquos - getMutex 1 - Acquired mutex permit
dev:8972019-12-14 02:54:31.780 am debugSharpAquos - getMutex 1 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 02:54:31.759 am debugSharpAquos - getMutex 1 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 02:54:31.449 am debugSharpAquos - request 0 - request = [POWR? ] to 192.168.254.205:10002
dev:8972019-12-14 02:54:31.407 am debugSharpAquos - request 0 - Socket [open] CMD [POWR] Params [?] Handler [parsePower]
dev:8972019-12-14 02:54:31.394 am debugSharpAquos - getMutex 0 - Acquired mutex permit
dev:8972019-12-14 02:54:31.345 am debugSharpAquos - getDeviceState() Starting
It actually looks like the TV is only responding with "ERR\rERR\r"...
Can you power cycle the TV then run initialize() in the driver to check...
In the meantime, I'm reworking the parser...
I power cycled and hit initialize, here are the logs....
dev:8972019-12-14 03:23:55.604 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 490 (parse)
dev:8972019-12-14 03:23:55.573 am debugSharpAquos - parseSleepTimer - response 'ERR'
dev:8972019-12-14 03:23:55.567 am debugSharpAquos - parse 101 - command response [[ERR, 0]] - handler [parseSleepTimer]
dev:8972019-12-14 03:23:55.559 am debugSharpAquos - parse 101 - Processing DATA [4552520D300D] HANDLER [parseSleepTimer]
dev:8972019-12-14 03:23:55.554 am debugSharpAquos - parse 101 - RAW DATA [4552520D300D] HANDLER [parseSleepTimer]
dev:8972019-12-14 03:23:55.407 am debugSharpAquos - getDeviceState() Completed.
dev:8972019-12-14 03:23:54.876 am debugSharpAquos - releaseMutex 100 - Released mutex permit
dev:8972019-12-14 03:23:54.871 am debugSharpAquos - parse 100 - command response [ERR]
dev:8972019-12-14 03:23:54.865 am debugSharpAquos - parse 100 - RAW DATA [4552520D] HANDLER [parseSleepTimer]
dev:8972019-12-14 03:23:54.786 am debugSharpAquos - request 99 - request = [OFTM? ] to 192.168.254.205:10002
dev:8972019-12-14 03:23:54.749 am debugSharpAquos - request 99 - Socket [open] CMD [OFTM] Params [?] Handler [parseSleepTimer]
dev:8972019-12-14 03:23:54.743 am debugSharpAquos - getMutex 99 - Acquired mutex permit
dev:8972019-12-14 03:23:54.706 am debugSharpAquos - releaseMutex 99 - Released mutex permit
dev:8972019-12-14 03:23:54.690 am debugSharpAquos - parse3DMode - SET - 3DMode [0] 3DModeName [3D Off]
dev:8972019-12-14 03:23:54.681 am debugSharpAquos - parse3DMode - response '0'
dev:8972019-12-14 03:23:54.676 am debugSharpAquos - parse 99 - command response [[0]] - handler [parse3DMode]
dev:8972019-12-14 03:23:54.670 am debugSharpAquos - parse 99 - Processing DATA [300D] HANDLER [parse3DMode]
dev:8972019-12-14 03:23:54.665 am debugSharpAquos - parse 99 - RAW DATA [300D] HANDLER [parse3DMode]
dev:8972019-12-14 03:23:54.507 am debugSharpAquos - request 98 - request = [TDCH? ] to 192.168.254.205:10002
dev:8972019-12-14 03:23:54.466 am debugSharpAquos - request 98 - Socket [open] CMD [TDCH] Params [?] Handler [parse3DMode]
dev:8972019-12-14 03:23:54.460 am debugSharpAquos - getMutex 98 - Acquired mutex permit
dev:8972019-12-14 03:23:53.535 am debugSharpAquos - releaseMutex 98 - Released mutex permit
dev:8972019-12-14 03:23:53.517 am debugSharpAquos - parseVideoMode - SET - VideoMode [4] VideoModeName [3D Hall]
dev:8972019-12-14 03:23:53.512 am debugSharpAquos - parseVideoMode - response '4'
dev:8972019-12-14 03:23:53.506 am debugSharpAquos - parse 98 - command response [[4, ERR]] - handler [parseVideoMode]
dev:8972019-12-14 03:23:53.470 am debugSharpAquos - parse 98 - Processing DATA [340D4552520D] HANDLER [parseVideoMode]
dev:8972019-12-14 03:23:53.453 am debugSharpAquos - parse 98 - RAW DATA [340D4552520D] HANDLER [parseVideoMode]
dev:8972019-12-14 03:23:53.447 am debugSharpAquos - getMutex 98 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 03:23:53.426 am debugSharpAquos - getMutex 98 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 03:23:53.164 am debugSharpAquos - request 97 - request = [AVMD? ] to 192.168.254.205:10002
dev:8972019-12-14 03:23:53.141 am debugSharpAquos - request 97 - Socket [open] CMD [AVMD] Params [?] Handler [parseVideoMode]
dev:8972019-12-14 03:23:53.127 am debugSharpAquos - getMutex 97 - Acquired mutex permit
dev:8972019-12-14 03:23:52.152 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 514 (parse)
dev:8972019-12-14 03:23:52.117 am debugSharpAquos - getMutex 97 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 03:23:52.112 am debugSharpAquos - getMutex 97 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 03:23:52.105 am debugSharpAquos - parseSurround - response 'ERR'
dev:8972019-12-14 03:23:52.071 am debugSharpAquos - parse 97 - command response [[ERR, 2]] - handler [parseSurroundMode]
dev:8972019-12-14 03:23:52.059 am debugSharpAquos - parse 97 - Processing DATA [4552520D320D] HANDLER [parseSurroundMode]
dev:8972019-12-14 03:23:52.048 am debugSharpAquos - parse 97 - RAW DATA [4552520D320D] HANDLER [parseSurroundMode]
dev:8972019-12-14 03:23:51.855 am debugSharpAquos - request 96 - request = [ACSU? ] to 192.168.254.205:10002
dev:8972019-12-14 03:23:51.850 am debugSharpAquos - request 96 - Socket [open] CMD [ACSU] Params [?] Handler [parseSurroundMode]
dev:8972019-12-14 03:23:51.844 am debugSharpAquos - getMutex 96 - Acquired mutex permit
dev:8972019-12-14 03:23:51.082 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 502 (parse)
dev:8972019-12-14 03:23:51.043 am debugSharpAquos - parseViewMode - response 'ERR'
dev:8972019-12-14 03:23:51.034 am debugSharpAquos - parse 96 - command response [[ERR, 8]] - handler [parseViewMode]
dev:8972019-12-14 03:23:51.023 am debugSharpAquos - parse 96 - Processing DATA [4552520D380D] HANDLER [parseViewMode]
dev:8972019-12-14 03:23:51.012 am debugSharpAquos - parse 96 - RAW DATA [4552520D380D] HANDLER [parseViewMode]
dev:8972019-12-14 03:23:50.840 am debugSharpAquos - getMutex 96 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 03:23:50.829 am debugSharpAquos - getMutex 96 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 03:23:50.604 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 466 (parse)
dev:8972019-12-14 03:23:50.554 am debugSharpAquos - request 95 - request = [WIDE? ] to 192.168.254.205:10002
dev:8972019-12-14 03:23:50.532 am debugSharpAquos - request 95 - Socket [open] CMD [WIDE] Params [?] Handler [parseViewMode]
dev:8972019-12-14 03:23:50.526 am debugSharpAquos - getMutex 95 - Acquired mutex permit
dev:8972019-12-14 03:23:50.508 am debugSharpAquos - parseInput - response 'ERR'
dev:8972019-12-14 03:23:50.492 am debugSharpAquos - parse 95 - command response [[ERR, 1]] - handler [parseInput]
dev:8972019-12-14 03:23:50.468 am debugSharpAquos - parse 95 - Processing DATA [4552520D310D] HANDLER [parseInput]
dev:8972019-12-14 03:23:50.440 am debugSharpAquos - parse 95 - RAW DATA [4552520D310D] HANDLER [parseInput]
dev:8972019-12-14 03:23:49.524 am debugSharpAquos - getMutex 95 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 03:23:49.518 am debugSharpAquos - getMutex 95 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 03:23:49.261 am debugSharpAquos - request 94 - request = [IAVD? ] to 192.168.254.205:10002
dev:8972019-12-14 03:23:49.255 am debugSharpAquos - request 94 - Socket [open] CMD [IAVD] Params [?] Handler [parseInput]
dev:8972019-12-14 03:23:49.237 am debugSharpAquos - getMutex 94 - Acquired mutex permit
dev:8972019-12-14 03:23:48.280 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 442 (parse)
dev:8972019-12-14 03:23:48.251 am debugSharpAquos - parseVolume - response 'ERR'
dev:8972019-12-14 03:23:48.245 am debugSharpAquos - getMutex 94 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 03:23:48.239 am debugSharpAquos - parse 94 - command response [[ERR, 2]] - handler [parseVolume]
dev:8972019-12-14 03:23:48.233 am debugSharpAquos - getMutex 94 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 03:23:48.227 am debugSharpAquos - parse 94 - Processing DATA [4552520D320D] HANDLER [parseVolume]
dev:8972019-12-14 03:23:48.221 am debugSharpAquos - parse 94 - RAW DATA [4552520D320D] HANDLER [parseVolume]
dev:8972019-12-14 03:23:48.056 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 442 (parse)
dev:8972019-12-14 03:23:48.014 am debugSharpAquos - parseVolume - response 'ERR'
dev:8972019-12-14 03:23:47.990 am debugSharpAquos - parse 93 - command response [[ERR, 2]] - handler [parseVolume]
dev:8972019-12-14 03:23:47.985 am debugSharpAquos - parse 93 - Processing DATA [4552520D320D] HANDLER [parseVolume]
dev:8972019-12-14 03:23:47.969 am debugSharpAquos - request 93 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 03:23:47.959 am debugSharpAquos - request 93 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 03:23:47.953 am debugSharpAquos - getMutex 93 - Acquired mutex permit
dev:8972019-12-14 03:23:47.948 am debugSharpAquos - parse 93 - RAW DATA [4552520D320D] HANDLER [parseMute]
dev:8972019-12-14 03:23:47.864 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 449 (parse)
dev:8972019-12-14 03:23:47.837 am debugSharpAquos - parseMute - response 'ERR'
dev:8972019-12-14 03:23:47.811 am debugSharpAquos - parse 92 - command response [[ERR, 1]] - handler [parseMute]
dev:8972019-12-14 03:23:47.795 am debugSharpAquos - parse 92 - Processing DATA [4552520D310D] HANDLER [parseMute]
dev:8972019-12-14 03:23:47.789 am debugSharpAquos - parse 92 - RAW DATA [4552520D310D] HANDLER [parseMute]
dev:8972019-12-14 03:23:47.694 am debugSharpAquos - request 92 - request = [MUTE? ] to 192.168.254.205:10002
dev:8972019-12-14 03:23:47.689 am debugSharpAquos - parse 91 - command response [OK] - data pending
dev:8972019-12-14 03:23:47.683 am debugSharpAquos - parse 91 - RAW DATA [4F4B0D] HANDLER [parsePower]
dev:8972019-12-14 03:23:47.677 am debugSharpAquos - request 92 - Socket [open] CMD [MUTE] Params [?] Handler [parseMute]
dev:8972019-12-14 03:23:47.650 am debugSharpAquos - getMutex 92 - Acquired mutex permit
dev:8972019-12-14 03:23:47.398 am debugSharpAquos - request 91 - request = [POWR? ] to 192.168.254.205:10002
dev:8972019-12-14 03:23:47.392 am debugSharpAquos - request 91 - Socket [open] CMD [POWR] Params [?] Handler [parsePower]
dev:8972019-12-14 03:23:47.385 am debugSharpAquos - getMutex 91 - Acquired mutex permit
dev:8972019-12-14 03:23:47.380 am debugSharpAquos - getDeviceState() Starting
dev:8972019-12-14 03:23:47.313 am debugSharpAquos - releaseMutex 90 - Released mutex permit
dev:8972019-12-14 03:23:47.305 am debugSharpAquos - parse 90 - command response [ERR]
dev:8972019-12-14 03:23:47.299 am debugSharpAquos - parse 90 - RAW DATA [4552520D] HANDLER [parse]
dev:8972019-12-14 03:23:47.126 am debugSharpAquos - request 90 - request = [RSPW2 ] to 192.168.254.205:10002
dev:8972019-12-14 03:23:47.120 am debugSharpAquos - request 90 - Socket [open] CMD [RSPW] Params [2] Handler [parse]
dev:8972019-12-14 03:23:47.115 am debugSharpAquos - getMutex 90 - Acquired mutex permit
dev:8972019-12-14 03:23:47.104 am debugSharpAquos - initialize - Poll Rate set to every 5 minutes
dev:8972019-12-14 03:23:45.655 am debugSharpAquos - openSocket: Socket opened.
dev:8972019-12-14 03:23:44.640 am debugSharpAquos - openSocket: Connecting to 192.168.254.205:10002
dev:8972019-12-14 03:23:44.627 am debugSharpAquos - initialize - Set DNI = [9CC7D1ED5F5F]
dev:8972019-12-14 03:23:44.582 am debugSharpAquos - initialize - IP: 192.168.254.205 PORT: 10002 USER: null PASS: null Poll Rate: 5
dev:8972019-12-14 03:23:44.067 am debugSharpAquos - closeSocket: Socket closed.
dev:8972019-12-14 03:23:43.206 am debugSharpAquos - releaseMutex ?89? - Released mutex permit
dev:8972019-12-14 03:23:43.197 am debugSharpAquos - socketStatus - Socket [open] Message [receive error: Stream closed.]
dev:8972019-12-14 03:23:43.015 am debugSharpAquos - closeSocket: Socket close requested.
dev:8972019-12-14 03:23:42.605 am debugSharpAquos - initialize - Driver v0.30
A volume up, volume down log, seems a little slow to respond too....
dev:8972019-12-14 03:40:04.850 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 442 (parse)
dev:8972019-12-14 03:40:04.765 am debugSharpAquos - parseVolume - response 'ERR'
dev:8972019-12-14 03:40:04.753 am debugSharpAquos - parse 133 - command response [[ERR, 2]] - handler [parseVolume]
dev:8972019-12-14 03:40:04.747 am debugSharpAquos - parse 133 - Processing DATA [4552520D320D] HANDLER [parseVolume]
dev:8972019-12-14 03:40:04.729 am debugSharpAquos - parse 133 - RAW DATA [4552520D320D] HANDLER [parseVolume]
dev:8972019-12-14 03:40:03.226 am debugSharpAquos - request 139 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 03:40:03.217 am debugSharpAquos - request 139 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 03:40:03.207 am debugSharpAquos - getMutex 139 - Acquired mutex permit
dev:8972019-12-14 03:40:03.188 am debugSharpAquos - releaseMutex 132 - Released mutex permit
dev:8972019-12-14 03:40:03.183 am debugSharpAquos - parse 132- Could not process command response [[ERR, OK]]
dev:8972019-12-14 03:40:03.170 am debugSharpAquos - parse 132 - command response [[ERR, OK]] - handler [parse]
dev:8972019-12-14 03:40:03.165 am debugSharpAquos - parse 132 - Processing DATA [4552520D4F4B0D] HANDLER [parse]
dev:8972019-12-14 03:40:03.159 am debugSharpAquos - parse 132 - RAW DATA [4552520D4F4B0D] HANDLER [parse]
dev:8972019-12-14 03:40:02.945 am debugSharpAquos - request 138 - request = [RCKY32 ] to 192.168.254.205:10002
dev:8972019-12-14 03:40:02.936 am debugSharpAquos - request 138 - Socket [open] CMD [RCKY] Params [32] Handler [parse]
dev:8972019-12-14 03:40:02.921 am debugSharpAquos - getMutex 138 - Acquired mutex permit
dev:8972019-12-14 03:40:01.914 am debugSharpAquos - getMutex 138 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 03:40:01.908 am debugSharpAquos - getMutex 138 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 03:40:01.883 am debugSharpAquos - volumeDown()
dev:8972019-12-14 03:39:59.098 am errorjava.lang.NumberFormatException: For input string: "ERR" on line 442 (parse)
dev:8972019-12-14 03:39:59.058 am debugSharpAquos - parseVolume - response 'ERR'
dev:8972019-12-14 03:39:59.053 am debugSharpAquos - parse 131 - command response [[ERR, 2]] - handler [parseVolume]
dev:8972019-12-14 03:39:59.045 am debugSharpAquos - parse 131 - Processing DATA [4552520D320D] HANDLER [parseVolume]
dev:8972019-12-14 03:39:59.035 am debugSharpAquos - parse 131 - RAW DATA [4552520D320D] HANDLER [parseVolume]
dev:8972019-12-14 03:39:58.893 am debugSharpAquos - request 137 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 03:39:58.887 am debugSharpAquos - request 137 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 03:39:58.882 am debugSharpAquos - getMutex 137 - Acquired mutex permit
dev:8972019-12-14 03:39:58.783 am debugSharpAquos - releaseMutex 130 - Released mutex permit
dev:8972019-12-14 03:39:58.752 am debugSharpAquos - parse 130- Could not process command response [[ERR, OK]]
dev:8972019-12-14 03:39:58.746 am debugSharpAquos - parse 130 - command response [[ERR, OK]] - handler [parse]
dev:8972019-12-14 03:39:58.741 am debugSharpAquos - parse 130 - Processing DATA [4552520D4F4B0D] HANDLER [parse]
dev:8972019-12-14 03:39:58.736 am debugSharpAquos - parse 130 - RAW DATA [4552520D4F4B0D] HANDLER [parse]
dev:8972019-12-14 03:39:58.631 am debugSharpAquos - request 136 - request = [RCKY33 ] to 192.168.254.205:10002
dev:8972019-12-14 03:39:58.624 am debugSharpAquos - request 136 - Socket [open] CMD [RCKY] Params [33] Handler [parse]
dev:8972019-12-14 03:39:58.616 am debugSharpAquos - getMutex 136 - Acquired mutex permit
dev:8972019-12-14 03:39:57.612 am debugSharpAquos - getMutex 136 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 03:39:57.607 am debugSharpAquos - getMutex 136 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 03:39:57.597 am debugSharpAquos - volumeUp()
Hmm...
This should fix the parsing.... Final version for the night...
/**
* Sharp Aquos TV for Hubitat
* Works on Sharp TVs
* asynchronous, polling control of most Sharp TVs made from 2010 through 2015
*
* VERY losely based on: https://github.com/halkeye/sharp.aquos.devicetype.groovy
* Modified for Hubitat by CybrMage
*/
def version() {return "v0.31"}
import groovy.transform.Field
@Field static java.util.concurrent.Semaphore mutex = new java.util.concurrent.Semaphore(1)
@Field static volatile String currentHandler = "parse"
@Field static volatile String tv_channel_DC2U = ""
@Field static volatile String tv_channel_DC2L = ""
@Field static volatile String tv_channel_DC10 = ""
@Field static volatile String tv_channel_DC11 = ""
@Field static volatile Integer SequenceNumber = 0
@Field static volatile Integer ParseSequence = 0
@Field static volatile Long LastMutex = 0
preferences {
input("destIp", "text", title: "IP", description: "The IP Address of the Sharp TV",required:true)
input("destPort", "number", title: "Port", description: "The IP port of the Sharp TV", required:true)
input("login", "text", title: "Login", description: "The login username")
input("password", "password", title: "Password", description: "The login password")
input ("logDebug", "bool", title: "Enable debug logging", defaultValue: true)
def pollTime = [:]
pollTime << ["1" : "Retry every minute"]
pollTime << ["5" : "Retry every 5 minutes"]
pollTime << ["10" : "Retry every 10 minutes"]
pollTime << ["15" : "Retry every 15 minutes"]
pollTime << ["30" : "Retry every 30 minutes"]
pollTime << ["60" : "Retry every 1 hour"]
input ("pollRate", "enum", title: "Device poll rate", options: pollTime, defaultValue: "5")
// input("altMUTE", "bool", title: "Use alternate MUTE method", description: "(enable if MUTE/UNMUTE do not work)", defaultValue: false)
}
metadata {
definition (name: "Sharp Aquos TV", namespace: "SharpAquos", author: "various") {
capability "Actuator"
capability "AudioVolume"
// capability "TV"
capability "Initialize"
capability "Switch"
capability "Refresh"
attribute "input", "string"
attribute "inputName", "string"
attribute "3DMode", "string"
attribute "3DModeName", "string"
attribute "SleepTimer", "string"
attribute "SleepTimerSetting", "string"
attribute "ViewMode", "string"
attribute "ViewModeName", "string"
attribute "SurroundMode", "string"
attribute "SurroundModeName", "string"
attribute "VideoMode", "string"
attribute "VideoModeName", "string"
attribute "channel_type", "string"
attribute "channel_source", "string"
attribute "channel", "string"
command "channelUp"
command "channelDown"
// command "on"
// command "off"
command "toggleMute"
// command "mute"
// command "unmute"
command "set3DMode", [[name:"3D Mode", type: "ENUM", description: "Select a 3D Mode", constraints: getvalid3DModes()]]
command "setSleepTimer", [[name:"Sleep Timer Setting", type: "ENUM", description: "Set a Sleep Timer", constraints: getvalidSleepTimes()]]
command "setViewMode", [[name: "View Mode ID*", type: "NUMBER"]]
command "setSurroundMode", [[name: "Surround Mode ID*", type: "NUMBER"]]
command "setVideoMode", [[name: "AV Mode ID*", type: "NUMBER"]]
command "inputNext"
command "inputSelect", [[name: "Input ID*", type: "NUMBER"]]
command "inputRemoteCommand", [[name: "Remote Control Command ID*", type: "NUMBER"]]
command "setChannel", [[name:"ChannelType", type: "ENUM", description: "Select channel Type", constraints: ["Analog","Digital"]],[name:"ChannelSource", type: "ENUM", description: "Select channel Source", constraints: ["Air","Cable"]],[name:"ChannelID", type:"STRING"]]
command "testParse", [[name: "Handler*", type:"STRING"],[name: "Data*", type: "STRING"]]
command "testCommand", [[name: "CMD*", type:"STRING"],[name: "PARAM*", type: "STRING"]]
// command "volumeUp"
// command "volumeDown"
}
}
def refresh() {
getDeviceState()
}
def initialize() {
log_debug "initialize - Driver " + version()
unschedule()
mutex.release()
closeSocket()
pauseExecution(500)
if ((destIp == null)||(destIp == "")) {
log_debug "Initialize error. TV IP Address not set"
return
}
if ((destPort == null)||(destPort == "")) {
log_debug "request error. TV IP Port not set"
return
}
pollRate = pollRate ?: "5"
log_debug "initialize - IP: ${destIp} PORT: ${destPort} USER: ${login} PASS: ${password} Poll Rate: ${pollRate}"
currentHandler = "parse"
// set the deviceNetworkIdentifier. Ideally, this should be the MAC address of the device
// If the MAC can not be determined, use the IP address
def TVmac = null
def macTries = 0
while ((macTries < 5) && (TVmac == null)) {
macTries++
TVmac = getMACFromIP(destIp)
if (TVmac == null) {
log_debug "initialize - TV mac address not yet available. Retry in 1 second."
pauseExecution(1000)
}
}
if (TVmac != null) {
device.deviceNetworkId = "$TVmac"
} else {
device.deviceNetworkId = convertIPtoHex(destIp)
}
log_debug "initialize - Set DNI = [${device.deviceNetworkId}]"
if (openSocket() == false) {
log_debug "initialize - Could not connect to TV. Retry pending"
runIn(60,"initialize")
return
}
switch(pollRate) {
case "1" :
runEvery1Minute("getDeviceState")
log_debug("initialize - Poll Rate to every 1 minute")
break
case "5" :
runEvery5Minutes("getDeviceState")
log_debug("initialize - Poll Rate set to every 5 minutes")
break
case "10" :
runEvery10Minutes("getDeviceState")
log_debug("initialize - Poll Rate set to every 10 minutes")
break
case "15" :
runEvery15Minutes("getDeviceState")
log_debug("initialize - Poll Rate set to every 15 minutes")
break
case "30" :
runEvery30Minutes("getDeviceState")
log_debug("initialize - Poll Rate set to every 30 minutes")
break
case "60" :
runEvery1hour("getDeviceState")
log_debug("initialize - Poll Rate set to every 1 hour")
break
}
request("RSPW","2")
getDeviceState()
}
def closeSocket() {
log_debug("closeSocket: Socket close requested.")
state.socketState = "closing"
interfaces.rawSocket.close()
state.socketState = "closed"
pauseExecution(1000)
mutex.release()
log_debug("closeSocket: Socket closed.")
}
def openSocket() {
if (state.socketState == "open") {
log_debug("openSocket: Socket already opened.")
return true
}
log_debug("openSocket: Connecting to ${destIp}:${destPort}")
try {
interfaces.rawSocket.connect(destIp,destPort as int, readDelay: 50)
pauseExecution(1000)
state.socketState = "open"
log_debug("openSocket: Socket opened.")
return true
}
catch(e) {
log_debug("openSocket: exception = [${e}]")
state.socketState == "closed"
return false
}
}
def updated() {
log_debug "updated - IP: ${destIp} PORT: ${destPort} USER: ${login} PASS: ${password}"
initialize()
}
def installed() {
log_debug "installed"
}
// global constants
def getvalidSleepTimes() {
return [
0: "Off",
1: "30 Minutes",
2: "60 Minutes",
3: "90 Minutes",
4: "120 Minutes"
]
}
def getvalid3DModes() {
return [
0: "3D Off",
1: "2D to 3D",
2: "SBS",
3: "TAB",
4: "3D to 2D (SBS)",
5: "3D to 2D (TAB)",
6: "3D auto",
7: "2D auto"
]
}
def getvalidViewModes() {
return [
1: "Side Bar",
2: "S.Stretch",
3: "Zoom",
4: "Stretch",
5: "Normal [PC]",
6: "Zoom [PC]",
7: "Stretch [PC]",
8: "Dot by Dot",
9: "Full Screen",
10: "Auto",
11: "Original"
]
}
def getvalidSurroundModes() {
return [
1: "Normal (On)",
2: "Off",
4: "3D Hall",
5: "3D Movie",
6: "3D Standard",
7: "3D Stadium"
]
}
def getvalidVideoModes() {
return [
1: "STANDARD",
2: "MOVIE",
3: "GAME",
4: "USER",
5: "DYNAMIC (Fixed)",
6: "DYNAMIC",
7: "PC",
8: "x.v.Color",
14: "STANDARD (3D)",
15: "MOVIE (3D)",
16: "GAME (3D)",
100: "AUTO"
]
}
// NOTE: valid inputs based on LE84x/LE74x models.
// They may need to be modified to reflect the inputs on other models
def getvalidInputs() {
return [
0: "TV",
1: "HDMI IN 1",
2: "HDMI IN 2",
3: "HDMI IN 3",
4: "HDMI IN 4",
5: "COMPONENT",
6: "VIDEO 1",
7: "VIDEO 2",
8: "PC IN"
]
}
def getvalidRemoteCommands() {
return [
0: "0",
1: "1",
2: "2",
3: "3",
4: "4",
5: "5",
6: "6",
7: "7",
8: "8",
9: "9",
10: ".",
11: "ENT",
12: "POWER",
13: "DISPLAY",
14: "POWER (SOURCE)",
15: "REWIND",
16: "PLAY",
17: "FAST FORWARD",
18: "PAUSE",
19: "SKIP BACK",
20: "STOP",
21: "SKIP FORWARD",
22: "REC",
23: "OPTION",
24: "SLEEP",
27: "CC",
28: "AV MODE",
29: "VIEW MODE",
30: "FLASHBACK",
31: "MUTE",
32: "VOL -",
33: "VOL +",
34: "CH Up",
35: "CH Down",
36: "INPUT",
38: "MENU",
39: "SmartCentral",
40: "ENTER",
41: "UP",
42: "DOWN",
43: "LEFT",
44: "RIGHT",
45: "RETURN",
46: "EXIT",
47: "FAVORITE CH",
48: "3D Surround",
49: "AUDIO",
50: "A (red)",
51: "B (green)",
52: "C (blue)",
53: "D (yellow)",
54: "FREEZE",
55: "FAV APP 1",
56: "FAV APP 2",
57: "FAV APP 3",
58: "3D",
59: "NETFLIX",
60: "AAL",
61: "MANUAL"
]
}
// This is the primary parser for the device responses
def parse(String rawData) {
def PID = ParseSequence++
log_debug("parse ${PID} - RAW DATA [${rawData}] HANDLER [${currentHandler}]")
if ((rawData == null) || (rawData == "")) {
log_debug "parse ${PID} - command response 'NULL'"
// release the mutex on error
releaseMutex()
return
}
if (rawData.take(8) == "4552520D") {
// received 'ERR' response...
while (rawData.take(8) == "4552520D") { rawData = rawData.substring(8) }
log_debug "parse ${PID} - command response [ERR]"
if (currentHandler == "parseInput") {
// error response from IAVD == input is TV
parseInput(0)
}
if (rawData == "") {
releaseMutex(PID)
return
}
} else if (rawData == "4F4B0D") {
// received 'OK' response...
if (currentHandler == "parse") {
log_debug "parse ${PID} - command response [OK]"
releaseMutex(PID)
return
} else {
log_debug "parse ${PID} - command response [OK] - data pending"
return
}
} else if (rawData.take(6) == "4F4B0D") {
while (rawData.take(6) == "4F4B0D") {
rawData = rawData.substring(6)
}
}
log_debug "parse ${PID} - Processing DATA [${rawData}] HANDLER [${currentHandler}]"
def resp = new String(hubitat.helper.HexUtils.hexStringToByteArray(rawData))
if ((resp == null) || (resp == "")) {
log_debug "parse ${PID} - Could not decode command response [${rawData}]"
// release the mutex on error
releaseMutex(PID)
return
}
resp = resp.tokenize("\r")
if ((resp != null) && (resp[0] != "")) {
log_debug "parse ${PID} - command response [${resp}] - handler [${currentHandler}]"
if ((resp != null) && (resp != "") && (resp.size() > 0)) {
if (currentHandler == "parseVolume") parseVolume(resp[0])
if (currentHandler == "parseMute") parseMute(resp[0])
if (currentHandler == "parsePower") parsePower(resp[0])
if (currentHandler == "parseInput") parseInput(resp[0])
if (currentHandler == "parseViewMode") parseViewMode(resp[0])
if (currentHandler == "parseSurroundMode") parseSurroundMode(resp[0])
if (currentHandler == "parseVideoMode") parseVideoMode(resp[0])
if (currentHandler == "parse3DMode") parse3DMode(resp[0])
if (currentHandler == "parseSleepTimer") parseSleepTimer(resp[0])
if (currentHandler == "parseDCCH") parseDCCH(resp[0])
if (currentHandler == "parseDA2P") parseDA2P(resp[0])
if (currentHandler == "parseDC2U") parseDC2U(resp[0])
if (currentHandler == "parseDC2L") parseDC2L(resp[0])
if (currentHandler == "parseDC10") parseDC10(resp[0])
if (currentHandler == "parseDC11") parseDC11(resp[0])
if (currentHandler == "parse") {
log_debug "parse ${PID}- Could not process command response [${resp}]"
}
}
} else {
log_debug "parse ${PID} - Could not decode command response [${resp}]"
}
// release the mutex on completion
releaseMutex(PID)
}
def parseVolume(resp) {
log_debug "parseVolume - response '${resp}'"
def VOLdata = resp.toInteger()
sendEvent(name: "volume", value: VOLdata ?: 0)
log_debug "parseVolume - SET - volume [${VOLdata ?: 0}]"
}
def parseMute(resp) {
log_debug "parseMute - response '${resp}'"
def MUTEdata = resp.toInteger()
def val = (MUTEdata == 2) ? "unmuted" : "muted"
sendEvent(name: "mute", value: val)
log_debug "parseMute - SET - mute [${val}]"
}
def parsePower(resp) {
log_debug "parsePower - response '${resp}'"
def POWRdata = resp.toInteger()
def val = (POWRdata == 1) ? "on" : "off"
sendEvent(name: "power", value: val)
sendEvent(name: "switch", value: val)
log_debug "parsePower - SET - power [${val}]"
}
def parseInput(resp) {
log_debug "parseInput - response '${resp}'"
val = resp.toInteger()
if ((val != null) && (validInputs[val] != null)) {
sendEvent(name: "input", value: val)
sendEvent(name: "inputName", value: validInputs[val])
log_debug "parseInput - SET - input [${val}] InputName [${validInputs[val]}]"
} else {
log_debug "parseInput - ERROR - Invalid Input [${val}]"
}
}
def parse3DMode(resp) {
log_debug "parse3DMode - response '${resp}'"
val = resp.toInteger()
if ((val != null) && (valid3DModes[val] != null)) {
sendEvent(name: "3DMode", value: val)
sendEvent(name: "3DModeName", value: valid3DModes[val])
log_debug "parse3DMode - SET - 3DMode [${val}] 3DModeName [${valid3DModes[val]}]"
} else {
log_debug "parse3DMode - ERROR - Invalid 3DMode [${val}]"
}
}
def parseSleepTimer(resp) {
log_debug "parseSleepTimer - response '${resp}'"
val = resp.toInteger()
if ((val != null) && (validSleepTimes[val] != null)) {
sendEvent(name: "SleepTimer", value: val)
sendEvent(name: "SleepTimerSetting", value: validSleepTimes[val])
log_debug "parseSleepTimer - SET - SleepTimer [${val}] SleepTimerSetting [${validSleepTimes[val]}]"
} else {
log_debug "parseSleepTimer - ERROR - Invalid SleepTimer [${val}]"
}
}
def parseViewMode(resp) {
log_debug "parseViewMode - response '${resp}'"
val = resp.toInteger()
if ((val != null) && (validViewModes[val] != null)) {
sendEvent(name: "ViewMode", value: val)
sendEvent(name: "ViewModeName", value: validViewModes[val])
log_debug "parseViewMode - SET - ViewMode [${val}] ViewModeName [${validViewModes[val]}]"
} else {
log_debug "parseViewMode - ERROR - Invalid ViewMode [${val}]"
}
}
def parseSurroundMode(resp) {
log_debug "parseSurround - response '${resp}'"
val = resp.toInteger()
if ((val != null) && (validSurroundModes[val] != null)) {
sendEvent(name: "SurroundMode", value: val)
sendEvent(name: "SurroundModeName", value: validSurroundModes[val])
log_debug "parseSurroundMode - SET - SurroundMode [${val}] SurroundModeName [${validSurroundModes[val]}]"
} else {
log_debug "parseSurroundMode - ERROR - Invalid SurroundMode [${val}]"
}
}
def parseVideoMode(resp) {
log_debug "parseVideoMode - response '${resp}'"
val = resp.toInteger()
if ((val != null) && (validVideoModes[val] != null)) {
sendEvent(name: "VideoMode", value: val)
sendEvent(name: "VideoModeName", value: validVideoModes[val])
log_debug "parseVideoMode - SET - VideoMode [${val}] VideoModeName [${validVideoModes[val]}]"
} else {
log_debug "parseVideoMode - ERROR - Invalid VideoMode [${val}]"
}
}
def parseDCCH(resp) {
log_debug "parseDCCH - response '${resp}'"
sendEvent(name: "channel_type", value: "Analog")
sendEvent(name: "channel_source", value: "Air/Cable")
sendEvent(name: "channel", value: resp)
log_debug "parseDCCH - SET - channel_type [Analog] channel_source [Air/Cable] channel [${resp}]"
}
def parseDA2P(resp) {
// TV returns channel data in a different format than required to set the channel...
log_debug "parseDA2P - response '${resp}'"
sendEvent(name: "channel_type", value: "Digital")
sendEvent(name: "channel_source", value: "Air")
// def channel = resp.tokenize(".")
// def chMajor = chnl[0].toInteger()
// def chMinor = chnl[1].toInteger()
// def channel = chMajor.toString() + "." + chMinor.toString()
sendEvent(name: "channel", value: resp)
log_debug "parseDA2P - SET - channel_type [Digital] channel_source [Air] channel [${resp}]"
}
def parseDC2U(resp) {
log_debug "parseDC2U - response '${resp}'"
sendEvent(name: "channel_type", value: "Digital")
sendEvent(name: "channel_source", value: "Cable")
try {
tv_channel_DC2U = resp.toInteger()
} catch(e) {
log_debug "parseDC2U - ERROR - could not process response [${resp}]"
return false
}
def channel = resp.toInteger().toString() + ".0"
sendEvent(name: "channel", value: channel)
log_debug "parseDC2U - SET - channel_type [Digital] channel_source [Air] channel [${channel}]"
}
def parseDC2L(resp) {
log_debug "parseDC2L - response '${resp}'"
sendEvent(name: "channel_type", value: "Digital")
sendEvent(name: "channel_source", value: "Cable")
try {
tv_channel_DC2L = resp.toInteger()
} catch(e) {
log_debug "parseDC2L - ERROR - could not process response [${resp}]"
return false
}
def channel = tv_channel_DC2U + "." + tv_channel_DC2L
sendEvent(name: "channel", value: channel)
log_debug "parseDC2L - SET - channel_type [Digital] channel_source [Air] channel [${channel}]"
}
def parseDC10(resp) {
log_debug "parseDC10 - response '${resp}'"
sendEvent(name: "channel_type", value: "Digital")
sendEvent(name: "channel_source", value: "Cable")
tv_channel_DC10 = resp
def channel = null
try {
channel = (tv_channel_DC10 ?: "?") + resp.toInteger().toString()
} catch(e) {
log_debug "parseDC10 - ERROR - could not process response [${resp}]"
return false
}
sendEvent(name: "channel", value: channel)
log_debug "parseDC10 - SET - channel_type [Digital] channel_source [Air] channel [${channel}]"
}
def parseDC11(resp) {
log_debug "parseDC11 - response '${resp}'"
sendEvent(name: "channel_type", value: "Digital")
sendEvent(name: "channel_source", value: "Cable")
tv_channel_DC11 = resp
def channel = null
try {
channel = tv_channel_DC11 + (tv_channel_DC10 ?: "????")
} catch(e) {
log_debug "parseDC11 - ERROR - could not process response [${resp}]"
return false
}
sendEvent(name: "channel", value: channel)
log_debug "parseDC11 - SET - channel_type [Digital] channel_source [Air] channel [${channel}]"
}
def getDeviceState() {
log_debug("getDeviceState() Starting")
request("POWR","?","parsePower")
request("MUTE","?","parseMute")
request("VOLM","?","parseVolume")
request("IAVD","?","parseInput")
request("WIDE","?","parseViewMode")
request("ACSU","?","parseSurroundMode")
request("AVMD","?","parseVideoMode")
request("TDCH","?","parse3DMode")
request("OFTM","?","parseSleepTimer")
def currentInput = device.latestValue("input")
if ((currentInput == 0) || (currentInput == "0")) {
// only query channel data if the input is set to TV
getChannelStatus()
}
log_debug("getDeviceState() Completed.")
}
def getChannelStatus() {
log_debug("getChannelStatus() Starting")
request("DCCH","?","parseDCCH")
request("DA2P","?","parseDA2P")
request("DC2U","?","parseDC2U")
request("DC2L","?","parseDC2L")
request("DC10","?","parseDC10")
request("DC11","?","parseDC11")
log_debug("getChannelStatus() Completed.")
}
// device commands
def setVolume(val) {
log_debug("setVolume(${val})")
if (val < 0) { val = 0 }
if (val > 60) { val = 60 }
val = sprintf("%d",val)
sendEvent(name: "mute", value: "unmuted")
sendEvent(name: "volume", value: val)
request("VOLM",val)
}
def toggleMute() {
log_debug("toggleMute()")
request("RCKY","31")
pauseExecution(250)
request("MUTE","?","parseMute")
log_debug("toggleMute() - completed")
}
def mute() {
def currentMute = device.latestValue("mute")
log_debug("mute() Currently: [${currentMute}]")
// if (currentMute == "muted") {
// log_debug("mute() - Already muted - command complete")
// return
// }
// if (altMUTE != true) {
request("MUTE","1")
// } else {
// request("RCKY","31")
// }
pauseExecution(250)
request("MUTE","?","parseMute")
log_debug("mute() - completed")
}
def unmute() {
def currentMute = device.latestValue("mute")
log_debug("unmute() Currently: [${currentMute}]")
// log_debug("unmute() Currently: [${currentMute}] altMUTE [${altMUTE}]")
// if (currentMute == "unmuted") {
// log_debug("unmute() - Already unmuted - command complete")
// return
// }
// if (altMUTE != true) {
request("MUTE","2")
// } else {
// request("RCKY","31")
// }
pauseExecution(250)
request("MUTE","?","parseMute")
log_debug("mute() - completed")
}
def volumeUp() {
log_debug("volumeUp()")
request("RCKY","33")
request("VOLM","?","parseVolume")
}
def volumeDown() {
log_debug("volumeDown()")
request("RCKY","32")
request("VOLM","?","parseVolume")
}
def inputNext() {
log_debug("inputNext()")
def current = device.currentValue("input")
def selectedInputs = ["1","2","3","4","5","6","7","8","1"]
def semaphore = 0
for(selectedInput in selectedInputs) {
if(semaphore == 1) {
return inputSelect(selectedInput)
}
if(current == selectedInput) {
semaphore = 1
}
}
return inputSelect(selectedInputs[0])
}
def inputRemoteCommand(cmd) {
log_debug("inputRemoteCommand(${cmd})")
def cmdInt = cmd.toInteger()
if ((cmdInt == null) || (validRemoteCommands[cmdInt] == null)) {
log_debug("inputRemoteCommand - invalid command (${cmd})")
}
log_debug("executing inputRemoteCommand('${validRemoteCommands[cmdInt]}')")
request("RCKY",cmdInt.toString())
}
def inputSelect(channel) {
log_debug("inputSelect(${channel})")
sendEvent(name: "input", value: channel)
if ((channel == 0) || (channel == "0")) {
// 0 = TV - not handled by IAVD command
request("ITVD","0")
} else {
request("IAVD",channel.toString())
}
request("IAVD","?", "parseInput")
}
def on() {
log_debug("Turn on TV")
request("POWR","1")
request("POWR","?", "parsePower")
}
def off() {
log_debug("Turn off TV")
request("POWR","0")
request("POWR","?", "parsePower")
}
def channelUp() {
log_debug("Channel Up")
request("CHUP","0")
}
def channelDown() {
log_debug("Channel Down")
request("CHDW","0")
}
def set3DMode(Mode) {
def idx = null
getvalid3DModes().each { key, value -> if (value == Mode) idx = key }
log_debug("set3DMode(${Mode}) IDX: [${idx}]")
if (idx == null) {
log_debug("set3DMode(${Mode}) - ERROR - 3D Mode is not valid")
return
}
request("TDCH",idx.toString())
request("TDCH","?","parse3DMode")
}
def setSleepTimer(Mode) {
def idx = null
getvalidSleepTimes().each { key, value -> if (value == Mode) idx = key }
log_debug("setSleepTimer(${Mode}) IDX: [${idx}]")
if (idx == null) {
log_debug("setSleepTimer(${Mode}) - ERROR - Sleep Timer value is not valid")
return
}
request("OFTM",idx.toString())
request("OFTM","?","parseSleepTimer")
}
def setViewMode(Mode) {
log_debug("setViewMode(${Mode})")
if (validViewModes[Mode as int] == null) {
log_debug("setViewMode(${Mode}) - Invalid View mode ID")
return
}
log_debug("setViewMode - Setting view mode (${Mode} = ${validViewModes[Mode as int]}]")
request("WIDE",Mode.toString())
request("WIDE","?","parseViewMode")
}
def setSurroundMode(Mode) {
log_debug("setSurroundMode(${Mode})")
if (validSurroundModes[Mode as int] == null) {
log_debug("setSurroundMode(${Mode}) - Invalid Surround mode ID")
return
}
log_debug("setSurroundMode - Setting view mode (${Mode} = ${validSurroundModes[Mode as int]}]")
request("ACSU",Mode.toString())
request("ACSU","?","parseSurroundMode")
}
def setVideoMode(Mode) {
log_debug("setVideoMode(${Mode})")
if (validVideoModes[Mode as int] == null) {
log_debug("setVideoMode(${Mode}) - Invalid Video mode ID")
return
}
log_debug("setVideoMode - Setting video mode (${Mode} = ${validVideoModes[Mode as int]}]")
request("AVMD",Mode.toString())
request("AVMD","?","parseVideoMode")
}
def setChannel(String Type, String Source, String ID) {
log_debug("setChannel(\"${Type}\",\"${Source}\",\"${ID}\")")
def setID = null
try {
setID = ID.toFloat()
} catch(e) {
log_debug("setChannel - ERROR - Invalid channel Identifier")
return
}
if (Type == "Analog") {
// analog channel... Air = 2 - 69, cable = 1 - 135
try {
setID = ID.toInteger()
} catch(e) {
log_debug("setChannel - ERROR - Invalid channel Identifier for Analog channels")
return
}
if (Source == "Air") {
if ((setID < 2) || (setID > 69)) {
log_debug("setChannel - ERROR - Invalid channel Identifier for Analog Air channels")
return
}
} else {
if ((setID < 1) || (setID > 135)) {
log_debug("setChannel - ERROR - Invalid channel Identifier for Analog Cable channels")
return
}
}
request("DCCH",setID.toString())
} else {
if (Source == "Air") {
if (ID.length() == 4) {
def chanx = ID.substring(0,1)+"."+ID.substring(2,3)
ID = chanx
}
if (ID.contains(".")) {
def chan = ID.tokenize(".")
def chanMajor = chan[0].toInteger()
def chanMinor = chan[1].toInteger()
if ((chanMajor < 0) || (chanMajor > 99) || (chanMinor < 0) || (chanMinor > 99)) {
log_debug("setChannel - ERROR - Invalid channel Identifier for Digital Air channels")
return
}
setID = ("00"+chanMajor.toString()).substring(-2) + ("00"+chanMinor.toString()).substring(-2)
}
request("DA2P",setID)
} else {
// Digital cable channels
if (ID.contains(".")) {
// two part channel numbers
def chan = ID.tokenize(".")
def chanMajor = chan[0].toInteger()
def chanMinor = chan[1].toInteger()
if ((chanMajor < 0) || (chanMajor > 999) || (chanMinor < 0) || (chanMinor > 999)) {
log_debug("setChannel - ERROR - Invalid channel Identifier for Digital Cable channels")
return
}
setID = ("000" + chanMajor.toString()).reverse().take(3).reverse() + "." + ("000" + chanMinor.toString()).reverse().take(3).reverse()
request("DC2U",("000" + chanMajor.toString()).reverse().take(3).reverse())
request("DC2L",("000" + chanMinor.toString()).reverse().take(3).reverse())
} else {
// one part channel numbers
setID = ID.toInteger()
if (setID > 99999) {
log_debug("setChannel - ERROR - Invalid channel Identifier for Digital Cable channels")
return
}
if (setID < 10000) {
request("DC10",setID.toString())
request("DC11","0")
} else {
request("DC10",(setID.toString()).reverse().take(4).reverse())
request("DC11",(setID.toString()).take(1))
}
}
}
}
if (setID == null) {
log_debug("setChannel - ERROR Could not determine channels to set for [${Type}][${Source}][${ID}]")
return
}
log_debug("setChannel - Setting [${Type}][${Source}] Channel [${setID}]")
pauseExecution(250)
getChannelStatus()
}
// support functions
def testParse(String handler, String Response) {
log_debug "testParse - Handler '${handler}' [${Response}]"
currentHandler = handler
parse(Response)
}
def testCommand(String CMD, String PARAMS) {
log_debug "rawCommand - CMD [${CMD}] PARAMS [${PARAMS}]"
request(CMD,PARAMS)
}
def getMutex(Integer PId = null) {
def MaxMutexLock = 60
def permitTries = 0
def permit = false
def PID = (PId == null) ? "?"+(SequenceNumber-1).toString()+"?" : PId
if (!checkConnectionState()) {
log_debug("getMutex ${PID} - Failed to acquired mutex permit - socket closed")
return false
}
while ((permitTries < MaxMutexLock) && (permit == false)) {
permitTries++
permit = mutex.tryAcquire()
if (permit == false) {
if (permitTries == 1) {
log_debug("getMutex ${PID} - mutex permit not yet available. Waiting up to ${MaxMutexLock} seconds.")
def MutexLag = now() - LastMutex
if (MutexLag > (MaxMutexLock * 2)) {
log_debug("getMutex ${PID} - Detected stale mutex - forcing mutex release.")
mutex.release()
}
}
pauseExecution(1000)
}
}
if (permit) {
LastMutex = now()
log_debug("getMutex ${PID} - Acquired mutex permit")
} else {
log_debug("getMutex ${PID} - Failed to acquired mutex permit")
}
return permit
}
//def releaseMutex(Integer PId = null) {
// def PID = (PId == null) ? "?"+(SequenceNumber-1).toString()+"?" : PId
// log_debug("releaseMutex ${PID} - Released mutex permit")
// mutex.release()
//}
def releaseMutex(PId = null) {
def PID = (PId == null) ? "?"+(SequenceNumber-1).toString()+"?" : PId
log_debug("releaseMutex ${PID} - Released mutex permit")
mutex.release()
}
def checkConnectionState() {
if ((state.socketState == "closed") || (state.socketState == "closing")) {
log_debug("checkConnectionState - ERROR. TV connection is closed. Attempting reconnect.")
// release the mutex on error
releaseMutex()
if (openSocket() == false) {
log_debug("checkConnectionState - ERROR. Unable to reconnect to TV.")
return false
}
}
return true
}
def request(String CMD, String Params , String callbackHandler = "parse") {
// block the thread if the mutex is locked
// def CR = "\r\n" // required for emulator
def CR = "\r" // required for actual TV
def PID = SequenceNumber++
if (getMutex(PID) == false) {
log_debug("request ${PID} - Socket [${state.socketState}] CMD [${CMD}] Params [${Params}] Handler [${callbackHandler}]")
log_debug("request ${PID} - ERROR. Unable to acquire mutex permit.")
return
}
log_debug("request ${PID} - Socket [${state.socketState}] CMD [${CMD}] Params [${Params}] Handler [${callbackHandler}]")
if (destIp == null) {
log_debug("request ${PID} - ERROR. TV IP Address not set")
// release the mutex on error
releaseMutex(PID)
}
def Credentials = ""
if (destPort == null) {
log_debug("request ${PID} - ERROR. TV IP Port not set")
// release the mutex on error
releaseMutex(PID)
return
}
if (login != null) {
if ((password == null) || (password == "")) {
log_debug("request ${PID} - ERROR. TV login username is set, so login password must also be set")
// release the mutex on error
releaseMutex(PID)
return
}
Credentials = login + "\r" + password + "\r"
}
CMD = CMD + " "
Params = Params + " "
def Command = Credentials + CMD.take(4) + Params.take(4)
currentHandler = callbackHandler
// log_debug("request - Trying raw socket...")
try {
log_debug("request ${PID} - request = [" + Command + "] to ${destIp}:${destPort}")
interfaces.rawSocket.sendMessage(Command + CR)
}
catch(e) {
log_debug("request - rawSocket - Caught exception '${e}'")
// release the mutex on error
releaseMutex(PID)
return
}
pauseExecution(250)
}
def socketStatus(String message) {
log_debug("socketStatus - Socket [${state.socketState}] Message [${message}]")
// error is implied - release any open mutex
releaseMutex()
if (state.socketState == "closed") { return }
switch(message) {
case "send error: Broken pipe (Write failed)":
state.socketState = "closed"
log_debug("socketStatus - Write Failed - Attempting reconnect")
openSocket()
return
break;
case "receive error: Stream closed.":
// if (state.socketState != "closing") {
// log_debug("socketStatus - Stream Closed - Attempting reconnect")
// return openSocket()
// }
state.socketState = "closed"
return
break;
case "send error: Socket closed":
state.socketState = "closed"
log_debug("socketStatus - Socket Closed - Attempting reconnect")
return openSocket()
break;
}
log_debug("socketStatus - UNHANDLED socket status [${message}]")
}
private log_debug(debugData) {
log.debug("SharpAquos - " + debugData)
}
private String convertIPtoHex(ipAddress) {
String hex = ipAddress.tokenize( '.' ).collect { String.format( '%02X', it.toInteger() ) }.join()
return hex
}
private String convertPortToHex(port) {
String hexport = port.toString().format( '%04X', port.toInteger() )
return hexport
}
Yep, looks better....no errors.....
dev:8972019-12-14 06:40:27.854 am debugSharpAquos - releaseMutex 28 - Released mutex permit
dev:8972019-12-14 06:40:27.850 am debugSharpAquos - parseVolume - SET - volume [2]
dev:8972019-12-14 06:40:27.846 am debugSharpAquos - parseVolume - response '2'
dev:8972019-12-14 06:40:27.843 am debugSharpAquos - parse 28 - command response [[2]] - handler [parseVolume]
dev:8972019-12-14 06:40:27.838 am debugSharpAquos - parse 28 - Processing DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:40:27.833 am debugSharpAquos - parse 28 - RAW DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:40:27.749 am debugSharpAquos - request 30 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 06:40:27.743 am debugSharpAquos - request 30 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 06:40:27.738 am debugSharpAquos - getMutex 30 - Acquired mutex permit
dev:8972019-12-14 06:40:27.585 am debugSharpAquos - releaseMutex 27 - Released mutex permit
dev:8972019-12-14 06:40:27.582 am debugSharpAquos - parse 27 - command response [OK]
dev:8972019-12-14 06:40:27.578 am debugSharpAquos - parse 27 - RAW DATA [4F4B0D] HANDLER [parse]
dev:8972019-12-14 06:40:27.483 am debugSharpAquos - request 29 - request = [RCKY33 ] to 192.168.254.205:10002
dev:8972019-12-14 06:40:27.477 am debugSharpAquos - request 29 - Socket [open] CMD [RCKY] Params [33] Handler [parse]
dev:8972019-12-14 06:40:27.472 am debugSharpAquos - getMutex 29 - Acquired mutex permit
dev:8972019-12-14 06:40:27.461 am debugSharpAquos - volumeUp()
dev:8972019-12-14 06:40:26.747 am debugSharpAquos - releaseMutex 26 - Released mutex permit
dev:8972019-12-14 06:40:26.743 am debugSharpAquos - parseVolume - SET - volume [2]
dev:8972019-12-14 06:40:26.734 am debugSharpAquos - parseVolume - response '2'
dev:8972019-12-14 06:40:26.730 am debugSharpAquos - parse 26 - command response [[2]] - handler [parseVolume]
dev:8972019-12-14 06:40:26.725 am debugSharpAquos - parse 26 - Processing DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:40:26.721 am debugSharpAquos - parse 26 - RAW DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:40:26.661 am debugSharpAquos - request 28 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 06:40:26.651 am debugSharpAquos - request 28 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 06:40:26.642 am debugSharpAquos - getMutex 28 - Acquired mutex permit
dev:8972019-12-14 06:40:26.497 am debugSharpAquos - releaseMutex 25 - Released mutex permit
dev:8972019-12-14 06:40:26.493 am debugSharpAquos - parse 25 - command response [OK]
dev:8972019-12-14 06:40:26.490 am debugSharpAquos - parse 25 - RAW DATA [4F4B0D] HANDLER [parse]
dev:8972019-12-14 06:40:26.396 am debugSharpAquos - request 27 - request = [RCKY33 ] to 192.168.254.205:10002
dev:8972019-12-14 06:40:26.392 am debugSharpAquos - request 27 - Socket [open] CMD [RCKY] Params [33] Handler [parse]
dev:8972019-12-14 06:40:26.376 am debugSharpAquos - getMutex 27 - Acquired mutex permit
dev:8972019-12-14 06:40:26.365 am debugSharpAquos - volumeUp()
dev:8972019-12-14 06:40:26.263 am debugSharpAquos - releaseMutex 24 - Released mutex permit
dev:8972019-12-14 06:40:26.259 am debugSharpAquos - parseVolume - SET - volume [2]
dev:8972019-12-14 06:40:26.255 am debugSharpAquos - parseVolume - response '2'
dev:8972019-12-14 06:40:26.252 am debugSharpAquos - parse 24 - command response [[2]] - handler [parseVolume]
dev:8972019-12-14 06:40:26.247 am debugSharpAquos - parse 24 - Processing DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:40:26.242 am debugSharpAquos - parse 24 - RAW DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:40:26.128 am debugSharpAquos - request 26 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 06:40:26.115 am debugSharpAquos - request 26 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 06:40:26.109 am debugSharpAquos - getMutex 26 - Acquired mutex permit
dev:8972019-12-14 06:40:25.950 am debugSharpAquos - releaseMutex 23 - Released mutex permit
dev:8972019-12-14 06:40:25.947 am debugSharpAquos - parse 23 - command response [OK]
dev:8972019-12-14 06:40:25.943 am debugSharpAquos - parse 23 - RAW DATA [4F4B0D] HANDLER [parse]
dev:8972019-12-14 06:40:25.853 am debugSharpAquos - request 25 - request = [RCKY33 ] to 192.168.254.205:10002
dev:8972019-12-14 06:40:25.847 am debugSharpAquos - request 25 - Socket [open] CMD [RCKY] Params [33] Handler [parse]
dev:8972019-12-14 06:40:25.842 am debugSharpAquos - getMutex 25 - Acquired mutex permit
dev:8972019-12-14 06:40:25.833 am debugSharpAquos - volumeUp()
dev:8972019-12-14 06:40:25.787 am debugSharpAquos - releaseMutex 22 - Released mutex permit
dev:8972019-12-14 06:40:25.783 am debugSharpAquos - parseVolume - SET - volume [2]
dev:8972019-12-14 06:40:25.780 am debugSharpAquos - parseVolume - response '2'
dev:8972019-12-14 06:40:25.764 am debugSharpAquos - parse 22 - command response [[2]] - handler [parseVolume]
dev:8972019-12-14 06:40:25.743 am debugSharpAquos - parse 22 - Processing DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:40:25.738 am debugSharpAquos - parse 22 - RAW DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:40:25.439 am debugSharpAquos - request 24 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 06:40:25.429 am debugSharpAquos - request 24 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 06:40:25.415 am debugSharpAquos - getMutex 24 - Acquired mutex permit
dev:8972019-12-14 06:40:25.244 am debugSharpAquos - releaseMutex 21 - Released mutex permit
dev:8972019-12-14 06:40:25.241 am debugSharpAquos - parse 21 - command response [OK]
dev:8972019-12-14 06:40:25.237 am debugSharpAquos - parse 21 - RAW DATA [4F4B0D] HANDLER [parse]
dev:8972019-12-14 06:40:25.160 am debugSharpAquos - request 23 - request = [RCKY33 ] to 192.168.254.205:10002
dev:8972019-12-14 06:40:25.154 am debugSharpAquos - request 23 - Socket [open] CMD [RCKY] Params [33] Handler [parse]
dev:8972019-12-14 06:40:25.149 am debugSharpAquos - getMutex 23 - Acquired mutex permit
dev:8972019-12-14 06:40:25.140 am debugSharpAquos - volumeUp()
dev:8972019-12-14 06:40:24.630 am debugSharpAquos - releaseMutex 20 - Released mutex permit
dev:8972019-12-14 06:40:24.627 am debugSharpAquos - parseVolume - SET - volume [2]
dev:8972019-12-14 06:40:24.622 am debugSharpAquos - parseVolume - response '2'
dev:8972019-12-14 06:40:24.619 am debugSharpAquos - parse 20 - command response [[2]] - handler [parseVolume]
dev:8972019-12-14 06:40:24.614 am debugSharpAquos - parse 20 - Processing DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:40:24.610 am debugSharpAquos - parse 20 - RAW DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:40:24.487 am debugSharpAquos - request 22 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 06:40:24.478 am debugSharpAquos - request 22 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 06:40:24.473 am debugSharpAquos - getMutex 22 - Acquired mutex permit
dev:8972019-12-14 06:40:24.302 am debugSharpAquos - releaseMutex 19 - Released mutex permit
dev:8972019-12-14 06:40:24.298 am debugSharpAquos - parse 19 - command response [OK]
dev:8972019-12-14 06:40:24.295 am debugSharpAquos - parse 19 - RAW DATA [4F4B0D] HANDLER [parse]
dev:8972019-12-14 06:40:24.219 am debugSharpAquos - request 21 - request = [RCKY33 ] to 192.168.254.205:10002
dev:8972019-12-14 06:40:24.213 am debugSharpAquos - request 21 - Socket [open] CMD [RCKY] Params [33] Handler [parse]
dev:8972019-12-14 06:40:24.209 am debugSharpAquos - getMutex 21 - Acquired mutex permit
dev:8972019-12-14 06:40:24.202 am debugSharpAquos - volumeUp()
dev:8972019-12-14 06:40:23.067 am debugSharpAquos - releaseMutex 18 - Released mutex permit
dev:8972019-12-14 06:40:23.063 am debugSharpAquos - parseVolume - SET - volume [2]
dev:8972019-12-14 06:40:23.060 am debugSharpAquos - parseVolume - response '2'
dev:8972019-12-14 06:40:23.056 am debugSharpAquos - parse 18 - command response [[2]] - handler [parseVolume]
dev:8972019-12-14 06:40:23.052 am debugSharpAquos - parse 18 - Processing DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:40:23.048 am debugSharpAquos - parse 18 - RAW DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:40:22.970 am debugSharpAquos - request 20 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 06:40:22.967 am debugSharpAquos - request 20 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 06:40:22.952 am debugSharpAquos - getMutex 20 - Acquired mutex permit
dev:8972019-12-14 06:40:22.766 am debugSharpAquos - releaseMutex 17 - Released mutex permit
dev:8972019-12-14 06:40:22.763 am debugSharpAquos - parse 17 - command response [OK]
dev:8972019-12-14 06:40:22.759 am debugSharpAquos - parse 17 - RAW DATA [4F4B0D] HANDLER [parse]
dev:8972019-12-14 06:40:22.697 am debugSharpAquos - request 19 - request = [RCKY33 ] to 192.168.254.205:10002
dev:8972019-12-14 06:40:22.692 am debugSharpAquos - request 19 - Socket [open] CMD [RCKY] Params [33] Handler [parse]
dev:8972019-12-14 06:40:22.687 am debugSharpAquos - getMutex 19 - Acquired mutex permit
dev:8972019-12-14 06:40:22.680 am debugSharpAquos - volumeUp()
dev:8972019-12-14 06:39:56.498 am debugSharpAquos - getDeviceState() Completed.
dev:8972019-12-14 06:39:56.374 am debugSharpAquos - releaseMutex 16 - Released mutex permit
dev:8972019-12-14 06:39:56.370 am debugSharpAquos - parseSleepTimer - SET - SleepTimer [0] SleepTimerSetting [Off]
dev:8972019-12-14 06:39:56.336 am debugSharpAquos - parseSleepTimer - response '0'
dev:8972019-12-14 06:39:56.333 am debugSharpAquos - parse 16 - command response [[0]] - handler [parseSleepTimer]
dev:8972019-12-14 06:39:56.328 am debugSharpAquos - parse 16 - Processing DATA [300D] HANDLER [parseSleepTimer]
dev:8972019-12-14 06:39:56.324 am debugSharpAquos - parse 16 - RAW DATA [300D] HANDLER [parseSleepTimer]
dev:8972019-12-14 06:39:56.220 am debugSharpAquos - request 18 - request = [OFTM? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:56.214 am debugSharpAquos - request 18 - Socket [open] CMD [OFTM] Params [?] Handler [parseSleepTimer]
dev:8972019-12-14 06:39:56.210 am debugSharpAquos - getMutex 18 - Acquired mutex permit
dev:8972019-12-14 06:39:56.079 am debugSharpAquos - releaseMutex 15 - Released mutex permit
dev:8972019-12-14 06:39:56.076 am debugSharpAquos - parse3DMode - SET - 3DMode [0] 3DModeName [3D Off]
dev:8972019-12-14 06:39:56.066 am debugSharpAquos - parse3DMode - response '0'
dev:8972019-12-14 06:39:56.063 am debugSharpAquos - parse 15 - command response [[0]] - handler [parse3DMode]
dev:8972019-12-14 06:39:56.059 am debugSharpAquos - parse 15 - Processing DATA [300D] HANDLER [parse3DMode]
dev:8972019-12-14 06:39:56.046 am debugSharpAquos - parse 15 - RAW DATA [300D] HANDLER [parse3DMode]
dev:8972019-12-14 06:39:55.953 am debugSharpAquos - request 17 - request = [TDCH? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:55.947 am debugSharpAquos - request 17 - Socket [open] CMD [TDCH] Params [?] Handler [parse3DMode]
dev:8972019-12-14 06:39:55.942 am debugSharpAquos - getMutex 17 - Acquired mutex permit
dev:8972019-12-14 06:39:55.843 am debugSharpAquos - releaseMutex 14 - Released mutex permit
dev:8972019-12-14 06:39:55.839 am debugSharpAquos - parseVideoMode - SET - VideoMode [4] VideoModeName [USER]
dev:8972019-12-14 06:39:55.831 am debugSharpAquos - parseVideoMode - response '4'
dev:8972019-12-14 06:39:55.827 am debugSharpAquos - parse 14 - command response [[4]] - handler [parseVideoMode]
dev:8972019-12-14 06:39:55.822 am debugSharpAquos - parse 14 - Processing DATA [340D] HANDLER [parseVideoMode]
dev:8972019-12-14 06:39:55.818 am debugSharpAquos - parse 14 - RAW DATA [340D] HANDLER [parseVideoMode]
dev:8972019-12-14 06:39:55.687 am debugSharpAquos - request 16 - request = [AVMD? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:55.682 am debugSharpAquos - request 16 - Socket [open] CMD [AVMD] Params [?] Handler [parseVideoMode]
dev:8972019-12-14 06:39:55.677 am debugSharpAquos - getMutex 16 - Acquired mutex permit
dev:8972019-12-14 06:39:55.536 am debugSharpAquos - releaseMutex 13 - Released mutex permit
dev:8972019-12-14 06:39:55.522 am debugSharpAquos - parseSurroundMode - SET - SurroundMode [2] SurroundModeName [Off]
dev:8972019-12-14 06:39:55.508 am debugSharpAquos - parseSurround - response '2'
dev:8972019-12-14 06:39:55.487 am debugSharpAquos - parse 13 - command response [[2]] - handler [parseSurroundMode]
dev:8972019-12-14 06:39:55.483 am debugSharpAquos - parse 13 - Processing DATA [320D] HANDLER [parseSurroundMode]
dev:8972019-12-14 06:39:55.477 am debugSharpAquos - parse 13 - RAW DATA [320D] HANDLER [parseSurroundMode]
dev:8972019-12-14 06:39:55.418 am debugSharpAquos - request 15 - request = [ACSU? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:55.407 am debugSharpAquos - request 15 - Socket [open] CMD [ACSU] Params [?] Handler [parseSurroundMode]
dev:8972019-12-14 06:39:55.397 am debugSharpAquos - getMutex 15 - Acquired mutex permit
dev:8972019-12-14 06:39:55.314 am debugSharpAquos - releaseMutex 12 - Released mutex permit
dev:8972019-12-14 06:39:55.306 am debugSharpAquos - parseViewMode - SET - ViewMode [8] ViewModeName [Dot by Dot]
dev:8972019-12-14 06:39:55.302 am debugSharpAquos - parseViewMode - response '8'
dev:8972019-12-14 06:39:55.298 am debugSharpAquos - parse 12 - command response [[8]] - handler [parseViewMode]
dev:8972019-12-14 06:39:55.281 am debugSharpAquos - parse 12 - Processing DATA [380D] HANDLER [parseViewMode]
dev:8972019-12-14 06:39:55.276 am debugSharpAquos - parse 12 - RAW DATA [380D] HANDLER [parseViewMode]
dev:8972019-12-14 06:39:55.204 am debugSharpAquos - releaseMutex 11 - Released mutex permit
dev:8972019-12-14 06:39:55.200 am debugSharpAquos - parseViewMode - SET - ViewMode [1] ViewModeName [Side Bar]
dev:8972019-12-14 06:39:55.188 am debugSharpAquos - parseViewMode - response '1'
dev:8972019-12-14 06:39:55.185 am debugSharpAquos - parse 11 - command response [[1]] - handler [parseViewMode]
dev:8972019-12-14 06:39:55.180 am debugSharpAquos - parse 11 - Processing DATA [310D] HANDLER [parseViewMode]
dev:8972019-12-14 06:39:55.176 am debugSharpAquos - parse 11 - RAW DATA [310D] HANDLER [parseViewMode]
dev:8972019-12-14 06:39:55.142 am debugSharpAquos - request 14 - request = [WIDE? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:55.136 am debugSharpAquos - request 14 - Socket [open] CMD [WIDE] Params [?] Handler [parseViewMode]
dev:8972019-12-14 06:39:55.131 am debugSharpAquos - getMutex 14 - Acquired mutex permit
dev:8972019-12-14 06:39:54.870 am debugSharpAquos - request 13 - request = [IAVD? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:54.859 am debugSharpAquos - request 13 - Socket [open] CMD [IAVD] Params [?] Handler [parseInput]
dev:8972019-12-14 06:39:54.854 am debugSharpAquos - getMutex 13 - Acquired mutex permit
dev:8972019-12-14 06:39:54.736 am debugSharpAquos - releaseMutex 10 - Released mutex permit
dev:8972019-12-14 06:39:54.732 am debugSharpAquos - parseVolume - SET - volume [2]
dev:8972019-12-14 06:39:54.711 am debugSharpAquos - parseVolume - response '2'
dev:8972019-12-14 06:39:54.700 am debugSharpAquos - parse 10 - command response [[2]] - handler [parseVolume]
dev:8972019-12-14 06:39:54.695 am debugSharpAquos - parse 10 - Processing DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:39:54.690 am debugSharpAquos - parse 10 - RAW DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:39:54.597 am debugSharpAquos - request 12 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:54.587 am debugSharpAquos - request 12 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 06:39:54.583 am debugSharpAquos - getMutex 12 - Acquired mutex permit
dev:8972019-12-14 06:39:54.409 am debugSharpAquos - releaseMutex 9 - Released mutex permit
dev:8972019-12-14 06:39:54.405 am debugSharpAquos - parseMute - SET - mute [unmuted]
dev:8972019-12-14 06:39:54.392 am debugSharpAquos - parseMute - response '2'
dev:8972019-12-14 06:39:54.382 am debugSharpAquos - parse 9 - command response [[2]] - handler [parseMute]
dev:8972019-12-14 06:39:54.377 am debugSharpAquos - parse 9 - Processing DATA [320D] HANDLER [parseMute]
dev:8972019-12-14 06:39:54.373 am debugSharpAquos - parse 9 - RAW DATA [320D] HANDLER [parseMute]
dev:8972019-12-14 06:39:54.304 am debugSharpAquos - request 11 - request = [MUTE? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:54.300 am debugSharpAquos - request 11 - Socket [open] CMD [MUTE] Params [?] Handler [parseMute]
dev:8972019-12-14 06:39:54.294 am debugSharpAquos - getMutex 11 - Acquired mutex permit
dev:8972019-12-14 06:39:54.185 am debugSharpAquos - releaseMutex 8 - Released mutex permit
dev:8972019-12-14 06:39:54.181 am debugSharpAquos - parsePower - SET - power [on]
dev:8972019-12-14 06:39:54.175 am debugSharpAquos - parsePower - response '1'
dev:8972019-12-14 06:39:54.165 am debugSharpAquos - parse 8 - command response [[1]] - handler [parsePower]
dev:8972019-12-14 06:39:54.160 am debugSharpAquos - parse 8 - Processing DATA [310D] HANDLER [parsePower]
dev:8972019-12-14 06:39:54.155 am debugSharpAquos - parse 8 - RAW DATA [310D] HANDLER [parsePower]
dev:8972019-12-14 06:39:54.037 am debugSharpAquos - request 10 - request = [POWR? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:54.026 am debugSharpAquos - request 10 - Socket [open] CMD [POWR] Params [?] Handler [parsePower]
dev:8972019-12-14 06:39:54.022 am debugSharpAquos - getMutex 10 - Acquired mutex permit
dev:8972019-12-14 06:39:54.018 am debugSharpAquos - getDeviceState() Starting
dev:8972019-12-14 06:39:53.933 am debugSharpAquos - releaseMutex 7 - Released mutex permit
dev:8972019-12-14 06:39:53.929 am debugSharpAquos - parse 7 - command response [OK]
dev:8972019-12-14 06:39:53.925 am debugSharpAquos - parse 7 - RAW DATA [4F4B0D] HANDLER [parse]
dev:8972019-12-14 06:39:53.756 am debugSharpAquos - request 9 - request = [RSPW2 ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:53.750 am debugSharpAquos - request 9 - Socket [open] CMD [RSPW] Params [2] Handler [parse]
dev:8972019-12-14 06:39:53.745 am debugSharpAquos - getMutex 9 - Acquired mutex permit
dev:8972019-12-14 06:39:53.741 am debugSharpAquos - initialize - Poll Rate set to every 5 minutes
dev:8972019-12-14 06:39:53.683 am debugSharpAquos - openSocket: Socket opened.
dev:8972019-12-14 06:39:52.668 am debugSharpAquos - openSocket: Connecting to 192.168.254.205:10002
dev:8972019-12-14 06:39:52.660 am debugSharpAquos - initialize - Set DNI = [9CC7D1ED5F5F]
dev:8972019-12-14 06:39:52.632 am debugSharpAquos - initialize - IP: 192.168.254.205 PORT: 10002 USER: null PASS: null Poll Rate: 5
dev:8972019-12-14 06:39:52.117 am debugSharpAquos - closeSocket: Socket closed.
dev:8972019-12-14 06:39:51.206 am debugSharpAquos - releaseMutex ?8? - Released mutex permit
dev:8972019-12-14 06:39:51.197 am debugSharpAquos - socketStatus - Socket [open] Message [receive error: Stream closed.]
dev:8972019-12-14 06:39:51.091 am debugSharpAquos - closeSocket: Socket close requested.
dev:8972019-12-14 06:39:51.028 am debugSharpAquos - initialize - Driver v0.31
dev:8972019-12-14 06:39:51.022 am debugSharpAquos - updated - IP: 192.168.254.205 PORT: 10002 USER: null PASS: null
dev:8972019-12-14 06:39:22.656 am debugSharpAquos - getDeviceState() Completed.
dev:8972019-12-14 06:39:22.485 am debugSharpAquos - releaseMutex 6 - Released mutex permit
dev:8972019-12-14 06:39:22.482 am debugSharpAquos - parseSleepTimer - SET - SleepTimer [0] SleepTimerSetting [Off]
dev:8972019-12-14 06:39:22.470 am debugSharpAquos - parseSleepTimer - response '0'
dev:8972019-12-14 06:39:22.459 am debugSharpAquos - parse 6 - command response [[0]] - handler [parseSleepTimer]
dev:8972019-12-14 06:39:22.454 am debugSharpAquos - parse 6 - Processing DATA [300D] HANDLER [parseSleepTimer]
dev:8972019-12-14 06:39:22.449 am debugSharpAquos - parse 6 - RAW DATA [300D] HANDLER [parseSleepTimer]
dev:8972019-12-14 06:39:22.386 am debugSharpAquos - request 8 - request = [OFTM? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:22.381 am debugSharpAquos - request 8 - Socket [open] CMD [OFTM] Params [?] Handler [parseSleepTimer]
dev:8972019-12-14 06:39:22.375 am debugSharpAquos - getMutex 8 - Acquired mutex permit
dev:8972019-12-14 06:39:22.247 am debugSharpAquos - releaseMutex 5 - Released mutex permit
dev:8972019-12-14 06:39:22.244 am debugSharpAquos - parse3DMode - SET - 3DMode [0] 3DModeName [3D Off]
dev:8972019-12-14 06:39:22.234 am debugSharpAquos - parse3DMode - response '0'
dev:8972019-12-14 06:39:22.224 am debugSharpAquos - parse 5 - command response [[0]] - handler [parse3DMode]
dev:8972019-12-14 06:39:22.219 am debugSharpAquos - parse 5 - Processing DATA [300D] HANDLER [parse3DMode]
dev:8972019-12-14 06:39:22.214 am debugSharpAquos - parse 5 - RAW DATA [300D] HANDLER [parse3DMode]
dev:8972019-12-14 06:39:22.120 am debugSharpAquos - request 7 - request = [TDCH? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:22.114 am debugSharpAquos - request 7 - Socket [open] CMD [TDCH] Params [?] Handler [parse3DMode]
dev:8972019-12-14 06:39:22.109 am debugSharpAquos - getMutex 7 - Acquired mutex permit
dev:8972019-12-14 06:39:21.962 am debugSharpAquos - releaseMutex 4 - Released mutex permit
dev:8972019-12-14 06:39:21.959 am debugSharpAquos - parseVideoMode - SET - VideoMode [4] VideoModeName [USER]
dev:8972019-12-14 06:39:21.948 am debugSharpAquos - parseVideoMode - response '4'
dev:8972019-12-14 06:39:21.939 am debugSharpAquos - parse 4 - command response [[4]] - handler [parseVideoMode]
dev:8972019-12-14 06:39:21.933 am debugSharpAquos - parse 4 - Processing DATA [340D] HANDLER [parseVideoMode]
dev:8972019-12-14 06:39:21.928 am debugSharpAquos - parse 4 - RAW DATA [340D] HANDLER [parseVideoMode]
dev:8972019-12-14 06:39:21.854 am debugSharpAquos - request 6 - request = [AVMD? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:21.849 am debugSharpAquos - request 6 - Socket [open] CMD [AVMD] Params [?] Handler [parseVideoMode]
dev:8972019-12-14 06:39:21.843 am debugSharpAquos - getMutex 6 - Acquired mutex permit
dev:8972019-12-14 06:39:21.719 am debugSharpAquos - releaseMutex 3 - Released mutex permit
dev:8972019-12-14 06:39:21.711 am debugSharpAquos - parseSurroundMode - SET - SurroundMode [2] SurroundModeName [Off]
dev:8972019-12-14 06:39:21.697 am debugSharpAquos - parseSurround - response '2'
dev:8972019-12-14 06:39:21.687 am debugSharpAquos - parse 3 - command response [[2]] - handler [parseSurroundMode]
dev:8972019-12-14 06:39:21.682 am debugSharpAquos - parse 3 - Processing DATA [320D] HANDLER [parseSurroundMode]
dev:8972019-12-14 06:39:21.677 am debugSharpAquos - parse 3 - RAW DATA [320D] HANDLER [parseSurroundMode]
dev:8972019-12-14 06:39:21.624 am debugSharpAquos - openSocket: Socket opened.
dev:8972019-12-14 06:39:21.588 am debugSharpAquos - request 5 - request = [ACSU? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:21.583 am debugSharpAquos - request 5 - Socket [open] CMD [ACSU] Params [?] Handler [parseSurroundMode]
dev:8972019-12-14 06:39:21.577 am debugSharpAquos - getMutex 5 - Acquired mutex permit
dev:8972019-12-14 06:39:21.435 am debugSharpAquos - releaseMutex 2 - Released mutex permit
dev:8972019-12-14 06:39:21.431 am debugSharpAquos - parseViewMode - SET - ViewMode [8] ViewModeName [Dot by Dot]
dev:8972019-12-14 06:39:21.421 am debugSharpAquos - parseViewMode - response '8'
dev:8972019-12-14 06:39:21.411 am debugSharpAquos - parse 2 - command response [[8]] - handler [parseViewMode]
dev:8972019-12-14 06:39:21.406 am debugSharpAquos - parse 2 - Processing DATA [380D] HANDLER [parseViewMode]
dev:8972019-12-14 06:39:21.402 am debugSharpAquos - parse 2 - RAW DATA [380D] HANDLER [parseViewMode]
dev:8972019-12-14 06:39:21.321 am debugSharpAquos - request 4 - request = [WIDE? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:21.315 am debugSharpAquos - request 4 - Socket [open] CMD [WIDE] Params [?] Handler [parseViewMode]
dev:8972019-12-14 06:39:21.310 am debugSharpAquos - getMutex 4 - Acquired mutex permit
dev:8972019-12-14 06:39:21.242 am debugSharpAquos - releaseMutex 1 - Released mutex permit
dev:8972019-12-14 06:39:21.238 am debugSharpAquos - parseInput - SET - input [1] InputName [HDMI IN 1]
dev:8972019-12-14 06:39:21.234 am debugSharpAquos - parseInput - response '1'
dev:8972019-12-14 06:39:21.231 am debugSharpAquos - parse 1 - command response [[1]] - handler [parseInput]
dev:8972019-12-14 06:39:21.215 am debugSharpAquos - parse 1 - Processing DATA [310D] HANDLER [parseInput]
dev:8972019-12-14 06:39:21.211 am debugSharpAquos - parse 1 - RAW DATA [310D] HANDLER [parseInput]
dev:8972019-12-14 06:39:21.103 am debugSharpAquos - releaseMutex 0 - Released mutex permit
dev:8972019-12-14 06:39:21.094 am debugSharpAquos - parseInput - SET - input [2] InputName [HDMI IN 2]
dev:8972019-12-14 06:39:21.084 am debugSharpAquos - parseInput - response '2'
dev:8972019-12-14 06:39:21.075 am debugSharpAquos - parse 0 - command response [[2]] - handler [parseInput]
dev:8972019-12-14 06:39:21.053 am debugSharpAquos - request 3 - request = [IAVD? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:21.049 am debugSharpAquos - request 3 - Socket [open] CMD [IAVD] Params [?] Handler [parseInput]
dev:8972019-12-14 06:39:21.045 am debugSharpAquos - getMutex 3 - Acquired mutex permit
dev:8972019-12-14 06:39:21.041 am debugSharpAquos - parse 0 - Processing DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:39:21.037 am debugSharpAquos - parse 0 - RAW DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 06:39:20.788 am debugSharpAquos - request 2 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:20.782 am debugSharpAquos - request 2 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 06:39:20.777 am debugSharpAquos - getMutex 2 - Acquired mutex permit
dev:8972019-12-14 06:39:20.697 am debugSharpAquos - releaseMutex ?1? - Released mutex permit
dev:8972019-12-14 06:39:20.693 am debugSharpAquos - socketStatus - Socket [open] Message [receive error: Stream closed.]
dev:8972019-12-14 06:39:20.587 am debugSharpAquos - openSocket: Connecting to 192.168.254.205:10002
dev:8972019-12-14 06:39:20.582 am debugSharpAquos - socketStatus - Write Failed - Attempting reconnect
dev:8972019-12-14 06:39:20.576 am debugSharpAquos - releaseMutex ?1? - Released mutex permit
dev:8972019-12-14 06:39:20.573 am debugSharpAquos - socketStatus - Socket [open] Message [send error: Broken pipe (Write failed)]
dev:8972019-12-14 06:39:20.519 am debugSharpAquos - request 1 - request = [MUTE? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:20.514 am debugSharpAquos - request 1 - Socket [open] CMD [MUTE] Params [?] Handler [parseMute]
dev:8972019-12-14 06:39:20.509 am debugSharpAquos - getMutex 1 - Acquired mutex permit
dev:8972019-12-14 06:39:19.505 am debugSharpAquos - getMutex 1 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 06:39:19.500 am debugSharpAquos - getMutex 1 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 06:39:19.179 am debugSharpAquos - request 0 - request = [POWR? ] to 192.168.254.205:10002
dev:8972019-12-14 06:39:19.171 am debugSharpAquos - request 0 - Socket [open] CMD [POWR] Params [?] Handler [parsePower]
dev:8972019-12-14 06:39:19.166 am debugSharpAquos - getMutex 0 - Acquired mutex permit
dev:8972019-12-14 06:39:19.149 am debugSharpAquos - getDeviceState() Starting
Ran all day....things seemed ok...except an hour ago, started getting some errors, then more then echo app errored and the hub was almost unresponsive, saw a hub update and did that and everything is ok now. Not sure if some of my downloads caused the problem or what. Here are the logs.....
dev:6032019-12-14 08:54:12.302 pm errorEcho (v3.2.2.0) | getAvailableWakeWords Exception: java.sql.SQLException: An SQLException was provoked by the following failure: com.mchange.v2.resourcepool.ResourcePoolException: A ResourcePool cannot acquire a new resource -- the factory or source appears to be down.
app:4022019-12-14 08:54:12.302 pm errorEchoApp (v3.2.2.0) | receiveEventData Error: java.sql.SQLException: An SQLException was provoked by the following failure: com.mchange.v2.resourcepool.ResourcePoolException: A ResourcePool cannot acquire a new resource -- the factory or source appears to be down.
dev:5962019-12-14 08:54:12.110 pm errorjava.sql.SQLException: An SQLException was provoked by the following failure: com.mchange.v2.resourcepool.ResourcePoolException: A ResourcePool cannot acquire a new resource -- the factory or source appears to be down. on line 514 (updateDeviceStatus)
dev:6042019-12-14 08:54:11.553 pm errorjava.sql.SQLException: An SQLException was provoked by the following failure: com.mchange.v2.resourcepool.ResourcePoolException: A ResourcePool cannot acquire a new resource -- the factory or source appears to be down. on line 796 (refreshData)
dev:1382019-12-14 08:53:49.045 pm infoMB Walk in Closet: temperature is 72.0°F
dev:8972019-12-14 08:53:42.854 pm debugSharpAquos - releaseMutex 1507 - Released mutex permit
dev:8972019-12-14 08:53:42.849 pm debugSharpAquos - parseSleepTimer - SET - SleepTimer [0] SleepTimerSetting [Off]
dev:8972019-12-14 08:53:42.841 pm debugSharpAquos - parseSleepTimer - response '0'
dev:8972019-12-14 08:53:42.835 pm debugSharpAquos - parse 1507 - command response [[0]] - handler [parseSleepTimer]
dev:8972019-12-14 08:53:42.829 pm debugSharpAquos - parse 1507 - Processing DATA [300D] HANDLER [parseSleepTimer]
dev:8972019-12-14 08:53:42.824 pm debugSharpAquos - parse 1507 - RAW DATA [300D] HANDLER [parseSleepTimer]
dev:8972019-12-14 08:53:42.657 pm debugSharpAquos - releaseMutex 1506 - Released mutex permit
dev:8972019-12-14 08:53:42.652 pm debugSharpAquos - parseSleepTimer - SET - SleepTimer [0] SleepTimerSetting [Off]
dev:8972019-12-14 08:53:42.617 pm debugSharpAquos - parseSleepTimer - response '0'
dev:8972019-12-14 08:53:42.612 pm debugSharpAquos - parse 1506 - command response [[0]] - handler [parseSleepTimer]
dev:8972019-12-14 08:53:42.606 pm debugSharpAquos - parse 1506 - Processing DATA [300D] HANDLER [parseSleepTimer]
dev:8972019-12-14 08:53:42.601 pm debugSharpAquos - parse 1506 - RAW DATA [300D] HANDLER [parseSleepTimer]
dev:8972019-12-14 08:53:41.186 pm debugSharpAquos - releaseMutex 1505 - Released mutex permit
dev:8972019-12-14 08:53:41.181 pm debugSharpAquos - parseSleepTimer - SET - SleepTimer [4] SleepTimerSetting [120 Minutes]
dev:8972019-12-14 08:53:41.165 pm debugSharpAquos - parseSleepTimer - response '4'
dev:8972019-12-14 08:53:41.151 pm debugSharpAquos - parse 1505 - command response [[4]] - handler [parseSleepTimer]
dev:8972019-12-14 08:53:41.137 pm debugSharpAquos - parse 1505 - Processing DATA [340D] HANDLER [parseSleepTimer]
dev:8972019-12-14 08:53:41.132 pm debugSharpAquos - parse 1505 - RAW DATA [340D] HANDLER [parseSleepTimer]
dev:8972019-12-14 08:53:39.589 pm errororg.h2.jdbc.JdbcSQLException: The database has been closed [90098-197] (parse)
dev:8972019-12-14 08:53:39.056 pm debugSharpAquos - releaseMutex 1504 - Released mutex permit
dev:8972019-12-14 08:53:39.051 pm debugSharpAquos - parseSleepTimer - SET - SleepTimer [2] SleepTimerSetting [60 Minutes]
dev:8972019-12-14 08:53:39.031 pm debugSharpAquos - parseSleepTimer - response '2'
dev:8972019-12-14 08:53:39.010 pm debugSharpAquos - parse 1504 - command response [[2]] - handler [parseSleepTimer]
dev:8972019-12-14 08:53:38.988 pm debugSharpAquos - parse 1504 - Processing DATA [320D] HANDLER [parseSleepTimer]
dev:8972019-12-14 08:53:38.984 pm debugSharpAquos - parse 1504 - RAW DATA [320D] HANDLER [parseSleepTimer]
dev:8972019-12-14 08:53:37.863 pm errororg.h2.jdbc.JdbcSQLException: General error: "java.lang.IllegalStateException: This map is closed [1.4.197/4]" [50000-197] (parse)
dev:8972019-12-14 08:53:37.405 pm debugSharpAquos - releaseMutex 1503 - Released mutex permit
dev:8972019-12-14 08:53:37.400 pm debugSharpAquos - parseSleepTimer - SET - SleepTimer [1] SleepTimerSetting [30 Minutes]
dev:8972019-12-14 08:53:37.390 pm debugSharpAquos - parseSleepTimer - response '1'
dev:8972019-12-14 08:53:37.378 pm debugSharpAquos - parse 1503 - command response [[1]] - handler [parseSleepTimer]
dev:8972019-12-14 08:53:37.372 pm debugSharpAquos - parse 1503 - Processing DATA [310D] HANDLER [parseSleepTimer]
dev:8972019-12-14 08:53:37.368 pm debugSharpAquos - parse 1503 - RAW DATA [310D] HANDLER [parseSleepTimer]
dev:8972019-12-14 08:53:37.137 pm errororg.h2.jdbc.JdbcSQLException: The database has been closed [90098-197] on line 633 (getDeviceState)
dev:8972019-12-14 08:53:36.935 pm errororg.h2.jdbc.JdbcSQLException: The database has been closed [90098-197] (socketStatus)
dev:8972019-12-14 08:53:36.864 pm errororg.h2.jdbc.JdbcSQLException: The database has been closed [90098-197] (parse)
dev:8972019-12-14 08:53:28.454 pm debugSharpAquos - request 1860 - request = [OFTM? ] to 192.168.254.205:10002
dev:8972019-12-14 08:53:28.446 pm debugSharpAquos - request 1860 - Socket [open] CMD [OFTM] Params [?] Handler [parseSleepTimer]
dev:8972019-12-14 08:53:28.442 pm debugSharpAquos - getMutex 1860 - Acquired mutex permit
dev:8972019-12-14 08:53:27.437 pm debugSharpAquos - getMutex 1860 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 08:53:27.431 pm debugSharpAquos - getMutex 1860 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 08:53:27.176 pm debugSharpAquos - request 1859 - request = [TDCH? ] to 192.168.254.205:10002
dev:8972019-12-14 08:53:27.169 pm debugSharpAquos - request 1859 - Socket [open] CMD [TDCH] Params [?] Handler [parse3DMode]
dev:8972019-12-14 08:53:27.165 pm debugSharpAquos - getMutex 1859 - Acquired mutex permit
dev:8972019-12-14 08:53:26.160 pm debugSharpAquos - getMutex 1859 - Detected stale mutex - forcing mutex release.
dev:8972019-12-14 08:53:26.154 pm debugSharpAquos - getMutex 1859 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-14 08:53:25.898 pm debugSharpAquos - request 1858 - request = [AVMD? ] to 192.168.254.205:10002
dev:8972019-12-14 08:53:25.892 pm debugSharpAquos - request 1858 - Socket [open] CMD [AVMD] Params [?] Handler [parseVideoMode]
dev:8972019-12-14 08:53:25.888 pm debugSharpAquos - getMutex 1858 - Acquired mutex permit
dev:8972019-12-14 08:53:25.660 pm debugSharpAquos - openSocket: Socket opened.
dev:8972019-12-14 08:53:25.632 pm debugSharpAquos - request 1857 - request = [ACSU? ] to 192.168.254.205:10002
dev:8972019-12-14 08:53:25.625 pm debugSharpAquos - request 1857 - Socket [open] CMD [ACSU] Params [?] Handler [parseSurroundMode]
dev:8972019-12-14 08:53:25.621 pm debugSharpAquos - getMutex 1857 - Acquired mutex permit
dev:8972019-12-14 08:53:25.365 pm debugSharpAquos - request 1856 - request = [WIDE? ] to 192.168.254.205:10002
dev:8972019-12-14 08:53:25.359 pm debugSharpAquos - request 1856 - Socket [open] CMD [WIDE] Params [?] Handler [parseViewMode]
dev:8972019-12-14 08:53:25.355 pm debugSharpAquos - getMutex 1856 - Acquired mutex permit
dev:8972019-12-14 08:53:25.096 pm debugSharpAquos - request 1855 - request = [IAVD? ] to 192.168.254.205:10002
dev:8972019-12-14 08:53:25.087 pm debugSharpAquos - request 1855 - Socket [open] CMD [IAVD] Params [?] Handler [parseInput]
dev:8972019-12-14 08:53:25.083 pm debugSharpAquos - getMutex 1855 - Acquired mutex permit
dev:8972019-12-14 08:53:24.992 pm debugSharpAquos - releaseMutex 1502 - Released mutex permit
dev:8972019-12-14 08:53:24.982 pm debugSharpAquos - parseVolume - SET - volume [2]
dev:8972019-12-14 08:53:24.977 pm debugSharpAquos - parseVolume - response '2'
dev:8972019-12-14 08:53:24.965 pm debugSharpAquos - parse 1502 - command response [[2]] - handler [parseVolume]
dev:8972019-12-14 08:53:24.937 pm debugSharpAquos - parse 1502 - Processing DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 08:53:24.933 pm debugSharpAquos - parse 1502 - RAW DATA [320D] HANDLER [parseVolume]
dev:8972019-12-14 08:53:24.827 pm debugSharpAquos - request 1854 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-14 08:53:24.814 pm errororg.h2.jdbc.JdbcSQLException: IO Exception: "nio:/data/hub/hubitatdb.mv.db"; SQL statement: UPDATE DEVICE D SET D.STATE = ? WHERE D.ID = ? [90028-197] (socketStatus)
dev:8972019-12-14 08:53:24.817 pm debugSharpAquos - request 1854 - Socket [open] CMD [VOLM] Params [?] Handler [parseVolume]
dev:8972019-12-14 08:53:24.813 pm debugSharpAquos - getMutex 1854 - Acquired mutex permit
dev:8972019-12-14 08:53:24.702 pm debugSharpAquos - releaseMutex ?1853? - Released mutex permit
dev:8972019-12-14 08:53:24.697 pm debugSharpAquos - socketStatus - Socket [open] Message [receive error: Stream closed.]
dev:8972019-12-14 08:53:24.622 pm debugSharpAquos - openSocket: Connecting to 192.168.254.205:10002
dev:8972019-12-14 08:53:24.617 pm debugSharpAquos - socketStatus - Write Failed - Attempting reconnect
dev:8972019-12-14 08:53:24.608 pm debugSharpAquos - releaseMutex ?1853? - Released mutex permit
dev:8972019-12-14 08:53:24.602 pm debugSharpAquos - socketStatus - Socket [open] Message [send error: Broken pipe (Write failed)]
dev:8972019-12-14 08:53:24.555 pm debugSharpAquos - request 1853 - request = [MUTE? ] to 192.168.254.205:10002
dev:8972019-12-14 08:53:24.547 pm debugSharpAquos - request 1853 - Socket [open] CMD [MUTE] Params [?] Handler [parseMute]
dev:8972019-12-14 08:53:24.542 pm debugSharpAquos - getMutex 1853 - Acquired mutex permit
dev:8972019-12-14 08:53:24.219 pm debugSharpAquos - request 1852 - request = [POWR? ] to 192.168.254.205:10002
dev:8972019-12-14 08:53:24.211 pm debugSharpAquos - request 1852 - Socket [open] CMD [POWR] Params [?] Handler [parsePower]
dev:8972019-12-14 08:53:24.207 pm debugSharpAquos - getMutex 1852 - Acquired mutex permit
dev:8972019-12-14 08:53:24.175 pm debugSharpAquos - getDeviceState() Starting
Well... That is not good...
New Version...
/**
* Sharp Aquos TV for Hubitat
* Works on Sharp TVs
* asynchronous, polling control of most Sharp TVs made from 2010 through 2015
*
* VERY losely based on: https://github.com/halkeye/sharp.aquos.devicetype.groovy
* Modified for Hubitat by CybrMage
*/
def version() {return "v0.32"}
import groovy.transform.Field
@Field static java.util.concurrent.Semaphore mutex = new java.util.concurrent.Semaphore(1)
@Field static java.util.concurrent.Semaphore parseMutex = new java.util.concurrent.Semaphore(1)
@Field static volatile java.util.concurrent.CopyOnWriteArrayList IOBUFFER = []
@Field static volatile String tv_channel_DC2U = ""
@Field static volatile String tv_channel_DC2L = ""
@Field static volatile String tv_channel_DC10 = ""
@Field static volatile String tv_channel_DC11 = ""
@Field static volatile Integer SequenceNumber = 0
@Field static volatile Long LastMutex = 0
preferences {
input("destIp", "text", title: "IP", description: "The IP Address of the Sharp TV",required:true)
input("destPort", "number", title: "Port", description: "The IP port of the Sharp TV", required:true)
input("login", "text", title: "Login", description: "The login username")
input("password", "password", title: "Password", description: "The login password")
input ("logDebug", "bool", title: "Enable debug logging", defaultValue: true)
input ("verboseDebug", "bool", title: "Enable verbose debug logging", defaultValue: true)
input ("eventDebug", "bool", title: "Enable event logging", defaultValue: true)
def pollTime = [:]
pollTime << ["1" : "Refresh every minute"]
pollTime << ["5" : "Refresh every 5 minutes"]
pollTime << ["10" : "Refresh every 10 minutes"]
pollTime << ["15" : "Refresh every 15 minutes"]
pollTime << ["30" : "Refresh every 30 minutes"]
pollTime << ["60" : "Refresh every 1 hour"]
input ("pollRate", "enum", title: "Device poll rate", options: pollTime, defaultValue: "5")
// input("altMUTE", "bool", title: "Use alternate MUTE method", description: "(enable if MUTE/UNMUTE do not work)", defaultValue: false)
}
metadata {
definition (name: "Sharp Aquos TV", namespace: "SharpAquos", author: "various") {
capability "Actuator"
capability "AudioVolume"
// capability "TV"
capability "Initialize"
capability "Switch"
capability "Refresh"
attribute "input", "string"
attribute "inputName", "string"
attribute "3DMode", "string"
attribute "3DModeName", "string"
attribute "SleepTimer", "string"
attribute "SleepTimerSetting", "string"
attribute "ViewMode", "string"
attribute "ViewModeName", "string"
attribute "SurroundMode", "string"
attribute "SurroundModeName", "string"
attribute "VideoMode", "string"
attribute "VideoModeName", "string"
attribute "channel_type", "string"
attribute "channel_source", "string"
attribute "channel", "string"
command "channelUp"
command "channelDown"
// command "on"
// command "off"
command "toggleMute"
// command "mute"
// command "unmute"
command "set3DMode", [[name:"3D Mode", type: "ENUM", description: "Select a 3D Mode", constraints: getvalid3DModes()]]
command "setSleepTimer", [[name:"Sleep Timer Setting", type: "ENUM", description: "Set a Sleep Timer", constraints: getvalidSleepTimes()]]
command "setViewMode", [[name: "View Mode ID*", type: "NUMBER"]]
command "setSurroundMode", [[name: "Surround Mode ID*", type: "NUMBER"]]
command "setVideoMode", [[name: "AV Mode ID*", type: "NUMBER"]]
command "inputNext"
command "inputSelect", [[name: "Input ID*", type: "NUMBER"]]
command "inputRemoteCommand", [[name: "Remote Control Command ID*", type: "NUMBER"]]
command "setChannel", [[name:"ChannelType", type: "ENUM", description: "Select channel Type", constraints: ["Analog","Digital"]],[name:"ChannelSource", type: "ENUM", description: "Select channel Source", constraints: ["Air","Cable"]],[name:"ChannelID", type:"STRING"]]
command "testParse", [[name: "Handler*", type:"STRING"],[name: "Data*", type: "STRING"]]
command "testCommand", [[name: "CMD*", type:"STRING"],[name: "PARAM*", type: "STRING"]]
// command "volumeUp"
// command "volumeDown"
}
}
def refresh() {
getDeviceState()
}
def initialize() {
logDebug = logDebug ?: true
device.updateSetting("logDebug",logDebug)
verboseDebug = verboseDebug ?: true
device.updateSetting("verboseDebug",verboseDebug)
eventDebug = eventDebug ?: true
device.updateSetting("eventDebug",eventDebug)
log.debug("initialize - Driver " + version() + " debug [${logDebug}] verbose [${verboseDebug}] events [${eventDebug}]")
unschedule()
mutex.release()
parseMutex.release()
closeSocket()
pauseExecution(500)
if ((destIp == null)||(destIp == "")) {
log_error("initialize - ERROR - TV IP Address not set")
return
}
if ((destPort == null)||(destPort == "")) {
log_error("initialize - ERROR - TV IP Port not set")
return
}
pollRate = pollRate ?: "5"
log_info("initialize - IP: ${destIp} PORT: ${destPort} USER: ${login} PASS: ${password} Poll Rate: ${pollRate}")
currentHandler = "parse"
// set the deviceNetworkIdentifier. Ideally, this should be the MAC address of the device
// If the MAC can not be determined, use the IP address
def TVmac = null
def macTries = 0
while ((macTries < 5) && (TVmac == null)) {
macTries++
TVmac = getMACFromIP(destIp)
if (TVmac == null) {
log_info("initialize - TV mac address not yet available. Retry in 1 second.")
pauseExecution(1000)
}
}
if (TVmac != null) {
device.deviceNetworkId = "$TVmac"
} else {
device.deviceNetworkId = convertIPtoHex(destIp)
}
log_info("initialize - Set DNI = [${device.deviceNetworkId}]")
if (openSocket() == false) {
log_error("initialize - ERROR - Could not connect to TV. Retry pending")
runIn(60,"initialize")
return
}
switch(pollRate) {
case "1" :
runEvery1Minute("getDeviceState")
log_info("initialize - Poll Rate setto every 1 minute")
break
case "5" :
runEvery5Minutes("getDeviceState")
log_info("initialize - Poll Rate set to every 5 minutes")
break
case "10" :
runEvery10Minutes("getDeviceState")
log_info("initialize - Poll Rate set to every 10 minutes")
break
case "15" :
runEvery15Minutes("getDeviceState")
log_info("initialize - Poll Rate set to every 15 minutes")
break
case "30" :
runEvery30Minutes("getDeviceState")
log_info("initialize - Poll Rate set to every 30 minutes")
break
case "60" :
runEvery1hour("getDeviceState")
log_info("initialize - Poll Rate set to every 1 hour")
break
}
request("RSPW","2")
getDeviceState()
}
def closeSocket() {
log_debug("closeSocket: Socket close requested.")
state.socketState = "closing"
interfaces.rawSocket.close()
state.socketState = "closed"
pauseExecution(1000)
mutex.release()
parseMutex.release()
log_debug("closeSocket: Socket closed.")
}
def openSocket() {
if (state.socketState == "open") {
log_debug("openSocket: Socket already opened.")
return true
}
log_debug("openSocket: Connecting to ${destIp}:${destPort}")
try {
interfaces.rawSocket.connect(destIp,destPort as int, readDelay: 50)
pauseExecution(1000)
state.socketState = "open"
log_debug("openSocket: Socket opened.")
return true
}
catch(e) {
log_error("openSocket: exception = [${e}]")
state.socketState == "closed"
return false
}
}
def updated() {
log_debug("updated - IP: ${destIp} PORT: ${destPort} USER: ${login} PASS: ${password}")
initialize()
}
def installed() {
log_debug("installed")
}
// global constants
def getvalidSleepTimes() {
return [
0: "Off",
1: "30 Minutes",
2: "60 Minutes",
3: "90 Minutes",
4: "120 Minutes"
]
}
def getvalid3DModes() {
return [
0: "3D Off",
1: "2D to 3D",
2: "SBS",
3: "TAB",
4: "3D to 2D (SBS)",
5: "3D to 2D (TAB)",
6: "3D auto",
7: "2D auto"
]
}
def getvalidViewModes() {
return [
1: "Side Bar",
2: "S.Stretch",
3: "Zoom",
4: "Stretch",
5: "Normal [PC]",
6: "Zoom [PC]",
7: "Stretch [PC]",
8: "Dot by Dot",
9: "Full Screen",
10: "Auto",
11: "Original"
]
}
def getvalidSurroundModes() {
return [
1: "Normal (On)",
2: "Off",
4: "3D Hall",
5: "3D Movie",
6: "3D Standard",
7: "3D Stadium"
]
}
def getvalidVideoModes() {
return [
1: "STANDARD",
2: "MOVIE",
3: "GAME",
4: "USER",
5: "DYNAMIC (Fixed)",
6: "DYNAMIC",
7: "PC",
8: "x.v.Color",
14: "STANDARD (3D)",
15: "MOVIE (3D)",
16: "GAME (3D)",
100: "AUTO"
]
}
// NOTE: valid inputs based on LE84x/LE74x models.
// They may need to be modified to reflect the inputs on other models
def getvalidInputs() {
return [
0: "TV",
1: "HDMI IN 1",
2: "HDMI IN 2",
3: "HDMI IN 3",
4: "HDMI IN 4",
5: "COMPONENT",
6: "VIDEO 1",
7: "VIDEO 2",
8: "PC IN"
]
}
def getvalidRemoteCommands() {
return [
0: "0",
1: "1",
2: "2",
3: "3",
4: "4",
5: "5",
6: "6",
7: "7",
8: "8",
9: "9",
10: ".",
11: "ENT",
12: "POWER",
13: "DISPLAY",
14: "POWER (SOURCE)",
15: "REWIND",
16: "PLAY",
17: "FAST FORWARD",
18: "PAUSE",
19: "SKIP BACK",
20: "STOP",
21: "SKIP FORWARD",
22: "REC",
23: "OPTION",
24: "SLEEP",
27: "CC",
28: "AV MODE",
29: "VIEW MODE",
30: "FLASHBACK",
31: "MUTE",
32: "VOL -",
33: "VOL +",
34: "CH Up",
35: "CH Down",
36: "INPUT",
38: "MENU",
39: "SmartCentral",
40: "ENTER",
41: "UP",
42: "DOWN",
43: "LEFT",
44: "RIGHT",
45: "RETURN",
46: "EXIT",
47: "FAVORITE CH",
48: "3D Surround",
49: "AUDIO",
50: "A (red)",
51: "B (green)",
52: "C (blue)",
53: "D (yellow)",
54: "FREEZE",
55: "FAV APP 1",
56: "FAV APP 2",
57: "FAV APP 3",
58: "3D",
59: "NETFLIX",
60: "AAL",
61: "MANUAL"
]
}
def getvalidCommands() {
return [
"RSPW","POWR","ITGD","ITVD","IAVD","AVMD","VOLM","HPOS",
"VPOS","CLCK","PHSE","WIDE","MUTE","ACSU","ACHA","OFTM",
"DCCH","DA2P","DC2U","DC2L","DC10","DC11","CHUP","CHDW",
"CLCP","TVNM","MNRD","SWVN","IPPV","TDCH","RCKY"
]
}
def isValidCommand(String Command) {
if (Command == null) { Command = "NULL" }
def CMD = Command.take(4)
def valid = (getvalidCommands().indexOf(CMD) == -1) ? false : true
// log_info("isValidCommand [${CMD}] = ${valid}")
return valid
}
def getNextResponse() {
def idx = -1
if (IOBUFFER.size() > 1) {
IOBUFFER.eachWithIndex { it, i ->
// `it` is the current element, while `i` is the index
if ((isValidCommand(it) == false) && (idx == -1)) {
idx = i
}
}
}
return idx
}
// This is the primary parser for the device responses
def parse(String rawData) {
parseMutex.acquire()
rawData = new String(hubitat.helper.HexUtils.hexStringToByteArray(rawData))
IOBUFFER = IOBUFFER + rawData.tokenize("\r")
if (!isValidCommand(IOBUFFER[0])) { IOBUFFER.remove(0) }
log_info("IOBUFFER: ${IOBUFFER.size()} entries\r [${IOBUFFER}]")
while (getNextResponse() > 0) {
if (isValidCommand(IOBUFFER[0]) && !isValidCommand(IOBUFFER[1])) {
// valid command/response pair at head of buffer
def Command = IOBUFFER.remove(0)
def Response = IOBUFFER.remove(0)
log_info("parse - 1 - COMMAND [${Command}] RESPONSE [${Response}]")
if ((this."parse${Command.take(4)}") && (Response != "OK")) this."parse${Command.take(4)}"(Response)
} else if (isValidCommand(IOBUFFER[0])) {
def rIdx = getNextResponse()
if (rIdx > 0) {
def Response = IOBUFFER.remove(rIdx)
def Command = IOBUFFER.remove(0)
log_info("parse - 2 - COMMAND [${Command}] RESPONSE [${Response}]")
if ((this."parse${Command.take(4)}") && (Response != "OK")) this."parse${Command.take(4)}"(Response)
}
}
}
parseMutex.release()
releaseMutex()
}
//def parseVolume(resp) {
def parseVOLM(resp) {
log_debug("parseVolume - response '${resp}'")
if ((resp != null) && (resp != "ERR")) {
def VOLdata = resp.toInteger()
send_Event(name: "volume", value: VOLdata ?: 0)
log_info("parseVolume - SET - volume [${VOLdata ?: 0}]")
} else {
log_info("parseVolume - ERROR - invalid volume [${VOLdata}]")
}
}
//def parseMute(resp) {
def parseMUTE(resp) {
log_debug("parseMute - response '${resp}'")
if ((resp != null) && (resp != "ERR")) {
def MUTEdata = resp.toInteger()
def val = (MUTEdata == 2) ? "unmuted" : "muted"
send_Event(name: "mute", value: val)
log_info("parseMute - SET - mute [${val}]")
} else {
log_info("parseMute - ERROR - invalid mute [${resp}]")
}
}
//def parsePower(resp) {
def parsePOWR(resp) {
log_debug("parsePower - response '${resp}'")
if ((resp != null) && (resp != "ERR")) {
def POWRdata = resp.toInteger()
def val = (POWRdata == 1) ? "on" : "off"
send_Event(name: "power", value: val)
send_Event(name: "switch", value: val)
log_info("parsePower - SET - power [${val}]")
} else {
log_info("parsePower - ERROR - invalid power [${resp}]")
}
}
//def parseInput(resp) {
def parseIAVD(resp) {
log_debug("parseInput - response '${(resp == "ERR")?"ERR -> 0":resp}'")
def val = 0
try { val = resp.toInteger() } catch(e) { val = 0 }
if (validInputs[val] != null) {
send_Event(name: "input", value: val)
send_Event(name: "inputName", value: validInputs[val])
log_info("parseInput - SET - input [${val}] InputName [${validInputs[val]}]")
} else {
log_info("parseInput - ERROR - Invalid Input [${val}]")
}
}
//def parse3DMode(resp) {
def parseTDCH(val) {
log_debug("parse3DMode - response '${val}'")
if ((val != null) && (val != "ERR") && (valid3DModes[val.toInteger()] != null)) {
send_Event(name: "3DMode", value: val)
send_Event(name: "3DModeName", value: valid3DModes[val.toInteger()])
log_info("parse3DMode - SET - 3DMode [${val}] 3DModeName [${valid3DModes[val.toInteger()]}]")
} else {
log_info("parse3DMode - ERROR - Invalid 3DMode [${val}]")
}
}
//def parseSleepTimer(resp) {
def parseOFTM(val) {
log_debug("parseSleepTimer - response '${val}'")
if ((val != null) && (val != "ERR") && (validSleepTimes[val.toInteger()] != null)) {
send_Event(name: "SleepTimer", value: val)
send_Event(name: "SleepTimerSetting", value: validSleepTimes[val.toInteger()])
log_info("parseSleepTimer - SET - SleepTimer [${val}] SleepTimerSetting [${validSleepTimes[val.toInteger()]}]")
} else {
log_info("parseSleepTimer - ERROR - Invalid SleepTimer [${val}]")
}
}
//def parseViewMode(resp) {
def parseWIDE(val) {
log_debug("parseViewMode - response '${val}'")
if ((val != null) && (val != "ERR") && (validViewModes[val.toInteger()] != null)) {
send_Event(name: "ViewMode", value: val)
send_Event(name: "ViewModeName", value: validViewModes[val.toInteger()])
log_info("parseViewMode - SET - ViewMode [${val}] ViewModeName [${validViewModes[val.toInteger()]}]")
} else {
log_info("parseViewMode - ERROR - Invalid ViewMode [${val}]")
}
}
//def parseSurroundMode(resp) {
def parseACSU(val) {
log_debug("parseSurround - response '${val}'")
if ((val != null) && (val != "ERR") && (validSurroundModes[val.toInteger()] != null)) {
send_Event(name: "SurroundMode", value: val)
send_Event(name: "SurroundModeName", value: validSurroundModes[val.toInteger()])
log_info("parseSurroundMode - SET - SurroundMode [${val}] SurroundModeName [${validSurroundModes[val.toInteger()]}]")
} else {
log_info("parseSurroundMode - ERROR - Invalid SurroundMode [${val}]")
}
}
//def parseVideoMode(resp) {
def parseAVMD(val) {
log_debug("parseVideoMode - response '${val}'")
if ((val != null) && (val != "ERR") && (validVideoModes[val.toInteger()] != null)) {
send_Event(name: "VideoMode", value: val)
send_Event(name: "VideoModeName", value: validVideoModes[val.toInteger()])
log_info("parseVideoMode - SET - VideoMode [${val}] VideoModeName [${validVideoModes[val.toInteger()]}]")
} else {
log_info("parseVideoMode - ERROR - Invalid VideoMode [${val}]")
}
}
def parseDCCH(resp) {
log_debug("parseDCCH - response '${resp}'")
if (resp == "ERR") {
log_info("parseDCCH - ERROR - received [${resp}]")
return
}
send_Event(name: "channel_type", value: "Analog")
send_Event(name: "channel_source", value: "Air/Cable")
send_Event(name: "channel", value: resp)
log_info("parseDCCH - SET - channel_type [Analog] channel_source [Air/Cable] channel [${resp}]")
}
def parseDA2P(resp) {
// TV returns channel data in a different format than required to set the channel...
log_debug("parseDA2P - response '${resp}'")
if (resp == "ERR") {
log_info("parseDA2P - ERROR - received [${resp}]")
return
}
send_Event(name: "channel_type", value: "Digital")
send_Event(name: "channel_source", value: "Air")
// def channel = resp.tokenize(".")
// def chMajor = chnl[0].toInteger()
// def chMinor = chnl[1].toInteger()
// def channel = chMajor.toString() + "." + chMinor.toString()
send_Event(name: "channel", value: resp)
log_info("parseDA2P - SET - channel_type [Digital] channel_source [Air] channel [${resp}]")
}
def parseDC2U(resp) {
log_debug("parseDC2U - response '${resp}'")
send_Event(name: "channel_type", value: "Digital")
send_Event(name: "channel_source", value: "Cable")
try {
tv_channel_DC2U = resp.toInteger()
} catch(e) {
log_info("parseDC2U - ERROR - could not process response [${resp}]")
return false
}
def channel = resp.toInteger().toString() + ".0"
send_Event(name: "channel", value: channel)
log_info("parseDC2U - SET - channel_type [Digital] channel_source [Air] channel [${channel}]")
}
def parseDC2L(resp) {
log_debug("parseDC2L - response '${resp}'")
send_Event(name: "channel_type", value: "Digital")
send_Event(name: "channel_source", value: "Cable")
try {
tv_channel_DC2L = resp.toInteger()
} catch(e) {
log_info("parseDC2L - ERROR - could not process response [${resp}]")
return false
}
def channel = tv_channel_DC2U + "." + tv_channel_DC2L
send_Event(name: "channel", value: channel)
log_info("parseDC2L - SET - channel_type [Digital] channel_source [Air] channel [${channel}]")
}
def parseDC10(resp) {
log_debug("parseDC10 - response '${resp}'")
if (resp == "ERR") {
log_info("parseDC10 - ERROR - received [${resp}]")
return
}
send_Event(name: "channel_type", value: "Digital")
send_Event(name: "channel_source", value: "Cable")
tv_channel_DC10 = resp
def channel = null
try {
channel = (tv_channel_DC10 ?: "?") + resp.toInteger().toString()
} catch(e) {
log_info("parseDC10 - ERROR - could not process response [${resp}]")
return false
}
send_Event(name: "channel", value: channel)
log_info("parseDC10 - SET - channel_type [Digital] channel_source [Air] channel [${channel}]")
}
def parseDC11(resp) {
log_debug("parseDC11 - response '${resp}'")
if (resp == "ERR") {
log_info("parseDC11 - ERROR - received [${resp}]")
return
}
send_Event(name: "channel_type", value: "Digital")
send_Event(name: "channel_source", value: "Cable")
tv_channel_DC11 = resp
def channel = null
try {
channel = tv_channel_DC11 + (tv_channel_DC10 ?: "????")
} catch(e) {
log_info("parseDC11 - ERROR - could not process response [${resp}]")
return false
}
send_Event(name: "channel", value: channel)
log_info("parseDC11 - SET - channel_type [Digital] channel_source [Air] channel [${channel}]")
}
def getDeviceState() {
log_debug("getDeviceState() Starting")
request("POWR","?")
request("MUTE","?")
request("VOLM","?")
request("IAVD","?")
request("WIDE","?")
request("ACSU","?")
request("AVMD","?")
request("TDCH","?")
request("OFTM","?")
def currentInput = device.latestValue("input")
if ((currentInput == 0) || (currentInput == "0")) {
// only query channel data if the input is set to TV
getChannelStatus()
}
log_debug("getDeviceState() Completed.")
}
def getChannelStatus() {
log_debug("getChannelStatus() Starting")
request("DCCH","?")
request("DA2P","?")
request("DC2U","?")
request("DC2L","?")
request("DC10","?")
request("DC11","?")
log_debug("getChannelStatus() Completed.")
}
// device commands
def setVolume(val) {
log_debug("setVolume(${val})")
try {
val = val.toInteger()
} catch(e) {
log_info("setVolume - ERROR - invalid volume vale [${val}]")
}
if (val < 0) { val = 0 }
if (val > 60) { val = 60 }
log_info("setVolume - SET - volume [${channel}]")
send_Event(name: "mute", value: "unmuted")
send_Event(name: "volume", value: val.toString())
request("VOLM",val.toString())
}
def toggleMute() {
log_debug("toggleMute()")
request("RCKY","31")
// pauseExecution(250)
request("MUTE","?")
log_debug("toggleMute() - completed")
}
def mute() {
def currentMute = device.latestValue("mute")
log_debug("mute() Currently: [${currentMute}]")
// if (currentMute == "muted") {
// log_debug("mute() - Already muted - command complete")
// return
// }
// if (altMUTE != true) {
request("MUTE","1")
// } else {
// request("RCKY","31")
// }
// pauseExecution(250)
request("MUTE","?")
log_debug("mute() - completed")
}
def unmute() {
def currentMute = device.latestValue("mute")
log_debug("unmute() Currently: [${currentMute}]")
// log_debug("unmute() Currently: [${currentMute}] altMUTE [${altMUTE}]")
// if (currentMute == "unmuted") {
// log_debug("unmute() - Already unmuted - command complete")
// return
// }
// if (altMUTE != true) {
request("MUTE","2")
// } else {
// request("RCKY","31")
// }
// pauseExecution(250)
request("MUTE","?")
log_debug("mute() - completed")
}
def volumeUp() {
log_debug("volumeUp()")
request("RCKY","33")
request("VOLM","?")
}
def volumeDown() {
log_debug("volumeDown()")
request("RCKY","32")
request("VOLM","?")
}
def inputNext() {
log_debug("inputNext()")
def current = device.currentValue("input")
def selectedInputs = ["1","2","3","4","5","6","7","8","1"]
def semaphore = 0
for(selectedInput in selectedInputs) {
if(semaphore == 1) {
return inputSelect(selectedInput)
}
if(current == selectedInput) {
semaphore = 1
}
}
return inputSelect(selectedInputs[0])
}
def inputRemoteCommand(cmd) {
log_debug("inputRemoteCommand(${cmd})")
def cmdInt = cmd.toInteger()
if ((cmdInt == null) || (validRemoteCommands[cmdInt] == null)) {
log_info("inputRemoteCommand - invalid command (${cmd})")
}
log_info("executing inputRemoteCommand('${validRemoteCommands[cmdInt]}')")
request("RCKY",cmdInt.toString())
}
def inputSelect(channel) {
log_debug("inputSelect(${channel})")
// send_Event(name: "input", value: channel)
if ((channel == 0) || (channel == "0")) {
// 0 = TV - not handled by IAVD command
request("ITVD","0")
} else {
request("IAVD",channel.toString())
}
request("IAVD","?")
}
def on() {
log_debug("Turn on TV")
request("POWR","1")
request("POWR","?")
}
def off() {
log_debug("Turn off TV")
request("POWR","0")
request("POWR","?")
}
def channelUp() {
log_debug("Channel Up")
request("CHUP","0")
}
def channelDown() {
log_debug("Channel Down")
request("CHDW","0")
}
def set3DMode(Mode) {
def idx = null
getvalid3DModes().each { key, value -> if (value == Mode) idx = key }
log_debug("set3DMode(${Mode}) IDX: [${idx}]")
if (idx == null) {
log_info("set3DMode(${Mode}) - ERROR - 3D Mode is not valid")
return
}
request("TDCH",idx.toString())
request("TDCH","?")
}
def setSleepTimer(Mode) {
def idx = null
getvalidSleepTimes().each { key, value -> if (value == Mode) idx = key }
log_debug("setSleepTimer(${Mode}) IDX: [${idx}]")
if (idx == null) {
log_info("setSleepTimer(${Mode}) - ERROR - Sleep Timer value is not valid")
return
}
request("OFTM",idx.toString())
request("OFTM","?")
}
def setViewMode(Mode) {
log_debug("setViewMode(${Mode})")
if (validViewModes[Mode as int] == null) {
log_info("setViewMode(${Mode}) - Invalid View mode ID")
return
}
log_info("setViewMode - Setting view mode (${Mode} = ${validViewModes[Mode as int]}]")
request("WIDE",Mode.toString())
request("WIDE","?")
}
def setSurroundMode(Mode) {
log_debug("setSurroundMode(${Mode})")
if (validSurroundModes[Mode as int] == null) {
log_info("setSurroundMode(${Mode}) - Invalid Surround mode ID")
return
}
log_info("setSurroundMode - Setting view mode (${Mode} = ${validSurroundModes[Mode as int]}]")
request("ACSU",Mode.toString())
request("ACSU","?")
}
def setVideoMode(Mode) {
log_debug("setVideoMode(${Mode})")
if (validVideoModes[Mode as int] == null) {
log_info("setVideoMode(${Mode}) - Invalid Video mode ID")
return
}
log_info("setVideoMode - Setting video mode (${Mode} = ${validVideoModes[Mode as int]}]")
request("AVMD",Mode.toString())
request("AVMD","?")
}
def setChannel(String Type, String Source, String ID) {
log_debug("setChannel(\"${Type}\",\"${Source}\",\"${ID}\")")
def setID = null
try {
setID = ID.toFloat()
} catch(e) {
log_info("setChannel - ERROR - Invalid channel Identifier")
return
}
if (Type == "Analog") {
// analog channel... Air = 2 - 69, cable = 1 - 135
try {
setID = ID.toInteger()
} catch(e) {
log_info("setChannel - ERROR - Invalid channel Identifier for Analog channels")
return
}
if (Source == "Air") {
if ((setID < 2) || (setID > 69)) {
log_info("setChannel - ERROR - Invalid channel Identifier for Analog Air channels")
return
}
} else {
if ((setID < 1) || (setID > 135)) {
log_info("setChannel - ERROR - Invalid channel Identifier for Analog Cable channels")
return
}
}
request("DCCH",setID.toString())
} else {
if (Source == "Air") {
if (ID.length() == 4) {
def chanx = ID.substring(0,1)+"."+ID.substring(2,3)
ID = chanx
}
if (ID.contains(".")) {
def chan = ID.tokenize(".")
def chanMajor = chan[0].toInteger()
def chanMinor = chan[1].toInteger()
if ((chanMajor < 0) || (chanMajor > 99) || (chanMinor < 0) || (chanMinor > 99)) {
log_info("setChannel - ERROR - Invalid channel Identifier for Digital Air channels")
return
}
setID = ("00"+chanMajor.toString()).substring(-2) + ("00"+chanMinor.toString()).substring(-2)
}
request("DA2P",setID)
} else {
// Digital cable channels
if (ID.contains(".")) {
// two part channel numbers
def chan = ID.tokenize(".")
def chanMajor = chan[0].toInteger()
def chanMinor = chan[1].toInteger()
if ((chanMajor < 0) || (chanMajor > 999) || (chanMinor < 0) || (chanMinor > 999)) {
log_info("setChannel - ERROR - Invalid channel Identifier for Digital Cable channels")
return
}
setID = ("000" + chanMajor.toString()).reverse().take(3).reverse() + "." + ("000" + chanMinor.toString()).reverse().take(3).reverse()
request("DC2U",("000" + chanMajor.toString()).reverse().take(3).reverse())
request("DC2L",("000" + chanMinor.toString()).reverse().take(3).reverse())
} else {
// one part channel numbers
setID = ID.toInteger()
if (setID > 99999) {
log_info("setChannel - ERROR - Invalid channel Identifier for Digital Cable channels")
return
}
if (setID < 10000) {
request("DC10",setID.toString())
request("DC11","0")
} else {
request("DC10",(setID.toString()).reverse().take(4).reverse())
request("DC11",(setID.toString()).take(1))
}
}
}
}
if (setID == null) {
log_info("setChannel - ERROR Could not determine channels to set for [${Type}][${Source}][${ID}]")
return
}
log_info("setChannel - Setting [${Type}][${Source}] Channel [${setID}]")
// pauseExecution(250)
getChannelStatus()
}
// support functions
def testParse(String handler, String Response) {
log_debug("testParse - Handler '${handler}' [${Response}]")
currentHandler = handler
parse(Response)
}
def testCommand(String CMD, String PARAMS) {
log_debug("rawCommand - CMD [${CMD}] PARAMS [${PARAMS}]")
request(CMD,PARAMS)
}
def getMutex(Integer PId = null) {
def MaxMutexLock = 60
def permitTries = 0
def permit = false
def PID = (PId == null) ? "?"+(SequenceNumber-1).toString()+"?" : PId
if (!checkConnectionState()) {
log_error("getMutex ${PID} - Failed to acquired mutex permit - socket closed")
return false
}
while ((permitTries < (MaxMutexLock * 10)) && (permit == false)) {
permitTries++
permit = mutex.tryAcquire()
if (permit == false) {
if (permitTries == 1) {
log_info("getMutex ${PID} - mutex permit not yet available. Waiting up to ${MaxMutexLock} seconds.")
}
def MutexLag = now() - LastMutex
if (MutexLag > (MaxMutexLock * 2 * 1000)) {
log_info("getMutex ${PID} - Detected stale mutex - forcing mutex release.")
mutex.release()
}
pauseExecution(100)
}
}
if (permit) {
LastMutex = now()
log_info("getMutex ${PID} - Acquired mutex permit")
} else {
log_info("getMutex ${PID} - Failed to acquired mutex permit")
}
return permit
}
//def releaseMutex(Integer PId = null) {
// def PID = (PId == null) ? "?"+(SequenceNumber-1).toString()+"?" : PId
// log_debug("releaseMutex ${PID} - Released mutex permit")
// mutex.release()
//}
def releaseMutex(PId = null) {
def PID = (PId == null) ? "?"+(SequenceNumber-1).toString()+"?" : PId
log_info("releaseMutex ${PID} - Released mutex permit")
mutex.release()
}
def checkConnectionState() {
if ((state.socketState == "closed") || (state.socketState == "closing")) {
log_error("checkConnectionState - ERROR. TV connection is closed. Attempting reconnect.")
// release the mutex on error
releaseMutex()
if (openSocket() == false) {
log_error("checkConnectionState - ERROR. Unable to reconnect to TV.")
return false
}
}
return true
}
def request(String CMD, String Params) {
// block the thread if the mutex is locked
// def CR = "\r\n" // required for emulator
def CR = "\r" // required for actual TV
def PID = SequenceNumber++
if (getMutex(PID) == false) {
log_debug("request ${PID} - Socket [${state.socketState}] CMD [${CMD}] Params [${Params}] Handler [${callbackHandler}]")
log_error("request ${PID} - ERROR. Unable to acquire mutex permit.")
return
}
log_info("request ${PID} - Socket [${state.socketState}] CMD [${CMD}] Params [${Params}]")
if (destIp == null) {
log_error("request ${PID} - ERROR. TV IP Address not set")
// release the mutex on error
releaseMutex(PID)
}
if (destPort == null) {
log_error("request ${PID} - ERROR. TV IP Port not set")
// release the mutex on error
releaseMutex(PID)
return
}
def Credentials = ""
if (login != null) {
if ((password == null) || (password == "")) {
log_error("request ${PID} - ERROR. TV login username is set, so login password must also be set")
// release the mutex on error
releaseMutex(PID)
return
}
Credentials = login + "\r" + password + "\r"
}
CMD = CMD + " "
Params = Params + " "
def Command = Credentials + CMD.take(4) + Params.take(4)
try {
log_debug("request ${PID} - request = [" + Command + "] to ${destIp}:${destPort}")
interfaces.rawSocket.sendMessage(Command + CR)
}
catch(e) {
log_error("request - rawSocket - Caught exception '${e}'")
// release the mutex on error
releaseMutex(PID)
return
}
parseMutex.acquire()
IOBUFFER.add(Command)
parseMutex.release()
}
def socketStatus(String message) {
log_debug("socketStatus - Socket [${state.socketState}] Message [${message}]")
// error is implied - release any open mutex
releaseMutex()
if (state.socketState == "closed") { return }
switch(message) {
case "send error: Broken pipe (Write failed)":
state.socketState = "closed"
log_debug("socketStatus - Write Failed - Attempting reconnect")
openSocket()
return
break;
case "receive error: Stream closed.":
// if (state.socketState != "closing") {
// log_debug("socketStatus - Stream Closed - Attempting reconnect")
// return openSocket()
// }
state.socketState = "closed"
return
break;
case "send error: Socket closed":
state.socketState = "closed"
log_debug("socketStatus - Socket Closed - Attempting reconnect")
return openSocket()
break;
}
log_debug("socketStatus - UNHANDLED socket status [${message}]")
}
def send_Event(eData) {
if (eventDebug) log.info("SharpAquos - EVENT - [${eData.toString()}]")
if (eData.isStateChange == null) { eData.isStateChange = false }
sendEvent(name: eData.name, value: eData.value, displayed:false, isStateChange: eData.isStateChange)
}
def log_debug(debugData) {
if (logDebug) log.debug("SharpAquos - " + debugData)
}
def log_info(debugData) {
if (verboseDebug) log_debug(debugData)
}
private log_error(debugData) {
log.error("SharpAquos - " + debugData)
}
private String convertIPtoHex(ipAddress) {
String hex = ipAddress.tokenize( '.' ).collect { String.format( '%02X', it.toInteger() ) }.join()
return hex
}
private String convertPortToHex(port) {
String hexport = port.toString().format( '%04X', port.toInteger() )
return hexport
}
Great! Copied and saved and the immediate logs....
dev:8972019-12-15 12:12:23.614 am debugSharpAquos - releaseMutex ?18? - Released mutex permit
dev:8972019-12-15 12:12:23.596 am debugSharpAquos - parseSleepTimer - SET - SleepTimer [0] SleepTimerSetting [Off]
dev:8972019-12-15 12:12:23.589 am infoSharpAquos - EVENT - [[name:SleepTimerSetting, value:Off]]
dev:8972019-12-15 12:12:23.583 am infoSharpAquos - EVENT - [[name:SleepTimer, value:0]]
dev:8972019-12-15 12:12:23.578 am debugSharpAquos - parseSleepTimer - response '0'
dev:8972019-12-15 12:12:23.573 am debugSharpAquos - parse - 1 - COMMAND [OFTM? ] RESPONSE [0]
dev:8972019-12-15 12:12:23.568 am debugSharpAquos - IOBUFFER: 2 entries [[OFTM? , 0]]
dev:8972019-12-15 12:12:23.340 am debugSharpAquos - getDeviceState() Completed.
dev:8972019-12-15 12:12:23.333 am debugSharpAquos - request 18 - request = [OFTM? ] to 192.168.254.205:10002
dev:8972019-12-15 12:12:23.330 am debugSharpAquos - request 18 - Socket [open] CMD [OFTM] Params [?]
dev:8972019-12-15 12:12:23.328 am debugSharpAquos - getMutex 18 - Acquired mutex permit
dev:8972019-12-15 12:12:23.289 am debugSharpAquos - releaseMutex ?18? - Released mutex permit
dev:8972019-12-15 12:12:23.286 am debugSharpAquos - parse3DMode - SET - 3DMode [0] 3DModeName [3D Off]
dev:8972019-12-15 12:12:23.283 am infoSharpAquos - EVENT - [[name:3DModeName, value:3D Off]]
dev:8972019-12-15 12:12:23.281 am infoSharpAquos - EVENT - [[name:3DMode, value:0]]
dev:8972019-12-15 12:12:23.265 am debugSharpAquos - parse3DMode - response '0'
dev:8972019-12-15 12:12:23.262 am debugSharpAquos - parse - 1 - COMMAND [TDCH? ] RESPONSE [0]
dev:8972019-12-15 12:12:23.260 am debugSharpAquos - IOBUFFER: 2 entries [[TDCH? , 0]]
dev:8972019-12-15 12:12:23.229 am debugSharpAquos - getMutex 18 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:12:23.226 am debugSharpAquos - request 17 - request = [TDCH? ] to 192.168.254.205:10002
dev:8972019-12-15 12:12:23.221 am debugSharpAquos - request 17 - Socket [open] CMD [TDCH] Params [?]
dev:8972019-12-15 12:12:23.219 am debugSharpAquos - getMutex 17 - Acquired mutex permit
dev:8972019-12-15 12:12:23.183 am debugSharpAquos - releaseMutex ?17? - Released mutex permit
dev:8972019-12-15 12:12:23.177 am debugSharpAquos - parseVideoMode - SET - VideoMode [4] VideoModeName [USER]
dev:8972019-12-15 12:12:23.173 am infoSharpAquos - EVENT - [[name:VideoModeName, value:USER]]
dev:8972019-12-15 12:12:23.169 am infoSharpAquos - EVENT - [[name:VideoMode, value:4]]
dev:8972019-12-15 12:12:23.162 am debugSharpAquos - parseVideoMode - response '4'
dev:8972019-12-15 12:12:23.159 am debugSharpAquos - parse - 1 - COMMAND [AVMD? ] RESPONSE [4]
dev:8972019-12-15 12:12:23.155 am debugSharpAquos - IOBUFFER: 2 entries [[AVMD? , 4]]
dev:8972019-12-15 12:12:22.915 am debugSharpAquos - getMutex 17 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:12:22.911 am debugSharpAquos - request 16 - request = [AVMD? ] to 192.168.254.205:10002
dev:8972019-12-15 12:12:22.909 am debugSharpAquos - request 16 - Socket [open] CMD [AVMD] Params [?]
dev:8972019-12-15 12:12:22.906 am debugSharpAquos - getMutex 16 - Acquired mutex permit
dev:8972019-12-15 12:12:22.871 am debugSharpAquos - releaseMutex ?16? - Released mutex permit
dev:8972019-12-15 12:12:22.868 am debugSharpAquos - parseSurroundMode - SET - SurroundMode [2] SurroundModeName [Off]
dev:8972019-12-15 12:12:22.865 am infoSharpAquos - EVENT - [[name:SurroundModeName, value:Off]]
dev:8972019-12-15 12:12:22.863 am infoSharpAquos - EVENT - [[name:SurroundMode, value:2]]
dev:8972019-12-15 12:12:22.860 am debugSharpAquos - parseSurround - response '2'
dev:8972019-12-15 12:12:22.858 am debugSharpAquos - parse - 1 - COMMAND [ACSU? ] RESPONSE [2]
dev:8972019-12-15 12:12:22.855 am debugSharpAquos - IOBUFFER: 2 entries [[ACSU? , 2]]
dev:8972019-12-15 12:12:22.804 am debugSharpAquos - getMutex 16 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:12:22.802 am debugSharpAquos - request 15 - request = [ACSU? ] to 192.168.254.205:10002
dev:8972019-12-15 12:12:22.800 am debugSharpAquos - request 15 - Socket [open] CMD [ACSU] Params [?]
dev:8972019-12-15 12:12:22.797 am debugSharpAquos - getMutex 15 - Acquired mutex permit
dev:8972019-12-15 12:12:22.774 am debugSharpAquos - releaseMutex ?15? - Released mutex permit
dev:8972019-12-15 12:12:22.771 am debugSharpAquos - parseViewMode - SET - ViewMode [8] ViewModeName [Dot by Dot]
dev:8972019-12-15 12:12:22.767 am infoSharpAquos - EVENT - [[name:ViewModeName, value:Dot by Dot]]
dev:8972019-12-15 12:12:22.765 am infoSharpAquos - EVENT - [[name:ViewMode, value:8]]
dev:8972019-12-15 12:12:22.762 am debugSharpAquos - parseViewMode - response '8'
dev:8972019-12-15 12:12:22.760 am debugSharpAquos - parse - 1 - COMMAND [WIDE? ] RESPONSE [8]
dev:8972019-12-15 12:12:22.757 am debugSharpAquos - IOBUFFER: 2 entries [[WIDE? , 8]]
dev:8972019-12-15 12:12:22.695 am debugSharpAquos - getMutex 15 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:12:22.690 am debugSharpAquos - request 14 - request = [WIDE? ] to 192.168.254.205:10002
dev:8972019-12-15 12:12:22.684 am debugSharpAquos - request 14 - Socket [open] CMD [WIDE] Params [?]
dev:8972019-12-15 12:12:22.681 am debugSharpAquos - getMutex 14 - Acquired mutex permit
dev:8972019-12-15 12:12:22.656 am debugSharpAquos - releaseMutex ?14? - Released mutex permit
dev:8972019-12-15 12:12:22.652 am debugSharpAquos - parseInput - SET - input [1] InputName [HDMI IN 1]
dev:8972019-12-15 12:12:22.648 am infoSharpAquos - EVENT - [[name:inputName, value:HDMI IN 1]]
dev:8972019-12-15 12:12:22.645 am infoSharpAquos - EVENT - [[name:input, value:1]]
dev:8972019-12-15 12:12:22.642 am debugSharpAquos - parseInput - response '1'
dev:8972019-12-15 12:12:22.639 am debugSharpAquos - parse - 1 - COMMAND [IAVD? ] RESPONSE [1]
dev:8972019-12-15 12:12:22.636 am debugSharpAquos - parseVolume - SET - volume [2]
dev:8972019-12-15 12:12:22.630 am infoSharpAquos - EVENT - [[name:volume, value:2]]
dev:8972019-12-15 12:12:22.627 am debugSharpAquos - parseVolume - response '2'
dev:8972019-12-15 12:12:22.625 am debugSharpAquos - parse - 2 - COMMAND [VOLM? ] RESPONSE [2]
dev:8972019-12-15 12:12:22.622 am debugSharpAquos - parseMute - SET - mute [unmuted]
dev:8972019-12-15 12:12:22.620 am infoSharpAquos - EVENT - [[name:mute, value:unmuted]]
dev:8972019-12-15 12:12:22.617 am debugSharpAquos - parseMute - response '2'
dev:8972019-12-15 12:12:22.614 am debugSharpAquos - parse - 2 - COMMAND [MUTE? ] RESPONSE [2]
dev:8972019-12-15 12:12:22.612 am debugSharpAquos - parsePower - SET - power [on]
dev:8972019-12-15 12:12:22.609 am infoSharpAquos - EVENT - [[name:switch, value:on]]
dev:8972019-12-15 12:12:22.607 am infoSharpAquos - EVENT - [[name:power, value:on]]
dev:8972019-12-15 12:12:22.604 am debugSharpAquos - parsePower - response '1'
dev:8972019-12-15 12:12:22.602 am debugSharpAquos - parse - 2 - COMMAND [POWR? ] RESPONSE [1]
dev:8972019-12-15 12:12:22.599 am debugSharpAquos - IOBUFFER: 8 entries [[POWR? , MUTE? , VOLM? , IAVD? , 1, 2, 2, 1]]
dev:8972019-12-15 12:12:22.477 am debugSharpAquos - getMutex 14 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:12:22.474 am debugSharpAquos - request 13 - request = [IAVD? ] to 192.168.254.205:10002
dev:8972019-12-15 12:12:22.472 am debugSharpAquos - request 13 - Socket [open] CMD [IAVD] Params [?]
dev:8972019-12-15 12:12:22.469 am debugSharpAquos - getMutex 13 - Acquired mutex permit
dev:8972019-12-15 12:12:22.456 am debugSharpAquos - releaseMutex ?13? - Released mutex permit
dev:8972019-12-15 12:12:22.453 am debugSharpAquos - parse - 2 - COMMAND [RSPW2 ] RESPONSE [OK]
dev:8972019-12-15 12:12:22.450 am debugSharpAquos - IOBUFFER: 5 entries [[RSPW2 , POWR? , MUTE? , VOLM? , OK]]
dev:8972019-12-15 12:12:22.375 am debugSharpAquos - getMutex 13 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:12:22.372 am debugSharpAquos - request 12 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-15 12:12:22.369 am debugSharpAquos - request 12 - Socket [open] CMD [VOLM] Params [?]
dev:8972019-12-15 12:12:22.365 am debugSharpAquos - getMutex 12 - Acquired mutex permit
dev:8972019-12-15 12:12:22.363 am debugSharpAquos - request 11 - request = [MUTE? ] to 192.168.254.205:10002
dev:8972019-12-15 12:12:22.360 am debugSharpAquos - request 11 - Socket [open] CMD [MUTE] Params [?]
dev:8972019-12-15 12:12:22.357 am debugSharpAquos - getMutex 11 - Acquired mutex permit
dev:8972019-12-15 12:12:22.355 am debugSharpAquos - request 10 - request = [POWR? ] to 192.168.254.205:10002
dev:8972019-12-15 12:12:22.352 am debugSharpAquos - request 10 - Socket [open] CMD [POWR] Params [?]
dev:8972019-12-15 12:12:22.350 am debugSharpAquos - getMutex 10 - Acquired mutex permit
dev:8972019-12-15 12:12:22.347 am debugSharpAquos - getDeviceState() Starting
dev:8972019-12-15 12:12:22.344 am debugSharpAquos - request 9 - request = [RSPW2 ] to 192.168.254.205:10002
dev:8972019-12-15 12:12:22.340 am debugSharpAquos - request 9 - Socket [open] CMD [RSPW] Params [2]
dev:8972019-12-15 12:12:22.337 am debugSharpAquos - getMutex 9 - Acquired mutex permit
dev:8972019-12-15 12:12:22.333 am debugSharpAquos - initialize - Poll Rate set to every 5 minutes
dev:8972019-12-15 12:12:22.312 am debugSharpAquos - openSocket: Socket opened.
dev:8972019-12-15 12:12:21.282 am debugSharpAquos - openSocket: Connecting to 192.168.254.205:10002
dev:8972019-12-15 12:12:21.275 am debugSharpAquos - initialize - Set DNI = [9CC7D1ED5F5F]
dev:8972019-12-15 12:12:21.259 am debugSharpAquos - initialize - IP: 192.168.254.205 PORT: 10002 USER: null PASS: null Poll Rate: 5
dev:8972019-12-15 12:12:20.753 am debugSharpAquos - closeSocket: Socket closed.
dev:8972019-12-15 12:12:19.787 am debugSharpAquos - releaseMutex ?8? - Released mutex permit
dev:8972019-12-15 12:12:19.783 am debugSharpAquos - socketStatus - Socket [open] Message [receive error: Stream closed.]
dev:8972019-12-15 12:12:19.739 am debugSharpAquos - closeSocket: Socket close requested.
dev:8972019-12-15 12:12:19.715 am debuginitialize - Driver v0.32 debug [true] verbose [true] events [true]
dev:8972019-12-15 12:12:19.656 am debugSharpAquos - updated - IP: 192.168.254.205 PORT: 10002 USER: null PASS: null
dev:8972019-12-15 12:11:55.572 am debugSharpAquos - parseSleepTimer - response '0'
dev:8972019-12-15 12:11:55.346 am debugSharpAquos - getDeviceState() Completed.
dev:8972019-12-15 12:11:55.338 am debugSharpAquos - request 8 - request = [OFTM? ] to 192.168.254.205:10002
dev:8972019-12-15 12:11:55.269 am debugSharpAquos - parse3DMode - response '0'
dev:8972019-12-15 12:11:55.233 am debugSharpAquos - request 7 - request = [TDCH? ] to 192.168.254.205:10002
dev:8972019-12-15 12:11:55.166 am debugSharpAquos - parseVideoMode - response '4'
dev:8972019-12-15 12:11:55.128 am debugSharpAquos - request 6 - request = [AVMD? ] to 192.168.254.205:10002
dev:8972019-12-15 12:11:55.063 am debugSharpAquos - parseSurround - response '2'
dev:8972019-12-15 12:11:55.022 am debugSharpAquos - request 5 - request = [ACSU? ] to 192.168.254.205:10002
dev:8972019-12-15 12:11:54.962 am debugSharpAquos - parseViewMode - response '8'
dev:8972019-12-15 12:11:54.717 am debugSharpAquos - request 4 - request = [WIDE? ] to 192.168.254.205:10002
dev:8972019-12-15 12:11:54.658 am debugSharpAquos - parseInput - response '1'
dev:8972019-12-15 12:11:54.612 am debugSharpAquos - request 3 - request = [IAVD? ] to 192.168.254.205:10002
dev:8972019-12-15 12:11:54.558 am debugSharpAquos - parseVolume - response '2'
dev:8972019-12-15 12:11:54.307 am debugSharpAquos - request 2 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-15 12:11:54.258 am debugSharpAquos - parseMute - response '2'
dev:8972019-12-15 12:11:54.202 am debugSharpAquos - request 1 - request = [MUTE? ] to 192.168.254.205:10002
dev:8972019-12-15 12:11:54.175 am debugSharpAquos - parsePower - response '1'
dev:8972019-12-15 12:11:54.091 am debugSharpAquos - request 0 - request = [POWR? ] to 192.168.254.205:10002
dev:8972019-12-15 12:11:54.076 am debugSharpAquos - getDeviceState() Starting
A few volume ups and downs and toggle mute on and off logs...
dev:8972019-12-15 12:23:06.549 am debugSharpAquos - releaseMutex ?144? - Released mutex permit
dev:8972019-12-15 12:23:06.541 am debugSharpAquos - parse - 2 - COMMAND [RCKY33 ] RESPONSE [2]
dev:8972019-12-15 12:23:06.533 am debugSharpAquos - IOBUFFER: 13 entries [[RCKY33 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY31 , MUTE? , RCKY31 , MUTE? , 2]]
dev:8972019-12-15 12:23:06.465 am debugSharpAquos - toggleMute() - completed
dev:8972019-12-15 12:23:06.462 am debugSharpAquos - request 144 - request = [MUTE? ] to 192.168.254.205:10002
dev:8972019-12-15 12:23:06.459 am debugSharpAquos - request 144 - Socket [open] CMD [MUTE] Params [?]
dev:8972019-12-15 12:23:06.456 am debugSharpAquos - getMutex 144 - Acquired mutex permit
dev:8972019-12-15 12:23:06.369 am debugSharpAquos - releaseMutex ?144? - Released mutex permit
dev:8972019-12-15 12:23:06.362 am debugSharpAquos - parse - 2 - COMMAND [VOLM? ] RESPONSE [OK]
dev:8972019-12-15 12:23:06.359 am debugSharpAquos - IOBUFFER: 13 entries [[VOLM? , RCKY33 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY31 , MUTE? , RCKY31 , OK]]
dev:8972019-12-15 12:23:06.268 am debugSharpAquos - getMutex 144 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:23:06.265 am debugSharpAquos - request 143 - request = [RCKY31 ] to 192.168.254.205:10002
dev:8972019-12-15 12:23:06.247 am debugSharpAquos - request 143 - Socket [open] CMD [RCKY] Params [31]
dev:8972019-12-15 12:23:06.244 am debugSharpAquos - getMutex 143 - Acquired mutex permit
dev:8972019-12-15 12:23:06.239 am debugSharpAquos - toggleMute()
dev:8972019-12-15 12:23:05.151 am debugSharpAquos - releaseMutex ?142? - Released mutex permit
dev:8972019-12-15 12:23:05.148 am debugSharpAquos - parse - 2 - COMMAND [RCKY33 ] RESPONSE [2]
dev:8972019-12-15 12:23:05.129 am debugSharpAquos - IOBUFFER: 13 entries [[RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY31 , MUTE? , 2]]
dev:8972019-12-15 12:23:05.056 am debugSharpAquos - toggleMute() - completed
dev:8972019-12-15 12:23:05.037 am debugSharpAquos - request 142 - request = [MUTE? ] to 192.168.254.205:10002
dev:8972019-12-15 12:23:05.005 am debugSharpAquos - request 142 - Socket [open] CMD [MUTE] Params [?]
dev:8972019-12-15 12:23:05.002 am debugSharpAquos - getMutex 142 - Acquired mutex permit
dev:8972019-12-15 12:23:04.931 am debugSharpAquos - releaseMutex ?142? - Released mutex permit
dev:8972019-12-15 12:23:04.925 am debugSharpAquos - parse - 2 - COMMAND [VOLM? ] RESPONSE [OK]
dev:8972019-12-15 12:23:04.917 am debugSharpAquos - IOBUFFER: 13 entries [[VOLM? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY31 , OK]]
dev:8972019-12-15 12:23:04.886 am debugSharpAquos - getMutex 142 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:23:04.877 am debugSharpAquos - request 141 - request = [RCKY31 ] to 192.168.254.205:10002
dev:8972019-12-15 12:23:04.871 am debugSharpAquos - request 141 - Socket [open] CMD [RCKY] Params [31]
dev:8972019-12-15 12:23:04.865 am debugSharpAquos - getMutex 141 - Acquired mutex permit
dev:8972019-12-15 12:23:04.855 am debugSharpAquos - toggleMute()
dev:8972019-12-15 12:23:03.078 am debugSharpAquos - releaseMutex ?140? - Released mutex permit
dev:8972019-12-15 12:23:03.075 am debugSharpAquos - parse - 2 - COMMAND [RCKY33 ] RESPONSE [3]
dev:8972019-12-15 12:23:03.071 am debugSharpAquos - IOBUFFER: 13 entries [[RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , 3]]
dev:8972019-12-15 12:23:02.810 am debugSharpAquos - request 140 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-15 12:23:02.807 am debugSharpAquos - request 140 - Socket [open] CMD [VOLM] Params [?]
dev:8972019-12-15 12:23:02.803 am debugSharpAquos - getMutex 140 - Acquired mutex permit
dev:8972019-12-15 12:23:02.761 am debugSharpAquos - releaseMutex ?140? - Released mutex permit
dev:8972019-12-15 12:23:02.758 am debugSharpAquos - parse - 2 - COMMAND [MUTE? ] RESPONSE [OK]
dev:8972019-12-15 12:23:02.754 am debugSharpAquos - IOBUFFER: 13 entries [[MUTE? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY32 , OK]]
dev:8972019-12-15 12:23:02.496 am debugSharpAquos - getMutex 140 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:23:02.489 am debugSharpAquos - request 139 - request = [RCKY32 ] to 192.168.254.205:10002
dev:8972019-12-15 12:23:02.483 am debugSharpAquos - request 139 - Socket [open] CMD [RCKY] Params [32]
dev:8972019-12-15 12:23:02.478 am debugSharpAquos - getMutex 139 - Acquired mutex permit
dev:8972019-12-15 12:23:02.470 am debugSharpAquos - volumeDown()
dev:8972019-12-15 12:23:02.418 am debugSharpAquos - releaseMutex ?138? - Released mutex permit
dev:8972019-12-15 12:23:02.415 am debugSharpAquos - parse - 2 - COMMAND [RCKY31 ] RESPONSE [3]
dev:8972019-12-15 12:23:02.412 am debugSharpAquos - IOBUFFER: 13 entries [[RCKY31 , MUTE? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , 3]]
dev:8972019-12-15 12:23:02.373 am debugSharpAquos - request 138 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-15 12:23:02.348 am debugSharpAquos - request 138 - Socket [open] CMD [VOLM] Params [?]
dev:8972019-12-15 12:23:02.345 am debugSharpAquos - getMutex 138 - Acquired mutex permit
dev:8972019-12-15 12:23:02.304 am debugSharpAquos - releaseMutex ?138? - Released mutex permit
dev:8972019-12-15 12:23:02.301 am debugSharpAquos - parse - 2 - COMMAND [MUTE? ] RESPONSE [OK]
dev:8972019-12-15 12:23:02.298 am debugSharpAquos - IOBUFFER: 13 entries [[MUTE? , RCKY31 , MUTE? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY32 , VOLM? , RCKY32 , OK]]
dev:8972019-12-15 12:23:02.045 am debugSharpAquos - getMutex 138 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:23:02.042 am debugSharpAquos - request 137 - request = [RCKY32 ] to 192.168.254.205:10002
dev:8972019-12-15 12:23:02.039 am debugSharpAquos - request 137 - Socket [open] CMD [RCKY] Params [32]
dev:8972019-12-15 12:23:02.035 am debugSharpAquos - getMutex 137 - Acquired mutex permit
dev:8972019-12-15 12:23:02.029 am debugSharpAquos - volumeDown()
dev:8972019-12-15 12:23:01.771 am debugSharpAquos - releaseMutex ?136? - Released mutex permit
dev:8972019-12-15 12:23:01.767 am debugSharpAquos - parse - 2 - COMMAND [RCKY31 ] RESPONSE [3]
dev:8972019-12-15 12:23:01.764 am debugSharpAquos - IOBUFFER: 13 entries [[RCKY31 , MUTE? , RCKY31 , MUTE? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY32 , VOLM? , 3]]
dev:8972019-12-15 12:23:01.715 am debugSharpAquos - request 136 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-15 12:23:01.712 am debugSharpAquos - request 136 - Socket [open] CMD [VOLM] Params [?]
dev:8972019-12-15 12:23:01.709 am debugSharpAquos - getMutex 136 - Acquired mutex permit
dev:8972019-12-15 12:23:01.646 am debugSharpAquos - releaseMutex ?136? - Released mutex permit
dev:8972019-12-15 12:23:01.643 am debugSharpAquos - parse - 2 - COMMAND [VOLM? ] RESPONSE [OK]
dev:8972019-12-15 12:23:01.640 am debugSharpAquos - IOBUFFER: 13 entries [[VOLM? , RCKY31 , MUTE? , RCKY31 , MUTE? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY32 , OK]]
dev:8972019-12-15 12:23:01.611 am debugSharpAquos - getMutex 136 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:23:01.608 am debugSharpAquos - request 135 - request = [RCKY32 ] to 192.168.254.205:10002
dev:8972019-12-15 12:23:01.605 am debugSharpAquos - request 135 - Socket [open] CMD [RCKY] Params [32]
dev:8972019-12-15 12:23:01.602 am debugSharpAquos - getMutex 135 - Acquired mutex permit
dev:8972019-12-15 12:23:01.597 am debugSharpAquos - volumeDown()
dev:8972019-12-15 12:22:59.422 am debugSharpAquos - releaseMutex ?134? - Released mutex permit
dev:8972019-12-15 12:22:59.415 am debugSharpAquos - parse - 2 - COMMAND [RCKY32 ] RESPONSE [3]
dev:8972019-12-15 12:22:59.403 am debugSharpAquos - IOBUFFER: 13 entries [[RCKY32 , VOLM? , RCKY31 , MUTE? , RCKY31 , MUTE? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY33 , VOLM? , 3]]
dev:8972019-12-15 12:22:59.362 am debugSharpAquos - request 134 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-15 12:22:59.358 am debugSharpAquos - request 134 - Socket [open] CMD [VOLM] Params [?]
dev:8972019-12-15 12:22:59.351 am debugSharpAquos - getMutex 134 - Acquired mutex permit
dev:8972019-12-15 12:22:59.313 am debugSharpAquos - releaseMutex ?134? - Released mutex permit
dev:8972019-12-15 12:22:59.306 am debugSharpAquos - parse - 2 - COMMAND [VOLM? ] RESPONSE [OK]
dev:8972019-12-15 12:22:59.299 am debugSharpAquos - IOBUFFER: 13 entries [[VOLM? , RCKY32 , VOLM? , RCKY31 , MUTE? , RCKY31 , MUTE? , RCKY33 , VOLM? , RCKY33 , VOLM? , RCKY33 , OK]]
dev:8972019-12-15 12:22:59.244 am debugSharpAquos - getMutex 134 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:22:59.237 am debugSharpAquos - request 133 - request = [RCKY33 ] to 192.168.254.205:10002
dev:8972019-12-15 12:22:59.231 am debugSharpAquos - request 133 - Socket [open] CMD [RCKY] Params [33]
dev:8972019-12-15 12:22:59.225 am debugSharpAquos - getMutex 133 - Acquired mutex permit
dev:8972019-12-15 12:22:59.217 am debugSharpAquos - volumeUp()
dev:8972019-12-15 12:22:59.124 am debugSharpAquos - releaseMutex ?132? - Released mutex permit
dev:8972019-12-15 12:22:59.121 am debugSharpAquos - parse - 2 - COMMAND [RCKY32 ] RESPONSE [3]
dev:8972019-12-15 12:22:59.118 am debugSharpAquos - IOBUFFER: 13 entries [[RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY31 , MUTE? , RCKY31 , MUTE? , RCKY33 , VOLM? , RCKY33 , VOLM? , 3]]
dev:8972019-12-15 12:22:59.056 am debugSharpAquos - request 132 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-15 12:22:59.043 am debugSharpAquos - request 132 - Socket [open] CMD [VOLM] Params [?]
dev:8972019-12-15 12:22:59.039 am debugSharpAquos - getMutex 132 - Acquired mutex permit
dev:8972019-12-15 12:22:58.932 am debugSharpAquos - releaseMutex ?132? - Released mutex permit
dev:8972019-12-15 12:22:58.926 am debugSharpAquos - parse - 2 - COMMAND [VOLM? ] RESPONSE [OK]
dev:8972019-12-15 12:22:58.913 am debugSharpAquos - IOBUFFER: 13 entries [[VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY31 , MUTE? , RCKY31 , MUTE? , RCKY33 , VOLM? , RCKY33 , OK]]
dev:8972019-12-15 12:22:58.831 am debugSharpAquos - getMutex 132 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:22:58.823 am debugSharpAquos - request 131 - request = [RCKY33 ] to 192.168.254.205:10002
dev:8972019-12-15 12:22:58.817 am debugSharpAquos - request 131 - Socket [open] CMD [RCKY] Params [33]
dev:8972019-12-15 12:22:58.812 am debugSharpAquos - getMutex 131 - Acquired mutex permit
dev:8972019-12-15 12:22:58.804 am debugSharpAquos - volumeUp()
dev:8972019-12-15 12:22:58.556 am debugSharpAquos - releaseMutex ?130? - Released mutex permit
dev:8972019-12-15 12:22:58.554 am debugSharpAquos - parse - 2 - COMMAND [RCKY32 ] RESPONSE [3]
dev:8972019-12-15 12:22:58.540 am debugSharpAquos - IOBUFFER: 13 entries [[RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY31 , MUTE? , RCKY31 , MUTE? , RCKY33 , VOLM? , 3]]
dev:8972019-12-15 12:22:58.481 am debugSharpAquos - request 130 - request = [VOLM? ] to 192.168.254.205:10002
dev:8972019-12-15 12:22:58.478 am debugSharpAquos - request 130 - Socket [open] CMD [VOLM] Params [?]
dev:8972019-12-15 12:22:58.475 am debugSharpAquos - getMutex 130 - Acquired mutex permit
dev:8972019-12-15 12:22:58.441 am debugSharpAquos - releaseMutex ?130? - Released mutex permit
dev:8972019-12-15 12:22:58.438 am debugSharpAquos - parse - 2 - COMMAND [VOLM? ] RESPONSE [OK]
dev:8972019-12-15 12:22:58.435 am debugSharpAquos - IOBUFFER: 13 entries [[VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY32 , VOLM? , RCKY31 , MUTE? , RCKY31 , MUTE? , RCKY33 , OK]]
dev:8972019-12-15 12:22:58.369 am debugSharpAquos - getMutex 130 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:22:58.364 am debugSharpAquos - request 129 - request = [RCKY33 ] to 192.168.254.205:10002
dev:8972019-12-15 12:22:58.358 am debugSharpAquos - request 129 - Socket [open] CMD [RCKY] Params [33]
dev:8972019-12-15 12:22:58.353 am debugSharpAquos - getMutex 129 - Acquired mutex permit
dev:8972019-12-15 12:22:58.346 am debugSharpAquos - volumeUp()
TV on and off logs......looks good so far, very responsive.,,,
dev:8972019-12-15 12:25:33.830 am debugSharpAquos - releaseMutex ?166? - Released mutex permit
dev:8972019-12-15 12:25:33.826 am debugSharpAquos - parse - 2 - COMMAND [RCKY32 ] RESPONSE [1]
dev:8972019-12-15 12:25:33.820 am debugSharpAquos - IOBUFFER: 13 entries [[RCKY32 , VOLM? , RCKY33 , VOLM? , RCKY31 , MUTE? , RCKY31 , MUTE? , POWR0 , POWR? , POWR1 , POWR? , 1]]
dev:8972019-12-15 12:25:33.524 am debugSharpAquos - request 166 - request = [POWR? ] to 192.168.254.205:10002
dev:8972019-12-15 12:25:33.522 am debugSharpAquos - request 166 - Socket [open] CMD [POWR] Params [?]
dev:8972019-12-15 12:25:33.519 am debugSharpAquos - getMutex 166 - Acquired mutex permit
dev:8972019-12-15 12:25:33.459 am debugSharpAquos - releaseMutex ?166? - Released mutex permit
dev:8972019-12-15 12:25:33.456 am debugSharpAquos - parse - 2 - COMMAND [VOLM? ] RESPONSE [OK]
dev:8972019-12-15 12:25:33.451 am debugSharpAquos - IOBUFFER: 13 entries [[VOLM? , RCKY32 , VOLM? , RCKY33 , VOLM? , RCKY31 , MUTE? , RCKY31 , MUTE? , POWR0 , POWR? , POWR1 , OK]]
dev:8972019-12-15 12:25:33.311 am debugSharpAquos - getMutex 166 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:25:33.309 am debugSharpAquos - request 165 - request = [POWR1 ] to 192.168.254.205:10002
dev:8972019-12-15 12:25:33.306 am debugSharpAquos - request 165 - Socket [open] CMD [POWR] Params [1]
dev:8972019-12-15 12:25:33.304 am debugSharpAquos - getMutex 165 - Acquired mutex permit
dev:8972019-12-15 12:25:33.300 am debugSharpAquos - Turn on TV
dev:8972019-12-15 12:25:17.647 am debugSharpAquos - releaseMutex ?164? - Released mutex permit
dev:8972019-12-15 12:25:17.644 am debugSharpAquos - parse - 2 - COMMAND [RCKY33 ] RESPONSE [0]
dev:8972019-12-15 12:25:17.640 am debugSharpAquos - IOBUFFER: 13 entries [[RCKY33 , VOLM? , RCKY32 , VOLM? , RCKY33 , VOLM? , RCKY31 , MUTE? , RCKY31 , MUTE? , POWR0 , POWR? , 0]]
dev:8972019-12-15 12:25:17.610 am debugSharpAquos - request 164 - request = [POWR? ] to 192.168.254.205:10002
dev:8972019-12-15 12:25:17.608 am debugSharpAquos - request 164 - Socket [open] CMD [POWR] Params [?]
dev:8972019-12-15 12:25:17.605 am debugSharpAquos - getMutex 164 - Acquired mutex permit
dev:8972019-12-15 12:25:17.597 am debugSharpAquos - releaseMutex ?164? - Released mutex permit
dev:8972019-12-15 12:25:17.594 am debugSharpAquos - parse - 2 - COMMAND [MUTE? ] RESPONSE [OK]
dev:8972019-12-15 12:25:17.590 am debugSharpAquos - IOBUFFER: 13 entries [[MUTE? , RCKY33 , VOLM? , RCKY32 , VOLM? , RCKY33 , VOLM? , RCKY31 , MUTE? , RCKY31 , MUTE? , POWR0 , OK]]
dev:8972019-12-15 12:25:17.301 am debugSharpAquos - getMutex 164 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:25:17.298 am debugSharpAquos - request 163 - request = [POWR0 ] to 192.168.254.205:10002
dev:8972019-12-15 12:25:17.296 am debugSharpAquos - request 163 - Socket [open] CMD [POWR] Params [0]
dev:8972019-12-15 12:25:17.293 am debugSharpAquos - getMutex 163 - Acquired mutex permit
dev:8972019-12-15 12:25:17.288 am debugSharpAquos - Turn off TV
Not sure what errors or ok or not but here is one.....
dev:8972019-12-15 12:34:15.340 am debugSharpAquos - getMutex 182 - Detected stale mutex - forcing mutex release.
dev:8972019-12-15 12:33:16.216 am debugSharpAquos - getMutex 182 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:33:16.212 am errorSharpAquos - request 181 - ERROR. Unable to acquire mutex permit.
dev:8972019-12-15 12:33:16.204 am debugSharpAquos - request 181 - Socket [open] CMD [MUTE] Params [?] Handler [null]
dev:8972019-12-15 12:33:16.201 am debugSharpAquos - getMutex 181 - Failed to acquired mutex permit
dev:8972019-12-15 12:32:15.366 am debugSharpAquos - getMutex 181 - mutex permit not yet available. Waiting up to 60 seconds.
dev:8972019-12-15 12:32:15.314 am debugSharpAquos - request 180 - request = [POWR? ] to 192.168.254.205:10002
dev:8972019-12-15 12:32:15.309 am debugSharpAquos - request 180 - Socket [open] CMD [POWR] Params [?]
dev:8972019-12-15 12:32:15.306 am debugSharpAquos - getMutex 180 - Acquired mutex permit
dev:8972019-12-15 12:32:15.282 am debugSharpAquos - getDeviceState() Starting