def main(): # init logger logger = logging.getLogger('homekit-flux-led') formatter = logging.Formatter('[%(levelname)s %(asctime)s]: %(message)s') ch = logging.StreamHandler() ch.setFormatter(formatter) logger.addHandler(ch) # parse cli-arguments parser = argparse.ArgumentParser() parser.add_argument( '-v', '--verbose', help='DEBUG logging mode', action='store_true', ) args = parser.parse_args() # set loggin level if args.verbose: logger.setLevel(logging.DEBUG) logger.info('Logging level: DEBUG') else: logger.setLevel(logging.INFO) logger.info('Logging level: INFO') # scan for bulbs logger.debug('Scanning for lightbulbs') scanner = BulbScanner() scanner.scan() logger.debug(f'Found lightbulbs:') logger.debug(scanner.found_bulbs) # initialize AccessoryServer logger.debug('Create HomeKit-AccessoryServer...') driver = AccessoryDriver() bridge = Bridge(driver, 'MagicHome') logger.debug('HomeKit-AccessoryServer created successful.') for bulb in scanner.found_bulbs: # add bulbs to bridge logger bridge.add_accessory( FluxLED( driver, bulb['id'], bulb['ipaddr'], logger=logger, ), ) # add bridge to the driver driver.add_accessory(bridge) try: # start the server logger.info('Start server...') driver.start() except KeyboardInterrupt: logger.info('Stopping server...') driver.stop()
def start_homekit(co2meter): # Start the accessory on port 51826 driver = AccessoryDriver(port=51826) driver.add_accessory(accessory=CO2Sensor( co2meter=co2meter, driver=driver, display_name="CO2 Sensor")) # We want SIGTERM (terminate) to be handled by the driver itself, # so that it can gracefully stop the accessory, server and advertising. signal.signal(signal.SIGTERM, driver.signal_handler) # Start it! driver.start()
def homekit(): # Start the accessory on port 51826 driver = AccessoryDriver(port=51826) # Change `get_accessory` to `get_bridge` if you want to run a Bridge. driver.add_accessory(accessory=get_accessory(driver)) # We want SIGTERM (kill) to be handled by the driver itself, # so that it can gracefully stop the accessory, server and advertising. signal.signal(signal.SIGTERM, driver.signal_handler) # Start it! driver.start()
def main(args): import logging import signal from pyhap.accessory_driver import AccessoryDriver logging.basicConfig(level=logging.INFO) driver = AccessoryDriver(port=args.port) accessory = MiFan(args, driver, 'Fanv2') driver.add_accessory(accessory=accessory) signal.signal(signal.SIGTERM, driver.signal_handler) driver.start()
def main(): import logging import signal from pyhap.accessory_driver import AccessoryDriver logging.basicConfig(level=logging.INFO) driver = AccessoryDriver(port=51826) accessory = TV(driver, 'TV') driver.add_accessory(accessory=accessory) signal.signal(signal.SIGTERM, driver.signal_handler) driver.start()
def start_homekit(mon=None, port=PORT, host=None, monitoring=True, handle_sigint=True): logging.basicConfig(level=logging.INFO) acc = CO2Accessory(mon=mon, pincode=PINCODE, monitoring=monitoring) # Start the accessory on selected port driver = AccessoryDriver(acc, port=port, address=host) # We want KeyboardInterrupts and SIGTERM (kill) to be handled by the driver itself, # so that it can gracefully stop the accessory, server and advertising. if handle_sigint: signal.signal(signal.SIGINT, driver.signal_handler) signal.signal(signal.SIGTERM, driver.signal_handler) # Start it! driver.start() return driver
class GardenHub(): hub_name = None driver = None bridge = None coup = None def __init__(self, hub_name, user, device, listen_address=None): logging.basicConfig(level=logging.INFO, format="[%(module)s] %(message)s") # Initialize my coup self.hub_name = hub_name coup = RemoteCoup(user, device) # Start the accessory on port 51826 if listen_address: self.driver = AccessoryDriver(port=51826, address=listen_address) else: self.driver = AccessoryDriver(port=51826) self.bridge = Bridge(self.driver, self.hub_name) # Setup run and coup lights while True: status = coup.get_status() if (status is None) or ('Coup' not in status) or ('Lights' not in status['Coup']): logger.error("Status has not been initialized or lights missing: Status = {0} at {1}".format(status, datetime.now())) else: for light in status['Coup']['Lights']: logger.info("Adding %s", light) runlight = RemoteGardenLight(self.driver, name=light, coup=coup) self.bridge.add_accessory(runlight) break time.sleep(5) # Change `get_accessory` to `get_bridge` if you want to run a Bridge. self.driver.add_accessory(accessory=self.bridge) # We want SIGTERM (terminate) to be handled by the driver itself, # so that it can gracefully stop the accessory, server and advertising. signal.signal(signal.SIGTERM, self.driver.signal_handler) def start(self): self.driver.start() print("Completed {0} start".format(__name__))
class HomeKit(): """Class to handle all actions between HomeKit and Home Assistant.""" def __init__(self, hass, port): """Initialize a HomeKit object.""" self._hass = hass self._port = port self.bridge = None self.driver = None def setup_bridge(self, pin): """Setup the bridge component to track all accessories.""" from .accessories import HomeBridge self.bridge = HomeBridge(BRIDGE_NAME, 'homekit.bridge', pin) def start_driver(self, event): """Start the accessory driver.""" from pyhap.accessory_driver import AccessoryDriver self._hass.bus.listen_once( EVENT_HOMEASSISTANT_STOP, self.stop_driver) import_types() _LOGGER.debug("Start adding accessories.") for state in self._hass.states.all(): acc = get_accessory(self._hass, state) if acc is not None: self.bridge.add_accessory(acc) ip_address = get_local_ip() path = self._hass.config.path(HOMEKIT_FILE) self.driver = AccessoryDriver(self.bridge, self._port, ip_address, path) _LOGGER.debug("Driver started") self.driver.start() def stop_driver(self, event): """Stop the accessory driver.""" _LOGGER.debug("Driver stop") if self.driver is not None: self.driver.stop()
class Homekit(): """Class to handle all actions between homekit and Home Assistant.""" def __init__(self, hass, port): """Initialize a homekit object.""" self._hass = hass self._port = port self.bridge = None self.driver = None def setup_bridge(self, pin): """Setup the bridge component to track all accessories.""" from .accessories import HomeBridge self.bridge = HomeBridge(BRIDGE_NAME, pincode=pin) self.bridge.set_accessory_info('homekit.bridge') def start_driver(self, event): """Start the accessory driver.""" from pyhap.accessory_driver import AccessoryDriver self._hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, self.stop_driver) import_types() _LOGGER.debug("Start adding accessories.") for state in self._hass.states.all(): acc = get_accessory(self._hass, state) if acc is not None: self.bridge.add_accessory(acc) ip_address = get_local_ip() path = self._hass.config.path(HOMEKIT_FILE) self.driver = AccessoryDriver(self.bridge, self._port, ip_address, path) _LOGGER.debug("Driver started") self.driver.start() def stop_driver(self, event): """Stop the accessory driver.""" _LOGGER.debug("Driver stop") if self.driver is not None: self.driver.stop()
def main(cfg, reset, setup_systemd): # init logging logging.basicConfig(level=logging.INFO) if reset: # remove accessory.state os.remove('accessory.state') if setup_systemd: systmd() # create config if necessary if not os.path.exists(os.path.join(cfg, 'bridge.cfg')): create_cfg(cfg) # start the accessory driver on port 51826 driver = AccessoryDriver(port=51826) # create bridge bridge = MqttBridge(cfg, driver, 'MQTT') # load accs loader = cfg_loader.CfgLoader(driver, cfg) accs = loader.load_accessories(reset) for acc in accs: bridge.add_accessory(acc) loader.save_accessories() # add the bridge driver.add_accessory(accessory=bridge) signal.signal(signal.SIGTERM, driver.signal_handler) # start HomeKit driver.start() print('Returned') return 0
def start(self): try: logging.basicConfig(level=logging.INFO) driver = AccessoryDriver(port=51827) bridge = Bridge(driver, 'Bridge') for device in self.settings.xcomfort.devices: if not device.add_to_homekit: continue print(f"[XComfort] Adding {device.name}") lamp = HomeKitXComfortLight(driver, device.name) bridge.add_accessory(lamp) for device in self.settings.easee.devices: if not device.add_to_homekit: continue print(f"[Easee] Adding {device.name}") charger = EaseeCharger(driver, device.name) bridge.add_accessory(charger) driver.add_accessory(accessory=bridge) signal.signal(signal.SIGTERM, driver.signal_handler) driver.start() except KeyboardInterrupt: print('Stopping...')
LED_DMA = 10 # DMA channel to use for generating signal (try 10) LED_BRIGHTNESS = 200 # Set to 0 for darkest and 255 for brightest LED_INVERT = False # True to invert the signal (when using NPN transistor level shift) LED_CHANNEL = 0 # set to '1' for GPIOs 13, 19, 41, 45 or 53 LED_STRIP = ws.SK6812W_STRIP strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL, LED_STRIP) strip.begin() def get_bridge(driver): """Call this method to get a Bridge instead of a standalone accessory.""" bridge = Bridge(driver, 'Bridge') music_dis = MusicStart(strip, driver, 'MusicDisplay') bridge.add_accessory(music_dis) return bridge # Start the accessory on port 51828 driver = AccessoryDriver(port=51828, persist_file='main.state') # Change `get_accessory` to `get_bridge` if you want to run a Bridge. driver.add_accessory(accessory=get_bridge(driver)) # We want SIGTERM (terminate) to be handled by the driver itself, # so that it can gracefully stop the accessory, server and advertising. signal.signal(signal.SIGTERM, driver.signal_handler) # Start it! driver.start()
def run(): driver = AccessoryDriver(port=51826, persist_file='busy_home.state') driver.add_accessory(accessory=get_bridge(driver)) signal.signal(signal.SIGTERM, driver.signal_handler) driver.start()
def next_track(self): print("Next track...") os.popen("killall -9 -q omxplayer.bin") print("Starting Pi Playlist...") playlist = PiPlaylist("Pi Playlist") driver = AccessoryDriver(playlist, port=51826) paired_devices = [] for k,v in playlist.paired_clients.items(): paired_devices.append(k) if len(sys.argv) > 1: if sys.argv[1] == "-unpair": print("Removing paired devices...") for p in paired_devices: playlist.remove_paired_client(p) else: playlist.music_folder = sys.argv[1] for p in paired_devices: print("Paired with: {}".format(p)) signal.signal(signal.SIGINT, driver.signal_handler) signal.signal(signal.SIGTERM, driver.signal_handler) driver.start()