diff --git a/devicetypes/kris2k2/wemo-dimmer-light-switch.src/wemo-dimmer-light-switch.groovy b/devicetypes/kris2k2/wemo-dimmer-light-switch.src/wemo-dimmer-light-switch.groovy index b23e23b651e..f8b84fb164c 100644 --- a/devicetypes/kris2k2/wemo-dimmer-light-switch.src/wemo-dimmer-light-switch.groovy +++ b/devicetypes/kris2k2/wemo-dimmer-light-switch.src/wemo-dimmer-light-switch.groovy @@ -253,7 +253,7 @@ def refresh() { } def subscribe(hostAddress) { - debug("Executing 'subscribe()'") + debug("Executing subscribe(${hostAddress})") def address = getCallBackAddress() new physicalgraph.device.HubAction("""SUBSCRIBE /upnp/event/basicevent1 HTTP/1.1 HOST: ${hostAddress} @@ -267,6 +267,7 @@ User-Agent: CyberGarage-HTTP/1.0 } def subscribe() { + debug("calling getHostAddress()") subscribe(getHostAddress()) } @@ -286,7 +287,7 @@ def subscribe(ip, port) { } def resubscribe() { - debug("Executing 'resubscribe()'") + debug("Executing resubscribe()") def sid = getDeviceDataByName("subscriptionId") new physicalgraph.device.HubAction("""SUBSCRIBE /upnp/event/basicevent1 HTTP/1.1 @@ -307,4 +308,4 @@ SID: uuid:${sid} """, physicalgraph.device.Protocol.LAN) -} \ No newline at end of file +} diff --git a/smartapps/kris2k2/wemo-dimmer-light-switch.src/wemo-dimmer-light-switch.groovy b/smartapps/kris2k2/wemo-dimmer-light-switch.src/wemo-dimmer-light-switch.groovy index 9e7c0c0d193..75cbe93f4fc 100644 --- a/smartapps/kris2k2/wemo-dimmer-light-switch.src/wemo-dimmer-light-switch.groovy +++ b/smartapps/kris2k2/wemo-dimmer-light-switch.src/wemo-dimmer-light-switch.groovy @@ -64,11 +64,11 @@ def firstPage() { debug("REFRESH COUNT :: ${refreshCount}") - if(!state.subscribe) { - debug("Subscribe to location") - // subscribe to answers from HUB - subscribe(location, null, locationHandler, [filterEvents:false]) - state.subscribe = true + if (!state.subscribe) { + debug("Subscribe to location") + // subscribe to answers from HUB + subscribe(location, "ssdpTerm.urn:Belkin:service:basicevent:1", locationHandler, [filterEvents:false]) + state.subscribe = true } //ssdp request every 25 seconds @@ -127,7 +127,16 @@ def getWemoDimmerLightSwitches() { def installed() { debug("Installed with settings: ${settings}") - initialize() + unschedule() + unsubscribe() + if (selecteddimmerLightSwitches) { + adddimmerLightSwitches() + } + // run once subscribeToDevices + subscribeToDevices() + + //setup cron jobs + runEvery5Minutes(subscribeToDevices) } def uninstalled() { @@ -148,7 +157,15 @@ private removeChildDevices(devices) { def updated() { debug("Updated with settings: ${settings}") - initialize() + unschedule() + if (selecteddimmerLightSwitches) { + adddimmerLightSwitches() + } + // run once subscribeToDevices + subscribeToDevices() + + //setup cron jobs + runEvery5Minutes(subscribeToDevices) } def resubscribe() { @@ -168,6 +185,8 @@ def refreshDevices() { def subscribeToDevices() { debug("subscribeToDevices() called") + // Need to discover each subscribe call or updated ports wont be caught! + discoverAllWemoTypes() def devices = getAllChildDevices() devices.each { d -> debug('Call subscribe on '+d.id) @@ -176,15 +195,14 @@ def subscribeToDevices() { } def adddimmerLightSwitches() { + debug("adddimmerLightSwitches()") def dimmerLightSwitches = getWemoDimmerLightSwitches() - selecteddimmerLightSwitches.each { dni -> - def selectedDimmerLightSwitch = dimmerLightSwitches.find { it.value.mac == dni } ?: dimmerLightSwitches.find { "${it.value.ip}:${it.value.port}" == dni } - + def selectedDimmerLightSwitch = dimmerLightSwitches.find { it?.value?.mac == dni } def d if (selectedDimmerLightSwitch) { d = getChildDevices()?.find { - it.dni == selectedDimmerLightSwitch.value.mac || it.device.getDataValue("mac") == selectedDimmerLightSwitch.value.mac + it?.dni == selectedDimmerLightSwitch?.value?.mac || it?.device?.getDataValue("mac") == selectedDimmerLightSwitch?.value?.mac } } @@ -201,28 +219,11 @@ def adddimmerLightSwitches() { debug("Mac: " + selectedDimmerLightSwitch.value.mac) debug("Hub: " + (selectedDimmerLightSwitch?.value.hub)) debug("Data: " + data) - d = addChildDevice("kris2k2", "Wemo Dimmer Light Switch", selectedDimmerLightSwitch.value.mac, (selectedDimmerLightSwitch?.value.hub), data) + d = addChildDevice("kris2k2", "Wemo Dimmer Light Switch", selectedDimmerLightSwitch.value.mac, selectedDimmerLightSwitch?.value.hub, data) } } } -def initialize() { - debug("Initialiaze") - // remove location subscription afterwards - unsubscribe() - state.subscribe = false - - if (selecteddimmerLightSwitches) { - adddimmerLightSwitches() - } - - // run once subscribeToDevices - subscribeToDevices() - - //setup cron jobs - schedule("10 * * * * ?", "subscribeToDevices") -} - def locationHandler(evt) { if(evt.name == "ping") { return "" @@ -246,23 +247,15 @@ def locationHandler(evt) { } else { // just update the values debug("Updating devices") def d = dimmerLightSwitches."${parsedEvent.ssdpUSN.toString()}" - boolean deviceChangedValues = false - if(d.ip != parsedEvent.ip || d.port != parsedEvent.port) { d.ip = parsedEvent.ip d.port = parsedEvent.port - deviceChangedValues = true - } - - if (deviceChangedValues) { - def children = getChildDevices() - children.each { - if (it.getDeviceDataByName("mac") == parsedEvent.mac) { - it.subscribe(parsedEvent.ip, parsedEvent.port) - } + def child = getChildDevice(parsedEvent.mac) + if (child) { + debug("Triggering subscribe on: ${parsedEvent.mac} ${parsedEvent.ip} ${parsedEvent.port}") + child.subscribe(parsedEvent.ip, parsedEvent.port) } } - } } else if (parsedEvent.headers && parsedEvent.body) { def headerString = new String(parsedEvent.headers.decodeBase64()) @@ -349,4 +342,4 @@ private Boolean hasAllHubsOver(String desiredFirmware) { private List getRealHubFirmwareVersions() { return location.hubs*.firmwareVersionString.findAll { it } -} \ No newline at end of file +}