aryxs3m/laravel-hoas

将您的Laravel应用程序与您的Home Assistant实例连接。

dev-master 2023-12-31 12:21 UTC

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(),
    ]);
}

使用实体

开关

您可以在开关类中添加onTurnOnonTurnOff函数,如上面的示例所示。这些函数将在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命令来立即发布您的设备以查看更改。

上面的示例看起来像这样

Home Assistant device

监听事件

配置Laravel命令调度对于此包正常工作是必需的。此包为您完成其他所有工作。

计划程序每分钟调用hoas:listener添加hoas:update-calculated-entities命令。