Closed kormax closed 9 months ago
This message contains demo code that can be used to verify that characteristic and service definitions are correct (assuming that proposed changes are applied).
import signal
import logging
from pyhap.accessory import Accessory
from pyhap.const import CATEGORY_DOOR_LOCK
from pyhap.accessory_driver import AccessoryDriver
from pyhap.service import Service
from pyhap.characteristic import Characteristic
logger = logging.getLogger(__name__)
class Lock(Accessory):
category = CATEGORY_DOOR_LOCK
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.add_lock_service()
self.add_nfc_access_service()
def add_info_service(self):
serv_info: Service = self.driver.loader.get_service("AccessoryInformation")
serv_info.configure_char("Name", value=self.display_name)
serv_info.configure_char("SerialNumber", value="default")
serv_info.add_characteristic(self.driver.loader.get_char("HardwareFinish"))
serv_info.configure_char("HardwareFinish", value="AQTj4+MA") # Silver color
self.add_service(serv_info)
def add_lock_service(self):
self.service_lock_mechanism: Service = self.add_preload_service("LockMechanism")
def get_lock_current_state():
print(f"get_lock_current_state")
return 1
self.lock_current_state: Characteristic = self.service_lock_mechanism.configure_char(
"LockCurrentState",
getter_callback=get_lock_current_state,
)
def get_lock_target_state():
print(f"get_lock_target_state")
return 1
def set_lock_target_state(value):
print(f"set_lock_target_state {value}")
self.lock_current_state: Characteristic = self.service_lock_mechanism.configure_char(
"LockTargetState",
getter_callback=get_lock_target_state,
setter_callback=set_lock_target_state,
)
self.service_lock_management: Service = self.add_preload_service("LockManagement")
def set_lock_control_point(value):
print(f"set_lock_control_point: {value}")
self.lock_control_point: Characteristic = self.service_lock_management.configure_char(
"LockControlPoint",
setter_callback=set_lock_control_point,
)
def get_lock_version():
print(f"get_lock_version")
return ""
self.lock_control_point: Characteristic = self.service_lock_management.configure_char(
"Version",
getter_callback=get_lock_version,
)
def add_nfc_access_service(self):
self.service_nfc_access: Service = self.add_preload_service("NFCAccess")
def get_configuration_state():
print(f"get_configuration_state")
return 0
self.char_configuration_state: Characteristic = self.service_nfc_access.configure_char(
"ConfigurationState",
getter_callback=get_configuration_state
)
def get_nfc_access_supported_configuration():
print(f"get_nfc_access_supported_configuration")
return "AQEQAgEQ"
self.char_nfc_access_supported_configuration: Characteristic = self.service_nfc_access.configure_char(
"NFCAccessSupportedConfiguration",
getter_callback=get_nfc_access_supported_configuration
)
def get_nfc_access_control_point():
print(f"get_nfc_access_control_point")
return ""
def set_nfc_access_control_point(value):
print(f"set_nfc_access_control_point {value}")
return ""
self.char_nfc_access_control_point: Characteristic = self.service_nfc_access.configure_char(
"NFCAccessControlPoint",
getter_callback=get_nfc_access_control_point,
setter_callback=set_nfc_access_control_point,
)
def main():
driver = AccessoryDriver(port=51926)
lock = Lock(driver=driver, display_name="NFC Lock")
driver.add_accessory(accessory=lock)
signal.signal(signal.SIGTERM, driver.signal_handler)
driver.start()
if __name__ == "__main__":
main()
This pull request adds following services and characteristics into the
characteristics.json
andservices.json
files:AccessoryInformation (Existing):
NFCAccess:
Information about those services had been taken from: