@enyo-energy/energy-app-sdk 0.0.34
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 +216 -0
- package/dist/cjs/connect-ems-api.cjs +2 -0
- package/dist/cjs/connect-ems-api.d.cts +30 -0
- package/dist/cjs/connect-ems-permission.enum.cjs +7 -0
- package/dist/cjs/connect-ems-permission.enum.d.cts +3 -0
- package/dist/cjs/connect-ems-permission.type.cjs +2 -0
- package/dist/cjs/connect-ems-permission.type.d.cts +1 -0
- package/dist/cjs/connect-package-definition.cjs +14 -0
- package/dist/cjs/connect-package-definition.d.cts +57 -0
- package/dist/cjs/energy-app-appliance-type.enum.cjs +14 -0
- package/dist/cjs/energy-app-appliance-type.enum.d.cts +10 -0
- package/dist/cjs/energy-app-package-configuration.cjs +2 -0
- package/dist/cjs/energy-app-package-configuration.d.cts +30 -0
- package/dist/cjs/energy-app-package-definition.cjs +30 -0
- package/dist/cjs/energy-app-package-definition.d.cts +123 -0
- package/dist/cjs/energy-app-permission.type.cjs +21 -0
- package/dist/cjs/energy-app-permission.type.d.cts +18 -0
- package/dist/cjs/enyo-energy-app-sdk.cjs +12 -0
- package/dist/cjs/enyo-energy-app-sdk.d.cts +67 -0
- package/dist/cjs/hems-one-energy-app-sdk.cjs +12 -0
- package/dist/cjs/hems-one-energy-app-sdk.d.cts +64 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusBattery.cjs +388 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusBattery.d.cts +59 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusConnectionHealth.cjs +37 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusConnectionHealth.d.cts +15 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusDataTypeConverter.cjs +130 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusDataTypeConverter.d.cts +41 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusFaultTolerantReader.cjs +49 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusFaultTolerantReader.d.cts +10 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusInverter.cjs +348 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusInverter.d.cts +56 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusMeter.cjs +199 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusMeter.d.cts +26 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusRegisterMapper.cjs +98 -0
- package/dist/cjs/implementations/modbus/EnergyAppModbusRegisterMapper.d.cts +13 -0
- package/dist/cjs/implementations/modbus/interfaces.cjs +29 -0
- package/dist/cjs/implementations/modbus/interfaces.d.cts +202 -0
- package/dist/cjs/implementations/ocpp/ocpp-common.cjs +337 -0
- package/dist/cjs/implementations/ocpp/ocpp-common.d.cts +75 -0
- package/dist/cjs/implementations/ocpp/ocpp16.cjs +51 -0
- package/dist/cjs/implementations/ocpp/ocpp16.d.cts +137 -0
- package/dist/cjs/implementations/ocpp/ocpp201.cjs +84 -0
- package/dist/cjs/implementations/ocpp/ocpp201.d.cts +215 -0
- package/dist/cjs/index.cjs +117 -0
- package/dist/cjs/index.d.cts +56 -0
- package/dist/cjs/mockConnectEmsApi.cjs +167 -0
- package/dist/cjs/mockConnectEmsApi.d.cts +10 -0
- package/dist/cjs/packages/connect-appliance.cjs +2 -0
- package/dist/cjs/packages/connect-appliance.d.cts +24 -0
- package/dist/cjs/packages/connect-http-api.cjs +2 -0
- package/dist/cjs/packages/connect-http-api.d.cts +15 -0
- package/dist/cjs/packages/connect-interval.cjs +2 -0
- package/dist/cjs/packages/connect-interval.d.cts +15 -0
- package/dist/cjs/packages/connect-modbus.cjs +2 -0
- package/dist/cjs/packages/connect-modbus.d.cts +60 -0
- package/dist/cjs/packages/connect-network-devices.cjs +2 -0
- package/dist/cjs/packages/connect-network-devices.d.cts +40 -0
- package/dist/cjs/packages/connect-storage.cjs +2 -0
- package/dist/cjs/packages/connect-storage.d.cts +14 -0
- package/dist/cjs/packages/energy-app-appliance.cjs +2 -0
- package/dist/cjs/packages/energy-app-appliance.d.cts +17 -0
- package/dist/cjs/packages/energy-app-authentication.cjs +2 -0
- package/dist/cjs/packages/energy-app-authentication.d.cts +52 -0
- package/dist/cjs/packages/energy-app-charge.cjs +2 -0
- package/dist/cjs/packages/energy-app-charge.d.cts +13 -0
- package/dist/cjs/packages/energy-app-charging-card.cjs +2 -0
- package/dist/cjs/packages/energy-app-charging-card.d.cts +11 -0
- package/dist/cjs/packages/energy-app-data-bus.cjs +2 -0
- package/dist/cjs/packages/energy-app-data-bus.d.cts +12 -0
- package/dist/cjs/packages/energy-app-electricity-prices.cjs +2 -0
- package/dist/cjs/packages/energy-app-electricity-prices.d.cts +59 -0
- package/dist/cjs/packages/energy-app-interval.cjs +2 -0
- package/dist/cjs/packages/energy-app-interval.d.cts +15 -0
- package/dist/cjs/packages/energy-app-modbus.cjs +2 -0
- package/dist/cjs/packages/energy-app-modbus.d.cts +46 -0
- package/dist/cjs/packages/energy-app-network-device.cjs +2 -0
- package/dist/cjs/packages/energy-app-network-device.d.cts +25 -0
- package/dist/cjs/packages/energy-app-notification.cjs +2 -0
- package/dist/cjs/packages/energy-app-notification.d.cts +50 -0
- package/dist/cjs/packages/energy-app-ocpp.cjs +16 -0
- package/dist/cjs/packages/energy-app-ocpp.d.cts +52 -0
- package/dist/cjs/packages/energy-app-settings.cjs +2 -0
- package/dist/cjs/packages/energy-app-settings.d.cts +47 -0
- package/dist/cjs/packages/energy-app-storage.cjs +2 -0
- package/dist/cjs/packages/energy-app-storage.d.cts +14 -0
- package/dist/cjs/packages/energy-app-vehicle.cjs +2 -0
- package/dist/cjs/packages/energy-app-vehicle.d.cts +11 -0
- package/dist/cjs/permission-not-granted.cjs +18 -0
- package/dist/cjs/permission-not-granted.d.cts +8 -0
- package/dist/cjs/types/connect-appliance-type.enum.cjs +10 -0
- package/dist/cjs/types/connect-appliance-type.enum.d.cts +6 -0
- package/dist/cjs/types/energy-app-settings.cjs +2 -0
- package/dist/cjs/types/energy-app-settings.d.cts +74 -0
- package/dist/cjs/types/enyo-appliance.cjs +33 -0
- package/dist/cjs/types/enyo-appliance.d.cts +81 -0
- package/dist/cjs/types/enyo-authentication.cjs +9 -0
- package/dist/cjs/types/enyo-authentication.d.cts +69 -0
- package/dist/cjs/types/enyo-battery-appliance.cjs +2 -0
- package/dist/cjs/types/enyo-battery-appliance.d.cts +6 -0
- package/dist/cjs/types/enyo-charge.cjs +15 -0
- package/dist/cjs/types/enyo-charge.d.cts +82 -0
- package/dist/cjs/types/enyo-charger-appliance.cjs +41 -0
- package/dist/cjs/types/enyo-charger-appliance.d.cts +49 -0
- package/dist/cjs/types/enyo-charging-card.cjs +2 -0
- package/dist/cjs/types/enyo-charging-card.d.cts +11 -0
- package/dist/cjs/types/enyo-data-bus-value.cjs +78 -0
- package/dist/cjs/types/enyo-data-bus-value.d.cts +379 -0
- package/dist/cjs/types/enyo-electricity-prices.cjs +2 -0
- package/dist/cjs/types/enyo-electricity-prices.d.cts +63 -0
- package/dist/cjs/types/enyo-energy-tariff.cjs +2 -0
- package/dist/cjs/types/enyo-energy-tariff.d.cts +70 -0
- package/dist/cjs/types/enyo-heatpump-appliance.cjs +19 -0
- package/dist/cjs/types/enyo-heatpump-appliance.d.cts +34 -0
- package/dist/cjs/types/enyo-inverter-appliance.cjs +2 -0
- package/dist/cjs/types/enyo-inverter-appliance.d.cts +3 -0
- package/dist/cjs/types/enyo-meter-appliance.cjs +10 -0
- package/dist/cjs/types/enyo-meter-appliance.d.cts +10 -0
- package/dist/cjs/types/enyo-network-device.cjs +2 -0
- package/dist/cjs/types/enyo-network-device.d.cts +31 -0
- package/dist/cjs/types/enyo-notification.cjs +2 -0
- package/dist/cjs/types/enyo-notification.d.cts +48 -0
- package/dist/cjs/types/enyo-settings.cjs +2 -0
- package/dist/cjs/types/enyo-settings.d.cts +74 -0
- package/dist/cjs/types/enyo-source.enum.cjs +8 -0
- package/dist/cjs/types/enyo-source.enum.d.cts +4 -0
- package/dist/cjs/types/enyo-vehicle.cjs +2 -0
- package/dist/cjs/types/enyo-vehicle.d.cts +12 -0
- package/dist/cjs/types/enyo-websocket-connection.cjs +2 -0
- package/dist/cjs/types/enyo-websocket-connection.d.cts +8 -0
- package/dist/cjs/types/hems-one-appliance.cjs +33 -0
- package/dist/cjs/types/hems-one-appliance.d.cts +81 -0
- package/dist/cjs/types/hems-one-authentication.cjs +9 -0
- package/dist/cjs/types/hems-one-authentication.d.cts +69 -0
- package/dist/cjs/types/hems-one-battery-appliance.cjs +2 -0
- package/dist/cjs/types/hems-one-battery-appliance.d.cts +6 -0
- package/dist/cjs/types/hems-one-charge.cjs +15 -0
- package/dist/cjs/types/hems-one-charge.d.cts +82 -0
- package/dist/cjs/types/hems-one-charger-appliance.cjs +41 -0
- package/dist/cjs/types/hems-one-charger-appliance.d.cts +49 -0
- package/dist/cjs/types/hems-one-charging-card.cjs +2 -0
- package/dist/cjs/types/hems-one-charging-card.d.cts +11 -0
- package/dist/cjs/types/hems-one-data-bus-command.cjs +9 -0
- package/dist/cjs/types/hems-one-data-bus-command.d.cts +34 -0
- package/dist/cjs/types/hems-one-data-bus-value.cjs +78 -0
- package/dist/cjs/types/hems-one-data-bus-value.d.cts +379 -0
- package/dist/cjs/types/hems-one-electricity-prices.cjs +2 -0
- package/dist/cjs/types/hems-one-electricity-prices.d.cts +63 -0
- package/dist/cjs/types/hems-one-energy-tariff.cjs +2 -0
- package/dist/cjs/types/hems-one-energy-tariff.d.cts +70 -0
- package/dist/cjs/types/hems-one-heatpump-appliance.cjs +19 -0
- package/dist/cjs/types/hems-one-heatpump-appliance.d.cts +34 -0
- package/dist/cjs/types/hems-one-inverter-appliance.cjs +2 -0
- package/dist/cjs/types/hems-one-inverter-appliance.d.cts +3 -0
- package/dist/cjs/types/hems-one-meter-appliance.cjs +10 -0
- package/dist/cjs/types/hems-one-meter-appliance.d.cts +10 -0
- package/dist/cjs/types/hems-one-network-device.cjs +2 -0
- package/dist/cjs/types/hems-one-network-device.d.cts +31 -0
- package/dist/cjs/types/hems-one-source.enum.cjs +8 -0
- package/dist/cjs/types/hems-one-source.enum.d.cts +4 -0
- package/dist/cjs/types/hems-one-vehicle.cjs +2 -0
- package/dist/cjs/types/hems-one-vehicle.d.cts +12 -0
- package/dist/cjs/types/hems-one-websocket-connection.cjs +2 -0
- package/dist/cjs/types/hems-one-websocket-connection.d.cts +8 -0
- package/dist/cjs/version.cjs +19 -0
- package/dist/cjs/version.d.cts +13 -0
- package/dist/connect-ems-api.d.ts +30 -0
- package/dist/connect-ems-api.js +1 -0
- package/dist/connect-ems-permission.enum.d.ts +3 -0
- package/dist/connect-ems-permission.enum.js +4 -0
- package/dist/connect-ems-permission.type.d.ts +1 -0
- package/dist/connect-ems-permission.type.js +1 -0
- package/dist/connect-package-definition.d.ts +57 -0
- package/dist/connect-package-definition.js +10 -0
- package/dist/energy-app-appliance-type.enum.d.ts +10 -0
- package/dist/energy-app-appliance-type.enum.js +11 -0
- package/dist/energy-app-package-configuration.d.ts +30 -0
- package/dist/energy-app-package-configuration.js +1 -0
- package/dist/energy-app-package-definition.d.ts +123 -0
- package/dist/energy-app-package-definition.js +26 -0
- package/dist/energy-app-permission.type.d.ts +18 -0
- package/dist/energy-app-permission.type.js +18 -0
- package/dist/enyo-energy-app-sdk.d.ts +67 -0
- package/dist/enyo-energy-app-sdk.js +9 -0
- package/dist/hems-one-energy-app-sdk.d.ts +67 -0
- package/dist/hems-one-energy-app-sdk.js +9 -0
- package/dist/implementations/modbus/EnergyAppModbusBattery.d.ts +59 -0
- package/dist/implementations/modbus/EnergyAppModbusBattery.js +384 -0
- package/dist/implementations/modbus/EnergyAppModbusConnectionHealth.d.ts +15 -0
- package/dist/implementations/modbus/EnergyAppModbusConnectionHealth.js +33 -0
- package/dist/implementations/modbus/EnergyAppModbusDataTypeConverter.d.ts +41 -0
- package/dist/implementations/modbus/EnergyAppModbusDataTypeConverter.js +126 -0
- package/dist/implementations/modbus/EnergyAppModbusFaultTolerantReader.d.ts +10 -0
- package/dist/implementations/modbus/EnergyAppModbusFaultTolerantReader.js +45 -0
- package/dist/implementations/modbus/EnergyAppModbusInverter.d.ts +56 -0
- package/dist/implementations/modbus/EnergyAppModbusInverter.js +344 -0
- package/dist/implementations/modbus/EnergyAppModbusMeter.d.ts +26 -0
- package/dist/implementations/modbus/EnergyAppModbusMeter.js +195 -0
- package/dist/implementations/modbus/EnergyAppModbusRegisterMapper.d.ts +13 -0
- package/dist/implementations/modbus/EnergyAppModbusRegisterMapper.js +94 -0
- package/dist/implementations/modbus/interfaces.d.ts +202 -0
- package/dist/implementations/modbus/interfaces.js +23 -0
- package/dist/implementations/ocpp/ocpp-common.d.ts +75 -0
- package/dist/implementations/ocpp/ocpp-common.js +328 -0
- package/dist/implementations/ocpp/ocpp16.d.ts +137 -0
- package/dist/implementations/ocpp/ocpp16.js +48 -0
- package/dist/implementations/ocpp/ocpp201.d.ts +215 -0
- package/dist/implementations/ocpp/ocpp201.js +81 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.js +99 -0
- package/dist/mockConnectEmsApi.d.ts +10 -0
- package/dist/mockConnectEmsApi.js +160 -0
- package/dist/packages/connect-appliance.d.ts +24 -0
- package/dist/packages/connect-appliance.js +1 -0
- package/dist/packages/connect-http-api.d.ts +15 -0
- package/dist/packages/connect-http-api.js +1 -0
- package/dist/packages/connect-interval.d.ts +15 -0
- package/dist/packages/connect-interval.js +1 -0
- package/dist/packages/connect-modbus.d.ts +60 -0
- package/dist/packages/connect-modbus.js +1 -0
- package/dist/packages/connect-network-devices.d.ts +40 -0
- package/dist/packages/connect-network-devices.js +1 -0
- package/dist/packages/connect-storage.d.ts +14 -0
- package/dist/packages/connect-storage.js +1 -0
- package/dist/packages/energy-app-appliance.d.ts +17 -0
- package/dist/packages/energy-app-appliance.js +1 -0
- package/dist/packages/energy-app-authentication.d.ts +52 -0
- package/dist/packages/energy-app-authentication.js +1 -0
- package/dist/packages/energy-app-charge.d.ts +13 -0
- package/dist/packages/energy-app-charge.js +1 -0
- package/dist/packages/energy-app-charging-card.d.ts +11 -0
- package/dist/packages/energy-app-charging-card.js +1 -0
- package/dist/packages/energy-app-data-bus.d.ts +12 -0
- package/dist/packages/energy-app-data-bus.js +1 -0
- package/dist/packages/energy-app-electricity-prices.d.ts +59 -0
- package/dist/packages/energy-app-electricity-prices.js +1 -0
- package/dist/packages/energy-app-interval.d.ts +15 -0
- package/dist/packages/energy-app-interval.js +1 -0
- package/dist/packages/energy-app-modbus.d.ts +46 -0
- package/dist/packages/energy-app-modbus.js +1 -0
- package/dist/packages/energy-app-network-device.d.ts +25 -0
- package/dist/packages/energy-app-network-device.js +1 -0
- package/dist/packages/energy-app-notification.d.ts +50 -0
- package/dist/packages/energy-app-notification.js +1 -0
- package/dist/packages/energy-app-ocpp.d.ts +52 -0
- package/dist/packages/energy-app-ocpp.js +13 -0
- package/dist/packages/energy-app-settings.d.ts +47 -0
- package/dist/packages/energy-app-settings.js +1 -0
- package/dist/packages/energy-app-storage.d.ts +14 -0
- package/dist/packages/energy-app-storage.js +1 -0
- package/dist/packages/energy-app-vehicle.d.ts +11 -0
- package/dist/packages/energy-app-vehicle.js +1 -0
- package/dist/permission-not-granted.d.ts +8 -0
- package/dist/permission-not-granted.js +14 -0
- package/dist/types/connect-appliance-type.enum.d.ts +6 -0
- package/dist/types/connect-appliance-type.enum.js +7 -0
- package/dist/types/energy-app-settings.d.ts +74 -0
- package/dist/types/energy-app-settings.js +1 -0
- package/dist/types/enyo-appliance.d.ts +81 -0
- package/dist/types/enyo-appliance.js +30 -0
- package/dist/types/enyo-authentication.d.ts +69 -0
- package/dist/types/enyo-authentication.js +6 -0
- package/dist/types/enyo-battery-appliance.d.ts +6 -0
- package/dist/types/enyo-battery-appliance.js +1 -0
- package/dist/types/enyo-charge.d.ts +82 -0
- package/dist/types/enyo-charge.js +12 -0
- package/dist/types/enyo-charger-appliance.d.ts +49 -0
- package/dist/types/enyo-charger-appliance.js +38 -0
- package/dist/types/enyo-charging-card.d.ts +11 -0
- package/dist/types/enyo-charging-card.js +1 -0
- package/dist/types/enyo-data-bus-value.d.ts +379 -0
- package/dist/types/enyo-data-bus-value.js +75 -0
- package/dist/types/enyo-electricity-prices.d.ts +63 -0
- package/dist/types/enyo-electricity-prices.js +1 -0
- package/dist/types/enyo-energy-tariff.d.ts +70 -0
- package/dist/types/enyo-energy-tariff.js +1 -0
- package/dist/types/enyo-heatpump-appliance.d.ts +34 -0
- package/dist/types/enyo-heatpump-appliance.js +16 -0
- package/dist/types/enyo-inverter-appliance.d.ts +3 -0
- package/dist/types/enyo-inverter-appliance.js +1 -0
- package/dist/types/enyo-meter-appliance.d.ts +10 -0
- package/dist/types/enyo-meter-appliance.js +7 -0
- package/dist/types/enyo-network-device.d.ts +31 -0
- package/dist/types/enyo-network-device.js +1 -0
- package/dist/types/enyo-notification.d.ts +48 -0
- package/dist/types/enyo-notification.js +1 -0
- package/dist/types/enyo-settings.d.ts +74 -0
- package/dist/types/enyo-settings.js +1 -0
- package/dist/types/enyo-source.enum.d.ts +4 -0
- package/dist/types/enyo-source.enum.js +5 -0
- package/dist/types/enyo-vehicle.d.ts +12 -0
- package/dist/types/enyo-vehicle.js +1 -0
- package/dist/types/enyo-websocket-connection.d.ts +8 -0
- package/dist/types/enyo-websocket-connection.js +1 -0
- package/dist/types/hems-one-appliance.d.ts +81 -0
- package/dist/types/hems-one-appliance.js +30 -0
- package/dist/types/hems-one-authentication.d.ts +69 -0
- package/dist/types/hems-one-authentication.js +6 -0
- package/dist/types/hems-one-battery-appliance.d.ts +6 -0
- package/dist/types/hems-one-battery-appliance.js +1 -0
- package/dist/types/hems-one-charge.d.ts +82 -0
- package/dist/types/hems-one-charge.js +12 -0
- package/dist/types/hems-one-charger-appliance.d.ts +49 -0
- package/dist/types/hems-one-charger-appliance.js +38 -0
- package/dist/types/hems-one-charging-card.d.ts +11 -0
- package/dist/types/hems-one-charging-card.js +1 -0
- package/dist/types/hems-one-data-bus-command.d.ts +34 -0
- package/dist/types/hems-one-data-bus-command.js +6 -0
- package/dist/types/hems-one-data-bus-value.d.ts +379 -0
- package/dist/types/hems-one-data-bus-value.js +75 -0
- package/dist/types/hems-one-electricity-prices.d.ts +63 -0
- package/dist/types/hems-one-electricity-prices.js +1 -0
- package/dist/types/hems-one-energy-tariff.d.ts +70 -0
- package/dist/types/hems-one-energy-tariff.js +1 -0
- package/dist/types/hems-one-heatpump-appliance.d.ts +34 -0
- package/dist/types/hems-one-heatpump-appliance.js +16 -0
- package/dist/types/hems-one-inverter-appliance.d.ts +3 -0
- package/dist/types/hems-one-inverter-appliance.js +1 -0
- package/dist/types/hems-one-meter-appliance.d.ts +10 -0
- package/dist/types/hems-one-meter-appliance.js +7 -0
- package/dist/types/hems-one-network-device.d.ts +31 -0
- package/dist/types/hems-one-network-device.js +1 -0
- package/dist/types/hems-one-source.enum.d.ts +4 -0
- package/dist/types/hems-one-source.enum.js +5 -0
- package/dist/types/hems-one-vehicle.d.ts +12 -0
- package/dist/types/hems-one-vehicle.js +1 -0
- package/dist/types/hems-one-websocket-connection.d.ts +8 -0
- package/dist/types/hems-one-websocket-connection.js +1 -0
- package/dist/version.d.ts +13 -0
- package/dist/version.js +15 -0
- package/package.json +43 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnergyAppModbusMeter = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const enyo_appliance_js_1 = require("../../types/enyo-appliance.cjs");
|
|
6
|
+
const enyo_data_bus_value_js_1 = require("../../types/enyo-data-bus-value.cjs");
|
|
7
|
+
const enyo_source_enum_js_1 = require("../../types/enyo-source.enum.cjs");
|
|
8
|
+
const interfaces_js_1 = require("./interfaces.cjs");
|
|
9
|
+
const EnergyAppModbusRegisterMapper_js_1 = require("./EnergyAppModbusRegisterMapper.cjs");
|
|
10
|
+
const EnergyAppModbusConnectionHealth_js_1 = require("./EnergyAppModbusConnectionHealth.cjs");
|
|
11
|
+
const EnergyAppModbusFaultTolerantReader_js_1 = require("./EnergyAppModbusFaultTolerantReader.cjs");
|
|
12
|
+
const enyo_meter_appliance_js_1 = require("../../types/enyo-meter-appliance.cjs");
|
|
13
|
+
class EnergyAppModbusMeter {
|
|
14
|
+
client;
|
|
15
|
+
config;
|
|
16
|
+
networkDevice;
|
|
17
|
+
_registerMapper;
|
|
18
|
+
_connectionHealth;
|
|
19
|
+
_modbusInstance;
|
|
20
|
+
_appliance;
|
|
21
|
+
constructor(client, config, networkDevice) {
|
|
22
|
+
this.client = client;
|
|
23
|
+
this.config = config;
|
|
24
|
+
this.networkDevice = networkDevice;
|
|
25
|
+
this.config = config;
|
|
26
|
+
this.client = client;
|
|
27
|
+
this.networkDevice = networkDevice;
|
|
28
|
+
this._registerMapper = new EnergyAppModbusRegisterMapper_js_1.EnergyAppModbusRegisterMapper();
|
|
29
|
+
this._connectionHealth = new EnergyAppModbusConnectionHealth_js_1.EnergyAppModbusConnectionHealth();
|
|
30
|
+
// Validate configuration
|
|
31
|
+
const validation = this._registerMapper.validateRegisterMap(config.registers);
|
|
32
|
+
if (!validation.valid) {
|
|
33
|
+
throw new interfaces_js_1.EnergyAppModbusConfigurationError(`Invalid meter configuration: ${validation.errors.join(', ')}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
get appliance() {
|
|
37
|
+
if (!this._appliance) {
|
|
38
|
+
throw new Error('Meter appliance not initialized. Call connect() first.');
|
|
39
|
+
}
|
|
40
|
+
return this._appliance;
|
|
41
|
+
}
|
|
42
|
+
async connect() {
|
|
43
|
+
try {
|
|
44
|
+
console.log(`Connecting to meter at ${this.networkDevice.hostname}...`);
|
|
45
|
+
// Create modbus connection
|
|
46
|
+
this._modbusInstance = await this.client.useModbus().connect({
|
|
47
|
+
host: this.networkDevice.hostname,
|
|
48
|
+
unitId: this.config.options?.unitId || 1,
|
|
49
|
+
port: this.config.options?.port || 502,
|
|
50
|
+
timeout: this.config.options?.timeout || 5000
|
|
51
|
+
});
|
|
52
|
+
// Initialize appliance
|
|
53
|
+
await this._initializeAppliance();
|
|
54
|
+
console.log(`Successfully connected to meter ${this.config.name[0]?.name} at ${this.networkDevice.hostname}`);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
throw new interfaces_js_1.EnergyAppModbusConnectionError(`Failed to connect to meter at ${this.networkDevice.hostname}: ${error.message}`, error);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async disconnect() {
|
|
61
|
+
if (this._modbusInstance) {
|
|
62
|
+
try {
|
|
63
|
+
await this._modbusInstance.disconnect();
|
|
64
|
+
console.log(`Disconnected from meter at ${this.networkDevice.hostname}`);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.warn(`Error disconnecting from meter: ${error.message}`);
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
this._modbusInstance = undefined;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
isConnected() {
|
|
75
|
+
return this._modbusInstance !== undefined && this._connectionHealth.isHealthy();
|
|
76
|
+
}
|
|
77
|
+
async updateData() {
|
|
78
|
+
if (!this._modbusInstance || !this._appliance) {
|
|
79
|
+
throw new Error('Meter not connected. Call connect() first.');
|
|
80
|
+
}
|
|
81
|
+
const reader = new EnergyAppModbusFaultTolerantReader_js_1.EnergyAppModbusFaultTolerantReader(this._modbusInstance, this._connectionHealth);
|
|
82
|
+
const registerData = await this._registerMapper.readMultipleRegisters(reader, this.config.registers);
|
|
83
|
+
// Extract meter data with fallbacks
|
|
84
|
+
const gridFeedInPowerW = registerData.gridFeedInPower || 0;
|
|
85
|
+
const gridConsumptionPowerW = registerData.gridConsumptionPower || 0;
|
|
86
|
+
const gridFeedInWh = registerData.gridFeedInEnergy || 0;
|
|
87
|
+
const gridConsumptionWh = registerData.gridConsumptionEnergy || 0;
|
|
88
|
+
// Calculate net grid power (positive = consumption, negative = feed-in)
|
|
89
|
+
const gridPowerW = this.config.registers.gridPower !== undefined ? registerData.gridPower : (gridConsumptionPowerW - gridFeedInPowerW);
|
|
90
|
+
const message = {
|
|
91
|
+
type: 'message',
|
|
92
|
+
source: enyo_source_enum_js_1.EnyoSourceEnum.Device,
|
|
93
|
+
id: (0, node_crypto_1.randomUUID)(),
|
|
94
|
+
timestampIso: new Date().toISOString(),
|
|
95
|
+
message: enyo_data_bus_value_js_1.EnyoDataBusMessageEnum.MeterValuesUpdateV1,
|
|
96
|
+
applianceId: this._appliance.id,
|
|
97
|
+
data: {
|
|
98
|
+
gridPowerW,
|
|
99
|
+
gridFeedInWh,
|
|
100
|
+
gridConsumptionWh
|
|
101
|
+
},
|
|
102
|
+
resolution: '10s'
|
|
103
|
+
};
|
|
104
|
+
console.log(`Meter Data (${this.config.name[0]?.name}): Grid Power=${gridPowerW}W (Feed-in=${gridFeedInPowerW}W, Consumption=${gridConsumptionPowerW}W), Feed-in Energy=${gridFeedInWh}Wh, Consumption Energy=${gridConsumptionWh}Wh`);
|
|
105
|
+
return [message];
|
|
106
|
+
}
|
|
107
|
+
// Convenience methods for accessing specific register values
|
|
108
|
+
async getGridPower() {
|
|
109
|
+
if (!this._modbusInstance) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
const reader = new EnergyAppModbusFaultTolerantReader_js_1.EnergyAppModbusFaultTolerantReader(this._modbusInstance, this._connectionHealth);
|
|
113
|
+
// Try direct grid power register first
|
|
114
|
+
if (this.config.registers.gridPower) {
|
|
115
|
+
const result = await this._registerMapper.readRegister(reader, this.config.registers.gridPower);
|
|
116
|
+
if (result.success) {
|
|
117
|
+
return result.value;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Calculate from feed-in and consumption
|
|
121
|
+
if (this.config.registers.gridFeedInPower && this.config.registers.gridConsumptionPower) {
|
|
122
|
+
const feedInResult = await this._registerMapper.readRegister(reader, this.config.registers.gridFeedInPower);
|
|
123
|
+
const consumptionResult = await this._registerMapper.readRegister(reader, this.config.registers.gridConsumptionPower);
|
|
124
|
+
if (feedInResult.success && consumptionResult.success) {
|
|
125
|
+
return consumptionResult.value - feedInResult.value;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
async getGridFeedInEnergy() {
|
|
131
|
+
if (!this._modbusInstance || !this.config.registers.gridFeedInEnergy) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
const reader = new EnergyAppModbusFaultTolerantReader_js_1.EnergyAppModbusFaultTolerantReader(this._modbusInstance, this._connectionHealth);
|
|
135
|
+
const result = await this._registerMapper.readRegister(reader, this.config.registers.gridFeedInEnergy);
|
|
136
|
+
return result.success ? result.value : null;
|
|
137
|
+
}
|
|
138
|
+
async getGridConsumptionEnergy() {
|
|
139
|
+
if (!this._modbusInstance || !this.config.registers.gridConsumptionEnergy) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
const reader = new EnergyAppModbusFaultTolerantReader_js_1.EnergyAppModbusFaultTolerantReader(this._modbusInstance, this._connectionHealth);
|
|
143
|
+
const result = await this._registerMapper.readRegister(reader, this.config.registers.gridConsumptionEnergy);
|
|
144
|
+
return result.success ? result.value : null;
|
|
145
|
+
}
|
|
146
|
+
async _initializeAppliance() {
|
|
147
|
+
const appliances = await this.client.useAppliances().list();
|
|
148
|
+
let existingAppliance = appliances.find(a => a.networkDeviceIds.includes(this.networkDevice.id) &&
|
|
149
|
+
a.type === enyo_appliance_js_1.EnyoApplianceTypeEnum.Meter);
|
|
150
|
+
if (!existingAppliance) {
|
|
151
|
+
// Create new appliance
|
|
152
|
+
existingAppliance = {
|
|
153
|
+
id: (0, node_crypto_1.randomUUID)(),
|
|
154
|
+
type: enyo_appliance_js_1.EnyoApplianceTypeEnum.Meter,
|
|
155
|
+
networkDeviceIds: [this.networkDevice.id],
|
|
156
|
+
name: this.config.name,
|
|
157
|
+
metadata: {
|
|
158
|
+
state: enyo_appliance_js_1.EnyoApplianceStateEnum.Connected,
|
|
159
|
+
connectionType: enyo_appliance_js_1.EnyoApplianceConnectionType.Connector,
|
|
160
|
+
...this.config.options?.topology && { topology: this.config.options.topology }
|
|
161
|
+
},
|
|
162
|
+
topology: {
|
|
163
|
+
features: [enyo_appliance_js_1.EnyoApplianceTopologyFeatureEnum.IntermediateOfPrimaryMeter]
|
|
164
|
+
},
|
|
165
|
+
meter: {
|
|
166
|
+
availableFeatures: [enyo_meter_appliance_js_1.EnyoMeterApplianceAvailableFeaturesEnum.LivePowerConsumption, enyo_meter_appliance_js_1.EnyoMeterApplianceAvailableFeaturesEnum.MeterValues]
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
await this.client.useAppliances().save(existingAppliance, undefined);
|
|
170
|
+
console.log(`Created new meter appliance: ${this.config.name[0]?.name}`);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
// Update existing appliance
|
|
174
|
+
existingAppliance = {
|
|
175
|
+
...existingAppliance,
|
|
176
|
+
name: this.config.name,
|
|
177
|
+
metadata: {
|
|
178
|
+
...existingAppliance.metadata,
|
|
179
|
+
connectionType: enyo_appliance_js_1.EnyoApplianceConnectionType.Connector,
|
|
180
|
+
state: enyo_appliance_js_1.EnyoApplianceStateEnum.Connected,
|
|
181
|
+
...this.config.options?.topology && { topology: this.config.options.topology }
|
|
182
|
+
},
|
|
183
|
+
topology: {
|
|
184
|
+
features: [enyo_appliance_js_1.EnyoApplianceTopologyFeatureEnum.IntermediateOfPrimaryMeter]
|
|
185
|
+
},
|
|
186
|
+
meter: {
|
|
187
|
+
availableFeatures: [enyo_meter_appliance_js_1.EnyoMeterApplianceAvailableFeaturesEnum.LivePowerConsumption, enyo_meter_appliance_js_1.EnyoMeterApplianceAvailableFeaturesEnum.MeterValues]
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
await this.client.useAppliances().save(existingAppliance, existingAppliance?.id);
|
|
191
|
+
console.log(`Updated existing meter appliance: ${this.config.name[0]?.name}`);
|
|
192
|
+
}
|
|
193
|
+
this._appliance = existingAppliance;
|
|
194
|
+
}
|
|
195
|
+
modbusClient() {
|
|
196
|
+
return this._modbusInstance;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
exports.EnergyAppModbusMeter = EnergyAppModbusMeter;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { EnergyAppModbusInstance } from "../../packages/energy-app-modbus.cjs";
|
|
2
|
+
import { EnyoAppliance } from "../../types/enyo-appliance.cjs";
|
|
3
|
+
import type { EnyoNetworkDevice } from "../../types/enyo-network-device.cjs";
|
|
4
|
+
import { type EnyoDataBusMessage } from "../../types/enyo-data-bus-value.cjs";
|
|
5
|
+
import { type EnergyAppModbusDevice, type EnergyAppModbusMeterConfig } from './interfaces.cjs';
|
|
6
|
+
import { EnergyApp } from "../../index.cjs";
|
|
7
|
+
export declare class EnergyAppModbusMeter implements EnergyAppModbusDevice {
|
|
8
|
+
readonly client: EnergyApp;
|
|
9
|
+
readonly config: EnergyAppModbusMeterConfig;
|
|
10
|
+
readonly networkDevice: EnyoNetworkDevice;
|
|
11
|
+
private readonly _registerMapper;
|
|
12
|
+
private readonly _connectionHealth;
|
|
13
|
+
private _modbusInstance?;
|
|
14
|
+
private _appliance?;
|
|
15
|
+
constructor(client: EnergyApp, config: EnergyAppModbusMeterConfig, networkDevice: EnyoNetworkDevice);
|
|
16
|
+
get appliance(): EnyoAppliance;
|
|
17
|
+
connect(): Promise<void>;
|
|
18
|
+
disconnect(): Promise<void>;
|
|
19
|
+
isConnected(): boolean;
|
|
20
|
+
updateData(): Promise<EnyoDataBusMessage[]>;
|
|
21
|
+
getGridPower(): Promise<number | null>;
|
|
22
|
+
getGridFeedInEnergy(): Promise<number | null>;
|
|
23
|
+
getGridConsumptionEnergy(): Promise<number | null>;
|
|
24
|
+
private _initializeAppliance;
|
|
25
|
+
modbusClient(): EnergyAppModbusInstance | undefined;
|
|
26
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnergyAppModbusRegisterMapper = void 0;
|
|
4
|
+
const interfaces_js_1 = require("./interfaces.cjs");
|
|
5
|
+
const EnergyAppModbusDataTypeConverter_js_1 = require("./EnergyAppModbusDataTypeConverter.cjs");
|
|
6
|
+
class EnergyAppModbusRegisterMapper {
|
|
7
|
+
dataTypeConverter;
|
|
8
|
+
constructor(dataTypeConverter) {
|
|
9
|
+
this.dataTypeConverter = dataTypeConverter || new EnergyAppModbusDataTypeConverter_js_1.EnergyAppModbusDataTypeConverter();
|
|
10
|
+
}
|
|
11
|
+
async readRegister(reader, config) {
|
|
12
|
+
try {
|
|
13
|
+
// Calculate quantity if not provided
|
|
14
|
+
const quantity = config.quantity || this.dataTypeConverter.getRegisterQuantity(config.dataType);
|
|
15
|
+
const result = await reader.readHoldingRegisters(config.address, quantity);
|
|
16
|
+
if (!result.success || !result.value) {
|
|
17
|
+
return {
|
|
18
|
+
success: false,
|
|
19
|
+
error: new interfaces_js_1.EnergyAppModbusReadError(`Failed to read register ${config.address}: ${result.error?.message || 'Unknown error'}`, config.address)
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const convertedValue = this.dataTypeConverter.convertFromBuffer(result.value, config.dataType, config.scale, config.quantity);
|
|
23
|
+
// Validate the converted value
|
|
24
|
+
if (!this.dataTypeConverter.isValidValue(convertedValue, config.dataType)) {
|
|
25
|
+
return {
|
|
26
|
+
success: false,
|
|
27
|
+
error: new interfaces_js_1.EnergyAppModbusReadError(`Invalid value 0x${convertedValue.toString(16)} for register ${config.address}`, config.address)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
success: true,
|
|
32
|
+
value: convertedValue
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return {
|
|
37
|
+
success: false,
|
|
38
|
+
error: new interfaces_js_1.EnergyAppModbusReadError(`Error reading register ${config.address}: ${error.message}`, config.address)
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async readMultipleRegisters(reader, registerMap) {
|
|
43
|
+
const results = {};
|
|
44
|
+
const failures = [];
|
|
45
|
+
// Read all registers
|
|
46
|
+
for (const [name, config] of Object.entries(registerMap)) {
|
|
47
|
+
if (!config) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const result = await this.readRegister(reader, config);
|
|
51
|
+
if (result.success) {
|
|
52
|
+
results[name] = result.value;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Check if this register was required
|
|
56
|
+
if (config.required) {
|
|
57
|
+
failures.push(`${name} (${config.address})`);
|
|
58
|
+
}
|
|
59
|
+
console.warn(`Failed to read register ${name} (${config.address}): ${result.error?.message}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// If any required registers failed, log warning
|
|
63
|
+
if (failures.length > 0) {
|
|
64
|
+
console.warn(`Failed to read required registers: ${failures.join(', ')}`);
|
|
65
|
+
}
|
|
66
|
+
return results;
|
|
67
|
+
}
|
|
68
|
+
validateRegisterMap(registerMap) {
|
|
69
|
+
const errors = [];
|
|
70
|
+
for (const [name, config] of Object.entries(registerMap)) {
|
|
71
|
+
if (!config) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
// Validate address
|
|
75
|
+
if (!Number.isInteger(config.address) || config.address < 1) {
|
|
76
|
+
errors.push(`Invalid address for register '${name}': ${config.address}`);
|
|
77
|
+
}
|
|
78
|
+
// Validate data type
|
|
79
|
+
const validDataTypes = ['uint16', 'int16', 'uint32', 'int32', 'float32', 'string'];
|
|
80
|
+
if (!validDataTypes.includes(config.dataType)) {
|
|
81
|
+
errors.push(`Invalid data type for register '${name}': ${config.dataType}`);
|
|
82
|
+
}
|
|
83
|
+
// Validate scale
|
|
84
|
+
if (config.scale !== undefined && (!Number.isInteger(config.scale) || config.scale < 0)) {
|
|
85
|
+
errors.push(`Invalid scale for register '${name}': ${config.scale}`);
|
|
86
|
+
}
|
|
87
|
+
// Validate quantity
|
|
88
|
+
if (config.quantity !== undefined && (!Number.isInteger(config.quantity) || config.quantity < 1)) {
|
|
89
|
+
errors.push(`Invalid quantity for register '${name}': ${config.quantity}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
valid: errors.length === 0,
|
|
94
|
+
errors
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.EnergyAppModbusRegisterMapper = EnergyAppModbusRegisterMapper;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type IRegisterMapper, type IRegisterReader, type IDataTypeConverter, type EnergyAppModbusRegisterConfig, type EnergyAppRegisterMap, type RegisterReadResult } from './interfaces.cjs';
|
|
2
|
+
export declare class EnergyAppModbusRegisterMapper implements IRegisterMapper {
|
|
3
|
+
private readonly dataTypeConverter;
|
|
4
|
+
constructor(dataTypeConverter?: IDataTypeConverter);
|
|
5
|
+
readRegister<T>(reader: IRegisterReader, config: EnergyAppModbusRegisterConfig): Promise<RegisterReadResult<T>>;
|
|
6
|
+
readMultipleRegisters(reader: IRegisterReader, registerMap: EnergyAppRegisterMap): Promise<{
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
}>;
|
|
9
|
+
validateRegisterMap(registerMap: EnergyAppRegisterMap): {
|
|
10
|
+
valid: boolean;
|
|
11
|
+
errors: string[];
|
|
12
|
+
};
|
|
13
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnergyAppModbusReadError = exports.EnergyAppModbusConnectionError = exports.EnergyAppModbusConfigurationError = void 0;
|
|
4
|
+
// Error types
|
|
5
|
+
class EnergyAppModbusConfigurationError extends Error {
|
|
6
|
+
constructor(message) {
|
|
7
|
+
super(`Modbus Configuration Error: ${message}`);
|
|
8
|
+
this.name = 'ModbusConfigurationError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.EnergyAppModbusConfigurationError = EnergyAppModbusConfigurationError;
|
|
12
|
+
class EnergyAppModbusConnectionError extends Error {
|
|
13
|
+
cause;
|
|
14
|
+
constructor(message, cause) {
|
|
15
|
+
super(`Modbus Connection Error: ${message}`);
|
|
16
|
+
this.cause = cause;
|
|
17
|
+
this.name = 'ModbusConnectionError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.EnergyAppModbusConnectionError = EnergyAppModbusConnectionError;
|
|
21
|
+
class EnergyAppModbusReadError extends Error {
|
|
22
|
+
register;
|
|
23
|
+
constructor(message, register) {
|
|
24
|
+
super(`Modbus Read Error: ${message}`);
|
|
25
|
+
this.register = register;
|
|
26
|
+
this.name = 'ModbusReadError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.EnergyAppModbusReadError = EnergyAppModbusReadError;
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import type { EnergyApp } from "../../index.cjs";
|
|
2
|
+
import type { EnyoNetworkDevice } from "../../types/enyo-network-device.cjs";
|
|
3
|
+
import type { EnyoAppliance, EnyoApplianceName, EnyoApplianceTopology } from "../../types/enyo-appliance.cjs";
|
|
4
|
+
import { EnyoBatteryStateEnum, EnyoDataBusMessage, EnyoInverterStateEnum } from "../../types/enyo-data-bus-value.cjs";
|
|
5
|
+
import { EnergyAppModbusInstance } from "../../packages/energy-app-modbus.cjs";
|
|
6
|
+
/**
|
|
7
|
+
* Data Types for Modbus Register Configuration
|
|
8
|
+
*
|
|
9
|
+
* @description Supported data types for reading Modbus registers
|
|
10
|
+
* - Numeric types: uint16, int16, uint32, int32, float32
|
|
11
|
+
* - String type: string (requires length property in register config)
|
|
12
|
+
*/
|
|
13
|
+
export type EnergyAppModbusDataType = 'uint16' | 'int16' | 'uint32' | 'int32' | 'float32' | 'string';
|
|
14
|
+
export interface EnergyAppBatteryStateValueMapping {
|
|
15
|
+
value: number;
|
|
16
|
+
mappedState: EnyoBatteryStateEnum;
|
|
17
|
+
}
|
|
18
|
+
export interface EnergyAppInverterStateValueMapping {
|
|
19
|
+
value: number;
|
|
20
|
+
mappedState: EnyoInverterStateEnum;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Register Configuration Interface
|
|
24
|
+
*
|
|
25
|
+
* @description Configuration for reading a Modbus register
|
|
26
|
+
*/
|
|
27
|
+
export interface EnergyAppModbusRegisterConfig {
|
|
28
|
+
/** Modbus register address */
|
|
29
|
+
address: number;
|
|
30
|
+
/** Data type of the register value */
|
|
31
|
+
dataType: EnergyAppModbusDataType;
|
|
32
|
+
/** For FIX2, FIX3 scaling (divide by 10^scale) - only applies to numeric types */
|
|
33
|
+
scale?: number;
|
|
34
|
+
/** Number of registers to read (auto-calculated from dataType if not provided) */
|
|
35
|
+
quantity?: number;
|
|
36
|
+
/** Whether this register is required for device operation */
|
|
37
|
+
required?: boolean;
|
|
38
|
+
/** For mapping numeric values to enum states (only applies to numeric types) */
|
|
39
|
+
valueMapping?: EnergyAppBatteryStateValueMapping[] | EnergyAppInverterStateValueMapping[];
|
|
40
|
+
}
|
|
41
|
+
export interface EnergyAppRegisterMap {
|
|
42
|
+
[key: string]: EnergyAppModbusRegisterConfig | undefined;
|
|
43
|
+
}
|
|
44
|
+
export interface EnergyAppModbusConnectionOptions {
|
|
45
|
+
unitId?: number;
|
|
46
|
+
port?: number;
|
|
47
|
+
timeout?: number;
|
|
48
|
+
retryAttempts?: number;
|
|
49
|
+
retryDelayMs?: number;
|
|
50
|
+
}
|
|
51
|
+
export interface EnergyAppModbusDeviceConfig {
|
|
52
|
+
name: EnyoApplianceName[];
|
|
53
|
+
registers: EnergyAppRegisterMap;
|
|
54
|
+
options?: EnergyAppModbusConnectionOptions & {
|
|
55
|
+
topology?: EnyoApplianceTopology;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export interface EnergyAppModbusInverterConfig extends EnergyAppModbusDeviceConfig {
|
|
59
|
+
registers: {
|
|
60
|
+
serialNumber?: EnergyAppModbusRegisterConfig;
|
|
61
|
+
power?: EnergyAppModbusRegisterConfig;
|
|
62
|
+
voltageL1?: EnergyAppModbusRegisterConfig;
|
|
63
|
+
voltageL2?: EnergyAppModbusRegisterConfig;
|
|
64
|
+
voltageL3?: EnergyAppModbusRegisterConfig;
|
|
65
|
+
maxPvProductionW?: EnergyAppModbusRegisterConfig;
|
|
66
|
+
state?: EnergyAppModbusRegisterConfig;
|
|
67
|
+
activePowerLimitationW?: EnergyAppModbusRegisterConfig;
|
|
68
|
+
string1Power?: EnergyAppModbusRegisterConfig;
|
|
69
|
+
string1Voltage?: EnergyAppModbusRegisterConfig;
|
|
70
|
+
string2Power?: EnergyAppModbusRegisterConfig;
|
|
71
|
+
string2Voltage?: EnergyAppModbusRegisterConfig;
|
|
72
|
+
string3Power?: EnergyAppModbusRegisterConfig;
|
|
73
|
+
string3Voltage?: EnergyAppModbusRegisterConfig;
|
|
74
|
+
string4Power?: EnergyAppModbusRegisterConfig;
|
|
75
|
+
string4Voltage?: EnergyAppModbusRegisterConfig;
|
|
76
|
+
[key: string]: EnergyAppModbusRegisterConfig | undefined;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export interface EnergyAppModbusBatteryConfig extends EnergyAppModbusDeviceConfig {
|
|
80
|
+
inverter?: IEnergyAppModbusInverter;
|
|
81
|
+
registers: {
|
|
82
|
+
current?: EnergyAppModbusRegisterConfig;
|
|
83
|
+
voltage?: EnergyAppModbusRegisterConfig;
|
|
84
|
+
soc?: EnergyAppModbusRegisterConfig;
|
|
85
|
+
power?: EnergyAppModbusRegisterConfig;
|
|
86
|
+
temperature?: EnergyAppModbusRegisterConfig;
|
|
87
|
+
state?: EnergyAppModbusRegisterConfig;
|
|
88
|
+
maxCapacityWh?: EnergyAppModbusRegisterConfig;
|
|
89
|
+
maxDischargePowerW?: EnergyAppModbusRegisterConfig;
|
|
90
|
+
maxChargingPowerW?: EnergyAppModbusRegisterConfig;
|
|
91
|
+
drainPercentage?: EnergyAppModbusRegisterConfig;
|
|
92
|
+
loadPercentage?: EnergyAppModbusRegisterConfig;
|
|
93
|
+
[key: string]: EnergyAppModbusRegisterConfig | undefined;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export interface EnergyAppModbusMeterConfig extends EnergyAppModbusDeviceConfig {
|
|
97
|
+
registers: {
|
|
98
|
+
gridPower?: EnergyAppModbusRegisterConfig;
|
|
99
|
+
gridFeedInPower?: EnergyAppModbusRegisterConfig;
|
|
100
|
+
gridConsumptionPower?: EnergyAppModbusRegisterConfig;
|
|
101
|
+
gridFeedInEnergy?: EnergyAppModbusRegisterConfig;
|
|
102
|
+
gridConsumptionEnergy?: EnergyAppModbusRegisterConfig;
|
|
103
|
+
[key: string]: EnergyAppModbusRegisterConfig | undefined;
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
export interface RegisterReadResult<T = any> {
|
|
107
|
+
success: boolean;
|
|
108
|
+
value?: T;
|
|
109
|
+
error?: Error;
|
|
110
|
+
}
|
|
111
|
+
export interface IRegisterReader {
|
|
112
|
+
readHoldingRegisters(startAddress: number, quantity: number): Promise<RegisterReadResult<Buffer>>;
|
|
113
|
+
readInputRegisters?(startAddress: number, quantity: number): Promise<RegisterReadResult<Buffer>>;
|
|
114
|
+
isHealthy(): boolean;
|
|
115
|
+
}
|
|
116
|
+
export interface IRegisterMapper {
|
|
117
|
+
readRegister<T>(reader: IRegisterReader, config: EnergyAppModbusRegisterConfig): Promise<RegisterReadResult<T>>;
|
|
118
|
+
readMultipleRegisters(reader: IRegisterReader, registerMap: EnergyAppRegisterMap): Promise<{
|
|
119
|
+
[key: string]: any;
|
|
120
|
+
}>;
|
|
121
|
+
validateRegisterMap(registerMap: EnergyAppRegisterMap): {
|
|
122
|
+
valid: boolean;
|
|
123
|
+
errors: string[];
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Data Type Converter Interface
|
|
128
|
+
*
|
|
129
|
+
* @description Interface for converting raw Modbus buffer data into appropriate JavaScript types
|
|
130
|
+
*/
|
|
131
|
+
export interface IDataTypeConverter {
|
|
132
|
+
/**
|
|
133
|
+
* Converts raw buffer data from Modbus registers into appropriate JavaScript types
|
|
134
|
+
*
|
|
135
|
+
* @param buffer - Raw buffer data from Modbus registers
|
|
136
|
+
* @param dataType - The expected data type for conversion
|
|
137
|
+
* @param scale - Optional scaling factor for numeric types (divide by 10^scale)
|
|
138
|
+
* @param quantity - Required for string types, specifies the string length in characters
|
|
139
|
+
*/
|
|
140
|
+
convertFromBuffer(buffer: Buffer, dataType: EnergyAppModbusDataType, scale?: number, quantity?: number): any;
|
|
141
|
+
/**
|
|
142
|
+
* Validates if a value is valid for the given data type
|
|
143
|
+
*
|
|
144
|
+
* @param value - The value to validate
|
|
145
|
+
* @param dataType - The expected data type
|
|
146
|
+
*/
|
|
147
|
+
isValidValue(value: any, dataType: EnergyAppModbusDataType): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Calculates the number of Modbus registers required for a given data type
|
|
150
|
+
*
|
|
151
|
+
* @param dataType - The data type to calculate register quantity for
|
|
152
|
+
*/
|
|
153
|
+
getRegisterQuantity(dataType: EnergyAppModbusDataType): number;
|
|
154
|
+
}
|
|
155
|
+
export interface IConnectionHealth {
|
|
156
|
+
recordSuccess(): void;
|
|
157
|
+
recordFailure(error: Error): void;
|
|
158
|
+
isHealthy(): boolean;
|
|
159
|
+
getConsecutiveFailures(): number;
|
|
160
|
+
getLastError(): Error | undefined;
|
|
161
|
+
}
|
|
162
|
+
export interface EnergyAppModbusDevice {
|
|
163
|
+
readonly client: EnergyApp;
|
|
164
|
+
readonly config: EnergyAppModbusDeviceConfig;
|
|
165
|
+
readonly appliance: EnyoAppliance;
|
|
166
|
+
readonly networkDevice: EnyoNetworkDevice;
|
|
167
|
+
connect(): Promise<void>;
|
|
168
|
+
disconnect(): Promise<void>;
|
|
169
|
+
isConnected(): boolean;
|
|
170
|
+
updateData(): Promise<EnyoDataBusMessage[]>;
|
|
171
|
+
modbusClient(): EnergyAppModbusInstance | undefined;
|
|
172
|
+
}
|
|
173
|
+
export interface IEnergyAppModbusInverter extends EnergyAppModbusDevice {
|
|
174
|
+
readonly config: EnergyAppModbusInverterConfig;
|
|
175
|
+
getSerialNumber(): Promise<string | null>;
|
|
176
|
+
getCurrentPower(): Promise<number | null>;
|
|
177
|
+
getTotalEnergy(): Promise<number | null>;
|
|
178
|
+
}
|
|
179
|
+
export interface IEnergyAppModbusBattery extends EnergyAppModbusDevice {
|
|
180
|
+
readonly config: EnergyAppModbusBatteryConfig;
|
|
181
|
+
readonly inverter?: IEnergyAppModbusInverter;
|
|
182
|
+
getSoc(): Promise<number | null>;
|
|
183
|
+
getCurrent(): Promise<number | null>;
|
|
184
|
+
getPower(): Promise<number | null>;
|
|
185
|
+
}
|
|
186
|
+
export interface IEnergyAppModbusMeter extends EnergyAppModbusDevice {
|
|
187
|
+
readonly config: EnergyAppModbusMeterConfig;
|
|
188
|
+
getGridPower(): Promise<number | null>;
|
|
189
|
+
getGridFeedInEnergy(): Promise<number | null>;
|
|
190
|
+
getGridConsumptionEnergy(): Promise<number | null>;
|
|
191
|
+
}
|
|
192
|
+
export declare class EnergyAppModbusConfigurationError extends Error {
|
|
193
|
+
constructor(message: string);
|
|
194
|
+
}
|
|
195
|
+
export declare class EnergyAppModbusConnectionError extends Error {
|
|
196
|
+
readonly cause?: Error | undefined;
|
|
197
|
+
constructor(message: string, cause?: Error | undefined);
|
|
198
|
+
}
|
|
199
|
+
export declare class EnergyAppModbusReadError extends Error {
|
|
200
|
+
readonly register?: number | undefined;
|
|
201
|
+
constructor(message: string, register?: number | undefined);
|
|
202
|
+
}
|