aha package - code.pfad.fr/fritzgox
import "code.pfad.fr/fritzgox/aha"
package aha allows to interact with the [AVM Home Automation HTTP Interface (AHA)], to control the connected smart devices.
AVM Home Automation HTTP Interface (AHA)
Constants
const (
ThermostatTempUndefined = ThermostatTemp(-1)
ThermostatTempOff = ThermostatTemp(0)
ThermostatTempOn = ThermostatTemp(37)
)
Functions
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
LoginVersion uint // only 1 (md5) and 2 (pkdf) are supported, defaults to 2 if unset
// 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() (info *DeviceListInfos, err error)
GetDeviceListInfos returns the connected smart devices.
func (*Client) SetThermostatBoost
func (c *Client) SetThermostatBoost(identifier string, d time.Duration) error
SetThermostatBoost
func (*Client) SetThermostatTargetTemp
func (c *Client) SetThermostatTargetTemp(identifier string, t ThermostatTemp) error
SetThermostatTargetTemp
func (*Client) SetThermostatWindowOpen
func (c *Client) SetThermostatWindowOpen(identifier string, d time.Duration) error
SetThermostatWindowOpen
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 LoginVersion
func LoginVersion(v uint) Option
LoginVersion asks the fritzbox for a given challenge login. 1 and 2 are supported, 0 defaults to 2 currently.
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/]
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
type TemperatureSensor struct {
Celsius Float32Tenth `xml:"celsius"` // adjusted temperature
Offset Float32Tenth `xml:"offset"` // operated adjustment
}
type Thermostat
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) 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
Files
challenge.go
getdevicelistinfos.go
session.go
thermostat.go
Breadcrumb
code.pfad.fr/fritzgox