| App::OpenHAP::Devices(3p) | Perl Library Manual | App::OpenHAP::Devices(3p) |
NAME
App::OpenHAP::Devices - the configured devices of the bridge
SYNOPSIS
use App::OpenHAP::Devices;
use Fugu::Config;
use Fugu::MQTT;
use App::OpenHAP::Host;
my $config = Fugu::Config->new(file => '/etc/openhapd.conf');
$config->load();
my $hap = App::OpenHAP::Host->new(...);
my $mqtt = Fugu::MQTT->new(...);
my $devices = App::OpenHAP::Devices->new();
my $count = $devices->load_devices($config, $hap, $mqtt);
print "Loaded $count devices\n";
# The blocks alone, with no bridge and no MQTT client
my @devices = App::OpenHAP::Devices->devices($config);
DESCRIPTION
This module reads the device blocks from a Fugu::Config and does a check of each block. It instantiates the device class that matches, and it registers each device with the HAP bridge.
One table describes every supported device type. Each entry names the class that builds the device, and the extra arguments that the class needs. To add a type, add one entry.
METHODS
new
my $devices = App::OpenHAP::Devices->new()
This method creates a new device collection. It keeps an internal counter that assigns the Accessory IDs (AIDs). The counter starts at 2, because AID 1 is reserved for the bridge itself.
load_devices
my $count = $devices->load_devices($config, $hap, $mqtt)
This method loads all devices from the configuration and adds them to the HAP bridge. It returns the number of devices that loaded correctly.
The method does these steps:
- Gets the device list from the configuration
- Does a check of each device configuration
- Instantiates the applicable device classes
- Subscribes the devices to MQTT topics (if MQTT is connected)
- Registers the devices with the HAP bridge
- Logs the progress and the errors
The method logs errors, but an error does not stop the load of the other devices.
get_devices
my @devices = $devices->get_devices()
This method returns a list of all device accessory objects that loaded correctly.
devices
my @devices = App::OpenHAP::Devices->devices($config)
This class method returns the device blocks of a Fugu::Config as plain records. Each record holds the settings of the block, plus the "type", "subtype" and "id" from the block arguments.
The method builds no accessory and loads no device class. A caller that only lists the configured devices, such as "hapctl devices", uses this method.
DEVICE CHECKS
Each device configuration must have these fields:
- name - The human-readable name of the device
- type - The device type (for example, 'tasmota')
- subtype - The device subtype (for example, 'thermostat')
- topic - The MQTT topic for communication
- id - The unique identifier. The default value is the topic.
The module skips a device that does not have all the necessary fields. It logs an error for that device.
SUPPORTED DEVICES
The only device type is "tasmota". These are its subtypes:
- thermostat - App::OpenHAP::Tasmota::Thermostat
- heater, switch - App::OpenHAP::Tasmota::Heater
- sensor - App::OpenHAP::Tasmota::Sensor
- lightbulb, dimmer, rgblight, ctlight - App::OpenHAP::Tasmota::Lightbulb
ERROR HANDLING
The device instantiation and the MQTT subscription run inside "eval". Thus one misconfigured device does not stop the start of the daemon. The module logs that device and skips it.
SEE ALSO
Fugu::Config, Fugu::MQTT, App::OpenHAP::Host, App::OpenHAP::Tasmota::Thermostat
AUTHOR
Dick Olsson <hi@senzilla.io>
| 2026-08-18 | OpenBSD |