From 32e3316e3ec211917fd46a3463f8de18d0c52ed0 Mon Sep 17 00:00:00 2001 From: Peter Frommert Date: Mon, 9 Sep 2024 08:53:06 +0200 Subject: [PATCH] Fix AIO control states --- src/constants/hubStates.ts | 12 ++ src/helpers/createControlStates.ts | 196 ++++++++++++++++------------- src/services/adapterService.ts | 2 +- 3 files changed, 119 insertions(+), 91 deletions(-) diff --git a/src/constants/hubStates.ts b/src/constants/hubStates.ts index 409262d..8566c31 100644 --- a/src/constants/hubStates.ts +++ b/src/constants/hubStates.ts @@ -55,6 +55,18 @@ export const hubStates: ISolarflowState[] = sharedStates.concat([ role: "value.power", unit: "W", }, + { + title: "acMode", + nameDe: "AC Modus", + nameEn: "AC mode", + type: "number", + role: "value", + states: { + 0: "Nothing", + 1: "AC input mode", + 2: "AC output mode", + }, + }, { title: "connectedWithAce", nameDe: "Mit ACE (1500) verbunden", diff --git a/src/helpers/createControlStates.ts b/src/helpers/createControlStates.ts index a02c91f..1518ec3 100644 --- a/src/helpers/createControlStates.ts +++ b/src/helpers/createControlStates.ts @@ -93,7 +93,12 @@ export const createControlStates = async ( } ); - if (type == "solarflow" || type == "hyper" || type == "ace") { + if ( + type == "aio" || + type == "solarflow" || + type == "hyper" || + type == "ace" + ) { // State zum Setzen des Output Limit await adapter?.extendObject( `${productKey}.${deviceKey}.control.setOutputLimit`, @@ -202,101 +207,112 @@ export const createControlStates = async ( ); } - // State zum Setzen des AC Modus - await adapter?.extendObject(`${productKey}.${deviceKey}.control.acMode`, { - type: "state", - common: { - name: { - de: "AC Modus", - en: "AC mode", - }, - type: "number", - desc: "acMode", - role: "switch", - min: 0, - max: 2, - step: 1, - read: true, - write: true, - states: { - 0: "Nothing", - 1: "AC input mode", - 2: "AC output mode", - }, - }, - native: {}, - }); + if (type == "solarflow" || type == "hyper" || type == "ace") { + // State zum Setzen des Input Limit (AC) + await adapter?.extendObject( + `${productKey}.${deviceKey}.control.setInputLimit`, + { + type: "state", + common: { + name: { + de: "Einzustellende Eingangsleistung", + en: "Control of the input limit", + }, + type: "number", + desc: "setInputLimit", + role: "value.power", + read: true, + write: true, + min: 0, + max: type == "ace" ? 900 : 1200, + step: 100, + unit: "W", + }, + native: {}, + } + ); - adapter?.subscribeStates(`${productKey}.${deviceKey}.control.acMode`); - } + adapter?.subscribeStates( + `${productKey}.${deviceKey}.control.setInputLimit` + ); - // State zum Setzen des Input Limit (AC) - await adapter?.extendObject( - `${productKey}.${deviceKey}.control.setInputLimit`, - { - type: "state", - common: { - name: { - de: "Einzustellende Eingangsleistung", - en: "Control of the input limit", - }, - type: "number", - desc: "setInputLimit", - role: "value.power", - read: true, - write: true, - min: 0, - max: type == "ace" ? 900 : 1200, - step: 100, - unit: "W", - }, - native: {}, - } - ); + // State zum Setzen des AC Schalters + await adapter?.extendObject( + `${productKey}.${deviceKey}.control.acSwitch`, + { + type: "state", + common: { + name: { + de: "AC Schalter", + en: "AC switch", + }, + type: "boolean", + desc: "acSwitch", + role: "switch", + read: true, + write: true, + }, + native: {}, + } + ); - adapter?.subscribeStates( - `${productKey}.${deviceKey}.control.setInputLimit` - ); + adapter?.subscribeStates(`${productKey}.${deviceKey}.control.acSwitch`); - // State zum Setzen des AC Schalters - await adapter?.extendObject(`${productKey}.${deviceKey}.control.acSwitch`, { - type: "state", - common: { - name: { - de: "AC Schalter", - en: "AC switch", - }, - type: "boolean", - desc: "acSwitch", - role: "switch", - read: true, - write: true, - }, - native: {}, - }); + // State zum Setzen des AC Modus + await adapter?.extendObject( + `${productKey}.${deviceKey}.control.acMode`, + { + type: "state", + common: { + name: { + de: "AC Modus", + en: "AC mode", + }, + type: "number", + desc: "acMode", + role: "switch", + min: 0, + max: 2, + step: 1, + read: true, + write: true, + states: { + 0: "Nothing", + 1: "AC input mode", + 2: "AC output mode", + }, + }, + native: {}, + } + ); - adapter?.subscribeStates(`${productKey}.${deviceKey}.control.acSwitch`); - } + adapter?.subscribeStates(`${productKey}.${deviceKey}.control.acMode`); + } + } - // States only for ACE 1500 - if (type == "ace") { - // State zum Setzen des DC Schalters - await adapter?.extendObject(`${productKey}.${deviceKey}.control.dcSwitch`, { - type: "state", - common: { - name: { - de: "DC Schalter", - en: "DC switch", - }, - type: "boolean", - desc: "dcSwitch", - role: "switch", - read: true, - write: true, - }, - native: {}, - }); + // States only for ACE 1500 + if (type == "ace") { + // State zum Setzen des DC Schalters + await adapter?.extendObject( + `${productKey}.${deviceKey}.control.dcSwitch`, + { + type: "state", + common: { + name: { + de: "DC Schalter", + en: "DC switch", + }, + type: "boolean", + desc: "dcSwitch", + role: "switch", + read: true, + write: true, + }, + native: {}, + } + ); - adapter?.subscribeStates(`${productKey}.${deviceKey}.control.dcSwitch`); + adapter?.subscribeStates(`${productKey}.${deviceKey}.control.dcSwitch`); + } } }; diff --git a/src/services/adapterService.ts b/src/services/adapterService.ts index 5b2da18..4d27678 100644 --- a/src/services/adapterService.ts +++ b/src/services/adapterService.ts @@ -50,7 +50,7 @@ export const checkVoltage = async ( // Low Voltage Block activated, stop power input immediately setOutputLimit(adapter, productKey, deviceKey, 0); } - } else if (voltage >= 48.0) { + } else if (voltage >= 47.5) { if (adapter.config.useLowVoltageBlock) { // Deactivate Low Voltage Block await adapter?.setState(