From 1d3ffd4707650cf71bc70055d92a62cadfb63faa Mon Sep 17 00:00:00 2001 From: Juuso Leinonen Date: Sun, 14 Jan 2024 01:23:29 +0200 Subject: [PATCH] Fix mqtt condig payload for low battery warning for miflora --- .../home-assistant-mqtt-message-producer.test.ts.snap | 2 +- .../device-discoverability-configurations/miflora.ts | 5 ++++- .../home-assistant-mqtt-message-producer.ts | 8 ++++++-- src/types.ts | 6 ++++++ 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/mqtt/home-assistant/__snapshots__/home-assistant-mqtt-message-producer.test.ts.snap b/src/mqtt/home-assistant/__snapshots__/home-assistant-mqtt-message-producer.test.ts.snap index 7dfe9da..87785bb 100644 --- a/src/mqtt/home-assistant/__snapshots__/home-assistant-mqtt-message-producer.test.ts.snap +++ b/src/mqtt/home-assistant/__snapshots__/home-assistant-mqtt-message-producer.test.ts.snap @@ -23,7 +23,7 @@ exports[`HomeAssistant MQTT Message producer should generate corresponding disco "topic": "homeassistant/sensor/super_plant_soil_conductivity/config", }, { - "payload": "{"name":"Battery Low","device_class":"battery","object_id":"super_plant_battery_low","unique_id":"super_plant_battery_low","availability_topic":"a_base_topic/miflora/aa:bb/availability","availability_template":"{{ value_json.state }}","expire_after":30,"suggested_display_precision":2,"icon":"mdi:battery-alert","device":{"manufacturer":"Xiaomi Inc.","model":"MiFlora Plant Sensor HHCCJCV01","name":"Miflora Super Plant","connections":[["mac","aa:bb"]]},"value_template":"{{ 'on' if value_json.lowBatteryWarning else 'off' }}","state_topic":"a_base_topic/miflora/aa:bb/state","payload_available":"on","payload_not_available":"off"}", + "payload": "{"name":"Battery Low","device_class":"battery","entity_cateogry":"diagnostic","object_id":"super_plant_battery_low","unique_id":"super_plant_battery_low","availability_topic":"a_base_topic/miflora/aa:bb/availability","availability_template":"{{ value_json.state }}","expire_after":30,"suggested_display_precision":2,"icon":"mdi:battery-alert","device":{"manufacturer":"Xiaomi Inc.","model":"MiFlora Plant Sensor HHCCJCV01","name":"Miflora Super Plant","connections":[["mac","aa:bb"]]},"value_template":"{{ value_json.lowBatteryWarning | default('None') }}","state_topic":"a_base_topic/miflora/aa:bb/state","payload_on":true,"payload_off":false}", "retain": true, "topic": "homeassistant/binary_sensor/super_plant_battery_low/config", }, diff --git a/src/mqtt/home-assistant/device-discoverability-configurations/miflora.ts b/src/mqtt/home-assistant/device-discoverability-configurations/miflora.ts index 419d405..abedb82 100644 --- a/src/mqtt/home-assistant/device-discoverability-configurations/miflora.ts +++ b/src/mqtt/home-assistant/device-discoverability-configurations/miflora.ts @@ -1,5 +1,6 @@ import { HomeAssistantDeviceClass, + HomeAssistantEntityCategory, HomeAssistantMQTTComponent, HomeAssistantSensorConfiguration, HomeAssistantSensorConfigurationForDevice, @@ -49,10 +50,12 @@ export const miFloraSensorConfiguration: HomeAssistantSensorConfigurationForDevi lowBatteryWarning: { component: HomeAssistantMQTTComponent.BinarySensor, deviceClass: HomeAssistantDeviceClass.Battery, + entityCategory: HomeAssistantEntityCategory.Diagnostic, icon: "mdi:battery-alert", name: "Battery Low", uniqueId: "battery_low", - valueTemplate: "{{ 'on' if value_json.lowBatteryWarning else 'off' }}", device: miFloraDeviceConfiguration, + payloadOn: true, + payloadOff: false, }, }; diff --git a/src/mqtt/home-assistant/home-assistant-mqtt-message-producer.ts b/src/mqtt/home-assistant/home-assistant-mqtt-message-producer.ts index f1398d9..c2acb6f 100644 --- a/src/mqtt/home-assistant/home-assistant-mqtt-message-producer.ts +++ b/src/mqtt/home-assistant/home-assistant-mqtt-message-producer.ts @@ -49,6 +49,7 @@ interface HADiscoveryPayload { unit_of_measurement?: string; object_id: string; unique_id: string; + entity_cateogry?: string; availability_topic: string; availability_template: string; suggested_display_precision?: number; @@ -57,6 +58,8 @@ interface HADiscoveryPayload { state_class?: string; payload_available?: string; payload_not_available?: string; + payload_on?: string | boolean; + payload_off?: string | boolean; icon?: string; device: { name: string; @@ -83,6 +86,7 @@ const getHaDiscoveryPayload = ( const commonDiscoveryPayload = { name: getEntityName(configEntry), device_class: configEntry.deviceClass === HomeAssistantDeviceClass.None ? undefined : configEntry.deviceClass, + entity_cateogry: configEntry.entityCategory, unit_of_measurement: configEntry.unitOfMeasurement, object_id: getObjectID(deviceMessage, configEntry), unique_id: getObjectID(deviceMessage, configEntry), @@ -108,8 +112,8 @@ const getHaDiscoveryPayload = ( case HomeAssistantMQTTComponent.BinarySensor: return { ...commonDiscoveryPayload, - payload_available: "on", - payload_not_available: "off", + payload_on: configEntry.payloadOn, + payload_off: configEntry.payloadOff, }; } }; diff --git a/src/types.ts b/src/types.ts index cfb8a96..a452a60 100644 --- a/src/types.ts +++ b/src/types.ts @@ -73,6 +73,9 @@ export enum HomeAssistantMQTTComponent { Sensor = "sensor", BinarySensor = "binary_sensor", } +export enum HomeAssistantEntityCategory { + Diagnostic = "diagnostic", +} export interface HomeAssistantSensorConfiguration { name: string; @@ -83,7 +86,10 @@ export interface HomeAssistantSensorConfiguration { uniqueId: string; icon?: string; stateClass?: string; + entityCategory?: HomeAssistantEntityCategory; suggestedDecimalPrecision?: number | null; + payloadOn?: string | boolean; + payloadOff?: string | boolean; device: { manufacturer: string; model: string;