iobroker.zendure-solarflow 3.0.6 → 3.0.8

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
@@ -59,7 +59,11 @@ On a HUB 1200 / HUB 2000 / ACE 1500 combination you have to use '**setDeviceAuto
59
59
  This adapter will now use the Cloud Authorization Code for authentication on the official mqtt servers, which you can generate in the Zendure app!
60
60
 
61
61
  ## Changelog
62
- ### 3.0.6 (2025-10-20)
62
+ ### 3.0.8 (2025-10-22)
63
+
64
+ - Fix missing smartMode state for SF 800 Pro
65
+
66
+ ### 3.0.7 (2025-10-20)
63
67
 
64
68
  - Fix creation of SF 800 Pro device
65
69
 
@@ -189,6 +189,15 @@ const solarflow800ProControlStates = [
189
189
  write: true,
190
190
  min: 0,
191
191
  unit: "W"
192
+ },
193
+ {
194
+ nameDe: "Smart Mode",
195
+ nameEn: "Smart Mode",
196
+ type: "boolean",
197
+ title: "smartMode",
198
+ role: "switch",
199
+ read: true,
200
+ write: true
192
201
  }
193
202
  ];
194
203
  // Annotate the CommonJS export names for ESM import in node:
@@ -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: \"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
- "mappings": "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",
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: \"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 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"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -110,6 +110,13 @@ const solarflow800ProStates = import_sharedStates.sharedStates.concat([
110
110
  1: "AC input mode",
111
111
  2: "AC output mode"
112
112
  }
113
+ },
114
+ {
115
+ title: "smartMode",
116
+ nameDe: "Smart Mode",
117
+ nameEn: "Smart Mode",
118
+ type: "boolean",
119
+ role: "value"
113
120
  }
114
121
  ]);
115
122
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/constants/solarflow800ProStates.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\nimport { sharedStates } from \"./sharedStates\";\n\nexport const solarflow800ProStates: ISolarflowState[] = sharedStates.concat([\n {\n title: \"hyperTmp\",\n nameDe: \"Temperatur des Solarflow 800\",\n nameEn: \"Temperature of Solarflow 800\",\n type: \"number\",\n role: \"value.temperature\",\n unit: \"\u00B0C\",\n },\n {\n title: \"inverseMaxPower\",\n nameDe: \"Maximal akzeptabler Eingang des PV-Mikrowechselrichters\",\n nameEn: \"highest acceptable input power\",\n type: \"number\",\n role: \"value.power\",\n unit: \"W\",\n },\n {\n title: \"pass\",\n nameDe: \"Bypass an/aus\",\n nameEn: \"Bypass on/off\",\n type: \"boolean\",\n role: \"value\",\n },\n {\n title: \"autoRecover\",\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n role: \"value\",\n },\n {\n title: \"passMode\",\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"string\",\n role: \"value\",\n },\n {\n title: \"pvBrand\",\n nameDe: \"Wechselrichter Hersteller\",\n nameEn: \"brand of inverter\",\n type: \"string\",\n role: \"value\",\n },\n {\n title: \"outputHomePower\",\n nameDe: \"Ausgangsleistung\",\n nameEn: \"output power\",\n type: \"number\",\n role: \"value.power\",\n unit: \"W\",\n },\n {\n title: \"outputLimit\",\n nameDe: \"Limit der Ausgangsleistung\",\n nameEn: \"limit of output power\",\n type: \"number\",\n role: \"value.power\",\n unit: \"W\",\n },\n {\n title: \"pvPower3\",\n nameDe: \"Leistung PV 3\",\n nameEn: \"solar power channel 3\",\n type: \"number\",\n role: \"value.power\",\n unit: \"W\",\n },\n {\n title: \"pvPower4\",\n nameDe: \"Leistung PV 4\",\n nameEn: \"solar power channel 4\",\n type: \"number\",\n role: \"value.power\",\n unit: \"W\",\n },\n {\n title: \"acMode\",\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n role: \"value\",\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n]);\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,0BAA6B;AAEtB,MAAM,wBAA2C,iCAAa,OAAO;AAAA,EAC1E;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,EACF;AACF,CAAC;",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\nimport { sharedStates } from \"./sharedStates\";\n\nexport const solarflow800ProStates: ISolarflowState[] = sharedStates.concat([\n {\n title: \"hyperTmp\",\n nameDe: \"Temperatur des Solarflow 800\",\n nameEn: \"Temperature of Solarflow 800\",\n type: \"number\",\n role: \"value.temperature\",\n unit: \"\u00B0C\",\n },\n {\n title: \"inverseMaxPower\",\n nameDe: \"Maximal akzeptabler Eingang des PV-Mikrowechselrichters\",\n nameEn: \"highest acceptable input power\",\n type: \"number\",\n role: \"value.power\",\n unit: \"W\",\n },\n {\n title: \"pass\",\n nameDe: \"Bypass an/aus\",\n nameEn: \"Bypass on/off\",\n type: \"boolean\",\n role: \"value\",\n },\n {\n title: \"autoRecover\",\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n role: \"value\",\n },\n {\n title: \"passMode\",\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"string\",\n role: \"value\",\n },\n {\n title: \"pvBrand\",\n nameDe: \"Wechselrichter Hersteller\",\n nameEn: \"brand of inverter\",\n type: \"string\",\n role: \"value\",\n },\n {\n title: \"outputHomePower\",\n nameDe: \"Ausgangsleistung\",\n nameEn: \"output power\",\n type: \"number\",\n role: \"value.power\",\n unit: \"W\",\n },\n {\n title: \"outputLimit\",\n nameDe: \"Limit der Ausgangsleistung\",\n nameEn: \"limit of output power\",\n type: \"number\",\n role: \"value.power\",\n unit: \"W\",\n },\n {\n title: \"pvPower3\",\n nameDe: \"Leistung PV 3\",\n nameEn: \"solar power channel 3\",\n type: \"number\",\n role: \"value.power\",\n unit: \"W\",\n },\n {\n title: \"pvPower4\",\n nameDe: \"Leistung PV 4\",\n nameEn: \"solar power channel 4\",\n type: \"number\",\n role: \"value.power\",\n unit: \"W\",\n },\n {\n title: \"acMode\",\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n role: \"value\",\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n title: \"smartMode\",\n nameDe: \"Smart Mode\",\n nameEn: \"Smart Mode\",\n type: \"boolean\",\n role: \"value\",\n },\n]);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,0BAA6B;AAEtB,MAAM,wBAA2C,iCAAa,OAAO;AAAA,EAC1E;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF,CAAC;",
6
6
  "names": []
7
7
  }
@@ -26,6 +26,7 @@ var import_Aio2400 = require("../models/deviceModels/Aio2400");
26
26
  var import_Hyper2000 = require("../models/deviceModels/Hyper2000");
27
27
  var import_Sf2400Ac = require("../models/deviceModels/Sf2400Ac");
28
28
  var import_Sf800 = require("../models/deviceModels/Sf800");
29
+ var import_Sf800Pro = require("../models/deviceModels/Sf800Pro");
29
30
  var import_SfHub1200 = require("../models/deviceModels/SfHub1200");
30
31
  var import_SfHub2000 = require("../models/deviceModels/SfHub2000");
31
32
  const createDeviceModel = (_adapter, _productKey, _deviceKey, _zenHaDeviceDetails) => {
@@ -154,12 +155,12 @@ const createDeviceModel = (_adapter, _productKey, _deviceKey, _zenHaDeviceDetail
154
155
  _adapter.log.debug(
155
156
  `[onReady] Creating deviceModel SF 800 Pro ${_productKey}`
156
157
  );
157
- return new import_Sf800.Sf800(
158
+ return new import_Sf800Pro.Sf800Pro(
158
159
  _adapter,
159
160
  _productKey,
160
161
  _deviceKey,
161
- _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : "Solarflow 800",
162
- _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : "Solarflow 800",
162
+ _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : "Solarflow 800 Pro",
163
+ _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : "Solarflow 800 Pro",
163
164
  _zenHaDeviceDetails
164
165
  );
165
166
  default:
@@ -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\nimport { ZendureSolarflow } from \"../main\";\nimport { Ace1500 } from \"../models/deviceModels/Ace1500\";\nimport { Aio2400 } from \"../models/deviceModels/Aio2400\";\nimport { Hyper2000 } from \"../models/deviceModels/Hyper2000\";\nimport { Sf2400Ac } from \"../models/deviceModels/Sf2400Ac\";\nimport { Sf800 } from \"../models/deviceModels/Sf800\";\nimport { SfHub1200 } from \"../models/deviceModels/SfHub1200\";\nimport { SfHub2000 } from \"../models/deviceModels/SfHub2000\";\n\nimport { IZenHaDeviceDetails } from \"../models/IZenHaDeviceDetails\";\n\nexport const createDeviceModel = (\n _adapter: ZendureSolarflow,\n _productKey: string,\n _deviceKey: string,\n _zenHaDeviceDetails?: IZenHaDeviceDetails\n):\n | SfHub1200\n | SfHub2000\n | Ace1500\n | Hyper2000\n | Sf2400Ac\n | Sf800\n | undefined => {\n switch (_productKey.toLowerCase()) {\n case \"73bktv\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel HUB 1200 ${_productKey}`\n );\n return new SfHub1200(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"HUB 1200\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"HUB 1200\",\n _zenHaDeviceDetails\n );\n case \"a8yh63\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel HUB 2000 ${_productKey}`\n );\n return new SfHub2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"HUB 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"HUB 2000\",\n _zenHaDeviceDetails\n );\n case \"ywf7hv\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel AIO 2400 ${_productKey}`\n );\n return new Aio2400(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"AIO 2400\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"AIO 2400\",\n _zenHaDeviceDetails\n );\n case \"ja72u0ha\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel Hyper 2000 ${_productKey}`\n );\n return new Hyper2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Hyper 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Hyper 2000\",\n _zenHaDeviceDetails\n );\n case \"gda3tb\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel Hyper 2000 ${_productKey}`\n );\n return new Hyper2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Hyper 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Hyper 2000\",\n _zenHaDeviceDetails\n );\n case \"b3dxda\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel Hyper 2000 ${_productKey}`\n );\n return new Hyper2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Hyper 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Hyper 2000\",\n _zenHaDeviceDetails\n );\n case \"8bm93h\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel ACE 1500 ${_productKey}`\n );\n return new Ace1500(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Ace 1500\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Ace 1500\",\n _zenHaDeviceDetails\n );\n case \"bc8b7f\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel SF 2400 AC ${_productKey}`\n );\n return new Sf2400Ac(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 2400 AC\",\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.deviceName\n : \"Solarflow 2400 AC\",\n _zenHaDeviceDetails\n );\n case \"a4ss5P\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel SF 800 ${_productKey}`\n );\n return new Sf800(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 800\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Solarflow 800\",\n _zenHaDeviceDetails\n );\n case \"b1nhmc\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel SF 800 ${_productKey}`\n );\n return new Sf800(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 800\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Solarflow 800\",\n _zenHaDeviceDetails\n );\n case \"r3mn8u\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel SF 800 Pro ${_productKey}`\n );\n return new Sf800(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 800\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Solarflow 800\",\n _zenHaDeviceDetails\n );\n default:\n return undefined;\n }\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\n\nimport { ZendureSolarflow } from \"../main\";\nimport { Ace1500 } from \"../models/deviceModels/Ace1500\";\nimport { Aio2400 } from \"../models/deviceModels/Aio2400\";\nimport { Hyper2000 } from \"../models/deviceModels/Hyper2000\";\nimport { Sf2400Ac } from \"../models/deviceModels/Sf2400Ac\";\nimport { Sf800 } from \"../models/deviceModels/Sf800\";\nimport { Sf800Pro } from \"../models/deviceModels/Sf800Pro\";\nimport { SfHub1200 } from \"../models/deviceModels/SfHub1200\";\nimport { SfHub2000 } from \"../models/deviceModels/SfHub2000\";\n\nimport { IZenHaDeviceDetails } from \"../models/IZenHaDeviceDetails\";\n\nexport const createDeviceModel = (\n _adapter: ZendureSolarflow,\n _productKey: string,\n _deviceKey: string,\n _zenHaDeviceDetails?: IZenHaDeviceDetails\n):\n | SfHub1200\n | SfHub2000\n | Ace1500\n | Hyper2000\n | Sf2400Ac\n | Sf800\n | undefined => {\n switch (_productKey.toLowerCase()) {\n case \"73bktv\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel HUB 1200 ${_productKey}`\n );\n return new SfHub1200(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"HUB 1200\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"HUB 1200\",\n _zenHaDeviceDetails\n );\n case \"a8yh63\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel HUB 2000 ${_productKey}`\n );\n return new SfHub2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"HUB 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"HUB 2000\",\n _zenHaDeviceDetails\n );\n case \"ywf7hv\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel AIO 2400 ${_productKey}`\n );\n return new Aio2400(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"AIO 2400\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"AIO 2400\",\n _zenHaDeviceDetails\n );\n case \"ja72u0ha\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel Hyper 2000 ${_productKey}`\n );\n return new Hyper2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Hyper 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Hyper 2000\",\n _zenHaDeviceDetails\n );\n case \"gda3tb\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel Hyper 2000 ${_productKey}`\n );\n return new Hyper2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Hyper 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Hyper 2000\",\n _zenHaDeviceDetails\n );\n case \"b3dxda\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel Hyper 2000 ${_productKey}`\n );\n return new Hyper2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Hyper 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Hyper 2000\",\n _zenHaDeviceDetails\n );\n case \"8bm93h\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel ACE 1500 ${_productKey}`\n );\n return new Ace1500(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Ace 1500\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Ace 1500\",\n _zenHaDeviceDetails\n );\n case \"bc8b7f\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel SF 2400 AC ${_productKey}`\n );\n return new Sf2400Ac(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 2400 AC\",\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.deviceName\n : \"Solarflow 2400 AC\",\n _zenHaDeviceDetails\n );\n case \"a4ss5P\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel SF 800 ${_productKey}`\n );\n return new Sf800(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 800\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Solarflow 800\",\n _zenHaDeviceDetails\n );\n case \"b1nhmc\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel SF 800 ${_productKey}`\n );\n return new Sf800(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 800\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Solarflow 800\",\n _zenHaDeviceDetails\n );\n case \"r3mn8u\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel SF 800 Pro ${_productKey}`\n );\n return new Sf800Pro(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 800 Pro\",\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.deviceName\n : \"Solarflow 800 Pro\",\n _zenHaDeviceDetails\n );\n default:\n return undefined;\n }\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -18,13 +18,13 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var Sf800Pro_exports = {};
20
20
  __export(Sf800Pro_exports, {
21
- Sf800: () => Sf800
21
+ Sf800Pro: () => Sf800Pro
22
22
  });
23
23
  module.exports = __toCommonJS(Sf800Pro_exports);
24
24
  var import_solarflow800ProControlStates = require("../../constants/solarflow800ProControlStates");
25
25
  var import_solarflow800ProStates = require("../../constants/solarflow800ProStates");
26
26
  var import_ZenHaDevice = require("./ZenHaDevice");
27
- class Sf800 extends import_ZenHaDevice.ZenHaDevice {
27
+ class Sf800Pro extends import_ZenHaDevice.ZenHaDevice {
28
28
  constructor(_adapter, _productKey, _deviceKey, _productName, _deviceName, _zenHaDeviceDetails) {
29
29
  super(
30
30
  _adapter,
@@ -139,6 +139,6 @@ class Sf800 extends import_ZenHaDevice.ZenHaDevice {
139
139
  }
140
140
  // Annotate the CommonJS export names for ESM import in node:
141
141
  0 && (module.exports = {
142
- Sf800
142
+ Sf800Pro
143
143
  });
144
144
  //# sourceMappingURL=Sf800Pro.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/models/deviceModels/Sf800Pro.ts"],
4
- "sourcesContent": ["import { solarflow800ProControlStates } from \"../../constants/solarflow800ProControlStates\";\nimport { solarflow800ProStates } from \"../../constants/solarflow800ProStates\";\nimport { ZendureSolarflow } from \"../../main\";\nimport { IHemsEpPayload } from \"../IDeviceAutomationPayload\";\nimport { IZenHaDeviceDetails } from \"../IZenHaDeviceDetails\";\nimport { ZenHaDevice } from \"./ZenHaDevice\";\n\nexport class Sf800 extends ZenHaDevice {\n maxInputLimit = 800;\n maxOutputLimit = 800;\n\n states = solarflow800ProStates;\n controlStates = solarflow800ProControlStates;\n\n public constructor(\n _adapter: ZendureSolarflow,\n _productKey: string,\n _deviceKey: string,\n _productName: string,\n _deviceName: string,\n _zenHaDeviceDetails?: IZenHaDeviceDetails\n ) {\n super(\n _adapter,\n _productKey,\n _deviceKey,\n _productName,\n _deviceName,\n _zenHaDeviceDetails\n );\n }\n\n public async setAcMode(acMode: number): Promise<void> {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n if (acMode >= 0 && acMode <= 3) {\n const topic = `iot/${this.productKey}/${this.deviceKey}/properties/write`;\n\n const setAcMode = { properties: { acMode: acMode } };\n this.adapter.log.debug(`[setAcMode] Set AC mode to ${acMode}!`);\n this.adapter.mqttClient?.publish(topic, JSON.stringify(setAcMode));\n\n // Check if device is HUB, then check if smartMode is false - if so send a warning to log!\n const smartMode = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.smartMode\"\n );\n\n if (smartMode && !smartMode.val) {\n this.adapter.log.warn(\n `[setAcMode] AC mode was switched and smartMode is false - changes will be written to flash memory. In the worst case, the device may break or changes may no longer be saved!`\n );\n }\n } else {\n this.adapter.log.error(\n `[setAcMode] AC mode must be a value between 0 and 3!`\n );\n }\n }\n }\n\n public setAcSwitch(acSwitch: boolean): void {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n const setAcSwitchContent = {\n properties: { acSwitch: acSwitch ? 1 : 0 },\n };\n this.adapter.log.debug(\n `[setAcSwitch] Set AC Switch for device ${this.deviceKey} to ${acSwitch}!`\n );\n this.adapter.mqttClient?.publish(\n this.iotTopic,\n JSON.stringify(setAcSwitchContent)\n );\n }\n }\n\n public async setDeviceAutomationInOutLimit(\n limit: number // can be negative, negative will trigger charging mode\n ): Promise<void> {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n this.adapter.log.debug(\n `[setDeviceAutomationInOutLimit] Set device Automation limit to ${limit}!`\n );\n\n if (limit) {\n limit = Math.round(limit);\n } else {\n limit = 0;\n }\n\n if (this.adapter.config.useLowVoltageBlock) {\n const lowVoltageBlockState = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.lowVoltageBlock\"\n );\n if (\n lowVoltageBlockState &&\n lowVoltageBlockState.val &&\n lowVoltageBlockState.val == true &&\n limit > 0\n ) {\n limit = 0;\n }\n\n const fullChargeNeeded = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.fullChargeNeeded\"\n );\n\n if (\n fullChargeNeeded &&\n fullChargeNeeded.val &&\n fullChargeNeeded.val == true &&\n limit > 0\n ) {\n limit = 0;\n }\n }\n\n if (limit < 0) {\n // Get input limit, make number positive and the new value negative\n if (limit < this.maxInputLimit) {\n limit = this.maxInputLimit;\n }\n } else {\n if (limit > this.maxOutputLimit) {\n limit = this.maxOutputLimit;\n }\n }\n\n this.adapter.msgCounter += 1;\n\n const timestamp = new Date();\n timestamp.setMilliseconds(0);\n\n // Device Automation for Solarflow 2400 AC and Solarflow 800\n this.adapter.log.debug(\n `[setDeviceAutomationInOutLimit] Using HEMS Variant of device automation, as deviceKey '${this.deviceKey}' detected!`\n );\n\n // HEMS Variante\n const _arguments: IHemsEpPayload = {\n outputPower: limit > 0 ? limit : 0,\n chargeState: limit > 0 ? 0 : 1,\n chargePower: limit > 0 ? 0 : -limit,\n mode: 9,\n };\n\n const hemsEP = {\n arguments: _arguments,\n function: \"hemsEP\",\n messageId: this.adapter.msgCounter,\n deviceKey: this.deviceKey,\n timestamp: timestamp.getTime() / 1000,\n };\n this.adapter.mqttClient?.publish(\n this.functionTopic,\n JSON.stringify(hemsEP)\n );\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { solarflow800ProControlStates } from \"../../constants/solarflow800ProControlStates\";\nimport { solarflow800ProStates } from \"../../constants/solarflow800ProStates\";\nimport { ZendureSolarflow } from \"../../main\";\nimport { IHemsEpPayload } from \"../IDeviceAutomationPayload\";\nimport { IZenHaDeviceDetails } from \"../IZenHaDeviceDetails\";\nimport { ZenHaDevice } from \"./ZenHaDevice\";\n\nexport class Sf800Pro extends ZenHaDevice {\n maxInputLimit = 800;\n maxOutputLimit = 800;\n\n states = solarflow800ProStates;\n controlStates = solarflow800ProControlStates;\n\n public constructor(\n _adapter: ZendureSolarflow,\n _productKey: string,\n _deviceKey: string,\n _productName: string,\n _deviceName: string,\n _zenHaDeviceDetails?: IZenHaDeviceDetails\n ) {\n super(\n _adapter,\n _productKey,\n _deviceKey,\n _productName,\n _deviceName,\n _zenHaDeviceDetails\n );\n }\n\n public async setAcMode(acMode: number): Promise<void> {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n if (acMode >= 0 && acMode <= 3) {\n const topic = `iot/${this.productKey}/${this.deviceKey}/properties/write`;\n\n const setAcMode = { properties: { acMode: acMode } };\n this.adapter.log.debug(`[setAcMode] Set AC mode to ${acMode}!`);\n this.adapter.mqttClient?.publish(topic, JSON.stringify(setAcMode));\n\n // Check if device is HUB, then check if smartMode is false - if so send a warning to log!\n const smartMode = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.smartMode\"\n );\n\n if (smartMode && !smartMode.val) {\n this.adapter.log.warn(\n `[setAcMode] AC mode was switched and smartMode is false - changes will be written to flash memory. In the worst case, the device may break or changes may no longer be saved!`\n );\n }\n } else {\n this.adapter.log.error(\n `[setAcMode] AC mode must be a value between 0 and 3!`\n );\n }\n }\n }\n\n public setAcSwitch(acSwitch: boolean): void {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n const setAcSwitchContent = {\n properties: { acSwitch: acSwitch ? 1 : 0 },\n };\n this.adapter.log.debug(\n `[setAcSwitch] Set AC Switch for device ${this.deviceKey} to ${acSwitch}!`\n );\n this.adapter.mqttClient?.publish(\n this.iotTopic,\n JSON.stringify(setAcSwitchContent)\n );\n }\n }\n\n public async setDeviceAutomationInOutLimit(\n limit: number // can be negative, negative will trigger charging mode\n ): Promise<void> {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n this.adapter.log.debug(\n `[setDeviceAutomationInOutLimit] Set device Automation limit to ${limit}!`\n );\n\n if (limit) {\n limit = Math.round(limit);\n } else {\n limit = 0;\n }\n\n if (this.adapter.config.useLowVoltageBlock) {\n const lowVoltageBlockState = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.lowVoltageBlock\"\n );\n if (\n lowVoltageBlockState &&\n lowVoltageBlockState.val &&\n lowVoltageBlockState.val == true &&\n limit > 0\n ) {\n limit = 0;\n }\n\n const fullChargeNeeded = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.fullChargeNeeded\"\n );\n\n if (\n fullChargeNeeded &&\n fullChargeNeeded.val &&\n fullChargeNeeded.val == true &&\n limit > 0\n ) {\n limit = 0;\n }\n }\n\n if (limit < 0) {\n // Get input limit, make number positive and the new value negative\n if (limit < this.maxInputLimit) {\n limit = this.maxInputLimit;\n }\n } else {\n if (limit > this.maxOutputLimit) {\n limit = this.maxOutputLimit;\n }\n }\n\n this.adapter.msgCounter += 1;\n\n const timestamp = new Date();\n timestamp.setMilliseconds(0);\n\n // Device Automation for Solarflow 2400 AC and Solarflow 800\n this.adapter.log.debug(\n `[setDeviceAutomationInOutLimit] Using HEMS Variant of device automation, as deviceKey '${this.deviceKey}' detected!`\n );\n\n // HEMS Variante\n const _arguments: IHemsEpPayload = {\n outputPower: limit > 0 ? limit : 0,\n chargeState: limit > 0 ? 0 : 1,\n chargePower: limit > 0 ? 0 : -limit,\n mode: 9,\n };\n\n const hemsEP = {\n arguments: _arguments,\n function: \"hemsEP\",\n messageId: this.adapter.msgCounter,\n deviceKey: this.deviceKey,\n timestamp: timestamp.getTime() / 1000,\n };\n this.adapter.mqttClient?.publish(\n this.functionTopic,\n JSON.stringify(hemsEP)\n );\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/io-package.json CHANGED
@@ -1,9 +1,22 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "zendure-solarflow",
4
- "version": "3.0.6",
4
+ "version": "3.0.8",
5
5
  "news": {
6
- "3.0.6": {
6
+ "3.0.8": {
7
+ "en": "Fix missing smartMode state for SF 800 Pro",
8
+ "de": "Fehlerbehebung Smart Modezustand für SF 800 Pro",
9
+ "ru": "Исправить недостающие умные Режим работы для SF 800 Pro",
10
+ "pt": "Corrigir a falta de inteligência Estado do modo para SF 800 Pro",
11
+ "nl": "Smart herstellen Modusstatus voor SF 800 Pro",
12
+ "fr": "Correction manquante smart État du mode pour SF 800 Pro",
13
+ "it": "Risolvere intelligente mancante Stato di modalità per SF 800 Pro",
14
+ "es": "Arreglar perdido inteligente Mode state for SF 800 Pro",
15
+ "pl": "Popraw brakujące inteligentne Stan trybu dla SF 800 Pro",
16
+ "uk": "Виправлення відсутній смарт Статус на сервери",
17
+ "zh-cn": "修复丢失的智能 SF800 Pro 模式状态"
18
+ },
19
+ "3.0.7": {
7
20
  "en": "Fix creation of SF 800 Pro device",
8
21
  "de": "Feste Erstellung von SF 800 Pro Gerät",
9
22
  "ru": "Создание SF 800 Устройство Pro",
@@ -80,19 +93,6 @@
80
93
  "pl": "Aktualizuj 'lastUpdate', gdy zmienia się wartość baterii\nDodaj deviceKey 'R3mn8U' dla Solarflow 800 Pro",
81
94
  "uk": "Оновлення \"lastUpdate\" при зміні значення батареї\nДодати пристрійKey 'R3mn8U' для Solarflow 800 Pro",
82
95
  "zh-cn": "当电池值改变时更新“ last Update ”\n为 Solarflow 800 Pro 添加设备Key “ R3mn8U ”"
83
- },
84
- "3.0.0": {
85
- "en": "Breaking Change: Change authentication to \"authentication cloud key\". You can generate a key in the official zendure app\nRemoved fallback server\nAdd deviceKey 'a4ss5P' for Solarflow 800\nRefactor a lot of code",
86
- "de": "Veränderung: Ändern Sie die Authentifizierung auf \"Authentifizierungs-Cloud-Taste\". Sie können einen Schlüssel in der offiziellen Zendure-App generieren\nEntfernen von Fallback-Server\nGerät hinzufügenKey 'a4ss5P' für Solarflow 800\nRefactor eine Menge Code",
87
- "ru": "Переломные изменения: Измените аутентификацию на «облачный ключ аутентификации». Вы можете создать ключ в официальном приложении zendure\nУдаленный сервер Fallback\nДобавить устройствоKey ‘a4ss5P для Solarflow 800\nРефактор много кода",
88
- "pt": "Quebrar a Mudança: Alterar autenticação para \"chave de nuvem de autenticação\". Você pode gerar uma chave no aplicativo oficial zendure\nServidor de reserva removido\nAdicionar dispositivoKey 'a4ss5P' para Solarflow 800\nRefactorar um monte de código",
89
- "nl": "Verandering doorbreken: Authenticatie wijzigen naar \"authentication cloud key.\" U kunt een sleutel genereren in de officiële zindure app\nTerugvalserver verwijderd\nApparaat toevoegenKey 'a4ss5P' voor Solarflow 800\nRefactor veel code",
90
- "fr": "Briser le changement : Changez l'authentification en \"clé de nuage d'authentification\". Vous pouvez générer une clé dans l'application officielle zendure\nServeur de repli supprimé\nAjouter la clé 'a4ss5P' pour Solarflow 800\nRefactor beaucoup de code",
91
- "it": "Cambiamento di rottura: Modificare l'autenticazione a \"chiave cloud di autenticazione\". È possibile generare una chiave nell'app ufficiale zendure\nServer di failback rimosso\nAggiungi dispositivoKey 'a4ss5P' per Solarflow 800\nRefactor un sacco di codice",
92
- "es": "Cambio de ruptura: Cambiar la autenticación a \"la clave de nube de autenticación\". Usted puede generar una clave en la aplicación oficial de zendure\nServidor de retroceso eliminado\nAñadir dispositivoKey 'a4s5P' para el flujo solar 800\nRefactor mucho código",
93
- "pl": "Łamanie zmian: Zmień uwierzytelnianie na \"klucz do uwierzytelniania w chmurze\". Możesz wygenerować klucz w oficjalnej aplikacji Zabb\nUsunięto serwer awaryjny\nDodaj deviceKey 'a4ss5P' dla Solarflow 800\nZmień dużo kodu",
94
- "uk": "Зміна несправностей: Зміна автентифікації на \"автентифікаційний ключ хмари\". Ви можете генерувати ключ в офіційному додатку zendure\nВидалити резервний сервер\nДодати пристрійKey 'a4ss5P' для Solarflow 800\nРефактор багато коду",
95
- "zh-cn": "中断更改 : 认证改为\"认证云密钥\". 您可以在正式 Zendure app 中生成密钥\n删除后退服务器\n为 Solarflow 800 添加设备Key 'a4ss5P'\n重构很多代码"
96
96
  }
97
97
  },
98
98
  "titleLang": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.zendure-solarflow",
3
- "version": "3.0.6",
3
+ "version": "3.0.8",
4
4
  "description": "zendure-solarflow",
5
5
  "author": {
6
6
  "name": "Peter",