From bef1ac1388cf1f0893abd48f820bd38a703d4912 Mon Sep 17 00:00:00 2001 From: Stephan Date: Mon, 27 Nov 2023 08:46:27 +0100 Subject: [PATCH] build --- build/lib/states.js | 10 ++++++++++ build/lib/states.js.map | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/build/lib/states.js b/build/lib/states.js index 5e78c06..efa00a5 100644 --- a/build/lib/states.js +++ b/build/lib/states.js @@ -136,6 +136,16 @@ class InverterStates { ])); } }, + { + interval: 1 /* LOW */, + state: { id: "storage.CurrentDayChargeCapacity", name: "CurrentDayChargeCapacity", type: "number", unit: "kWh", role: "value.power", desc: "TBD" }, + register: { reg: 37015, type: import_modbus_types.ModbusDatatype.uint32, length: 2, gain: 100 } + }, + { + interval: 1 /* LOW */, + state: { id: "storage.CurrentDayDischargeCapacity", name: "CurrentDayDischargeCapacity", type: "number", unit: "kWh", role: "value.power", desc: "TBD" }, + register: { reg: 37786, type: import_modbus_types.ModbusDatatype.uint32, length: 2, gain: 100 } + }, { interval: 1 /* LOW */, state: { id: "grid.meterStatus", name: "Meter status", type: "string", role: "value.status" }, diff --git a/build/lib/states.js.map b/build/lib/states.js.map index 116e483..c2693d0 100644 --- a/build/lib/states.js.map +++ b/build/lib/states.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../src/lib/states.ts"], - "sourcesContent": ["import {ModbusDatatype} from './modbus/modbus_types';\nimport {InverterStatus, MeterStatus, StorageStatus} from './state_enums';\nimport {AdapterInstance} from '@iobroker/adapter-core';\nimport {ModbusDevice} from './modbus/modbus_device';\n\ntype MapperFn = (value: any) => Promise\ntype PostUpdateHookFn = (adapter: AdapterInstance, value: any) => Promise>\ntype PostFetchUpdateHookFn = (adapter: AdapterInstance, toUpdate: Map) => Map\n\ninterface DataField {\n interval?: UpdateIntervalID;\n state: State;\n register: ModbusRegister;\n mapper?: MapperFn;\n postUpdateHook?: PostUpdateHookFn;\n}\n\ninterface StateToUpdate {\n id: string;\n value: any;\n postUpdateHook?: PostUpdateHookFn;\n}\n\ninterface State {\n id: string;\n name: string;\n type: ioBroker.CommonType;\n role: string;\n unit?: string;\n desc?: string;\n}\n\ninterface ModbusRegister {\n reg: number;\n type: ModbusDatatype;\n length: number;\n gain?: number;\n}\n\nexport enum UpdateIntervalID {\n HIGH,\n LOW\n}\n\ninterface UpdateIntervals {\n intervals: number[];\n}\n\ninterface PostFetchUpdateHook {\n interval: UpdateIntervalID;\n hookFn: PostFetchUpdateHookFn;\n}\n\nexport class InverterStates {\n\n private updateIntervals: UpdateIntervals\n private readonly dataFields: DataField[];\n private readonly postFetchUpdateHooks: PostFetchUpdateHook[];\n // private changingFields: DataField[];\n\n constructor(updateIntervals: UpdateIntervals) {\n this.updateIntervals = updateIntervals;\n this.dataFields = [\n // initial fields (no interval set) - no repetitive update\n {\n state: {id: 'info.model', name: 'Model', type: 'string', role: 'state'},\n register: {reg: 30000, type: ModbusDatatype.string, length: 15}\n },\n {\n state: {id: 'info.modelID', name: 'Model ID', type: 'number', role: 'state'},\n register: {reg: 30070, type: ModbusDatatype.uint16, length: 1}\n },\n {\n state: {id: 'info.serialNumber', name: 'Serial number', type: 'string', role: 'state'},\n register: {reg: 30015, type: ModbusDatatype.string, length: 10}\n },\n {\n state: {id: 'info.ratedPower', name: 'Rated power', type: 'number', unit: 'W', role: 'state'},\n register: {reg: 30073, type: ModbusDatatype.int32, length: 2}\n },\n {\n state: {id: 'info.numberMPPTrackers', name: 'Number of MPP trackers', type: 'number', unit: '', role: 'state'},\n register: {reg: 30072, type: ModbusDatatype.uint16, length: 1, gain: 1}\n },\n\n // inverter\n {\n interval: UpdateIntervalID.HIGH,\n state: {id: 'activePower', name: 'Active power', type: 'number', unit: 'W', role: 'value.power', desc: 'Power currently used'},\n register: {reg: 32080, type: ModbusDatatype.int32, length: 2}\n },\n {\n interval: UpdateIntervalID.HIGH,\n state: {id: 'inputPower', name: 'Input power', type: 'number', unit: 'W', role: 'value.power', desc: 'Power from PV'},\n register: {reg: 32064, type: ModbusDatatype.int32, length: 2}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'peakActivePowerCurrenDay', name: 'Peak active power of current day', type: 'number', unit: 'W', role: 'value.power.max'},\n register: {reg: 32078, type: ModbusDatatype.int32, length: 2}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'efficiency', name: 'Efficiency', type: 'number', unit: '%', role: 'value.efficiency'},\n register: {reg: 32086, type: ModbusDatatype.uint16, length: 1, gain: 100}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'internalTemperature', name: 'Internal temperature', type: 'number', unit: '\u00B0C', role: 'value.temp'},\n register: {reg: 32087, type: ModbusDatatype.int16, length: 1, gain: 10}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'deviceStatus', name: 'Device status', type: 'string', unit: '', role: 'value.status'},\n register: {reg: 32089, type: ModbusDatatype.uint16, length: 1},\n mapper: value => Promise.resolve(InverterStatus[value])\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'accumulatedEnergyYield', name: 'Accumulated energy yield', type: 'number', unit: 'kWh', role: 'value'},\n register: {reg: 32106, type: ModbusDatatype.uint32, length: 2, gain: 100},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'dailyEnergyYield', name: 'Daily energy yield', type: 'number', unit: 'kWh', role: 'value'},\n register: {reg: 32114, type: ModbusDatatype.uint32, length: 2, gain: 100}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'PV1Voltage', name: 'PV1 voltage', type: 'number', unit: 'V', role: 'value.voltage'},\n register: {reg: 32016, type: ModbusDatatype.int16, length: 1, gain: 10}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'PV1Current', name: 'PV1 current', type: 'number', unit: 'A', role: 'value.current'},\n register: {reg: 32017, type: ModbusDatatype.int16, length: 1, gain: 100}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'PV2Voltage', name: 'PV2 voltage', type: 'number', unit: 'V', role: 'value.voltage'},\n register: {reg: 32018, type: ModbusDatatype.int16, length: 1, gain: 10}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'PV2Current', name: 'PV2 current', type: 'number', unit: 'A', role: 'value.current'},\n register: {reg: 32019, type: ModbusDatatype.int16, length: 1, gain: 100}\n },\n\n // storage\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'storage.runningState', name: 'Running state', type: 'string', role: 'value'},\n register: {reg: 37762, type: ModbusDatatype.uint16, length: 1},\n mapper: value => Promise.resolve(StorageStatus[value])\n },\n {\n interval: UpdateIntervalID.HIGH,\n state: {id: 'storage.stateOfCapacity', name: 'State of capacity', type: 'number', unit: '%', role: 'value.capacity', desc: 'SOC'},\n register: {reg: 37760, type: ModbusDatatype.uint16, length: 1, gain: 10}\n },\n {\n interval: UpdateIntervalID.HIGH,\n state: {id: 'storage.chargeDischargePower', name: 'Charge/Discharge power', desc: '(>0 charging, <0 discharging)', type: 'number', unit: 'W', role: 'value.power'},\n register: {reg: 37765, type: ModbusDatatype.int32, length: 2},\n postUpdateHook: async (adapter, value): Promise> => {\n return Promise.resolve(new Map([\n ['storage.chargePower', {id: 'storage.chargePower', value: Math.max(0, value)}],\n ['storage.dischargePower', {id: 'storage.dischargePower', value: Math.abs(Math.min(0, value))}]\n ]));\n }\n },\n // \n // TODO: add Charge discharge capacity per day\n // \n\n // grid (meter)\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.meterStatus', name: 'Meter status', type: 'string', role: 'value.status'},\n register: {reg: 37100, type: ModbusDatatype.uint16, length: 1},\n mapper: value => Promise.resolve(MeterStatus[value])\n },\n {\n interval: UpdateIntervalID.HIGH,\n state: {id: 'grid.activePower', name: 'Active power', type: 'number', role: 'value.power', unit: 'W', desc: '(>0 feed-in to the power grid, <0: supply from the power grid)'},\n register: {reg: 37113, type: ModbusDatatype.int32, length: 2},\n postUpdateHook: async (adapter, value): Promise> => {\n return Promise.resolve(new Map([\n ['grid.feedIn', {id: 'grid.feedIn', value: Math.max(0, value)}],\n ['grid.supplyFrom', {id: 'grid.supplyFrom', value: Math.abs(Math.min(0, value))}]\n ]));\n }\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.reactivePower', name: 'Reactive power', type: 'number', role: 'value.power', unit: 'W'},\n register: {reg: 37115, type: ModbusDatatype.int32, length: 2},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.powerFactor', name: 'Power factor', type: 'number', role: 'value.power.factor', unit: ''},\n register: {reg: 37117, type: ModbusDatatype.int16, length: 1, gain: 1000},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.gridFrequency', name: 'Grid frequency', type: 'number', role: 'value.frequency', unit: 'Hz'},\n register: {reg: 37118, type: ModbusDatatype.int16, length: 1, gain: 100},\n },\n\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.phase1Voltage', name: 'Phase 1 voltage', type: 'number', role: 'value.voltage', unit: 'V', desc: 'also L1, or R voltage'},\n register: {reg: 37101, type: ModbusDatatype.int32, length: 2, gain: 10},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.phase2Voltage', name: 'Phase 2 voltage', type: 'number', role: 'value.voltage', unit: 'V', desc: 'also L2, or S voltage'},\n register: {reg: 37103, type: ModbusDatatype.int32, length: 2, gain: 10},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.phase3Voltage', name: 'Phase 3 voltage', type: 'number', role: 'value.voltage', unit: 'V', desc: 'also L3, or T voltage'},\n register: {reg: 37105, type: ModbusDatatype.int32, length: 2, gain: 10},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.phase1Current', name: 'Phase 1 current', type: 'number', role: 'value.current', unit: 'A'},\n register: {reg: 37107, type: ModbusDatatype.int32, length: 2, gain: 100},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.phase2Current', name: 'Phase 2 current', type: 'number', role: 'value.current', unit: 'A'},\n register: {reg: 37109, type: ModbusDatatype.int32, length: 2, gain: 100},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.phase3Current', name: 'Phase 3 current', type: 'number', role: 'value.current', unit: 'A'},\n register: {reg: 37111, type: ModbusDatatype.int32, length: 2, gain: 100},\n },\n\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.positiveActivePower', name: 'Positive active power', type: 'number', role: 'value.power', unit: 'kWh', desc: 'Electricity fed by the inverter to the power grid.'},\n register: {reg: 37119, type: ModbusDatatype.int32, length: 2, gain: 100},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.reverseActivePower', name: 'Reverse active power', type: 'number', role: 'value.power', unit: 'kWh', desc: 'Power supplied from the power grid.'},\n register: {reg: 37121, type: ModbusDatatype.int32, length: 2, gain: 100},\n },\n ];\n this.postFetchUpdateHooks = [\n {\n interval: UpdateIntervalID.HIGH,\n hookFn: (adapter: AdapterInstance, toUpdate: Map) => {\n const powerGridActive = toUpdate.get('grid.activePower');\n const powerActiveInverter = toUpdate.get('activePower');\n const totalPowerUse = powerActiveInverter?.value - powerGridActive?.value;\n adapter.log.silly(`PostFetchHook: calculate totalPowerUse ${powerGridActive?.value}, ${powerActiveInverter?.value}, ${totalPowerUse}`);\n const result = new Map();\n if (totalPowerUse) {\n result.set('totalPowerUse', {id: 'totalPowerUse', value: totalPowerUse})\n }\n return result;\n }\n }\n ];\n }\n\n public async createStates(adapter: AdapterInstance): Promise {\n for (const field of this.dataFields) {\n const state = field.state\n await adapter.setObjectAsync(state.id, {\n type: 'state',\n common: {\n name: state.name,\n type: state.type,\n role: state.role,\n unit: state.unit,\n desc: state.desc,\n read: true,\n write: false\n },\n native: {},\n });\n }\n }\n\n\n public async updateStates(adapter: AdapterInstance, device: ModbusDevice, interval?: UpdateIntervalID): Promise {\n let toUpdate = new Map;\n for (const field of this.dataFields) {\n if (field.interval != interval) {\n continue;\n }\n try {\n let value = await device.readModbusHR(field.register.reg, field.register.type, field.register.length);\n\n if (field.register.gain) {\n value /= field.register.gain;\n }\n if (field.mapper) {\n value = await field.mapper(value);\n }\n toUpdate.set(field.state.id, {id: field.state.id, value: value})\n if (field.postUpdateHook) {\n const hookUpdates = await field.postUpdateHook(adapter, value);\n for (const entry of hookUpdates.entries()) {\n toUpdate.set(entry[0], entry[1]);\n }\n }\n } catch (e) {\n adapter.log.warn(`Error while reading from ${device.getIpAddress()}: [${field.register.reg}|${field.register.length}] '' with : ${e}`);\n break;\n }\n }\n\n toUpdate = this.runPostFetchHooks(adapter, toUpdate, interval);\n\n return this.updateAdapterStates(adapter, toUpdate);\n }\n\n public runPostFetchHooks(adapter: AdapterInstance, toUpdate: Map, interval: UpdateIntervalID | undefined): Map {\n for (const postFetchHook of this.postFetchUpdateHooks) {\n if (postFetchHook.interval == interval) {\n const hookUpdates = postFetchHook.hookFn(adapter, toUpdate);\n for (const entry of hookUpdates.entries()) {\n toUpdate.set(entry[0], entry[1]);\n }\n }\n }\n return toUpdate;\n }\n\n public async updateAdapterStates(adapter: AdapterInstance, toUpdate: Map): Promise {\n for(const updateEntry of toUpdate.values()) {\n if (updateEntry.value !== null) {\n await adapter.setStateAsync(updateEntry.id, {val: updateEntry.value, ack: true});\n if (updateEntry.postUpdateHook) {\n await updateEntry.postUpdateHook(adapter, updateEntry.value);\n }\n adapter.log.silly(`Fetched value ${updateEntry.id}, val=[${updateEntry.value}]`);\n }\n }\n return Promise.resolve(toUpdate.size);\n }\n}\n"], - "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAA6B;AAC7B,yBAAyD;AAsClD,IAAK,mBAAL,kBAAKA,sBAAL;AACH,EAAAA,oCAAA;AACA,EAAAA,oCAAA;AAFQ,SAAAA;AAAA,GAAA;AAcL,MAAM,eAAe;AAAA,EAOxB,YAAY,iBAAkC;AAC1C,SAAK,kBAAkB;AACvB,SAAK,aAAa;AAAA,MAEd;AAAA,QACI,OAAO,EAAC,IAAI,cAAc,MAAM,SAAS,MAAM,UAAU,MAAM,QAAO;AAAA,QACtE,UAAU,EAAC,KAAK,KAAO,MAAM,mCAAe,QAAQ,QAAQ,GAAE;AAAA,MAClE;AAAA,MACA;AAAA,QACI,OAAO,EAAC,IAAI,gBAAgB,MAAM,YAAY,MAAM,UAAU,MAAM,QAAO;AAAA,QAC3E,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,QAAQ,QAAQ,EAAC;AAAA,MACjE;AAAA,MACA;AAAA,QACI,OAAO,EAAC,IAAI,qBAAqB,MAAM,iBAAiB,MAAM,UAAU,MAAM,QAAO;AAAA,QACrF,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,QAAQ,QAAQ,GAAE;AAAA,MAClE;AAAA,MACA;AAAA,QACI,OAAO,EAAC,IAAI,mBAAmB,MAAM,eAAe,MAAM,UAAU,MAAM,KAAK,MAAM,QAAO;AAAA,QAC5F,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,EAAC;AAAA,MAChE;AAAA,MACA;AAAA,QACI,OAAO,EAAC,IAAI,0BAA0B,MAAM,0BAA0B,MAAM,UAAU,MAAM,IAAI,MAAM,QAAO;AAAA,QAC7G,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,QAAQ,QAAQ,GAAG,MAAM,EAAC;AAAA,MAC1E;AAAA,MAGA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,eAAe,MAAM,gBAAgB,MAAM,UAAU,MAAM,KAAK,MAAM,eAAe,MAAM,uBAAsB;AAAA,QAC7H,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,EAAC;AAAA,MAChE;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,cAAc,MAAM,eAAe,MAAM,UAAU,MAAM,KAAK,MAAM,eAAe,MAAM,gBAAe;AAAA,QACpH,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,EAAC;AAAA,MAChE;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,4BAA4B,MAAM,oCAAoC,MAAM,UAAU,MAAM,KAAK,MAAM,kBAAiB;AAAA,QACpI,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,EAAC;AAAA,MAChE;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,cAAc,MAAM,cAAc,MAAM,UAAU,MAAM,KAAK,MAAM,mBAAkB;AAAA,QACjG,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,QAAQ,QAAQ,GAAG,MAAM,IAAG;AAAA,MAC5E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,uBAAuB,MAAM,wBAAwB,MAAM,UAAU,MAAM,SAAM,MAAM,aAAY;AAAA,QAC/G,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,GAAE;AAAA,MAC1E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,gBAAgB,MAAM,iBAAiB,MAAM,UAAU,MAAM,IAAI,MAAM,eAAc;AAAA,QACjG,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,QAAQ,QAAQ,EAAC;AAAA,QAC7D,QAAQ,WAAS,QAAQ,QAAQ,kCAAe,MAAM;AAAA,MAC1D;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,0BAA0B,MAAM,4BAA4B,MAAM,UAAU,MAAM,OAAO,MAAM,QAAO;AAAA,QAClH,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,QAAQ,QAAQ,GAAG,MAAM,IAAG;AAAA,MAC5E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,oBAAoB,MAAM,sBAAsB,MAAM,UAAU,MAAM,OAAO,MAAM,QAAO;AAAA,QACtG,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,QAAQ,QAAQ,GAAG,MAAM,IAAG;AAAA,MAC5E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,cAAc,MAAM,eAAe,MAAM,UAAU,MAAM,KAAK,MAAM,gBAAe;AAAA,QAC/F,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,GAAE;AAAA,MAC1E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,cAAc,MAAM,eAAe,MAAM,UAAU,MAAM,KAAK,MAAM,gBAAe;AAAA,QAC/F,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,IAAG;AAAA,MAC3E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,cAAc,MAAM,eAAe,MAAM,UAAU,MAAM,KAAK,MAAM,gBAAe;AAAA,QAC/F,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,GAAE;AAAA,MAC1E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,cAAc,MAAM,eAAe,MAAM,UAAU,MAAM,KAAK,MAAM,gBAAe;AAAA,QAC/F,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,IAAG;AAAA,MAC3E;AAAA,MAGA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,wBAAwB,MAAM,iBAAiB,MAAM,UAAU,MAAM,QAAO;AAAA,QACxF,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,QAAQ,QAAQ,EAAC;AAAA,QAC7D,QAAQ,WAAS,QAAQ,QAAQ,iCAAc,MAAM;AAAA,MACzD;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,2BAA2B,MAAM,qBAAqB,MAAM,UAAU,MAAM,KAAK,MAAM,kBAAkB,MAAM,MAAK;AAAA,QAChI,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,QAAQ,QAAQ,GAAG,MAAM,GAAE;AAAA,MAC3E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,gCAAgC,MAAM,0BAA0B,MAAM,iCAAiC,MAAM,UAAU,MAAM,KAAK,MAAM,cAAa;AAAA,QACjK,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,EAAC;AAAA,QAC5D,gBAAgB,OAAO,SAAS,UAA+C;AAC3E,iBAAO,QAAQ,QAAQ,oBAAI,IAA2B;AAAA,YAClD,CAAC,uBAAuB,EAAC,IAAI,uBAAuB,OAAO,KAAK,IAAI,GAAG,KAAK,EAAC,CAAC;AAAA,YAC9E,CAAC,0BAA0B,EAAC,IAAI,0BAA0B,OAAO,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,CAAC,EAAC,CAAC;AAAA,UAClG,CAAC,CAAC;AAAA,QACN;AAAA,MACJ;AAAA,MAMA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,oBAAoB,MAAM,gBAAgB,MAAM,UAAU,MAAM,eAAc;AAAA,QAC1F,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,QAAQ,QAAQ,EAAC;AAAA,QAC7D,QAAQ,WAAS,QAAQ,QAAQ,+BAAY,MAAM;AAAA,MACvD;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,oBAAoB,MAAM,gBAAgB,MAAM,UAAU,MAAM,eAAe,MAAM,KAAK,MAAM,iEAAgE;AAAA,QAC5K,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,EAAC;AAAA,QAC5D,gBAAgB,OAAO,SAAS,UAA+C;AAC3E,iBAAO,QAAQ,QAAQ,oBAAI,IAA2B;AAAA,YAClD,CAAC,eAAe,EAAC,IAAI,eAAe,OAAO,KAAK,IAAI,GAAG,KAAK,EAAC,CAAC;AAAA,YAC9D,CAAC,mBAAmB,EAAC,IAAI,mBAAmB,OAAO,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,CAAC,EAAC,CAAC;AAAA,UACpF,CAAC,CAAC;AAAA,QACN;AAAA,MACJ;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,sBAAsB,MAAM,kBAAkB,MAAM,UAAU,MAAM,eAAe,MAAM,IAAG;AAAA,QACxG,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,EAAC;AAAA,MAChE;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,oBAAoB,MAAM,gBAAgB,MAAM,UAAU,MAAM,sBAAsB,MAAM,GAAE;AAAA,QAC1G,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,IAAI;AAAA,MAC5E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,sBAAsB,MAAM,kBAAkB,MAAM,UAAU,MAAM,mBAAmB,MAAM,KAAI;AAAA,QAC7G,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,IAAG;AAAA,MAC3E;AAAA,MAEA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,sBAAsB,MAAM,mBAAmB,MAAM,UAAU,MAAM,iBAAiB,MAAM,KAAK,MAAM,wBAAuB;AAAA,QAC1I,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,GAAE;AAAA,MAC1E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,sBAAsB,MAAM,mBAAmB,MAAM,UAAU,MAAM,iBAAiB,MAAM,KAAK,MAAM,wBAAuB;AAAA,QAC1I,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,GAAE;AAAA,MAC1E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,sBAAsB,MAAM,mBAAmB,MAAM,UAAU,MAAM,iBAAiB,MAAM,KAAK,MAAM,wBAAuB;AAAA,QAC1I,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,GAAE;AAAA,MAC1E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,sBAAsB,MAAM,mBAAmB,MAAM,UAAU,MAAM,iBAAiB,MAAM,IAAG;AAAA,QAC3G,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,IAAG;AAAA,MAC3E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,sBAAsB,MAAM,mBAAmB,MAAM,UAAU,MAAM,iBAAiB,MAAM,IAAG;AAAA,QAC3G,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,IAAG;AAAA,MAC3E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,sBAAsB,MAAM,mBAAmB,MAAM,UAAU,MAAM,iBAAiB,MAAM,IAAG;AAAA,QAC3G,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,IAAG;AAAA,MAC3E;AAAA,MAEA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,4BAA4B,MAAM,yBAAyB,MAAM,UAAU,MAAM,eAAe,MAAM,OAAO,MAAM,qDAAoD;AAAA,QACnL,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,IAAG;AAAA,MAC3E;AAAA,MACA;AAAA,QACI,UAAU;AAAA,QACV,OAAO,EAAC,IAAI,2BAA2B,MAAM,wBAAwB,MAAM,UAAU,MAAM,eAAe,MAAM,OAAO,MAAM,sCAAqC;AAAA,QAClK,UAAU,EAAC,KAAK,OAAO,MAAM,mCAAe,OAAO,QAAQ,GAAG,MAAM,IAAG;AAAA,MAC3E;AAAA,IACJ;AACA,SAAK,uBAAuB;AAAA,MACxB;AAAA,QACI,UAAU;AAAA,QACV,QAAQ,CAAC,SAA0B,aAAyC;AACxE,gBAAM,kBAAkB,SAAS,IAAI,kBAAkB;AACvD,gBAAM,sBAAsB,SAAS,IAAI,aAAa;AACtD,gBAAM,iBAAgB,2DAAqB,UAAQ,mDAAiB;AACpE,kBAAQ,IAAI,MAAM,0CAA0C,mDAAiB,UAAU,2DAAqB,UAAU,eAAe;AACrI,gBAAM,SAAS,oBAAI,IAAI;AACvB,cAAI,eAAe;AACf,mBAAO,IAAI,iBAAiB,EAAC,IAAI,iBAAiB,OAAO,cAAa,CAAC;AAAA,UAC3E;AACA,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAa,aAAa,SAAyC;AAC/D,eAAW,SAAS,KAAK,YAAY;AACjC,YAAM,QAAQ,MAAM;AACpB,YAAM,QAAQ,eAAe,MAAM,IAAI;AAAA,QACnC,MAAM;AAAA,QACN,QAAQ;AAAA,UACJ,MAAM,MAAM;AAAA,UACZ,MAAM,MAAM;AAAA,UACZ,MAAM,MAAM;AAAA,UACZ,MAAM,MAAM;AAAA,UACZ,MAAM,MAAM;AAAA,UACZ,MAAM;AAAA,UACN,OAAO;AAAA,QACX;AAAA,QACA,QAAQ,CAAC;AAAA,MACb,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAGA,MAAa,aAAa,SAA0B,QAAsB,UAA8C;AACpH,QAAI,WAAW,oBAAI;AACnB,eAAW,SAAS,KAAK,YAAY;AACjC,UAAI,MAAM,YAAY,UAAU;AAC5B;AAAA,MACJ;AACA,UAAI;AACA,YAAI,QAAQ,MAAM,OAAO,aAAa,MAAM,SAAS,KAAK,MAAM,SAAS,MAAM,MAAM,SAAS,MAAM;AAEpG,YAAI,MAAM,SAAS,MAAM;AACrB,mBAAS,MAAM,SAAS;AAAA,QAC5B;AACA,YAAI,MAAM,QAAQ;AACd,kBAAQ,MAAM,MAAM,OAAO,KAAK;AAAA,QACpC;AACA,iBAAS,IAAI,MAAM,MAAM,IAAI,EAAC,IAAI,MAAM,MAAM,IAAI,MAAY,CAAC;AAC/D,YAAI,MAAM,gBAAgB;AACtB,gBAAM,cAAc,MAAM,MAAM,eAAe,SAAS,KAAK;AAC7D,qBAAW,SAAS,YAAY,QAAQ,GAAG;AACvC,qBAAS,IAAI,MAAM,IAAI,MAAM,EAAE;AAAA,UACnC;AAAA,QACJ;AAAA,MACJ,SAAS,GAAP;AACE,gBAAQ,IAAI,KAAK,4BAA4B,OAAO,aAAa,OAAO,MAAM,SAAS,OAAO,MAAM,SAAS,qBAAqB,GAAG;AACrI;AAAA,MACJ;AAAA,IACJ;AAEA,eAAW,KAAK,kBAAkB,SAAS,UAAU,QAAQ;AAE7D,WAAO,KAAK,oBAAoB,SAAS,QAAQ;AAAA,EACrD;AAAA,EAEO,kBAAkB,SAA0B,UAAsC,UAAoE;AACzJ,eAAW,iBAAiB,KAAK,sBAAsB;AACnD,UAAI,cAAc,YAAY,UAAU;AACpC,cAAM,cAAc,cAAc,OAAO,SAAS,QAAQ;AAC1D,mBAAW,SAAS,YAAY,QAAQ,GAAG;AACvC,mBAAS,IAAI,MAAM,IAAI,MAAM,EAAE;AAAA,QACnC;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAa,oBAAoB,SAA0B,UAAuD;AAC9G,eAAU,eAAe,SAAS,OAAO,GAAG;AACxC,UAAI,YAAY,UAAU,MAAM;AAC5B,cAAM,QAAQ,cAAc,YAAY,IAAI,EAAC,KAAK,YAAY,OAAO,KAAK,KAAI,CAAC;AAC/E,YAAI,YAAY,gBAAgB;AAC5B,gBAAM,YAAY,eAAe,SAAS,YAAY,KAAK;AAAA,QAC/D;AACA,gBAAQ,IAAI,MAAM,iBAAiB,YAAY,YAAY,YAAY,QAAQ;AAAA,MACnF;AAAA,IACJ;AACA,WAAO,QAAQ,QAAQ,SAAS,IAAI;AAAA,EACxC;AACJ;", + "sourcesContent": ["import {ModbusDatatype} from './modbus/modbus_types';\nimport {InverterStatus, MeterStatus, StorageStatus} from './state_enums';\nimport {AdapterInstance} from '@iobroker/adapter-core';\nimport {ModbusDevice} from './modbus/modbus_device';\n\ntype MapperFn = (value: any) => Promise\ntype PostUpdateHookFn = (adapter: AdapterInstance, value: any) => Promise>\ntype PostFetchUpdateHookFn = (adapter: AdapterInstance, toUpdate: Map) => Map\n\ninterface DataField {\n interval?: UpdateIntervalID;\n state: State;\n register: ModbusRegister;\n mapper?: MapperFn;\n postUpdateHook?: PostUpdateHookFn;\n}\n\ninterface StateToUpdate {\n id: string;\n value: any;\n postUpdateHook?: PostUpdateHookFn;\n}\n\ninterface State {\n id: string;\n name: string;\n type: ioBroker.CommonType;\n role: string;\n unit?: string;\n desc?: string;\n}\n\ninterface ModbusRegister {\n reg: number;\n type: ModbusDatatype;\n length: number;\n gain?: number;\n}\n\nexport enum UpdateIntervalID {\n HIGH,\n LOW\n}\n\ninterface UpdateIntervals {\n intervals: number[];\n}\n\ninterface PostFetchUpdateHook {\n interval: UpdateIntervalID;\n hookFn: PostFetchUpdateHookFn;\n}\n\nexport class InverterStates {\n\n private updateIntervals: UpdateIntervals\n private readonly dataFields: DataField[];\n private readonly postFetchUpdateHooks: PostFetchUpdateHook[];\n // private changingFields: DataField[];\n\n constructor(updateIntervals: UpdateIntervals) {\n this.updateIntervals = updateIntervals;\n this.dataFields = [\n // initial fields (no interval set) - no repetitive update\n {\n state: {id: 'info.model', name: 'Model', type: 'string', role: 'state'},\n register: {reg: 30000, type: ModbusDatatype.string, length: 15}\n },\n {\n state: {id: 'info.modelID', name: 'Model ID', type: 'number', role: 'state'},\n register: {reg: 30070, type: ModbusDatatype.uint16, length: 1}\n },\n {\n state: {id: 'info.serialNumber', name: 'Serial number', type: 'string', role: 'state'},\n register: {reg: 30015, type: ModbusDatatype.string, length: 10}\n },\n {\n state: {id: 'info.ratedPower', name: 'Rated power', type: 'number', unit: 'W', role: 'state'},\n register: {reg: 30073, type: ModbusDatatype.int32, length: 2}\n },\n {\n state: {id: 'info.numberMPPTrackers', name: 'Number of MPP trackers', type: 'number', unit: '', role: 'state'},\n register: {reg: 30072, type: ModbusDatatype.uint16, length: 1, gain: 1}\n },\n\n // ####################################################################################################################################\n // inverter\n {\n interval: UpdateIntervalID.HIGH,\n state: {id: 'activePower', name: 'Active power', type: 'number', unit: 'W', role: 'value.power', desc: 'Power currently used'},\n register: {reg: 32080, type: ModbusDatatype.int32, length: 2}\n },\n {\n interval: UpdateIntervalID.HIGH,\n state: {id: 'inputPower', name: 'Input power', type: 'number', unit: 'W', role: 'value.power', desc: 'Power from PV'},\n register: {reg: 32064, type: ModbusDatatype.int32, length: 2}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'peakActivePowerCurrenDay', name: 'Peak active power of current day', type: 'number', unit: 'W', role: 'value.power.max'},\n register: {reg: 32078, type: ModbusDatatype.int32, length: 2}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'efficiency', name: 'Efficiency', type: 'number', unit: '%', role: 'value.efficiency'},\n register: {reg: 32086, type: ModbusDatatype.uint16, length: 1, gain: 100}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'internalTemperature', name: 'Internal temperature', type: 'number', unit: '\u00B0C', role: 'value.temp'},\n register: {reg: 32087, type: ModbusDatatype.int16, length: 1, gain: 10}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'deviceStatus', name: 'Device status', type: 'string', unit: '', role: 'value.status'},\n register: {reg: 32089, type: ModbusDatatype.uint16, length: 1},\n mapper: value => Promise.resolve(InverterStatus[value])\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'accumulatedEnergyYield', name: 'Accumulated energy yield', type: 'number', unit: 'kWh', role: 'value'},\n register: {reg: 32106, type: ModbusDatatype.uint32, length: 2, gain: 100},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'dailyEnergyYield', name: 'Daily energy yield', type: 'number', unit: 'kWh', role: 'value'},\n register: {reg: 32114, type: ModbusDatatype.uint32, length: 2, gain: 100}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'PV1Voltage', name: 'PV1 voltage', type: 'number', unit: 'V', role: 'value.voltage'},\n register: {reg: 32016, type: ModbusDatatype.int16, length: 1, gain: 10}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'PV1Current', name: 'PV1 current', type: 'number', unit: 'A', role: 'value.current'},\n register: {reg: 32017, type: ModbusDatatype.int16, length: 1, gain: 100}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'PV2Voltage', name: 'PV2 voltage', type: 'number', unit: 'V', role: 'value.voltage'},\n register: {reg: 32018, type: ModbusDatatype.int16, length: 1, gain: 10}\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'PV2Current', name: 'PV2 current', type: 'number', unit: 'A', role: 'value.current'},\n register: {reg: 32019, type: ModbusDatatype.int16, length: 1, gain: 100}\n },\n\n // ####################################################################################################################################\n // storage\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'storage.runningState', name: 'Running state', type: 'string', role: 'value'},\n register: {reg: 37762, type: ModbusDatatype.uint16, length: 1},\n mapper: value => Promise.resolve(StorageStatus[value])\n },\n {\n interval: UpdateIntervalID.HIGH,\n state: {id: 'storage.stateOfCapacity', name: 'State of capacity', type: 'number', unit: '%', role: 'value.capacity', desc: 'SOC'},\n register: {reg: 37760, type: ModbusDatatype.uint16, length: 1, gain: 10}\n },\n {\n interval: UpdateIntervalID.HIGH,\n state: {id: 'storage.chargeDischargePower', name: 'Charge/Discharge power', desc: '(>0 charging, <0 discharging)', type: 'number', unit: 'W', role: 'value.power'},\n register: {reg: 37765, type: ModbusDatatype.int32, length: 2},\n postUpdateHook: async (adapter, value): Promise> => {\n return Promise.resolve(new Map([\n ['storage.chargePower', {id: 'storage.chargePower', value: Math.max(0, value)}],\n ['storage.dischargePower', {id: 'storage.dischargePower', value: Math.abs(Math.min(0, value))}]\n ]));\n }\n },\n {\n interval: UpdateIntervalID.LOW,\n state: { id: 'storage.CurrentDayChargeCapacity', name: 'CurrentDayChargeCapacity', type: 'number', unit: 'kWh', role: 'value.power', desc: 'TBD' },\n register: { reg: 37015, type: ModbusDatatype.uint32, length: 2, gain: 100 }\n },\n {\n interval: UpdateIntervalID.LOW,\n state: { id: 'storage.CurrentDayDischargeCapacity', name: 'CurrentDayDischargeCapacity', type: 'number', unit: 'kWh', role: 'value.power', desc: 'TBD' },\n register: { reg: 37786, type: ModbusDatatype.uint32, length: 2, gain: 100 }\n },\n\n // ####################################################################################################################################\n // grid (meter)\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.meterStatus', name: 'Meter status', type: 'string', role: 'value.status'},\n register: {reg: 37100, type: ModbusDatatype.uint16, length: 1},\n mapper: value => Promise.resolve(MeterStatus[value])\n },\n {\n interval: UpdateIntervalID.HIGH,\n state: {id: 'grid.activePower', name: 'Active power', type: 'number', role: 'value.power', unit: 'W', desc: '(>0 feed-in to the power grid, <0: supply from the power grid)'},\n register: {reg: 37113, type: ModbusDatatype.int32, length: 2},\n postUpdateHook: async (adapter, value): Promise> => {\n return Promise.resolve(new Map([\n ['grid.feedIn', {id: 'grid.feedIn', value: Math.max(0, value)}],\n ['grid.supplyFrom', {id: 'grid.supplyFrom', value: Math.abs(Math.min(0, value))}]\n ]));\n }\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.reactivePower', name: 'Reactive power', type: 'number', role: 'value.power', unit: 'W'},\n register: {reg: 37115, type: ModbusDatatype.int32, length: 2},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.powerFactor', name: 'Power factor', type: 'number', role: 'value.power.factor', unit: ''},\n register: {reg: 37117, type: ModbusDatatype.int16, length: 1, gain: 1000},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.gridFrequency', name: 'Grid frequency', type: 'number', role: 'value.frequency', unit: 'Hz'},\n register: {reg: 37118, type: ModbusDatatype.int16, length: 1, gain: 100},\n },\n\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.phase1Voltage', name: 'Phase 1 voltage', type: 'number', role: 'value.voltage', unit: 'V', desc: 'also L1, or R voltage'},\n register: {reg: 37101, type: ModbusDatatype.int32, length: 2, gain: 10},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.phase2Voltage', name: 'Phase 2 voltage', type: 'number', role: 'value.voltage', unit: 'V', desc: 'also L2, or S voltage'},\n register: {reg: 37103, type: ModbusDatatype.int32, length: 2, gain: 10},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.phase3Voltage', name: 'Phase 3 voltage', type: 'number', role: 'value.voltage', unit: 'V', desc: 'also L3, or T voltage'},\n register: {reg: 37105, type: ModbusDatatype.int32, length: 2, gain: 10},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.phase1Current', name: 'Phase 1 current', type: 'number', role: 'value.current', unit: 'A'},\n register: {reg: 37107, type: ModbusDatatype.int32, length: 2, gain: 100},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.phase2Current', name: 'Phase 2 current', type: 'number', role: 'value.current', unit: 'A'},\n register: {reg: 37109, type: ModbusDatatype.int32, length: 2, gain: 100},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.phase3Current', name: 'Phase 3 current', type: 'number', role: 'value.current', unit: 'A'},\n register: {reg: 37111, type: ModbusDatatype.int32, length: 2, gain: 100},\n },\n\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.positiveActivePower', name: 'Positive active power', type: 'number', role: 'value.power', unit: 'kWh', desc: 'Electricity fed by the inverter to the power grid.'},\n register: {reg: 37119, type: ModbusDatatype.int32, length: 2, gain: 100},\n },\n {\n interval: UpdateIntervalID.LOW,\n state: {id: 'grid.reverseActivePower', name: 'Reverse active power', type: 'number', role: 'value.power', unit: 'kWh', desc: 'Power supplied from the power grid.'},\n register: {reg: 37121, type: ModbusDatatype.int32, length: 2, gain: 100},\n },\n ];\n this.postFetchUpdateHooks = [\n {\n interval: UpdateIntervalID.HIGH,\n hookFn: (adapter: AdapterInstance, toUpdate: Map) => {\n const powerGridActive = toUpdate.get('grid.activePower');\n const powerActiveInverter = toUpdate.get('activePower');\n const totalPowerUse = powerActiveInverter?.value - powerGridActive?.value;\n adapter.log.silly(`PostFetchHook: calculate totalPowerUse ${powerGridActive?.value}, ${powerActiveInverter?.value}, ${totalPowerUse}`);\n const result = new Map();\n if (totalPowerUse) {\n result.set('totalPowerUse', {id: 'totalPowerUse', value: totalPowerUse})\n }\n return result;\n }\n }\n ];\n }\n\n public async createStates(adapter: AdapterInstance): Promise {\n for (const field of this.dataFields) {\n const state = field.state\n await adapter.setObjectAsync(state.id, {\n type: 'state',\n common: {\n name: state.name,\n type: state.type,\n role: state.role,\n unit: state.unit,\n desc: state.desc,\n read: true,\n write: false\n },\n native: {},\n });\n }\n }\n\n\n public async updateStates(adapter: AdapterInstance, device: ModbusDevice, interval?: UpdateIntervalID): Promise {\n let toUpdate = new Map;\n for (const field of this.dataFields) {\n if (field.interval != interval) {\n continue;\n }\n try {\n let value = await device.readModbusHR(field.register.reg, field.register.type, field.register.length);\n\n if (field.register.gain) {\n value /= field.register.gain;\n }\n if (field.mapper) {\n value = await field.mapper(value);\n }\n toUpdate.set(field.state.id, {id: field.state.id, value: value})\n if (field.postUpdateHook) {\n const hookUpdates = await field.postUpdateHook(adapter, value);\n for (const entry of hookUpdates.entries()) {\n toUpdate.set(entry[0], entry[1]);\n }\n }\n } catch (e) {\n adapter.log.warn(`Error while reading from ${device.getIpAddress()}: [${field.register.reg}|${field.register.length}] '' with : ${e}`);\n break;\n }\n }\n\n toUpdate = this.runPostFetchHooks(adapter, toUpdate, interval);\n\n return this.updateAdapterStates(adapter, toUpdate);\n }\n\n public runPostFetchHooks(adapter: AdapterInstance, toUpdate: Map, interval: UpdateIntervalID | undefined): Map {\n for (const postFetchHook of this.postFetchUpdateHooks) {\n if (postFetchHook.interval == interval) {\n const hookUpdates = postFetchHook.hookFn(adapter, toUpdate);\n for (const entry of hookUpdates.entries()) {\n toUpdate.set(entry[0], entry[1]);\n }\n }\n }\n return toUpdate;\n }\n\n public async updateAdapterStates(adapter: AdapterInstance, toUpdate: Map): Promise {\n for(const updateEntry of toUpdate.values()) {\n if (updateEntry.value !== null) {\n await adapter.setStateAsync(updateEntry.id, {val: updateEntry.value, ack: true});\n if (updateEntry.postUpdateHook) {\n await updateEntry.postUpdateHook(adapter, updateEntry.value);\n }\n adapter.log.silly(`Fetched value ${updateEntry.id}, val=[${updateEntry.value}]`);\n }\n }\n return Promise.resolve(toUpdate.size);\n }\n}\n"], + "mappings": "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", "names": ["UpdateIntervalID"] }