예제 #1
0
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()
예제 #2
0
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()
예제 #3
0
파일: main.py 프로젝트: tim6her/Homekit-LMS
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()
예제 #4
0
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()
예제 #5
0
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()
예제 #6
0
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
예제 #7
0
파일: ahk.py 프로젝트: jarobey/happygarden
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__))
예제 #8
0
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()
예제 #9
0
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()
예제 #10
0
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
예제 #11
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...')
예제 #12
0
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()
예제 #13
0
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()
예제 #14
0
	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()