aryxs3m / laravel-hoas
将您的Laravel应用程序与您的Home Assistant实例连接。
Requires
- php-mqtt/laravel-client: ^1.4
This package is auto-updated.
Last update: 2024-09-30 01:52:28 UTC
README
使用这个简单的包,您可以创建Home Assistant设备和实体(通过MQTT)。
您可以实现与您的Home Assistant实例的双向通信:发布传感器,为您的Home Assistant实例生成数据,或者发布开关,您可以在Home Assistant中更改它并修改Laravel应用程序的行为。
当前支持的实体类型
- 二进制传感器
- 传感器
- 按钮
- 开关
安装
通过Composer安装
composer install aryxs3m/laravel-hoas
发布配置
php artisan vendor:publish --provider="Aryxs3m\LaravelHoas\Providers\HomeAssistantProvider"
在config/hoas.php中填写您的MQTT代理的参数或使用预定义的环境变量。请参阅配置文件。
将提供者添加到您的app.php配置中
'providers' => ServiceProvider::defaultProviders()->merge([ /* * Package Service Providers... */ \Aryxs3m\LaravelHoas\Providers\HomeAssistantProvider::class, ])->toArray(),
使用方法
首先,您需要创建您的设备和它的实体。
创建设备和实体
开关实体示例
<?php namespace App\HomeAssistant; use Aryxs3m\LaravelHoas\Services\Entities\HomeAssistantSwitch;use Illuminate\Support\Facades\Log; class TestSwitch extends HomeAssistantSwitch { protected static string $id = 'test_switch'; protected ?string $icon = 'mdi:alert'; protected ?string $friendlyName = 'Alarm'; public function onTurnOn(): void { Log::info('Test switch turned on!!!'); } public function onTurnOff(): void { Log::info('Test switch turned off... :|'); } }
按钮示例
<?php namespace App\HomeAssistant; use Aryxs3m\LaravelHoas\Services\Entities\HomeAssistantButton;use Illuminate\Support\Facades\Log; class TestButton extends HomeAssistantButton { protected static string $id = 'test_btn'; protected ?string $friendlyName = 'Button'; public function onPress(): void { Log::info('Test button pressed!'); } }
二进制传感器示例
<?php namespace App\HomeAssistant; use Aryxs3m\LaravelHoas\Services\Entities\HomeAssistantBinarySensor;use Aryxs3m\LaravelHoas\Services\Entities\Types\BinarySensorDeviceClass; class TestBinarySensor extends HomeAssistantBinarySensor { protected static string $id = 'test_smoke'; protected ?string $friendlyName = 'Smoke'; protected ?string $deviceClass = BinarySensorDeviceClass::DEVICE_CLASS_SMOKE; }
传感器示例
<?php namespace App\HomeAssistant; use Aryxs3m\LaravelHoas\Services\Entities\HomeAssistantSensor;use Aryxs3m\LaravelHoas\Services\Entities\Types\SensorDeviceClass; class TestSensor extends HomeAssistantSensor { protected static string $id = 'test_sensor'; protected ?string $friendlyName = 'Temp'; protected ?string $deviceClass = SensorDeviceClass::TEMPERATURE; protected ?string $measurementUnit = '°C'; }
计算传感器示例
您可以创建“无状态”的传感器。您需要将CalculatedEntityState添加到您的传感器或二进制传感器,然后实现getCalculatedValue函数。这些传感器将自动每分钟更新一次。
<?php namespace App\HomeAssistant; use Aryxs3m\LaravelHoas\Services\Entities\HomeAssistantSensor;use Aryxs3m\LaravelHoas\Services\Entities\Types\SensorDeviceClass; class TestCalculatedSensor extends HomeAssistantSensor { use CalculatedEntityState; protected static string $id = 'test_calculated_sensor'; protected ?string $friendlyName = 'Random number'; public function getCalculatedValue(): int { return rand(1, 1000); } }
设备示例
<?php namespace App\HomeAssistant; use Aryxs3m\LaravelHoas\Services\Entities\HomeAssistantDevice; class TestDevice extends HomeAssistantDevice { protected string $id = 'test_device'; protected string $name = 'Test Device'; protected ?string $manufacturer = 'aryxs3m'; protected ?string $model = 'Example'; public function getEntities(): array { return [ new TestButton(), new TestSwitch(), new TestBinarySensor(), new TestSensor(), ]; } }
现在您需要在您的AppServiceProvider中设置此设备
// ... /** * Bootstrap any application services. */ public function boot(): void { HomeAssistant::setDevices([ new TestDevice(), ]); }
使用实体
开关
您可以在开关类中添加onTurnOn和onTurnOff函数,如上面的示例所示。这些函数将在Home Assistant状态改变时被调用。
在开关上,您还可以在任何地方使用isTurnedOn静态函数
if (TestSwitch::isTurnedOn()) { dd("Yeah, i'm turned on ;)") }
按钮
类似于开关,您可以在按钮类中实现onPress函数。当按钮在Home Assistant中被按下时,此函数将被调用。
请参阅上面的示例。
二进制传感器
对于二进制传感器,您可以在应用程序的任何地方使用静态辅助函数。
TestBinarySensor::turnOn(); TestBinarySensor::turnOff(); dd(TestBinarySensor::isOn());
传感器
对于通用传感器,也有静态辅助函数可用。
TestSensor::set(13); dd(TestSensor::get());
发布您的设备
如果Laravel计划程序已配置,您的设备将自动发布。
但是,为了测试,您始终可以使用hoas:publish Artisan命令来立即发布您的设备以查看更改。
上面的示例看起来像这样
监听事件
配置Laravel命令调度对于此包正常工作是必需的。此包为您完成其他所有工作。
计划程序每分钟调用hoas:listener添加hoas:update-calculated-entities命令。
