Skip to main content

HomeKit Accessory Protocol (HAP) wrapper for Python

Project description

This wraps the very useful HAP-python package to make creating new Accessories, especially those with multiple services, really simple.

Here is an example:

class Temperature(gleeful.Accessory):
    temperature = gleeful.services.temperature.DS18B20(sensor_id='28-00000000000')

    class AccessoryInformation:
        Name = 'Temperature'
        Manufacturer = 'Matthew Schinckel'
        Model = 'DS18B20'
        SerialNumber = '28-00000000000'


Temperature(persist_file='/path/to/temperature.state').start()

Defining Services

Services must inherit from gleeful.Service in order for them to be correctly registered with the accessory, and for the service attribute to be correctly determined:

class PIR(gleeful.Service):
    service = 'MotionSensor'

    def __init__(self, *args, **kwargs):
        from gpio import MotionSensor
        self.motion = self.service.get_characteristic('MotionDetected')
        self.detector = gpiozero.MotionSensor(kwargs.pop('gpio_pin'))
        super().__init__(*args, **kwargs)

    def run(self, sentinel):
        self.detector.when_motion = lambda: self.motion.set_value(True)
        self.detector.when_no_motion = lambda: self.motion.set_value(False)

You will note a few things that are quite important in this example:

  • You define the service on tha class as a string: this will be looked up from the HAP loader automatically, when using a class the service attribute will not be a string, but instead an instance of the HAP service that matches.

  • The run method takes an extra argument: the sentinel that can be used to trigger repeating code or a stop situation. This is shared between all services within an accessory.

Why use this instead of HAP-python?

Gleeful makes it easy to have multiple services within a single accessory, and encapsulating the logic within the service.

It also allows for you to serve directly from the accessory, by using .start(), although you may also pass the accessory to a driver if you wish.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gleeful-0.1.3.tar.gz (5.4 kB view details)

Uploaded Source

File details

Details for the file gleeful-0.1.3.tar.gz.

File metadata

  • Download URL: gleeful-0.1.3.tar.gz
  • Upload date:
  • Size: 5.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for gleeful-0.1.3.tar.gz
Algorithm Hash digest
SHA256 ad21af2045e258a36baa164824d839d27c03f3e7c5d9d85bb2cf364c24690908
MD5 390fe3747831619d4d1f4325e4a41c13
BLAKE2b-256 9b6bbbe67b77dd0efe956774b6765a55ed3dbbb73f65c4e79bf5bb15249d4763

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page