def onHeartbeat(self): Domoticz.Debug("onHeartbeat called") if not self.ip: return url = 'http://' +self.ip + "/DEV_device_info.htm" Domoticz.Debug("url to check : %s" %url) try: if self.session: r = self.session.get( url ) else: r = requests.get(url, auth=HTTPBasicAuth(self.username, self.password)) r.raise_for_status() except requests.exceptions.TooManyRedirects: Domoticz.Errors("URL was bad. %s" %url) return except requests.exceptions.ConnectionError as errc: Domoticz.Log("Error Connecting: %s - %s" %(url, errc)) return except requests.exceptions.HTTPError as err: Domoticz.Error("Error on requests(%s): %s" %(url, err)) return except requests.exceptions.Timeout: Domoticz.Error("Timeout on requests(%s)" %url) return except requests.exceptions.RequestException as e: Domoticz.Log("Catastophic error. %url - %s" %(url, e)) if len(r.text) < 200: Domoticz.Error("response seems too short: %s - %s" %(url, r.text)) return lines = r.text.split('\n') Domoticz.Debug("lines: %s" %lines) if len(lines) < 2: Domoticz.Error("Unexpected value (too short)) for lines: %s" %lines) return device = lines[1].split('=') if len(device) < 2: Domoticz.Error("Unexpected value (too short)) for device: %s" %device) return Domoticz.Debug("lines: %s" %lines) Domoticz.Debug("device: %s" %device) try: json_orbi = json.loads(device[1]) except: Domoticz.Debug("looks like something went wrong with json.loads(%): device: %s" %device[1]) return cnt = 0 dico_orbi = {} for iter in json_orbi: dico_orbi[cnt] = {} dico_orbi[cnt] = iter cnt += 1 mac_presence = [] for iter in dico_orbi: if dico_orbi[iter]['mac'] in self.macs: mac_presence.append(format_mac(dico_orbi[iter]['mac'])) Domoticz.Log('MAC@ present are : %s' %mac_presence) oneOn = False for iterDev in Devices: if iterDev == 1: continue if Devices[iterDev].DeviceID in mac_presence: oneOn = True Domoticz.Log('%s is at home' %Devices[iterDev].Name) if Devices[iterDev].sValue != 'On': Devices[iterDev].Update(nValue=1, sValue='On') else: Domoticz.Log('%s is away' %Devices[iterDev].Name) if Devices[iterDev].sValue != 'Off': Devices[iterDev].Update(nValue=0, sValue='Off') Domoticz.Log("@Home: %s %s, oneOn: %s" %(Devices[1].nValue, Devices[1].sValue, oneOn)) if oneOn: if Devices[1].sValue != 'On': Domoticz.Log("Update Anyone@Home to On") Devices[1].Update(nValue=1, sValue='On') else: if Devices[1].sValue != 'Off': Domoticz.Log("Update Anyone@Home to Off") Devices[1].Update(nValue=0, sValue='Off')