Sharp Aquos TV Driver

Can it!!! The "incessant logs" are the only reason that you have a working driver available to you!!!

BTW... @albertsmark Thanks!!

new version...

  1. further tweaks to automatic reconnect strategy
  2. fixes to DA2P data parsing.
/**
 *  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 :smile:
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 :clap:. 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....

Summary

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.

Summary

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:

  1. rework reconnect strategy
  2. extra error checking for processing channel data
  3. only query TV for channel data if input is set to TV

[Old version removed]

Looks like a few errors.....

Summary

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....

Summary

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....

Summary

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.....

Summary

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

Current states snapshot.....

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.....

Summary

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...

  1. Replaced request/response processing with an IO Queue
  2. added parsing mutex to prevent out-of-order data reception
  3. rewrote response parsing to more efficiently dispatch received data
  4. removed execution throttling (was previously required to prevent out-of-order data reception)
  5. added debug log / verbose log / event log control (for now, they default to ON for debugging... later versions will default to OFF)
/**
 *  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....

Summary

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...

Summary

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.,,,

Summary

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.....

Summary

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