def arp_handle(pkt): global last_trigger if ( ARP in pkt and pkt[ARP].op == 1 and # who-has (request) abs(time.time() - last_trigger) > blackout_time ): mac = pkt[ARP].hwsrc.lower() logger.debug("Found ARP request") if mac in config.sections(): if ( config.has_option(mac, 'domain') and config.has_option(mac, 'action') ): domain = config.get(mac, 'domain') action = config.get(mac, 'action') data = json.loads(config.get(mac, 'data', fallback='')) logger.info( "Found Button %s, will execute %s.%s with data %s", mac, domain, action, data ) ha.call_service(api, domain, action, data) else: logger.info( "Found Button %s, will fire event for that mac", mac ) ha.fire_event(api, 'dash_button_pressed', {'mac': mac}) last_trigger = time.time()
def send_event(self, type, entity_id, state=None, attributes=None): """ ./set_state.py send-event 'energy_asset_create' --state="EON_PowerPool" --entity_id=energy_asset.xxxxxx --attributes='{"status":"setup", "lat":0, "lon":0, "schedule":[0,0], "max_flex":[0,0], "min_flex":[0,0]}' ./set_state.py send-event 'energy_asset_kill' --entity_id 'energy_asset.xxxxxx' """ data = { "entity_id": entity_id, "state": state, "attributes": attributes } remote.fire_event(api, type, data)
def test_fire_event(self): """Test Python API fire_event.""" test_value = [] def listener(event): """Helper method that will verify our event got called.""" test_value.append(1) hass.bus.listen("test.event_no_data", listener) remote.fire_event(master_api, "test.event_no_data") hass.block_till_done() self.assertEqual(1, len(test_value)) # Should not trigger any exception remote.fire_event(broken_api, "test.event_no_data")
def test_fire_event(self): """Test Python API fire_event.""" test_value = [] def listener(event): """Helper method that will verify our event got called.""" test_value.append(1) hass.bus.listen_once("test.event_no_data", listener) remote.fire_event(master_api, "test.event_no_data") hass.pool.block_till_done() self.assertEqual(1, len(test_value)) # Should not trigger any exception remote.fire_event(broken_api, "test.event_no_data")
def test_fire_event(self): """ Test Python API fire_event. """ test_value = [] def listener(event): # pylint: disable=unused-argument """ Helper method that will verify our event got called. """ test_value.append(1) hass.listen_once_event("test.event_no_data", listener) remote.fire_event(master_api, "test.event_no_data") hass._pool.block_till_done() self.assertEqual(1, len(test_value))
def test_fire_event(self): """ Test Python API fire_event. """ test_value = [] def listener(event): # pylint: disable=unused-argument """ Helper method that will verify our event got called. """ test_value.append(1) self.hass.listen_once_event("test.event_no_data", listener) remote.fire_event(self.api, "test.event_no_data") # Allow the event to take place time.sleep(1) self.assertEqual(len(test_value), 1)
def remove_asset(self): print(f"-M- removing energy asset: {self.name}") data = self._create_data(self.name) remote.fire_event(self.API, EVENT_ENERGY_ASSET_KILL, data) return self.name, data
def __init__(self, port, hasshost, password, haport, ssl, retrycount, waittime): self._port = port self._hasshost = hasshost self._password = password self._haport = haport self._ssl = ssl self._retrycount = retrycount self._waittime = waittime msg = "Sleeping to give Home Assistant a moment to start" _LOGGER.info(msg) print(msg) time.sleep(waittime) try: validationresult = "init" numretries = 0 while validationresult != "ok" and numretries <= self._retrycount: self._api = remote.API(self._hasshost, self._password, self._haport, self._ssl) validationresult = str(remote.validate_api(self._api)) numretries = numretries + 1 if validationresult != "ok": msg = "Connecting to Home Assistant failed, " msg = msg + "retrying..." _LOGGER.info(msg) print(msg) time.sleep(5) if validationresult != "ok": msg = "Error connection to Home Assistant: " msg = msg + validationresult _LOGGER.error(msg) print(msg) sys.exit(2) else: msg = "Succesfully connected to Home Assistant" print(msg) _LOGGER.info(msg) except: e = sys.exc_info()[0] msg = "Error connecting to Home Assistant: " msg = msg + str(e) + ", please check settings." print(msg) _LOGGER.error(msg) sys.exit(2) listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) try: listen_socket.bind(('', self._port)) listen_socket.listen(1) except: msg = "Permission error, make sure to run " msg = msg + "this as root or in sudo mode" print(msg) _LOGGER.error(msg) sys.exit(2) msg = "EgardiaServer listening on port " + str(port) _LOGGER.info(msg) print(msg) self._status = "" while True: client_connection, client_address = listen_socket.accept() request = client_connection.recv(1024) http_response = """\ HTTP/1.1 200 OK Hello, World! """ requestdecoded = request.decode('utf8') if requestdecoded.startswith("["): newstatus = requestdecoded[requestdecoded.index(' ') + 1:] newstatus = newstatus[:len(newstatus) - 1] msg = "[" + str(datetime.datetime.now()) + "] Received new " msg = msg + "statuscode from alarm system: " + newstatus _LOGGER.info(msg) print(msg) if newstatus != self._status: self._status = newstatus payload = {"status": self._status} try: remote.fire_event(self._api, 'egardia_system_status', data=payload) msg = "egardia_system_status event fired with payload: " msg = msg + str(payload) _LOGGER.info(msg) print(msg) except: e = sys.exc_info()[0] msg = "Could not fire event, is your " msg = msg + "HASS server running?" _LOGGER.error(msg) print(msg) _LOGGER.error(str(e)) print(str(e)) client_connection.sendall(http_response.encode('utf8')) client_connection.close()