def setUpClass(cls): # prepare config file for unpaired accessory server cls.config_file = tempfile.NamedTemporaryFile() cls.config_file.write("""{ "accessory_ltpk": "7986cf939de8986f428744e36ed72d86189bea46b4dcdc8d9d79a3e4fceb92b9", "accessory_ltsk": "3d99f3e959a1f93af4056966f858074b2a1fdec1c5fd84a51ea96f9fa004156a", "accessory_pairing_id": "12:34:56:00:01:0B", "accessory_pin": "010-22-020", "c#": 0, "category": "Lightbulb", "host_ip": "127.0.0.1", "host_port": 54321, "name": "unittestLight", "peers": { }, "unsuccessful_tries": 0 }""".encode()) cls.config_file.flush() # Make sure get_id() numbers are stable between tests model_mixin.id_counter = 0 cls.httpd = AccessoryServer(cls.config_file.name, None) cls.httpd.set_identify_callback(identify_callback) accessory = Accessory('Testlicht', 'lusiardi.de', 'Demoserver', '0001', '0.1') accessory.set_identify_callback(identify_callback) lightBulbService = LightBulbService() lightBulbService.set_on_set_callback(set_value) accessory.services.append(lightBulbService) cls.httpd.add_accessory(accessory) t = T(cls.httpd) t.start() time.sleep(10) cls.controller_file = tempfile.NamedTemporaryFile()
def setUpClass(cls): # prepare config file for paired accessory server, delete false for Windows, so we can close the file and open # it for reading after that cls.config_file = tempfile.NamedTemporaryFile(delete=False) cls.config_file.write("""{ "accessory_ltpk": "7986cf939de8986f428744e36ed72d86189bea46b4dcdc8d9d79a3e4fceb92b9", "accessory_ltsk": "3d99f3e959a1f93af4056966f858074b2a1fdec1c5fd84a51ea96f9fa004156a", "accessory_pairing_id": "12:34:56:00:01:0A", "accessory_pin": "031-45-154", "c#": 1, "category": "Lightbulb", "host_ip": "127.0.0.1", "host_port": 51842, "name": "unittestLight", "peers": { "decc6fa3-de3e-41c9-adba-ef7409821bfc": { "admin": true, "key": "d708df2fbf4a8779669f0ccd43f4962d6d49e4274f88b1292f822edc3bcf8ed8" }, "ABCDEFfa3-de3e-41c9-adba-ef7409821bfc": { "admin": false, "key": "d708df2fbf4a8779669f0ccd43f4962d6d49e4274f88b1292f822edc3bcf8ed8" } }, "unsuccessful_tries": 0 }""".encode()) cls.config_file.close() # Make sure get_id() numbers are stable between tests model_mixin.id_counter = 0 cls.logger = list() cls.httpd = AccessoryServer(cls.config_file.name, logger=cls.logger) cls.httpd.set_identify_callback(identify_callback) accessory = Accessory('Testlicht', 'lusiardi.de', 'Demoserver', '0001', '0.1') accessory.set_identify_callback(identify_callback) lightBulbService = LightBulbService() lightBulbService.set_on_set_callback(set_value) accessory.services.append(lightBulbService) cls.httpd.add_accessory(accessory) t = T(cls.httpd) t.start() time.sleep(5) cls.controller_file = tempfile.NamedTemporaryFile(delete=False) cls.controller_file.write("""{ "alias": { "Connection": "IP", "iOSDeviceLTPK": "d708df2fbf4a8779669f0ccd43f4962d6d49e4274f88b1292f822edc3bcf8ed8", "iOSPairingId": "decc6fa3-de3e-41c9-adba-ef7409821bfc", "AccessoryLTPK": "7986cf939de8986f428744e36ed72d86189bea46b4dcdc8d9d79a3e4fceb92b9", "AccessoryPairingID": "12:34:56:00:01:0A", "AccessoryPort": 51842, "AccessoryIP": "127.0.0.1", "iOSDeviceLTSK": "fa45f082ef87efc6c8c8d043d74084a3ea923a2253e323a7eb9917b4090c2fcc" } }""".encode()) cls.controller_file.close()
def setUpClass(cls): cls.config_file = tempfile.NamedTemporaryFile() cls.config_file.write("""{ "accessory_ltpk": "7986cf939de8986f428744e36ed72d86189bea46b4dcdc8d9d79a3e4fceb92b9", "accessory_ltsk": "3d99f3e959a1f93af4056966f858074b2a1fdec1c5fd84a51ea96f9fa004156a", "accessory_pairing_id": "12:34:56:00:01:0A", "accessory_pin": "031-45-154", "c#": 1, "category": "Lightbulb", "host_ip": "127.0.0.1", "host_port": 51842, "name": "unittestLight", "peers": { "decc6fa3-de3e-41c9-adba-ef7409821bfc": { "admin": true, "key": "d708df2fbf4a8779669f0ccd43f4962d6d49e4274f88b1292f822edc3bcf8ed8" } }, "unsuccessful_tries": 0 }""".encode()) cls.config_file.flush() cls.httpd = AccessoryServer(cls.config_file.name, None) cls.httpd.set_identify_callback(identify_callback) accessory = Accessory('Testlicht', 'lusiardi.de', 'Demoserver', '0001', '0.1') accessory.set_identify_callback(identify_callback) lightBulbService = LightBulbService() lightBulbService.set_on_set_callback(set_value) accessory.services.append(lightBulbService) cls.httpd.add_accessory(accessory) t = T(cls.httpd) t.start() time.sleep(5) cls.controller_file = tempfile.NamedTemporaryFile() cls.controller_file.write("""{ "alias": { "iOSDeviceLTPK": "d708df2fbf4a8779669f0ccd43f4962d6d49e4274f88b1292f822edc3bcf8ed8", "iOSPairingId": "decc6fa3-de3e-41c9-adba-ef7409821bfc", "AccessoryLTPK": "7986cf939de8986f428744e36ed72d86189bea46b4dcdc8d9d79a3e4fceb92b9", "AccessoryPairingID": "12:34:56:00:01:0A", "AccessoryPort": 51842, "AccessoryIP": "127.0.0.1", "iOSDeviceLTSK": "fa45f082ef87efc6c8c8d043d74084a3ea923a2253e323a7eb9917b4090c2fcc" } }""".encode()) cls.controller_file.flush()
sys.exit(-1) try: pairing = controller.get_pairings()[args.alias] data = pairing.list_accessories_and_characteristics() except Exception as e: logging.error(e, exc_info=True) sys.exit(-1) proxy_accessories = create_proxy(data) # create a server and an accessory an run it unless ctrl+c was hit try: httpd = AccessoryServer( server_config_file, logging.getLogger(), request_handler_class=generate_proxy_accessory_request_handler( pairing)) for proxy_accessory in proxy_accessories: httpd.add_accessory(proxy_accessory) httpd.publish_device() logging.info('published device and start serving') httpd.serve_forever() except KeyboardInterrupt: pass # unpublish the device and shut down logging.info('unpublish device') httpd.unpublish_device() httpd.shutdown()
from homekit import AccessoryServer from homekit.model import Accessory, LightBulbService from homekit.model.characteristics import BrightnessCharacteristicMixin, BrightnessCharacteristic, HueCharacteristic if __name__ == '__main__': # setup logger logger = logging.getLogger('accessory') logger.setLevel(logging.INFO) ch = logging.StreamHandler() ch.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')) logger.addHandler(ch) logger.info('starting') try: httpd = AccessoryServer(os.path.expanduser('./demoserver.json'), logger) httpd.set_identify_callback(lambda) accessory = Accessory('Light', 'PheonixFi', 'Demoserver', '0001', '0.1') lightService = LightBulbService() # lightService.set_get_value_callback(); lightService.append_characteristic(BrightnessCharacteristic(12345678901)) # lightService.append_characteristic(HueCharacteristic(12345678902)) accessory.services.append(lightService) httpd.add_accessory(accessory) httpd.publish_device() print('published device and start serving') httpd.serve_forever()
# setup logger logger = logging.getLogger('accessory') logger.setLevel(logging.INFO) ch = logging.StreamHandler() ch.setFormatter( logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s')) logger.addHandler(ch) logger.info('starting') config_file = os.path.expanduser(args.file) # create a server and an accessory an run it unless ctrl+c was hit try: httpd = AccessoryServer(config_file, logger) accessory = Accessory('Testlicht', 'lusiardi.de', 'Demoserver', '0001', '0.1') lightBulbService = LightBulbService() lightBulbService.set_on_set_callback(light_switched) accessory.services.append(lightBulbService) httpd.add_accessory(accessory) httpd.publish_device() logger.info('published device and start serving') httpd.serve_forever() except KeyboardInterrupt: pass # unpublish the device and shut down