hap

package module
v1.0.39 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 23, 2025 License: Apache-2.0 Imports: 37 Imported by: 0

README

hap

hap is a lightweight library to develop HomeKit accessories in Go. It abstracts the HomeKit Accessory Protocol (HAP) and makes it easy to work with services and characteristics.

License

hap is available under the Apache License 2.0 license. See the LICENSE file for more info.

Documentation

Index

Constants

View Source
const (
	JsonStatusSuccess                     = 0
	JsonStatusInsufficientPrivileges      = -70401
	JsonStatusServiceCommunicationFailure = -70402
	JsonStatusResourceBusy                = -70403
	JsonStatusReadOnlyCharacteristic      = -70404
	JsonStatusWriteOnlyCharacteristic     = -70405
	JsonStatusNotificationNotSupported    = -70406
	JsonStatusOutOfResource               = -70407
	JsonStatusOperationTimedOut           = -70408
	JsonStatusResourceDoesNotExist        = -70409
	JsonStatusInvalidValueInRequest       = -70410
)

Status codes for json communication.

View Source
const (
	TlvErrorUnknown        = 0x1
	TlvErrorInvalidRequest = 0x2
	TlvErrorAuthentication = 0x2
	TlvErrorBackoff        = 0x3
	TlvErrorMaxPeers       = 0x4
	TlvErrorUnknownPeer    = 0x4
	TlvErrorMaxTries       = 0x5
	TlvErrorUnavailable    = 0x6
	TlvErrorBusy           = 0x7
)

Error codes for TLV8 communication.

View Source
const (
	// HTTPContentTypePairingTLV8 is the HTTP content type for tlv8 data
	HTTPContentTypePairingTLV8 = "application/pairing+tlv8"

	// HTTPContentTypeHAPJson is the HTTP content type for json data
	HTTPContentTypeHAPJson = "application/hap+json"
)
View Source
const (
	MethodPair          byte = 0x0 // pair
	MethodPairMFi       byte = 0x1 // MFi compliant accessory
	MethodVerifyPair    byte = 0x2 // verify a pairing
	MethodAddPairing    byte = 0x3 // add client through secure connection
	MethodDeletePairing byte = 0x4 // delete pairing through secure connection
	MethodListPairings  byte = 0x5
)
View Source
const (
	// PermissionUser is the user permission for a paired controller.
	PermissionUser byte = 0x0
	// PermissionAdmin is the administrator permission for a paired controller.
	PermissionAdmin byte = 0x1
)
View Source
const (
	M1 byte = 0x1
	M2 byte = 0x2
	M3 byte = 0x3
	M4 byte = 0x4
	M5 byte = 0x5
	M6 byte = 0x6
)

Variables

View Source
var InvalidPins = map[string]bool{
	"00000000": true,
	"11111111": true,
	"22222222": true,
	"33333333": true,
	"44444444": true,
	"55555555": true,
	"66666666": true,
	"77777777": true,
	"88888888": true,
	"99999999": true,
	"12345678": true,
	"87654321": true,
}

Functions

func JsonError

func JsonError(res http.ResponseWriter, status int) error

JsonErrors sends an HTTP 500 (bad request) response including the status in the body.

func JsonMultiStatus

func JsonMultiStatus(res http.ResponseWriter, body interface{}) error

JsonMultiStatus sends an HTTP 207 (multi status) response.

func JsonOK

func JsonOK(res http.ResponseWriter, body interface{}) error

JsonOK sends an HTTP 200 (ok) response.

func NewChunkedWriter

func NewChunkedWriter(wr io.Writer, chunk int) io.Writer

NewChunkedWriter returns a writer which writes bytes in chunkes of specified size.

Types

type KeyPair

type KeyPair struct {
	Public  []byte
	Private []byte
}

KeyPair holds public and private key.

type Option

type Option func(*chi.Mux)

Option set mux options

func WithMiddleware

func WithMiddleware(middleware func(http.Handler) http.Handler) Option

WithMiddleware define middleware

type Pairing

type Pairing struct {
	Name       string
	PublicKey  []byte
	Permission byte
}

Pairing is the pairing of a controller with the server.

type ServeMux

type ServeMux interface {
	// Handle registers the handler for the given pattern.
	Handle(pattern string, handler http.Handler)
	// HandleFuncs registers the handler function for the given pattern.
	HandleFunc(pattern string, handler http.HandlerFunc)
	// Mount attaches another http.Handler along ./pattern/*
	Mount(pattern string, handler http.Handler)
}

A ServeMux lets you attach handlers to http url paths.

type Server

type Server struct {
	// Pin specifies the pincode used to pair
	// with the accessory.
	Pin string

	// Addr specifies the tcp address for the server
	// to listen to in form of "host:port".
	// If empty, a random port is used.
	Addr string

	// Ifaces specifies at which interface the
	// associated dnssd service is announced.
	Ifaces []string

	MfiCompliant bool   // default false
	Protocol     string // default "1.0"
	SetupId      string
	Key          KeyPair // public and private key (generated and stored on disk)
	// contains filtered or unexported fields
}

A server handles incoming HTTP request for an accessory. The server uses dnssd to announce the accessory on the local network.

func NewServer

func NewServer(store Store, a *accessory.A, as ...*accessory.A) (*Server, error)

NewServer returns a new server given a store (to persist data) and accessories. If more than one accessory is added to the server, *a* acts as a bridge.

func NewServerWithOptions

func NewServerWithOptions(store Store, options []Option, a *accessory.A, as ...*accessory.A) (*Server, error)

func (*Server) DelTimedWrite

func (s *Server) DelTimedWrite(request *http.Request)

func (*Server) GetPort

func (s *Server) GetPort() int

func (*Server) GetUUID

func (s *Server) GetUUID() string

func (*Server) IsAuthorized

func (s *Server) IsAuthorized(request *http.Request) bool

IsAuthorized returns true if the provided request is authorized to access accessory data.

func (*Server) IsPaired

func (s *Server) IsPaired() bool

IsPaired returns true if the server is paired with a client (iOS).

func (*Server) ListenAndServe

func (s *Server) ListenAndServe(ctx context.Context) error

ListenAndServe starts the server.

func (*Server) ServeMux

func (s *Server) ServeMux() ServeMux

ServeMux returns the http handler.

func (*Server) SetTimedWrite

func (s *Server) SetTimedWrite(ttl, pid uint64, request *http.Request)

func (*Server) TimedWrite

func (s *Server) TimedWrite(request *http.Request) *TimedWrite

type Store

type Store interface {

	// Set sets the value for the given key.
	Set(key string, value []byte) error

	// Get returns the value for the given key.
	Get(key string) ([]byte, error)

	// Delete deletes the value for the given key.
	Delete(key string) error

	// KeysWithSuffix returns a list keys with the give suffix.
	KeysWithSuffix(suffix string) ([]string, error)
}

A Store lets you store key-value pairs.

func NewFsStore

func NewFsStore(dir string) Store

func NewMemStore

func NewMemStore() Store

type TimedWrite

type TimedWrite struct {
	// contains filtered or unexported fields
}

Directories

Path Synopsis
THIS FILE IS AUTO-GENERATED
THIS FILE IS AUTO-GENERATED
Package characteristic implements the HomeKit characteristics.
Package characteristic implements the HomeKit characteristics.
cmd
ColorTemperatureLightbulb command
This example show an example of a switch accessory which periodically changes it's state between on and off.
This example show an example of a switch accessory which periodically changes it's state between on and off.
DimmerColorTemperatureLightbulb command
This example show an example of a switch accessory which periodically changes it's state between on and off.
This example show an example of a switch accessory which periodically changes it's state between on and off.
DimmerLightbulb command
This example show an example of a switch accessory which periodically changes it's state between on and off.
This example show an example of a switch accessory which periodically changes it's state between on and off.
Heater command
This example show an example of a switch accessory which periodically changes it's state between on and off.
This example show an example of a switch accessory which periodically changes it's state between on and off.
bridge command
newDeviceTest command
This example show an example of a switch accessory which periodically changes it's state between on and off.
This example show an example of a switch accessory which periodically changes it's state between on and off.
switch command
This example show an example of a switch accessory which periodically changes it's state between on and off.
This example show an example of a switch accessory which periodically changes it's state between on and off.
gen
THIS FILE IS AUTO-GENERATED
THIS FILE IS AUTO-GENERATED

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL