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()
Beispiel #2
0
 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")
Beispiel #4
0
    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)

        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))
Beispiel #7
0
    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)
Beispiel #8
0
 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()