@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.
Files changed (330) hide show
  1. package/README.md +216 -0
  2. package/dist/cjs/connect-ems-api.cjs +2 -0
  3. package/dist/cjs/connect-ems-api.d.cts +30 -0
  4. package/dist/cjs/connect-ems-permission.enum.cjs +7 -0
  5. package/dist/cjs/connect-ems-permission.enum.d.cts +3 -0
  6. package/dist/cjs/connect-ems-permission.type.cjs +2 -0
  7. package/dist/cjs/connect-ems-permission.type.d.cts +1 -0
  8. package/dist/cjs/connect-package-definition.cjs +14 -0
  9. package/dist/cjs/connect-package-definition.d.cts +57 -0
  10. package/dist/cjs/energy-app-appliance-type.enum.cjs +14 -0
  11. package/dist/cjs/energy-app-appliance-type.enum.d.cts +10 -0
  12. package/dist/cjs/energy-app-package-configuration.cjs +2 -0
  13. package/dist/cjs/energy-app-package-configuration.d.cts +30 -0
  14. package/dist/cjs/energy-app-package-definition.cjs +30 -0
  15. package/dist/cjs/energy-app-package-definition.d.cts +123 -0
  16. package/dist/cjs/energy-app-permission.type.cjs +21 -0
  17. package/dist/cjs/energy-app-permission.type.d.cts +18 -0
  18. package/dist/cjs/enyo-energy-app-sdk.cjs +12 -0
  19. package/dist/cjs/enyo-energy-app-sdk.d.cts +67 -0
  20. package/dist/cjs/hems-one-energy-app-sdk.cjs +12 -0
  21. package/dist/cjs/hems-one-energy-app-sdk.d.cts +64 -0
  22. package/dist/cjs/implementations/modbus/EnergyAppModbusBattery.cjs +388 -0
  23. package/dist/cjs/implementations/modbus/EnergyAppModbusBattery.d.cts +59 -0
  24. package/dist/cjs/implementations/modbus/EnergyAppModbusConnectionHealth.cjs +37 -0
  25. package/dist/cjs/implementations/modbus/EnergyAppModbusConnectionHealth.d.cts +15 -0
  26. package/dist/cjs/implementations/modbus/EnergyAppModbusDataTypeConverter.cjs +130 -0
  27. package/dist/cjs/implementations/modbus/EnergyAppModbusDataTypeConverter.d.cts +41 -0
  28. package/dist/cjs/implementations/modbus/EnergyAppModbusFaultTolerantReader.cjs +49 -0
  29. package/dist/cjs/implementations/modbus/EnergyAppModbusFaultTolerantReader.d.cts +10 -0
  30. package/dist/cjs/implementations/modbus/EnergyAppModbusInverter.cjs +348 -0
  31. package/dist/cjs/implementations/modbus/EnergyAppModbusInverter.d.cts +56 -0
  32. package/dist/cjs/implementations/modbus/EnergyAppModbusMeter.cjs +199 -0
  33. package/dist/cjs/implementations/modbus/EnergyAppModbusMeter.d.cts +26 -0
  34. package/dist/cjs/implementations/modbus/EnergyAppModbusRegisterMapper.cjs +98 -0
  35. package/dist/cjs/implementations/modbus/EnergyAppModbusRegisterMapper.d.cts +13 -0
  36. package/dist/cjs/implementations/modbus/interfaces.cjs +29 -0
  37. package/dist/cjs/implementations/modbus/interfaces.d.cts +202 -0
  38. package/dist/cjs/implementations/ocpp/ocpp-common.cjs +337 -0
  39. package/dist/cjs/implementations/ocpp/ocpp-common.d.cts +75 -0
  40. package/dist/cjs/implementations/ocpp/ocpp16.cjs +51 -0
  41. package/dist/cjs/implementations/ocpp/ocpp16.d.cts +137 -0
  42. package/dist/cjs/implementations/ocpp/ocpp201.cjs +84 -0
  43. package/dist/cjs/implementations/ocpp/ocpp201.d.cts +215 -0
  44. package/dist/cjs/index.cjs +117 -0
  45. package/dist/cjs/index.d.cts +56 -0
  46. package/dist/cjs/mockConnectEmsApi.cjs +167 -0
  47. package/dist/cjs/mockConnectEmsApi.d.cts +10 -0
  48. package/dist/cjs/packages/connect-appliance.cjs +2 -0
  49. package/dist/cjs/packages/connect-appliance.d.cts +24 -0
  50. package/dist/cjs/packages/connect-http-api.cjs +2 -0
  51. package/dist/cjs/packages/connect-http-api.d.cts +15 -0
  52. package/dist/cjs/packages/connect-interval.cjs +2 -0
  53. package/dist/cjs/packages/connect-interval.d.cts +15 -0
  54. package/dist/cjs/packages/connect-modbus.cjs +2 -0
  55. package/dist/cjs/packages/connect-modbus.d.cts +60 -0
  56. package/dist/cjs/packages/connect-network-devices.cjs +2 -0
  57. package/dist/cjs/packages/connect-network-devices.d.cts +40 -0
  58. package/dist/cjs/packages/connect-storage.cjs +2 -0
  59. package/dist/cjs/packages/connect-storage.d.cts +14 -0
  60. package/dist/cjs/packages/energy-app-appliance.cjs +2 -0
  61. package/dist/cjs/packages/energy-app-appliance.d.cts +17 -0
  62. package/dist/cjs/packages/energy-app-authentication.cjs +2 -0
  63. package/dist/cjs/packages/energy-app-authentication.d.cts +52 -0
  64. package/dist/cjs/packages/energy-app-charge.cjs +2 -0
  65. package/dist/cjs/packages/energy-app-charge.d.cts +13 -0
  66. package/dist/cjs/packages/energy-app-charging-card.cjs +2 -0
  67. package/dist/cjs/packages/energy-app-charging-card.d.cts +11 -0
  68. package/dist/cjs/packages/energy-app-data-bus.cjs +2 -0
  69. package/dist/cjs/packages/energy-app-data-bus.d.cts +12 -0
  70. package/dist/cjs/packages/energy-app-electricity-prices.cjs +2 -0
  71. package/dist/cjs/packages/energy-app-electricity-prices.d.cts +59 -0
  72. package/dist/cjs/packages/energy-app-interval.cjs +2 -0
  73. package/dist/cjs/packages/energy-app-interval.d.cts +15 -0
  74. package/dist/cjs/packages/energy-app-modbus.cjs +2 -0
  75. package/dist/cjs/packages/energy-app-modbus.d.cts +46 -0
  76. package/dist/cjs/packages/energy-app-network-device.cjs +2 -0
  77. package/dist/cjs/packages/energy-app-network-device.d.cts +25 -0
  78. package/dist/cjs/packages/energy-app-notification.cjs +2 -0
  79. package/dist/cjs/packages/energy-app-notification.d.cts +50 -0
  80. package/dist/cjs/packages/energy-app-ocpp.cjs +16 -0
  81. package/dist/cjs/packages/energy-app-ocpp.d.cts +52 -0
  82. package/dist/cjs/packages/energy-app-settings.cjs +2 -0
  83. package/dist/cjs/packages/energy-app-settings.d.cts +47 -0
  84. package/dist/cjs/packages/energy-app-storage.cjs +2 -0
  85. package/dist/cjs/packages/energy-app-storage.d.cts +14 -0
  86. package/dist/cjs/packages/energy-app-vehicle.cjs +2 -0
  87. package/dist/cjs/packages/energy-app-vehicle.d.cts +11 -0
  88. package/dist/cjs/permission-not-granted.cjs +18 -0
  89. package/dist/cjs/permission-not-granted.d.cts +8 -0
  90. package/dist/cjs/types/connect-appliance-type.enum.cjs +10 -0
  91. package/dist/cjs/types/connect-appliance-type.enum.d.cts +6 -0
  92. package/dist/cjs/types/energy-app-settings.cjs +2 -0
  93. package/dist/cjs/types/energy-app-settings.d.cts +74 -0
  94. package/dist/cjs/types/enyo-appliance.cjs +33 -0
  95. package/dist/cjs/types/enyo-appliance.d.cts +81 -0
  96. package/dist/cjs/types/enyo-authentication.cjs +9 -0
  97. package/dist/cjs/types/enyo-authentication.d.cts +69 -0
  98. package/dist/cjs/types/enyo-battery-appliance.cjs +2 -0
  99. package/dist/cjs/types/enyo-battery-appliance.d.cts +6 -0
  100. package/dist/cjs/types/enyo-charge.cjs +15 -0
  101. package/dist/cjs/types/enyo-charge.d.cts +82 -0
  102. package/dist/cjs/types/enyo-charger-appliance.cjs +41 -0
  103. package/dist/cjs/types/enyo-charger-appliance.d.cts +49 -0
  104. package/dist/cjs/types/enyo-charging-card.cjs +2 -0
  105. package/dist/cjs/types/enyo-charging-card.d.cts +11 -0
  106. package/dist/cjs/types/enyo-data-bus-value.cjs +78 -0
  107. package/dist/cjs/types/enyo-data-bus-value.d.cts +379 -0
  108. package/dist/cjs/types/enyo-electricity-prices.cjs +2 -0
  109. package/dist/cjs/types/enyo-electricity-prices.d.cts +63 -0
  110. package/dist/cjs/types/enyo-energy-tariff.cjs +2 -0
  111. package/dist/cjs/types/enyo-energy-tariff.d.cts +70 -0
  112. package/dist/cjs/types/enyo-heatpump-appliance.cjs +19 -0
  113. package/dist/cjs/types/enyo-heatpump-appliance.d.cts +34 -0
  114. package/dist/cjs/types/enyo-inverter-appliance.cjs +2 -0
  115. package/dist/cjs/types/enyo-inverter-appliance.d.cts +3 -0
  116. package/dist/cjs/types/enyo-meter-appliance.cjs +10 -0
  117. package/dist/cjs/types/enyo-meter-appliance.d.cts +10 -0
  118. package/dist/cjs/types/enyo-network-device.cjs +2 -0
  119. package/dist/cjs/types/enyo-network-device.d.cts +31 -0
  120. package/dist/cjs/types/enyo-notification.cjs +2 -0
  121. package/dist/cjs/types/enyo-notification.d.cts +48 -0
  122. package/dist/cjs/types/enyo-settings.cjs +2 -0
  123. package/dist/cjs/types/enyo-settings.d.cts +74 -0
  124. package/dist/cjs/types/enyo-source.enum.cjs +8 -0
  125. package/dist/cjs/types/enyo-source.enum.d.cts +4 -0
  126. package/dist/cjs/types/enyo-vehicle.cjs +2 -0
  127. package/dist/cjs/types/enyo-vehicle.d.cts +12 -0
  128. package/dist/cjs/types/enyo-websocket-connection.cjs +2 -0
  129. package/dist/cjs/types/enyo-websocket-connection.d.cts +8 -0
  130. package/dist/cjs/types/hems-one-appliance.cjs +33 -0
  131. package/dist/cjs/types/hems-one-appliance.d.cts +81 -0
  132. package/dist/cjs/types/hems-one-authentication.cjs +9 -0
  133. package/dist/cjs/types/hems-one-authentication.d.cts +69 -0
  134. package/dist/cjs/types/hems-one-battery-appliance.cjs +2 -0
  135. package/dist/cjs/types/hems-one-battery-appliance.d.cts +6 -0
  136. package/dist/cjs/types/hems-one-charge.cjs +15 -0
  137. package/dist/cjs/types/hems-one-charge.d.cts +82 -0
  138. package/dist/cjs/types/hems-one-charger-appliance.cjs +41 -0
  139. package/dist/cjs/types/hems-one-charger-appliance.d.cts +49 -0
  140. package/dist/cjs/types/hems-one-charging-card.cjs +2 -0
  141. package/dist/cjs/types/hems-one-charging-card.d.cts +11 -0
  142. package/dist/cjs/types/hems-one-data-bus-command.cjs +9 -0
  143. package/dist/cjs/types/hems-one-data-bus-command.d.cts +34 -0
  144. package/dist/cjs/types/hems-one-data-bus-value.cjs +78 -0
  145. package/dist/cjs/types/hems-one-data-bus-value.d.cts +379 -0
  146. package/dist/cjs/types/hems-one-electricity-prices.cjs +2 -0
  147. package/dist/cjs/types/hems-one-electricity-prices.d.cts +63 -0
  148. package/dist/cjs/types/hems-one-energy-tariff.cjs +2 -0
  149. package/dist/cjs/types/hems-one-energy-tariff.d.cts +70 -0
  150. package/dist/cjs/types/hems-one-heatpump-appliance.cjs +19 -0
  151. package/dist/cjs/types/hems-one-heatpump-appliance.d.cts +34 -0
  152. package/dist/cjs/types/hems-one-inverter-appliance.cjs +2 -0
  153. package/dist/cjs/types/hems-one-inverter-appliance.d.cts +3 -0
  154. package/dist/cjs/types/hems-one-meter-appliance.cjs +10 -0
  155. package/dist/cjs/types/hems-one-meter-appliance.d.cts +10 -0
  156. package/dist/cjs/types/hems-one-network-device.cjs +2 -0
  157. package/dist/cjs/types/hems-one-network-device.d.cts +31 -0
  158. package/dist/cjs/types/hems-one-source.enum.cjs +8 -0
  159. package/dist/cjs/types/hems-one-source.enum.d.cts +4 -0
  160. package/dist/cjs/types/hems-one-vehicle.cjs +2 -0
  161. package/dist/cjs/types/hems-one-vehicle.d.cts +12 -0
  162. package/dist/cjs/types/hems-one-websocket-connection.cjs +2 -0
  163. package/dist/cjs/types/hems-one-websocket-connection.d.cts +8 -0
  164. package/dist/cjs/version.cjs +19 -0
  165. package/dist/cjs/version.d.cts +13 -0
  166. package/dist/connect-ems-api.d.ts +30 -0
  167. package/dist/connect-ems-api.js +1 -0
  168. package/dist/connect-ems-permission.enum.d.ts +3 -0
  169. package/dist/connect-ems-permission.enum.js +4 -0
  170. package/dist/connect-ems-permission.type.d.ts +1 -0
  171. package/dist/connect-ems-permission.type.js +1 -0
  172. package/dist/connect-package-definition.d.ts +57 -0
  173. package/dist/connect-package-definition.js +10 -0
  174. package/dist/energy-app-appliance-type.enum.d.ts +10 -0
  175. package/dist/energy-app-appliance-type.enum.js +11 -0
  176. package/dist/energy-app-package-configuration.d.ts +30 -0
  177. package/dist/energy-app-package-configuration.js +1 -0
  178. package/dist/energy-app-package-definition.d.ts +123 -0
  179. package/dist/energy-app-package-definition.js +26 -0
  180. package/dist/energy-app-permission.type.d.ts +18 -0
  181. package/dist/energy-app-permission.type.js +18 -0
  182. package/dist/enyo-energy-app-sdk.d.ts +67 -0
  183. package/dist/enyo-energy-app-sdk.js +9 -0
  184. package/dist/hems-one-energy-app-sdk.d.ts +67 -0
  185. package/dist/hems-one-energy-app-sdk.js +9 -0
  186. package/dist/implementations/modbus/EnergyAppModbusBattery.d.ts +59 -0
  187. package/dist/implementations/modbus/EnergyAppModbusBattery.js +384 -0
  188. package/dist/implementations/modbus/EnergyAppModbusConnectionHealth.d.ts +15 -0
  189. package/dist/implementations/modbus/EnergyAppModbusConnectionHealth.js +33 -0
  190. package/dist/implementations/modbus/EnergyAppModbusDataTypeConverter.d.ts +41 -0
  191. package/dist/implementations/modbus/EnergyAppModbusDataTypeConverter.js +126 -0
  192. package/dist/implementations/modbus/EnergyAppModbusFaultTolerantReader.d.ts +10 -0
  193. package/dist/implementations/modbus/EnergyAppModbusFaultTolerantReader.js +45 -0
  194. package/dist/implementations/modbus/EnergyAppModbusInverter.d.ts +56 -0
  195. package/dist/implementations/modbus/EnergyAppModbusInverter.js +344 -0
  196. package/dist/implementations/modbus/EnergyAppModbusMeter.d.ts +26 -0
  197. package/dist/implementations/modbus/EnergyAppModbusMeter.js +195 -0
  198. package/dist/implementations/modbus/EnergyAppModbusRegisterMapper.d.ts +13 -0
  199. package/dist/implementations/modbus/EnergyAppModbusRegisterMapper.js +94 -0
  200. package/dist/implementations/modbus/interfaces.d.ts +202 -0
  201. package/dist/implementations/modbus/interfaces.js +23 -0
  202. package/dist/implementations/ocpp/ocpp-common.d.ts +75 -0
  203. package/dist/implementations/ocpp/ocpp-common.js +328 -0
  204. package/dist/implementations/ocpp/ocpp16.d.ts +137 -0
  205. package/dist/implementations/ocpp/ocpp16.js +48 -0
  206. package/dist/implementations/ocpp/ocpp201.d.ts +215 -0
  207. package/dist/implementations/ocpp/ocpp201.js +81 -0
  208. package/dist/index.d.ts +56 -0
  209. package/dist/index.js +99 -0
  210. package/dist/mockConnectEmsApi.d.ts +10 -0
  211. package/dist/mockConnectEmsApi.js +160 -0
  212. package/dist/packages/connect-appliance.d.ts +24 -0
  213. package/dist/packages/connect-appliance.js +1 -0
  214. package/dist/packages/connect-http-api.d.ts +15 -0
  215. package/dist/packages/connect-http-api.js +1 -0
  216. package/dist/packages/connect-interval.d.ts +15 -0
  217. package/dist/packages/connect-interval.js +1 -0
  218. package/dist/packages/connect-modbus.d.ts +60 -0
  219. package/dist/packages/connect-modbus.js +1 -0
  220. package/dist/packages/connect-network-devices.d.ts +40 -0
  221. package/dist/packages/connect-network-devices.js +1 -0
  222. package/dist/packages/connect-storage.d.ts +14 -0
  223. package/dist/packages/connect-storage.js +1 -0
  224. package/dist/packages/energy-app-appliance.d.ts +17 -0
  225. package/dist/packages/energy-app-appliance.js +1 -0
  226. package/dist/packages/energy-app-authentication.d.ts +52 -0
  227. package/dist/packages/energy-app-authentication.js +1 -0
  228. package/dist/packages/energy-app-charge.d.ts +13 -0
  229. package/dist/packages/energy-app-charge.js +1 -0
  230. package/dist/packages/energy-app-charging-card.d.ts +11 -0
  231. package/dist/packages/energy-app-charging-card.js +1 -0
  232. package/dist/packages/energy-app-data-bus.d.ts +12 -0
  233. package/dist/packages/energy-app-data-bus.js +1 -0
  234. package/dist/packages/energy-app-electricity-prices.d.ts +59 -0
  235. package/dist/packages/energy-app-electricity-prices.js +1 -0
  236. package/dist/packages/energy-app-interval.d.ts +15 -0
  237. package/dist/packages/energy-app-interval.js +1 -0
  238. package/dist/packages/energy-app-modbus.d.ts +46 -0
  239. package/dist/packages/energy-app-modbus.js +1 -0
  240. package/dist/packages/energy-app-network-device.d.ts +25 -0
  241. package/dist/packages/energy-app-network-device.js +1 -0
  242. package/dist/packages/energy-app-notification.d.ts +50 -0
  243. package/dist/packages/energy-app-notification.js +1 -0
  244. package/dist/packages/energy-app-ocpp.d.ts +52 -0
  245. package/dist/packages/energy-app-ocpp.js +13 -0
  246. package/dist/packages/energy-app-settings.d.ts +47 -0
  247. package/dist/packages/energy-app-settings.js +1 -0
  248. package/dist/packages/energy-app-storage.d.ts +14 -0
  249. package/dist/packages/energy-app-storage.js +1 -0
  250. package/dist/packages/energy-app-vehicle.d.ts +11 -0
  251. package/dist/packages/energy-app-vehicle.js +1 -0
  252. package/dist/permission-not-granted.d.ts +8 -0
  253. package/dist/permission-not-granted.js +14 -0
  254. package/dist/types/connect-appliance-type.enum.d.ts +6 -0
  255. package/dist/types/connect-appliance-type.enum.js +7 -0
  256. package/dist/types/energy-app-settings.d.ts +74 -0
  257. package/dist/types/energy-app-settings.js +1 -0
  258. package/dist/types/enyo-appliance.d.ts +81 -0
  259. package/dist/types/enyo-appliance.js +30 -0
  260. package/dist/types/enyo-authentication.d.ts +69 -0
  261. package/dist/types/enyo-authentication.js +6 -0
  262. package/dist/types/enyo-battery-appliance.d.ts +6 -0
  263. package/dist/types/enyo-battery-appliance.js +1 -0
  264. package/dist/types/enyo-charge.d.ts +82 -0
  265. package/dist/types/enyo-charge.js +12 -0
  266. package/dist/types/enyo-charger-appliance.d.ts +49 -0
  267. package/dist/types/enyo-charger-appliance.js +38 -0
  268. package/dist/types/enyo-charging-card.d.ts +11 -0
  269. package/dist/types/enyo-charging-card.js +1 -0
  270. package/dist/types/enyo-data-bus-value.d.ts +379 -0
  271. package/dist/types/enyo-data-bus-value.js +75 -0
  272. package/dist/types/enyo-electricity-prices.d.ts +63 -0
  273. package/dist/types/enyo-electricity-prices.js +1 -0
  274. package/dist/types/enyo-energy-tariff.d.ts +70 -0
  275. package/dist/types/enyo-energy-tariff.js +1 -0
  276. package/dist/types/enyo-heatpump-appliance.d.ts +34 -0
  277. package/dist/types/enyo-heatpump-appliance.js +16 -0
  278. package/dist/types/enyo-inverter-appliance.d.ts +3 -0
  279. package/dist/types/enyo-inverter-appliance.js +1 -0
  280. package/dist/types/enyo-meter-appliance.d.ts +10 -0
  281. package/dist/types/enyo-meter-appliance.js +7 -0
  282. package/dist/types/enyo-network-device.d.ts +31 -0
  283. package/dist/types/enyo-network-device.js +1 -0
  284. package/dist/types/enyo-notification.d.ts +48 -0
  285. package/dist/types/enyo-notification.js +1 -0
  286. package/dist/types/enyo-settings.d.ts +74 -0
  287. package/dist/types/enyo-settings.js +1 -0
  288. package/dist/types/enyo-source.enum.d.ts +4 -0
  289. package/dist/types/enyo-source.enum.js +5 -0
  290. package/dist/types/enyo-vehicle.d.ts +12 -0
  291. package/dist/types/enyo-vehicle.js +1 -0
  292. package/dist/types/enyo-websocket-connection.d.ts +8 -0
  293. package/dist/types/enyo-websocket-connection.js +1 -0
  294. package/dist/types/hems-one-appliance.d.ts +81 -0
  295. package/dist/types/hems-one-appliance.js +30 -0
  296. package/dist/types/hems-one-authentication.d.ts +69 -0
  297. package/dist/types/hems-one-authentication.js +6 -0
  298. package/dist/types/hems-one-battery-appliance.d.ts +6 -0
  299. package/dist/types/hems-one-battery-appliance.js +1 -0
  300. package/dist/types/hems-one-charge.d.ts +82 -0
  301. package/dist/types/hems-one-charge.js +12 -0
  302. package/dist/types/hems-one-charger-appliance.d.ts +49 -0
  303. package/dist/types/hems-one-charger-appliance.js +38 -0
  304. package/dist/types/hems-one-charging-card.d.ts +11 -0
  305. package/dist/types/hems-one-charging-card.js +1 -0
  306. package/dist/types/hems-one-data-bus-command.d.ts +34 -0
  307. package/dist/types/hems-one-data-bus-command.js +6 -0
  308. package/dist/types/hems-one-data-bus-value.d.ts +379 -0
  309. package/dist/types/hems-one-data-bus-value.js +75 -0
  310. package/dist/types/hems-one-electricity-prices.d.ts +63 -0
  311. package/dist/types/hems-one-electricity-prices.js +1 -0
  312. package/dist/types/hems-one-energy-tariff.d.ts +70 -0
  313. package/dist/types/hems-one-energy-tariff.js +1 -0
  314. package/dist/types/hems-one-heatpump-appliance.d.ts +34 -0
  315. package/dist/types/hems-one-heatpump-appliance.js +16 -0
  316. package/dist/types/hems-one-inverter-appliance.d.ts +3 -0
  317. package/dist/types/hems-one-inverter-appliance.js +1 -0
  318. package/dist/types/hems-one-meter-appliance.d.ts +10 -0
  319. package/dist/types/hems-one-meter-appliance.js +7 -0
  320. package/dist/types/hems-one-network-device.d.ts +31 -0
  321. package/dist/types/hems-one-network-device.js +1 -0
  322. package/dist/types/hems-one-source.enum.d.ts +4 -0
  323. package/dist/types/hems-one-source.enum.js +5 -0
  324. package/dist/types/hems-one-vehicle.d.ts +12 -0
  325. package/dist/types/hems-one-vehicle.js +1 -0
  326. package/dist/types/hems-one-websocket-connection.d.ts +8 -0
  327. package/dist/types/hems-one-websocket-connection.js +1 -0
  328. package/dist/version.d.ts +13 -0
  329. package/dist/version.js +15 -0
  330. 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
+ }