HomeKit Accessory Protocol (HAP) for OCaml
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

hap: add README content — discovery, pairing, control examples and API overview

+65 -4
+65 -4
README.md
··· 1 - ## HAP - HomeKit Accessory Protocol for OCaml 1 + ## HAP -- HomeKit Accessory Protocol for OCaml 2 2 3 - Implementation of the HomeKit Accessory Protocol for controlling HomeKit accessories. Includes mDNS discovery, SRP-6a pair setup, Curve25519 pair verify, and ChaCha20-Poly1305 encrypted sessions. 3 + Implementation of the HomeKit Accessory Protocol for controlling HomeKit 4 + accessories. Includes mDNS discovery, SRP-6a pair setup, Curve25519 pair 5 + verify, and ChaCha20-Poly1305 encrypted sessions. 4 6 5 7 ## Installation 6 8 7 - `opam install hap` will install this library. 9 + ``` 10 + opam install hap 11 + ``` 12 + 13 + ## Usage 14 + 15 + ```ocaml 16 + Eio_main.run @@ fun env -> 17 + Eio.Switch.run @@ fun sw -> 18 + let net = Eio.Stdenv.net env in 19 + let clock = Eio.Stdenv.clock env in 20 + 21 + (* Discover HomeKit accessories on the network *) 22 + let accessories = Hap.discover ~sw ~net ~clock ~timeout:5.0 () in 23 + 24 + (* Pair with an accessory (one-time setup) *) 25 + let pairing = Hap.pair_setup ~sw ~net ~clock ~pin:"031-45-154" 26 + accessory_info in 27 + 28 + (* Verify and establish encrypted session *) 29 + let session = Hap.pair_verify ~sw ~net ~clock pairing in 30 + 31 + (* Control an outlet *) 32 + Hap.turn_on_outlet session; 33 + Hap.turn_off_outlet session; 34 + Hap.toggle_outlet session 35 + ``` 36 + 37 + ## API 38 + 39 + ### Discovery 40 + 41 + - `Hap.discover` -- Find HomeKit accessories via mDNS 42 + - `Hap.accessory_info` -- Get accessory details from mDNS record 43 + - `Hap.category_name` -- Human-readable accessory category 44 + 45 + ### Pairing 46 + 47 + - `Hap.pair_setup` -- SRP-6a pair setup (one-time, requires PIN) 48 + - `Hap.pair_verify` -- Curve25519 pair verify (establishes encrypted session) 8 49 9 - ## Documentation 50 + ### Pairing Storage 10 51 52 + - `Hap.save_pairing_by_id` -- Persist pairing to filesystem 53 + - `Hap.pairing_by_id` -- Load pairing by accessory ID 54 + - `Hap.pairing_for_ip` -- Find pairing by IP address 55 + 56 + ### Control 57 + 58 + - `Hap.accessories` -- List accessory services and characteristics 59 + - `Hap.characteristics` -- Read characteristic values 60 + - `Hap.put_characteristic` -- Write a characteristic value 61 + - `Hap.turn_on_outlet` / `turn_off_outlet` / `toggle_outlet` -- Outlet shortcuts 62 + 63 + ### TLV 64 + 65 + - `Hap.Tlv` -- HAP TLV8 encoding/decoding 66 + - `Hap.Tlv_type` -- TLV type constants 67 + - `Hap.Hap_error` -- HAP error codes 68 + 69 + ## Licence 70 + 71 + ISC