Skip to content

How to run multiple accessories in 1 process? #430

@ixje

Description

@ixje

I'm trying to run multiple temperature sensors in a single process (without a bridge). Running an unmodified main.py and pairing a single accessory works fine.

When I modify it slightly to

async def main():
    driver1 = AccessoryDriver(port=51826, persist_file='state1')
    driver1.add_accessory(accessory=TemperatureSensor(driver1, 'kitchen'))
    signal.signal(signal.SIGTERM, driver1.signal_handler)
    await driver1.async_start()

    driver2 = AccessoryDriver(port=51827, persist_file='state2')
    driver2.add_accessory(accessory=TemperatureSensor(driver2, 'office'))
    signal.signal(signal.SIGTERM, driver2.signal_handler)
    await driver2.async_start()

if __name__ == "__main__":
    loop = asyncio.new_event_loop()
    loop.create_task(main())
    loop.run_forever()

then run it, I get

  [selector_events] Using selector: KqueueSelector
  [selector_events] Using selector: KqueueSelector
  [characteristic] set_value: Name to kitchen
  [characteristic] set_value: SerialNumber to default
  [accessory_driver] Storing Accessory state in `state1`
  [accessory_driver] Writing of accessory state to disk
  [accessory_driver] Starting accessory kitchen on address 192.168.1.100, port 51826.
  [accessory_driver] Starting server.
  [accessory_driver] Get accessories response: [{'aid': 1, 'services': [{'iid': 1, 'type': '3E', 'characteristics': [{'iid': 2, 'type': '14', 'perms': ['pw'], 'format': 'bool'}, {'iid': 3, 'type': '20', 'perms': ['pr'], 'format': 'string', 'value': ''}, {'iid': 4, 'type': '21', 'perms': ['pr'], 'format': 'string', 'value': ''}, {'iid': 5, 'type': '23', 'perms': ['pr'], 'format': 'string', 'value': 'kitchen'}, {'iid': 6, 'type': '30', 'perms': ['pr'], 'format': 'string', 'value': 'default'}, {'iid': 7, 'type': '52', 'perms': ['pr'], 'format': 'string', 'value': ''}]}, {'iid': 8, 'type': '8A', 'characteristics': [{'iid': 9, 'type': '11', 'perms': ['pr', 'ev'], 'format': 'float', 'minValue': -273.1, 'maxValue': 1000, 'unit': 'celsius', 'minStep': 0.1, 'value': 0.0}]}, {'iid': 10, 'type': '82', 'characteristics': [{'iid': 11, 'type': '10', 'perms': ['pr', 'ev'], 'format': 'float', 'minValue': 0, 'maxValue': 100, 'unit': 'percentage', 'minStep': 1, 'value': 0}]}]}]
  [accessory_driver] Scheduling write of accessory state to disk
  [accessory_driver] Writing of accessory state to disk
  [accessory_driver] Starting mDNS.
  [accessory_driver] Starting accessory kitchen
  [accessory_driver] AccessoryDriver for kitchen started successfully
  [selector_events] Using selector: KqueueSelector
  [characteristic] set_value: Name to office
  [characteristic] set_value: SerialNumber to default
  [accessory_driver] Storing Accessory state in `state2`
  [accessory_driver] Writing of accessory state to disk
  [accessory_driver] Starting accessory office on address 192.168.1.100, port 51827.
  [accessory_driver] Starting server.
  [accessory_driver] Get accessories response: [{'aid': 1, 'services': [{'iid': 1, 'type': '3E', 'characteristics': [{'iid': 2, 'type': '14', 'perms': ['pw'], 'format': 'bool'}, {'iid': 3, 'type': '20', 'perms': ['pr'], 'format': 'string', 'value': ''}, {'iid': 4, 'type': '21', 'perms': ['pr'], 'format': 'string', 'value': ''}, {'iid': 5, 'type': '23', 'perms': ['pr'], 'format': 'string', 'value': 'office'}, {'iid': 6, 'type': '30', 'perms': ['pr'], 'format': 'string', 'value': 'default'}, {'iid': 7, 'type': '52', 'perms': ['pr'], 'format': 'string', 'value': ''}]}, {'iid': 8, 'type': '8A', 'characteristics': [{'iid': 9, 'type': '11', 'perms': ['pr', 'ev'], 'format': 'float', 'minValue': -273.1, 'maxValue': 1000, 'unit': 'celsius', 'minStep': 0.1, 'value': 0.0}]}, {'iid': 10, 'type': '82', 'characteristics': [{'iid': 11, 'type': '10', 'perms': ['pr', 'ev'], 'format': 'float', 'minValue': 0, 'maxValue': 100, 'unit': 'percentage', 'minStep': 1, 'value': 0}]}]}]
  [accessory_driver] Scheduling write of accessory state to disk
  [accessory_driver] Starting mDNS.
  [accessory_driver] Writing of accessory state to disk
  [accessory_driver] Starting accessory office
  [accessory_driver] AccessoryDriver for office started successfully
  To use the QR Code feature, use 'pip install HAP-python[QRCode]'
  [kitchen] Enter this code in your HomeKit app on your iOS device: 574-69-969
  To use the QR Code feature, use 'pip install HAP-python[QRCode]'
  [office] Enter this code in your HomeKit app on your iOS device: 445-95-191

I see both sensors in the Home app, but after entering the setup code it just hangs trying to connect until it times out. I see no further logs along the lines of "accepted connection". Any tips/hints what I might be missing or should look at?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions