aha

package
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Sep 8, 2022 License: Apache-2.0 Imports: 16 Imported by: 1

Documentation

Overview

package aha allows to interact with the AVM Home Automation HTTP Interface (AHA), to control the connected smart devices.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func LoginV2

func LoginV2(c *Client) error

LoginV2 asks the fritzbox for the PBKDF2 challenge on login.

func TrustOnFirstUse

func TrustOnFirstUse(c *Client) error

TrustOnFirstUse retrieves the certificate and marks it as trusted for subsequent calls.

Types

type Client

type Client struct {
	URL       url.URL
	Transport *http.Transport
	// if Username is empty, it will be auto-discovered
	Username string
	LoginV2  bool
	// contains filtered or unexported fields
}

func NewClient

func NewClient(addr, password string, options ...Option) (*Client, error)

NewClient creates a new client to interact with the AHA interface.

func (*Client) GetDeviceListInfos

func (c *Client) GetDeviceListInfos() (*DeviceListInfos, error)

GetDeviceListInfos returns the connected smart devices.

type Device

type Device struct {
	Identifier      string         `xml:"identifier,attr"`
	ID              string         `xml:"id,attr"`
	Function        DeviceFunction `xml:"functionbitmask,attr"`
	FirmwareVersion string         `xml:"fwversion,attr"`
	Manufacturer    string         `xml:"manufacturer,attr"`
	Productname     string         `xml:"productname,attr"`
	Present         bool           `xml:"present"`
	Txbusy          bool           `xml:"txbusy"`
	Name            string         `xml:"name"`
	BatteryLow      bool           `xml:"batterylow"`
	BatteryLevel    int            `xml:"battery"`

	TemperatureSensor *TemperatureSensor `xml:"temperature"`
	Thermostat        *Thermostat        `xml:"hkr"`
}

type DeviceFunction

type DeviceFunction uint64
const (
	DeviceHANFUN DeviceFunction = 1 << iota

	DeviceLight

	DeviceAlarm
	DeviceButton
	DeviceThermostat
	DeviceEnergieSensor
	DeviceTemperatureSensor
	DeviceSwitch
)

type DeviceListInfos

type DeviceListInfos struct {
	XMLName         xml.Name `xml:"devicelist"`
	Version         string   `xml:"version,attr"`
	FirmwareVersion string   `xml:"fwversion,attr"`
	Devices         []Device `xml:"device"`
}

type Float32Tenth

type Float32Tenth float32

func (Float32Tenth) String

func (f Float32Tenth) String() string

func (*Float32Tenth) UnmarshalXML

func (f *Float32Tenth) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error

type Option

type Option func(*Client) error

func TrustCertificate

func TrustCertificate(bs []byte) Option

TrustCertificate adds a PEM certificate to be trusted. Be aware that self-signed certificates may be re-created on reboot. You might prefer to use TrustOnFirstUse.

See also https://en.avm.de/service/knowledge-base/dok/FRITZ-Box-7490/1523_Downloading-your-FRITZ-Box-s-certificate-and-importing-it-to-your-computer/

func WithUsername

func WithUsername(username string) Option

WithUsername disables the auto-discovery of the username.

type TemperatureSensor added in v0.1.1

type TemperatureSensor struct {
	Celsius Float32Tenth `xml:"celsius"` // adjusted temperature
	Offset  Float32Tenth `xml:"offset"`  // operated adjustment
}

type Thermostat added in v0.1.1

type Thermostat struct {
	// you should use the TemperatureSensor instead of ActualTemp
	ActualTemp        ThermostatTemp `xml:"tist"`
	TargetTemp        ThermostatTemp `xml:"tsoll"`
	LowTemp           ThermostatTemp `xml:"absenk"`
	ComfortTemp       ThermostatTemp `xml:"komfort"`
	APILocked         bool           `xml:"lock"`
	DeviceLocked      bool           `xml:"devicelock"`
	ErrorCode         int            `xml:"errorcode"`
	WindowOpened      bool           `xml:"windowopenactiv"`
	WindowOpenedUntil UnixSecond     `xml:"windowopenactiveendtime"`
	BoostActive       bool           `xml:"boostactive"`
	BoostActiveUntil  UnixSecond     `xml:"boostactiveendtime"`
	BatteryLow        bool           `xml:"batterylow"`
	BatteryLevel      int            `xml:"battery"`
	NextChange        struct {
		At       UnixSecond     `xml:"endperiod"`
		WishTemp ThermostatTemp `xml:"tchange"`
	} `xml:"nextchange"`
	SummerActive  bool `xml:"summeractive"`
	HolidayActive bool `xml:"holidayactive"`
}

type ThermostatTemp

type ThermostatTemp float32

func (ThermostatTemp) IsOff

func (t ThermostatTemp) IsOff() bool

func (ThermostatTemp) IsOn

func (t ThermostatTemp) IsOn() bool

func (ThermostatTemp) IsUndefined

func (t ThermostatTemp) IsUndefined() bool

func (ThermostatTemp) String

func (t ThermostatTemp) String() string

func (*ThermostatTemp) UnmarshalXML

func (t *ThermostatTemp) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error

type UnixSecond

type UnixSecond struct{ time.Time }

func (*UnixSecond) UnmarshalXML

func (u *UnixSecond) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error

Jump to

Keyboard shortcuts

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