iobroker.zendure-solarflow 2.0.0-alpha.0 → 2.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -55,9 +55,9 @@ You can still do firmware updates with the official Zendure app via bluetooth an
55
55
  Credits goes to https://github.com/reinhard-brandstaedter/solarflow which helped a lot with the knowledge about the MQTT server from Zendure! Thanks!
56
56
 
57
57
  ## Changelog
58
- ### 2.0.0-alpha.0 (2025-07-18)
58
+ ### 2.0.0-alpha.1 (2025-07-19)
59
59
 
60
- - Breaking Change: Add control parameter 'setDeviceAutomation' which emulates Zendure's Smart Matching mode. Since there were concerns that setting limits would be stored in the flash memory, I recommend using this device automation instead of 'setInputLimit'/'setOutputLimit' from now on. You can use negative values for charging and positive for feed in.
60
+ - Breaking Change: Add control parameter 'setDeviceAutomationInOutLimit' which emulates Zendure's Smart Matching mode. Since there were concerns that setting limits would be stored in the flash memory, I recommend using this device automation instead of 'setInputLimit'/'setOutputLimit' from now on. You can use negative values for charging and positive for feed in.
61
61
 
62
62
  ### 1.15.4 (2025-07-17)
63
63
 
@@ -192,7 +192,7 @@ const ac2400ControlStates = [
192
192
  nameDe: "Ger\xE4te Automation Limit (negativ = Laden, positiv = Einspeisen)",
193
193
  nameEn: "Device Automation Limit (negative = charging, positive = feed in)",
194
194
  type: "number",
195
- title: "setDeviceAutomationLimit",
195
+ title: "setDeviceAutomationInOutLimit",
196
196
  role: "value.power",
197
197
  read: true,
198
198
  write: true,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/constants/ac2400ControlStates.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const ac2400ControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 2400,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 2400,\n step: 1,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Smart Mode\",\n nameEn: \"Smart Mode\",\n type: \"boolean\",\n title: \"smartMode\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const ac2400ControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 2400,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 2400,\n step: 1,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Smart Mode\",\n nameEn: \"Smart Mode\",\n type: \"boolean\",\n title: \"smartMode\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationInOutLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -201,7 +201,7 @@ const aceControlStates = [
201
201
  nameDe: "Ger\xE4te Automation Limit (negativ = Laden, positiv = Einspeisen)",
202
202
  nameEn: "Device Automation Limit (negative = charging, positive = feed in)",
203
203
  type: "number",
204
- title: "setDeviceAutomationLimit",
204
+ title: "setDeviceAutomationInOutLimit",
205
205
  role: "value.power",
206
206
  read: true,
207
207
  write: true,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/constants/aceControlStates.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const aceControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 900,\n step: 100,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 3,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"Normal work mode\",\n 2: \"Never turn off\",\n 3: \"Automatic shutdown AC\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"DC Schalter\",\n nameEn: \"DC switch\",\n type: \"boolean\",\n title: \"dcSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Smart Mode\",\n nameEn: \"Smart Mode\",\n type: \"boolean\",\n title: \"smartMode\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const aceControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 900,\n step: 100,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 3,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"Normal work mode\",\n 2: \"Never turn off\",\n 3: \"Automatic shutdown AC\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"DC Schalter\",\n nameEn: \"DC switch\",\n type: \"boolean\",\n title: \"dcSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Smart Mode\",\n nameEn: \"Smart Mode\",\n type: \"boolean\",\n title: \"smartMode\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationInOutLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -169,7 +169,7 @@ const aioControlStates = [
169
169
  nameDe: "Ger\xE4te Automation Limit (negativ = Laden, positiv = Einspeisen)",
170
170
  nameEn: "Device Automation Limit (negative = charging, positive = feed in)",
171
171
  type: "number",
172
- title: "setDeviceAutomationLimit",
172
+ title: "setDeviceAutomationInOutLimit",
173
173
  role: "value.power",
174
174
  read: true,
175
175
  write: true,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/constants/aioControlStates.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const aioControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const aioControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationInOutLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -193,7 +193,7 @@ const hubControlStates = [
193
193
  nameDe: "Ger\xE4te Automation Limit (negativ = Laden, positiv = Einspeisen)",
194
194
  nameEn: "Device Automation Limit (negative = charging, positive = feed in)",
195
195
  type: "number",
196
- title: "setDeviceAutomationLimit",
196
+ title: "setDeviceAutomationInOutLimit",
197
197
  role: "value.power",
198
198
  read: true,
199
199
  write: true,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/constants/hubControlStates.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const hubControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Smart Mode\",\n nameEn: \"Smart Mode\",\n type: \"boolean\",\n title: \"smartMode\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 900, // Hyper, AC2400, Solarflow800 = MEHR, sonst 900\n step: 100, // Hyper, AC2400, Solarflow800 = 1, sonst 100\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const hubControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Smart Mode\",\n nameEn: \"Smart Mode\",\n type: \"boolean\",\n title: \"smartMode\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 900, // Hyper, AC2400, Solarflow800 = MEHR, sonst 900\n step: 100, // Hyper, AC2400, Solarflow800 = 1, sonst 100\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationInOutLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -191,7 +191,7 @@ const hyperControlStates = [
191
191
  nameDe: "Ger\xE4te Automation Limit (negativ = Laden, positiv = Einspeisen)",
192
192
  nameEn: "Device Automation Limit (negative = charging, positive = feed in)",
193
193
  type: "number",
194
- title: "setDeviceAutomationLimit",
194
+ title: "setDeviceAutomationInOutLimit",
195
195
  role: "value.power",
196
196
  read: true,
197
197
  write: true,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/constants/hyperControlStates.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const hyperControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 1200,\n step: 1,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Smart Mode\",\n nameEn: \"Smart Mode\",\n type: \"boolean\",\n title: \"smartMode\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const hyperControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 1200,\n step: 1,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Smart Mode\",\n nameEn: \"Smart Mode\",\n type: \"boolean\",\n title: \"smartMode\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationInOutLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -192,7 +192,7 @@ const solarflow800ControlStates = [
192
192
  nameDe: "Ger\xE4te Automation Limit (negativ = Laden, positiv = Einspeisen)",
193
193
  nameEn: "Device Automation Limit (negative = charging, positive = feed in)",
194
194
  type: "number",
195
- title: "setDeviceAutomationLimit",
195
+ title: "setDeviceAutomationInOutLimit",
196
196
  role: "value.power",
197
197
  read: true,
198
198
  write: true,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/constants/solarflow800ControlStates.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const solarflow800ControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 800,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 800,\n step: 1,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Smart Mode\",\n nameEn: \"Smart Mode\",\n type: \"boolean\",\n title: \"smartMode\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const solarflow800ControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 800,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 800,\n step: 1,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Smart Mode\",\n nameEn: \"Smart Mode\",\n type: \"boolean\",\n title: \"smartMode\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationInOutLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -192,7 +192,7 @@ const solarflow800ProControlStates = [
192
192
  nameDe: "Ger\xE4te Automation Limit (negativ = Laden, positiv = Einspeisen)",
193
193
  nameEn: "Device Automation Limit (negative = charging, positive = feed in)",
194
194
  type: "number",
195
- title: "setDeviceAutomationLimit",
195
+ title: "setDeviceAutomationInOutLimit",
196
196
  role: "value.power",
197
197
  read: true,
198
198
  write: true,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/constants/solarflow800ProControlStates.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const solarflow800ProControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 800,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 1000,\n step: 1,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Smart Mode\",\n nameEn: \"Smart Mode\",\n type: \"boolean\",\n title: \"smartMode\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const solarflow800ProControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 800,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 1000,\n step: 1,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Smart Mode\",\n nameEn: \"Smart Mode\",\n type: \"boolean\",\n title: \"smartMode\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationInOutLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -18,6 +18,7 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var helpers_exports = {};
20
20
  __export(helpers_exports, {
21
+ getMinAndMaxInputLimitForProductKey: () => getMinAndMaxInputLimitForProductKey,
21
22
  getMinAndMaxOutputLimitForProductKey: () => getMinAndMaxOutputLimitForProductKey,
22
23
  getProductNameFromProductKey: () => getProductNameFromProductKey
23
24
  });
@@ -98,8 +99,33 @@ const getMinAndMaxOutputLimitForProductKey = (productKey, limit) => {
98
99
  }
99
100
  return limit;
100
101
  };
102
+ const getMinAndMaxInputLimitForProductKey = (productKey, limit) => {
103
+ let maxLimit = 900;
104
+ const productName = getProductNameFromProductKey(productKey);
105
+ if (productName == null ? void 0 : productName.includes("hyper")) {
106
+ maxLimit = 1200;
107
+ }
108
+ if (productName == null ? void 0 : productName.includes("2400 ac")) {
109
+ maxLimit = 2400;
110
+ }
111
+ if (productName == null ? void 0 : productName.includes("solarflow 800")) {
112
+ maxLimit = 800;
113
+ }
114
+ if (productName == null ? void 0 : productName.includes("ace")) {
115
+ limit = Math.ceil(limit / 100) * 100;
116
+ }
117
+ if (limit < 0) {
118
+ limit = 0;
119
+ } else if (limit > 0 && limit <= 30) {
120
+ limit = 30;
121
+ } else if (limit > maxLimit) {
122
+ limit = maxLimit;
123
+ }
124
+ return limit;
125
+ };
101
126
  // Annotate the CommonJS export names for ESM import in node:
102
127
  0 && (module.exports = {
128
+ getMinAndMaxInputLimitForProductKey,
103
129
  getMinAndMaxOutputLimitForProductKey,
104
130
  getProductNameFromProductKey
105
131
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/helpers/helpers.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\n\nexport const getProductNameFromProductKey = (productKey: string): string => {\n switch (productKey.toLowerCase()) {\n case \"73bktv\":\n return \"solarflow2.0\";\n case \"a8yh63\":\n return \"solarflow hub 2000\";\n case \"ywf7hv\":\n return \"solarflow aio zy\";\n case \"ja72u0ha\":\n return \"hyper 2000\";\n case \"gda3tb\":\n return \"hyper 2000\";\n case \"8bm93h\":\n return \"ace 1500\";\n case \"bc8b7f\":\n return \"solarflow 2400 ac\";\n case \"b1nhmc\":\n return \"solarflow 800\";\n default:\n return \"\";\n }\n};\n\nexport const getMinAndMaxOutputLimitForProductKey = (\n productKey: string,\n limit: number\n): number => {\n const productName = getProductNameFromProductKey(productKey);\n\n if (limit < 100 && limit != 90 && limit != 60 && limit != 30 && limit != 0) {\n // NUR Solarflow HUB: Das Limit kann unter 100 nur in 30er Schritten gesetzt werden, dH. 30/60/90/100, wir rechnen das also um\n if (\n limit < 100 &&\n limit > 90 &&\n !productName?.includes(\"hyper\") &&\n !productName?.includes(\"2400 ac\") &&\n !productName?.includes(\"solarflow 800\")\n ) {\n limit = 90;\n } else if (\n limit > 60 &&\n limit < 90 &&\n !productName?.includes(\"hyper\") &&\n !productName?.includes(\"2400 ac\") &&\n !productName?.includes(\"solarflow 800\")\n ) {\n limit = 60;\n } else if (\n limit > 30 &&\n limit < 60 &&\n !productName?.includes(\"hyper\") &&\n !productName?.includes(\"2400 ac\") &&\n !productName?.includes(\"solarflow 800\")\n ) {\n limit = 30;\n } else if (limit < 30) {\n limit = 30;\n }\n }\n\n switch (productName?.toLocaleLowerCase()) {\n case \"hyper 2000\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow 800\":\n if (limit > 800) {\n limit = 800;\n }\n break;\n case \"solarflow2.0\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow hub 2000\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow aio zy\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow 800 pro\":\n if (limit > 800) {\n limit = 800;\n }\n break;\n case \"solarflow 2400 ac\":\n if (limit > 2400) {\n limit = 2400;\n }\n break;\n default:\n break;\n }\n\n return limit;\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,+BAA+B,CAAC,eAA+B;AAC1E,UAAQ,WAAW,YAAY,GAAG;AAAA,IAChC,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,MAAM,uCAAuC,CAClD,YACA,UACW;AACX,QAAM,cAAc,6BAA6B,UAAU;AAE3D,MAAI,QAAQ,OAAO,SAAS,MAAM,SAAS,MAAM,SAAS,MAAM,SAAS,GAAG;AAE1E,QACE,QAAQ,OACR,QAAQ,MACR,EAAC,2CAAa,SAAS,aACvB,EAAC,2CAAa,SAAS,eACvB,EAAC,2CAAa,SAAS,mBACvB;AACA,cAAQ;AAAA,IACV,WACE,QAAQ,MACR,QAAQ,MACR,EAAC,2CAAa,SAAS,aACvB,EAAC,2CAAa,SAAS,eACvB,EAAC,2CAAa,SAAS,mBACvB;AACA,cAAQ;AAAA,IACV,WACE,QAAQ,MACR,QAAQ,MACR,EAAC,2CAAa,SAAS,aACvB,EAAC,2CAAa,SAAS,eACvB,EAAC,2CAAa,SAAS,mBACvB;AACA,cAAQ;AAAA,IACV,WAAW,QAAQ,IAAI;AACrB,cAAQ;AAAA,IACV;AAAA,EACF;AAEA,UAAQ,2CAAa,qBAAqB;AAAA,IACxC,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,KAAK;AACf,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,KAAK;AACf,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF;AACE;AAAA,EACJ;AAEA,SAAO;AACT;",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\n\nexport const getProductNameFromProductKey = (productKey: string): string => {\n switch (productKey.toLowerCase()) {\n case \"73bktv\":\n return \"solarflow2.0\";\n case \"a8yh63\":\n return \"solarflow hub 2000\";\n case \"ywf7hv\":\n return \"solarflow aio zy\";\n case \"ja72u0ha\":\n return \"hyper 2000\";\n case \"gda3tb\":\n return \"hyper 2000\";\n case \"8bm93h\":\n return \"ace 1500\";\n case \"bc8b7f\":\n return \"solarflow 2400 ac\";\n case \"b1nhmc\":\n return \"solarflow 800\";\n default:\n return \"\";\n }\n};\n\nexport const getMinAndMaxOutputLimitForProductKey = (\n productKey: string,\n limit: number\n): number => {\n const productName = getProductNameFromProductKey(productKey);\n\n if (limit < 100 && limit != 90 && limit != 60 && limit != 30 && limit != 0) {\n // NUR Solarflow HUB: Das Limit kann unter 100 nur in 30er Schritten gesetzt werden, dH. 30/60/90/100, wir rechnen das also um\n if (\n limit < 100 &&\n limit > 90 &&\n !productName?.includes(\"hyper\") &&\n !productName?.includes(\"2400 ac\") &&\n !productName?.includes(\"solarflow 800\")\n ) {\n limit = 90;\n } else if (\n limit > 60 &&\n limit < 90 &&\n !productName?.includes(\"hyper\") &&\n !productName?.includes(\"2400 ac\") &&\n !productName?.includes(\"solarflow 800\")\n ) {\n limit = 60;\n } else if (\n limit > 30 &&\n limit < 60 &&\n !productName?.includes(\"hyper\") &&\n !productName?.includes(\"2400 ac\") &&\n !productName?.includes(\"solarflow 800\")\n ) {\n limit = 30;\n } else if (limit < 30) {\n limit = 30;\n }\n }\n\n switch (productName?.toLocaleLowerCase()) {\n case \"hyper 2000\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow 800\":\n if (limit > 800) {\n limit = 800;\n }\n break;\n case \"solarflow2.0\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow hub 2000\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow aio zy\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow 800 pro\":\n if (limit > 800) {\n limit = 800;\n }\n break;\n case \"solarflow 2400 ac\":\n if (limit > 2400) {\n limit = 2400;\n }\n break;\n default:\n break;\n }\n\n return limit;\n};\n\nexport const getMinAndMaxInputLimitForProductKey = (\n productKey: string,\n limit: number\n): number => {\n let maxLimit = 900;\n\n const productName = getProductNameFromProductKey(productKey);\n\n if (productName?.includes(\"hyper\")) {\n maxLimit = 1200;\n }\n\n if (productName?.includes(\"2400 ac\")) {\n maxLimit = 2400;\n }\n\n if (productName?.includes(\"solarflow 800\")) {\n maxLimit = 800;\n }\n\n if (productName?.includes(\"ace\")) {\n // Das Limit kann nur in 100er Schritten gesetzt werden\n limit = Math.ceil(limit / 100) * 100;\n }\n\n if (limit < 0) {\n limit = 0;\n } else if (limit > 0 && limit <= 30) {\n limit = 30;\n } else if (limit > maxLimit) {\n limit = maxLimit;\n }\n\n return limit;\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,+BAA+B,CAAC,eAA+B;AAC1E,UAAQ,WAAW,YAAY,GAAG;AAAA,IAChC,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,MAAM,uCAAuC,CAClD,YACA,UACW;AACX,QAAM,cAAc,6BAA6B,UAAU;AAE3D,MAAI,QAAQ,OAAO,SAAS,MAAM,SAAS,MAAM,SAAS,MAAM,SAAS,GAAG;AAE1E,QACE,QAAQ,OACR,QAAQ,MACR,EAAC,2CAAa,SAAS,aACvB,EAAC,2CAAa,SAAS,eACvB,EAAC,2CAAa,SAAS,mBACvB;AACA,cAAQ;AAAA,IACV,WACE,QAAQ,MACR,QAAQ,MACR,EAAC,2CAAa,SAAS,aACvB,EAAC,2CAAa,SAAS,eACvB,EAAC,2CAAa,SAAS,mBACvB;AACA,cAAQ;AAAA,IACV,WACE,QAAQ,MACR,QAAQ,MACR,EAAC,2CAAa,SAAS,aACvB,EAAC,2CAAa,SAAS,eACvB,EAAC,2CAAa,SAAS,mBACvB;AACA,cAAQ;AAAA,IACV,WAAW,QAAQ,IAAI;AACrB,cAAQ;AAAA,IACV;AAAA,EACF;AAEA,UAAQ,2CAAa,qBAAqB;AAAA,IACxC,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,KAAK;AACf,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,KAAK;AACf,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF;AACE;AAAA,EACJ;AAEA,SAAO;AACT;AAEO,MAAM,sCAAsC,CACjD,YACA,UACW;AACX,MAAI,WAAW;AAEf,QAAM,cAAc,6BAA6B,UAAU;AAE3D,MAAI,2CAAa,SAAS,UAAU;AAClC,eAAW;AAAA,EACb;AAEA,MAAI,2CAAa,SAAS,YAAY;AACpC,eAAW;AAAA,EACb;AAEA,MAAI,2CAAa,SAAS,kBAAkB;AAC1C,eAAW;AAAA,EACb;AAEA,MAAI,2CAAa,SAAS,QAAQ;AAEhC,YAAQ,KAAK,KAAK,QAAQ,GAAG,IAAI;AAAA,EACnC;AAEA,MAAI,QAAQ,GAAG;AACb,YAAQ;AAAA,EACV,WAAW,QAAQ,KAAK,SAAS,IAAI;AACnC,YAAQ;AAAA,EACV,WAAW,QAAQ,UAAU;AAC3B,YAAQ;AAAA,EACV;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
package/build/main.js CHANGED
@@ -355,8 +355,8 @@ class ZendureSolarflow extends utils.Adapter {
355
355
  state.val ? true : false
356
356
  );
357
357
  break;
358
- case "setDeviceAutomationLimit":
359
- (0, import_mqttService.setDeviceAutomationLimit)(
358
+ case "setDeviceAutomationInOutLimit":
359
+ (0, import_mqttService.setDeviceAutomationInOutLimit)(
360
360
  this,
361
361
  productKey,
362
362
  deviceKey,
package/build/main.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/main.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\n/*\r\n * Created with @iobroker/create-adapter v2.5.0\r\n */\r\n\r\n// The adapter-core module gives you access to the core ioBroker functions\r\n// you need to create an adapter\r\nimport * as utils from \"@iobroker/adapter-core\";\r\nimport {\r\n connectCloudMqttClient,\r\n connectLocalMqttClient,\r\n setAcMode,\r\n setAcSwitch,\r\n setAutoModel,\r\n setAutoRecover,\r\n setBuzzerSwitch,\r\n setChargeLimit,\r\n setDcSwitch,\r\n setDeviceAutomationLimit,\r\n setDischargeLimit,\r\n setHubState,\r\n setInputLimit,\r\n setOutputLimit,\r\n setPassMode,\r\n setSmartMode,\r\n} from \"./services/mqttService\";\r\nimport { getDeviceList, login } from \"./services/webService\";\r\nimport { ISolarFlowDeviceDetails } from \"./models/ISolarFlowDeviceDetails\";\r\nimport { ISolarFlowPaths } from \"./models/ISolarFlowPaths\";\r\nimport { pathsEu, pathsGlobal } from \"./constants/paths\";\r\nimport { Job } from \"node-schedule\";\r\nimport { MqttClient } from \"mqtt\";\r\nimport {\r\n checkDevicesServer,\r\n updateSolarFlowState,\r\n} from \"./services/adapterService\";\r\nimport { createSolarFlowStates } from \"./helpers/createSolarFlowStates\";\r\nimport { createDeveloperAccount } from \"./services/fallbackWebService\";\r\nimport { ISolarFlowDevRegisterData } from \"./models/ISolarflowDevRegisterResponse\";\r\nimport { connectFallbackMqttClient } from \"./services/fallbackMqttService\";\r\nimport { IPack2Device } from \"./models/IPack2Device\";\r\nimport { startRefreshAccessTokenTimerJob } from \"./services/jobSchedule\";\r\n\r\nexport class ZendureSolarflow extends utils.Adapter {\r\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\r\n super({\r\n ...options,\r\n name: \"zendure-solarflow\",\r\n });\r\n this.on(\"ready\", this.onReady.bind(this));\r\n this.on(\"stateChange\", this.onStateChange.bind(this));\r\n this.on(\"unload\", this.onUnload.bind(this));\r\n }\r\n\r\n public userId: string | undefined = undefined; // User ID, needed for connection with Smart Plug\r\n public accessToken: string | undefined = undefined; // Access Token for Zendure Rest API\r\n public deviceList: ISolarFlowDeviceDetails[] = [];\r\n public paths: ISolarFlowPaths | undefined = undefined;\r\n public pack2Devices: IPack2Device[] = [];\r\n\r\n public msgCounter: number = 700000;\r\n\r\n public lastLogin: Date | undefined = undefined;\r\n\r\n public mqttClient: MqttClient | undefined = undefined;\r\n\r\n public resetValuesJob: Job | undefined = undefined;\r\n public checkStatesJob: Job | undefined = undefined;\r\n public calculationJob: Job | undefined = undefined;\r\n public refreshAccessTokenInterval: ioBroker.Interval | undefined = undefined;\r\n public retryTimeout: ioBroker.Timeout | undefined = undefined;\r\n\r\n public createdSnNumberSolarflowStates: string[] = [];\r\n\r\n /**\r\n * Is called when databases are connected and adapter received configuration.\r\n */\r\n private async onReady(): Promise<void> {\r\n await this.extendObject(\"info\", {\r\n type: \"channel\",\r\n common: {\r\n name: \"Information\",\r\n },\r\n native: {},\r\n });\r\n\r\n await this.extendObject(`info.connection`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Mit Zendure Cloud verbunden\",\r\n en: \"Connected to Zendure cloud\",\r\n },\r\n type: \"boolean\",\r\n desc: \"connection\",\r\n role: \"indicator.connected\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n await this.extendObject(`info.errorMessage`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Fehlermeldung der Verbindung zur Zendure Cloud\",\r\n en: \"Error message from Zendure Cloud\",\r\n },\r\n type: \"string\",\r\n desc: \"errorMessage\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n // Select paths by config value\r\n if (this.config.server && this.config.server == \"eu\") {\r\n this.paths = pathsEu;\r\n } else {\r\n this.paths = pathsGlobal;\r\n }\r\n\r\n this.log.debug(\"[onReady] Using server \" + this.config.server);\r\n\r\n this.setState(\"info.errorMessage\", \"\", true);\r\n\r\n if (this.config.server == \"local\") {\r\n this.log.debug(\"[onReady] Using local MQTT server\");\r\n\r\n connectLocalMqttClient(this);\r\n\r\n if (this.config.useRestart) {\r\n // Add interval to restart adapter every 3 hours\r\n startRefreshAccessTokenTimerJob(this);\r\n }\r\n } else if (this.config.useFallbackService && this.config.snNumber) {\r\n this.log.debug(\"[onReady] Using Fallback Mode (Dev-Server)\");\r\n // Use Fallback service. Using the developer version of the MQTT and Webservice from zendure\r\n createDeveloperAccount(this).then((data: ISolarFlowDevRegisterData) => {\r\n //console.log(data);\r\n if (data.appKey && data.mqttUrl && data.port && data.secret) {\r\n connectFallbackMqttClient(\r\n this,\r\n data.appKey,\r\n data.secret,\r\n data.mqttUrl,\r\n data.port\r\n );\r\n }\r\n });\r\n } else if (\r\n !this.config.useFallbackService &&\r\n this.config.userName &&\r\n this.config.password\r\n ) {\r\n // App mode: If Username and Password is provided, try to login and get the access token.\r\n let _accessToken: string | undefined = undefined;\r\n let retryCounter = 0;\r\n\r\n if (this.config.useRestart) {\r\n // Add interval to restart adapter every 3 hours\r\n startRefreshAccessTokenTimerJob(this);\r\n }\r\n\r\n while (retryCounter <= 10) {\r\n try {\r\n _accessToken = await login(this);\r\n } catch (ex: any) {\r\n this.setState(\"info.message\", ex.message, true);\r\n if (ex.message.includes(\"Request failed with status code 400\")) {\r\n this.log.warn(\r\n `[onReady] Error 400, maybe your credentials are invalid!`\r\n );\r\n break;\r\n } else {\r\n this.log.error(\r\n `[onReady] Error connecting to Zendure Cloud. Error: ${ex.message}`\r\n );\r\n }\r\n }\r\n\r\n if (_accessToken != undefined) {\r\n this.accessToken = _accessToken;\r\n break;\r\n }\r\n\r\n retryCounter++;\r\n\r\n const milliseconds = 4000 * retryCounter;\r\n\r\n this.log.warn(\r\n `[onReady] Retrying to connect to Zendure Cloud in ${milliseconds / 1000} seconds (Retry #${retryCounter} of 10).`\r\n );\r\n\r\n // Add a small sleep\r\n await new Promise(\r\n (r) =>\r\n (this.retryTimeout = this.setTimeout(r, milliseconds, undefined))\r\n );\r\n }\r\n\r\n if (_accessToken != undefined) {\r\n this.setState(\"info.connection\", true, true);\r\n this.lastLogin = new Date();\r\n\r\n // Try to get the device list\r\n getDeviceList(this)\r\n .then(async (result: ISolarFlowDeviceDetails[]) => {\r\n if (result) {\r\n // Device List found. Save in the adapter properties and connect to MQTT\r\n\r\n // Filtering to SolarFlow devices\r\n this.deviceList = result.filter(\r\n (device) =>\r\n device.productName.toLowerCase().includes(\"solarflow\") ||\r\n device.productName.toLowerCase().includes(\"hyper\") ||\r\n device.productName.toLowerCase() == \"ace 1500\" ||\r\n device.productName.toLowerCase().includes(\"smart plug\")\r\n );\r\n\r\n await checkDevicesServer(this);\r\n\r\n this.log.info(\r\n `[onReady] Found ${this.deviceList.length} SolarFlow device(s).`\r\n );\r\n\r\n await this.deviceList.forEach(\r\n async (device: ISolarFlowDeviceDetails) => {\r\n // Check if has subdevice e.g. ACE?\r\n if (device.packList && device.packList.length > 0) {\r\n device.packList.forEach(async (subDevice) => {\r\n if (\r\n subDevice.productName.toLocaleLowerCase() == \"ace 1500\"\r\n ) {\r\n device._connectedWithAce = true;\r\n // States erstellen\r\n await createSolarFlowStates(this, subDevice);\r\n\r\n await updateSolarFlowState(\r\n this,\r\n subDevice.productKey,\r\n subDevice.deviceKey,\r\n \"registeredServer\",\r\n this.config.server\r\n );\r\n }\r\n });\r\n }\r\n\r\n // States erstellen\r\n await createSolarFlowStates(this, device);\r\n\r\n if (\r\n !device.productName.toLowerCase().includes(\"smart plug\")\r\n ) {\r\n await updateSolarFlowState(\r\n this,\r\n device.productKey,\r\n device.deviceKey,\r\n \"registeredServer\",\r\n this.config.server\r\n );\r\n } else if (this?.userId && device.id) {\r\n await updateSolarFlowState(\r\n this,\r\n this.userId,\r\n device.id?.toString(),\r\n \"registeredServer\",\r\n this.config.server\r\n );\r\n }\r\n }\r\n );\r\n\r\n connectCloudMqttClient(this);\r\n }\r\n })\r\n .catch(() => {\r\n this.setState(\"info.connection\", false, true);\r\n this.log?.error(\"[onReady] Retrieving device failed!\");\r\n });\r\n }\r\n } else {\r\n this.setState(\"info.connection\", false, true);\r\n this.log.error(\"[onReady] No Login Information provided!\");\r\n //this.stop?.();\r\n }\r\n }\r\n\r\n /**\r\n * Is called when adapter shuts down - callback has to be called under any circumstances!\r\n */\r\n private async onUnload(callback: () => void): Promise<void> {\r\n try {\r\n if (this.refreshAccessTokenInterval) {\r\n this.clearInterval(this.refreshAccessTokenInterval);\r\n }\r\n\r\n try {\r\n await this.mqttClient?.endAsync();\r\n this.log.info(\"[onUnload] MQTT client stopped!\");\r\n this.mqttClient = undefined;\r\n } catch (ex: any) {\r\n this.log.error(\"[onUnload] Error stopping MQTT client: !\" + ex.message);\r\n }\r\n\r\n this.setState(\"info.connection\", false, true);\r\n\r\n // Scheduler beenden\r\n if (this.resetValuesJob) {\r\n this.resetValuesJob.cancel();\r\n this.resetValuesJob = undefined;\r\n }\r\n\r\n if (this.checkStatesJob) {\r\n this.checkStatesJob?.cancel();\r\n this.checkStatesJob = undefined;\r\n }\r\n\r\n if (this.calculationJob) {\r\n this.calculationJob.cancel();\r\n this.calculationJob = undefined;\r\n }\r\n\r\n if (this.retryTimeout) {\r\n this.clearTimeout(this.retryTimeout);\r\n }\r\n\r\n callback();\r\n } catch (e) {\r\n callback();\r\n }\r\n }\r\n\r\n /**\r\n * Is called if a subscribed state changes\r\n */\r\n private onStateChange(\r\n id: string,\r\n state: ioBroker.State | null | undefined\r\n ): void {\r\n if (state) {\r\n // The state was changed\r\n //this.log.debug(`state ${id} changed: ${state.val} (ack = ${state.ack})`);\r\n\r\n // Read product and device key from string\r\n const splitted = id.split(\".\");\r\n const productKey = splitted[2]; // Product Key\r\n const deviceKey = splitted[3]; // Device Key\r\n const stateName1 = splitted[4]; // Folder/State Name 1 (e.g. 'control')\r\n const stateName2 = splitted[5]; // State Name, like 'setOutputLimit'\r\n\r\n if (this.config.useFallbackService && stateName1 == \"control\") {\r\n this.log.warn(\r\n `[onStateChange] Using Fallback server, control of Solarflow device is not possible!`\r\n );\r\n }\r\n // !!! Only stateChanges with ack==false are allowed to be processed.\r\n else if (state.val != undefined && state.val != null && !state.ack) {\r\n switch (stateName1) {\r\n case \"control\":\r\n switch (stateName2) {\r\n case \"setOutputLimit\":\r\n setOutputLimit(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"setInputLimit\":\r\n setInputLimit(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"chargeLimit\":\r\n setChargeLimit(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"dischargeLimit\":\r\n setDischargeLimit(\r\n this,\r\n productKey,\r\n deviceKey,\r\n Number(state.val)\r\n );\r\n break;\r\n case \"passMode\":\r\n setPassMode(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"dcSwitch\":\r\n setDcSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"acSwitch\":\r\n setAcSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"acMode\":\r\n setAcMode(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"hubState\":\r\n setHubState(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"autoModel\":\r\n setAutoModel(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"autoRecover\":\r\n setAutoRecover(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"buzzerSwitch\":\r\n setBuzzerSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"smartMode\":\r\n setSmartMode(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"setDeviceAutomationLimit\":\r\n setDeviceAutomationLimit(\r\n this,\r\n productKey,\r\n deviceKey,\r\n Number(state.val)\r\n );\r\n break;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n // The state was deleted\r\n //this.log.debug(`state ${id} deleted`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nif (require.main !== module) {\r\n // Export the constructor in compact mode\r\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) =>\r\n new ZendureSolarflow(options);\r\n} else {\r\n // otherwise start the instance directly\r\n (() => new ZendureSolarflow())();\r\n}\r\n"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\n/*\r\n * Created with @iobroker/create-adapter v2.5.0\r\n */\r\n\r\n// The adapter-core module gives you access to the core ioBroker functions\r\n// you need to create an adapter\r\nimport * as utils from \"@iobroker/adapter-core\";\r\nimport {\r\n connectCloudMqttClient,\r\n connectLocalMqttClient,\r\n setAcMode,\r\n setAcSwitch,\r\n setAutoModel,\r\n setAutoRecover,\r\n setBuzzerSwitch,\r\n setChargeLimit,\r\n setDcSwitch,\r\n setDeviceAutomationInOutLimit,\r\n setDischargeLimit,\r\n setHubState,\r\n setInputLimit,\r\n setOutputLimit,\r\n setPassMode,\r\n setSmartMode,\r\n} from \"./services/mqttService\";\r\nimport { getDeviceList, login } from \"./services/webService\";\r\nimport { ISolarFlowDeviceDetails } from \"./models/ISolarFlowDeviceDetails\";\r\nimport { ISolarFlowPaths } from \"./models/ISolarFlowPaths\";\r\nimport { pathsEu, pathsGlobal } from \"./constants/paths\";\r\nimport { Job } from \"node-schedule\";\r\nimport { MqttClient } from \"mqtt\";\r\nimport {\r\n checkDevicesServer,\r\n updateSolarFlowState,\r\n} from \"./services/adapterService\";\r\nimport { createSolarFlowStates } from \"./helpers/createSolarFlowStates\";\r\nimport { createDeveloperAccount } from \"./services/fallbackWebService\";\r\nimport { ISolarFlowDevRegisterData } from \"./models/ISolarflowDevRegisterResponse\";\r\nimport { connectFallbackMqttClient } from \"./services/fallbackMqttService\";\r\nimport { IPack2Device } from \"./models/IPack2Device\";\r\nimport { startRefreshAccessTokenTimerJob } from \"./services/jobSchedule\";\r\n\r\nexport class ZendureSolarflow extends utils.Adapter {\r\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\r\n super({\r\n ...options,\r\n name: \"zendure-solarflow\",\r\n });\r\n this.on(\"ready\", this.onReady.bind(this));\r\n this.on(\"stateChange\", this.onStateChange.bind(this));\r\n this.on(\"unload\", this.onUnload.bind(this));\r\n }\r\n\r\n public userId: string | undefined = undefined; // User ID, needed for connection with Smart Plug\r\n public accessToken: string | undefined = undefined; // Access Token for Zendure Rest API\r\n public deviceList: ISolarFlowDeviceDetails[] = [];\r\n public paths: ISolarFlowPaths | undefined = undefined;\r\n public pack2Devices: IPack2Device[] = [];\r\n\r\n public msgCounter: number = 700000;\r\n\r\n public lastLogin: Date | undefined = undefined;\r\n\r\n public mqttClient: MqttClient | undefined = undefined;\r\n\r\n public resetValuesJob: Job | undefined = undefined;\r\n public checkStatesJob: Job | undefined = undefined;\r\n public calculationJob: Job | undefined = undefined;\r\n public refreshAccessTokenInterval: ioBroker.Interval | undefined = undefined;\r\n public retryTimeout: ioBroker.Timeout | undefined = undefined;\r\n\r\n public createdSnNumberSolarflowStates: string[] = [];\r\n\r\n /**\r\n * Is called when databases are connected and adapter received configuration.\r\n */\r\n private async onReady(): Promise<void> {\r\n await this.extendObject(\"info\", {\r\n type: \"channel\",\r\n common: {\r\n name: \"Information\",\r\n },\r\n native: {},\r\n });\r\n\r\n await this.extendObject(`info.connection`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Mit Zendure Cloud verbunden\",\r\n en: \"Connected to Zendure cloud\",\r\n },\r\n type: \"boolean\",\r\n desc: \"connection\",\r\n role: \"indicator.connected\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n await this.extendObject(`info.errorMessage`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Fehlermeldung der Verbindung zur Zendure Cloud\",\r\n en: \"Error message from Zendure Cloud\",\r\n },\r\n type: \"string\",\r\n desc: \"errorMessage\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n // Select paths by config value\r\n if (this.config.server && this.config.server == \"eu\") {\r\n this.paths = pathsEu;\r\n } else {\r\n this.paths = pathsGlobal;\r\n }\r\n\r\n this.log.debug(\"[onReady] Using server \" + this.config.server);\r\n\r\n this.setState(\"info.errorMessage\", \"\", true);\r\n\r\n if (this.config.server == \"local\") {\r\n this.log.debug(\"[onReady] Using local MQTT server\");\r\n\r\n connectLocalMqttClient(this);\r\n\r\n if (this.config.useRestart) {\r\n // Add interval to restart adapter every 3 hours\r\n startRefreshAccessTokenTimerJob(this);\r\n }\r\n } else if (this.config.useFallbackService && this.config.snNumber) {\r\n this.log.debug(\"[onReady] Using Fallback Mode (Dev-Server)\");\r\n // Use Fallback service. Using the developer version of the MQTT and Webservice from zendure\r\n createDeveloperAccount(this).then((data: ISolarFlowDevRegisterData) => {\r\n //console.log(data);\r\n if (data.appKey && data.mqttUrl && data.port && data.secret) {\r\n connectFallbackMqttClient(\r\n this,\r\n data.appKey,\r\n data.secret,\r\n data.mqttUrl,\r\n data.port\r\n );\r\n }\r\n });\r\n } else if (\r\n !this.config.useFallbackService &&\r\n this.config.userName &&\r\n this.config.password\r\n ) {\r\n // App mode: If Username and Password is provided, try to login and get the access token.\r\n let _accessToken: string | undefined = undefined;\r\n let retryCounter = 0;\r\n\r\n if (this.config.useRestart) {\r\n // Add interval to restart adapter every 3 hours\r\n startRefreshAccessTokenTimerJob(this);\r\n }\r\n\r\n while (retryCounter <= 10) {\r\n try {\r\n _accessToken = await login(this);\r\n } catch (ex: any) {\r\n this.setState(\"info.message\", ex.message, true);\r\n if (ex.message.includes(\"Request failed with status code 400\")) {\r\n this.log.warn(\r\n `[onReady] Error 400, maybe your credentials are invalid!`\r\n );\r\n break;\r\n } else {\r\n this.log.error(\r\n `[onReady] Error connecting to Zendure Cloud. Error: ${ex.message}`\r\n );\r\n }\r\n }\r\n\r\n if (_accessToken != undefined) {\r\n this.accessToken = _accessToken;\r\n break;\r\n }\r\n\r\n retryCounter++;\r\n\r\n const milliseconds = 4000 * retryCounter;\r\n\r\n this.log.warn(\r\n `[onReady] Retrying to connect to Zendure Cloud in ${milliseconds / 1000} seconds (Retry #${retryCounter} of 10).`\r\n );\r\n\r\n // Add a small sleep\r\n await new Promise(\r\n (r) =>\r\n (this.retryTimeout = this.setTimeout(r, milliseconds, undefined))\r\n );\r\n }\r\n\r\n if (_accessToken != undefined) {\r\n this.setState(\"info.connection\", true, true);\r\n this.lastLogin = new Date();\r\n\r\n // Try to get the device list\r\n getDeviceList(this)\r\n .then(async (result: ISolarFlowDeviceDetails[]) => {\r\n if (result) {\r\n // Device List found. Save in the adapter properties and connect to MQTT\r\n\r\n // Filtering to SolarFlow devices\r\n this.deviceList = result.filter(\r\n (device) =>\r\n device.productName.toLowerCase().includes(\"solarflow\") ||\r\n device.productName.toLowerCase().includes(\"hyper\") ||\r\n device.productName.toLowerCase() == \"ace 1500\" ||\r\n device.productName.toLowerCase().includes(\"smart plug\")\r\n );\r\n\r\n await checkDevicesServer(this);\r\n\r\n this.log.info(\r\n `[onReady] Found ${this.deviceList.length} SolarFlow device(s).`\r\n );\r\n\r\n await this.deviceList.forEach(\r\n async (device: ISolarFlowDeviceDetails) => {\r\n // Check if has subdevice e.g. ACE?\r\n if (device.packList && device.packList.length > 0) {\r\n device.packList.forEach(async (subDevice) => {\r\n if (\r\n subDevice.productName.toLocaleLowerCase() == \"ace 1500\"\r\n ) {\r\n device._connectedWithAce = true;\r\n // States erstellen\r\n await createSolarFlowStates(this, subDevice);\r\n\r\n await updateSolarFlowState(\r\n this,\r\n subDevice.productKey,\r\n subDevice.deviceKey,\r\n \"registeredServer\",\r\n this.config.server\r\n );\r\n }\r\n });\r\n }\r\n\r\n // States erstellen\r\n await createSolarFlowStates(this, device);\r\n\r\n if (\r\n !device.productName.toLowerCase().includes(\"smart plug\")\r\n ) {\r\n await updateSolarFlowState(\r\n this,\r\n device.productKey,\r\n device.deviceKey,\r\n \"registeredServer\",\r\n this.config.server\r\n );\r\n } else if (this?.userId && device.id) {\r\n await updateSolarFlowState(\r\n this,\r\n this.userId,\r\n device.id?.toString(),\r\n \"registeredServer\",\r\n this.config.server\r\n );\r\n }\r\n }\r\n );\r\n\r\n connectCloudMqttClient(this);\r\n }\r\n })\r\n .catch(() => {\r\n this.setState(\"info.connection\", false, true);\r\n this.log?.error(\"[onReady] Retrieving device failed!\");\r\n });\r\n }\r\n } else {\r\n this.setState(\"info.connection\", false, true);\r\n this.log.error(\"[onReady] No Login Information provided!\");\r\n //this.stop?.();\r\n }\r\n }\r\n\r\n /**\r\n * Is called when adapter shuts down - callback has to be called under any circumstances!\r\n */\r\n private async onUnload(callback: () => void): Promise<void> {\r\n try {\r\n if (this.refreshAccessTokenInterval) {\r\n this.clearInterval(this.refreshAccessTokenInterval);\r\n }\r\n\r\n try {\r\n await this.mqttClient?.endAsync();\r\n this.log.info(\"[onUnload] MQTT client stopped!\");\r\n this.mqttClient = undefined;\r\n } catch (ex: any) {\r\n this.log.error(\"[onUnload] Error stopping MQTT client: !\" + ex.message);\r\n }\r\n\r\n this.setState(\"info.connection\", false, true);\r\n\r\n // Scheduler beenden\r\n if (this.resetValuesJob) {\r\n this.resetValuesJob.cancel();\r\n this.resetValuesJob = undefined;\r\n }\r\n\r\n if (this.checkStatesJob) {\r\n this.checkStatesJob?.cancel();\r\n this.checkStatesJob = undefined;\r\n }\r\n\r\n if (this.calculationJob) {\r\n this.calculationJob.cancel();\r\n this.calculationJob = undefined;\r\n }\r\n\r\n if (this.retryTimeout) {\r\n this.clearTimeout(this.retryTimeout);\r\n }\r\n\r\n callback();\r\n } catch (e) {\r\n callback();\r\n }\r\n }\r\n\r\n /**\r\n * Is called if a subscribed state changes\r\n */\r\n private onStateChange(\r\n id: string,\r\n state: ioBroker.State | null | undefined\r\n ): void {\r\n if (state) {\r\n // The state was changed\r\n //this.log.debug(`state ${id} changed: ${state.val} (ack = ${state.ack})`);\r\n\r\n // Read product and device key from string\r\n const splitted = id.split(\".\");\r\n const productKey = splitted[2]; // Product Key\r\n const deviceKey = splitted[3]; // Device Key\r\n const stateName1 = splitted[4]; // Folder/State Name 1 (e.g. 'control')\r\n const stateName2 = splitted[5]; // State Name, like 'setOutputLimit'\r\n\r\n if (this.config.useFallbackService && stateName1 == \"control\") {\r\n this.log.warn(\r\n `[onStateChange] Using Fallback server, control of Solarflow device is not possible!`\r\n );\r\n }\r\n // !!! Only stateChanges with ack==false are allowed to be processed.\r\n else if (state.val != undefined && state.val != null && !state.ack) {\r\n switch (stateName1) {\r\n case \"control\":\r\n switch (stateName2) {\r\n case \"setOutputLimit\":\r\n setOutputLimit(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"setInputLimit\":\r\n setInputLimit(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"chargeLimit\":\r\n setChargeLimit(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"dischargeLimit\":\r\n setDischargeLimit(\r\n this,\r\n productKey,\r\n deviceKey,\r\n Number(state.val)\r\n );\r\n break;\r\n case \"passMode\":\r\n setPassMode(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"dcSwitch\":\r\n setDcSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"acSwitch\":\r\n setAcSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"acMode\":\r\n setAcMode(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"hubState\":\r\n setHubState(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"autoModel\":\r\n setAutoModel(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"autoRecover\":\r\n setAutoRecover(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"buzzerSwitch\":\r\n setBuzzerSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"smartMode\":\r\n setSmartMode(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"setDeviceAutomationInOutLimit\":\r\n setDeviceAutomationInOutLimit(\r\n this,\r\n productKey,\r\n deviceKey,\r\n Number(state.val)\r\n );\r\n break;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n // The state was deleted\r\n //this.log.debug(`state ${id} deleted`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nif (require.main !== module) {\r\n // Export the constructor in compact mode\r\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) =>\r\n new ZendureSolarflow(options);\r\n} else {\r\n // otherwise start the instance directly\r\n (() => new ZendureSolarflow())();\r\n}\r\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -55,7 +55,7 @@ const checkVoltage = async (adapter, productKey, deviceKey, voltage) => {
55
55
  ));
56
56
  const autoModel = (_a = await adapter.getStateAsync(productKey + "." + deviceKey + ".autoModel")) == null ? void 0 : _a.val;
57
57
  if (autoModel == 8) {
58
- (0, import_mqttService.setDeviceAutomationLimit)(adapter, productKey, deviceKey, 0);
58
+ (0, import_mqttService.setDeviceAutomationInOutLimit)(adapter, productKey, deviceKey, 0);
59
59
  } else {
60
60
  (0, import_mqttService.setOutputLimit)(adapter, productKey, deviceKey, 0);
61
61
  }