@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,67 @@
1
+ import { EnergyAppInterval } from "./packages/energy-app-interval.js";
2
+ import { EnergyAppModbus } from "./packages/energy-app-modbus.js";
3
+ import { EnergyAppStorage } from "./packages/energy-app-storage.js";
4
+ import { EnergyAppAppliance } from "./packages/energy-app-appliance.js";
5
+ import { EnergyAppNetworkDevice } from "./packages/energy-app-network-device.js";
6
+ import { EnergyAppDataBus } from "./packages/energy-app-data-bus.js";
7
+ import { EnergyAppOcpp } from "./packages/energy-app-ocpp.js";
8
+ import { EnergyAppCharge } from "./packages/energy-app-charge.js";
9
+ import { EnergyAppVehicle } from "./packages/energy-app-vehicle.js";
10
+ import { EnergyAppChargingCard } from "./packages/energy-app-charging-card.js";
11
+ import { EnergyAppAuthentication } from "./packages/energy-app-authentication.js";
12
+ import { EnergyAppSettings } from "./packages/energy-app-settings.js";
13
+ import { EnergyAppElectricityPrices } from "./packages/energy-app-electricity-prices.js";
14
+ import { EnergyAppNotification } from "./packages/energy-app-notification.js";
15
+ export declare enum EnergyAppStateEnum {
16
+ Launching = "launching",
17
+ Running = "running",
18
+ /** This state tells the user that a configuration is required which blocks the energy app from running*/
19
+ ConfigurationRequired = "configuration-required",
20
+ /** This state tells the user that an internet connection of the system is required which blocks the energy app from running*/
21
+ InternetConnectionRequired = "internet-connection-required"
22
+ }
23
+ /**
24
+ * Main API interface for enyo Energy App packages.
25
+ * Provides access to all system capabilities including lifecycle management,
26
+ * network operations, storage, and device communication.
27
+ */
28
+ export interface EnyoEnergyAppSdk {
29
+ /** Register a callback that gets called when the package is initialized */
30
+ register: (callback: (packageName: string, version: number) => void) => void;
31
+ /** Register a callback that gets called when the system is shutting down */
32
+ onShutdown: (callback: () => Promise<void>) => void;
33
+ /** Update the state of the Energy App. Default state set is launching*/
34
+ updateEnergyAppState: (state: EnergyAppStateEnum) => void;
35
+ /** Check if the system is currently online */
36
+ isSystemOnline: () => boolean;
37
+ /** Get the fetch API for HTTP requests */
38
+ useFetch: () => typeof fetch;
39
+ /** Get the interval management API */
40
+ useInterval: () => EnergyAppInterval;
41
+ /** Get the Modbus communication API */
42
+ useModbus: () => EnergyAppModbus;
43
+ /** Get the network device discovery API */
44
+ useNetworkDevices: () => EnergyAppNetworkDevice;
45
+ /** Get the persistent storage API */
46
+ useStorage: () => EnergyAppStorage;
47
+ /** Get the Appliance API */
48
+ useAppliances: () => EnergyAppAppliance;
49
+ /** Get the Data Bus API */
50
+ useDataBus: () => EnergyAppDataBus;
51
+ /** Get the OCPP API */
52
+ useOcpp: () => EnergyAppOcpp;
53
+ /** Get the Charge API*/
54
+ useCharge: () => EnergyAppCharge;
55
+ /** Get the Vehicle API*/
56
+ useVehicle: () => EnergyAppVehicle;
57
+ /** Get the Charging Card API*/
58
+ useChargingCard: () => EnergyAppChargingCard;
59
+ /** Get the Authentication API */
60
+ useAuthentication: () => EnergyAppAuthentication;
61
+ /** Get the Settings API */
62
+ useSettings: () => EnergyAppSettings;
63
+ /** Get the Electricity Prices API */
64
+ useElectricityPrices: () => EnergyAppElectricityPrices;
65
+ /** Get the Notification API */
66
+ useNotification: () => EnergyAppNotification;
67
+ }
@@ -0,0 +1,9 @@
1
+ export var EnergyAppStateEnum;
2
+ (function (EnergyAppStateEnum) {
3
+ EnergyAppStateEnum["Launching"] = "launching";
4
+ EnergyAppStateEnum["Running"] = "running";
5
+ /** This state tells the user that a configuration is required which blocks the energy app from running*/
6
+ EnergyAppStateEnum["ConfigurationRequired"] = "configuration-required";
7
+ /** This state tells the user that an internet connection of the system is required which blocks the energy app from running*/
8
+ EnergyAppStateEnum["InternetConnectionRequired"] = "internet-connection-required";
9
+ })(EnergyAppStateEnum || (EnergyAppStateEnum = {}));
@@ -0,0 +1,59 @@
1
+ import { EnyoAppliance } from "../../types/enyo-appliance.js";
2
+ import { EnyoBatteryStateEnum, type EnyoDataBusMessage } from "../../types/enyo-data-bus-value.js";
3
+ import { type EnergyAppModbusDevice, type EnergyAppModbusBatteryConfig, type IEnergyAppModbusInverter } from './interfaces.js';
4
+ import { EnergyApp } from "../../index.js";
5
+ export declare class EnergyAppModbusBattery implements EnergyAppModbusDevice {
6
+ readonly client: EnergyApp;
7
+ readonly config: EnergyAppModbusBatteryConfig;
8
+ readonly inverter?: IEnergyAppModbusInverter;
9
+ private readonly _registerMapper;
10
+ private _appliance?;
11
+ private _batteryMetadata?;
12
+ constructor(client: EnergyApp, config: EnergyAppModbusBatteryConfig);
13
+ get appliance(): EnyoAppliance;
14
+ get networkDevice(): import("../../types/enyo-network-device.js").EnyoNetworkDevice;
15
+ connect(): Promise<void>;
16
+ disconnect(): Promise<void>;
17
+ isConnected(): boolean;
18
+ updateData(): Promise<EnyoDataBusMessage[]>;
19
+ getSoc(): Promise<number | null>;
20
+ getCurrent(): Promise<number | null>;
21
+ getPower(): Promise<number | null>;
22
+ getVoltage(): Promise<number | null>;
23
+ /**
24
+ * Reads the drain percentage from modbus register.
25
+ * Drain percentage represents the percentage of maximum capacity being discharged.
26
+ *
27
+ * @returns Drain percentage (0-100), or null if not available
28
+ */
29
+ getDrainPercentage(): Promise<number | null>;
30
+ /**
31
+ * Reads the load percentage from modbus register.
32
+ * Load percentage represents the percentage of maximum capacity being charged.
33
+ *
34
+ * @returns Load percentage (0-100), or null if not available
35
+ */
36
+ getLoadPercentage(): Promise<number | null>;
37
+ /**
38
+ * Reads the current battery state from modbus registers.
39
+ * Maps the register value to EnyoBatteryApplianceStateEnum using the configured value mapping.
40
+ */
41
+ getBatteryState(): Promise<EnyoBatteryStateEnum | null>;
42
+ /**
43
+ * Calculates battery power from drain and load percentages.
44
+ *
45
+ * @param drainPercentage - Percentage of max capacity being drained (discharging, positive power)
46
+ * @param loadPercentage - Percentage of max capacity being loaded (charging, negative power)
47
+ * @param maxCapacityWh - Maximum battery capacity in Wh
48
+ * @returns Power in watts (positive for discharging, negative for charging), or null if calculation not possible
49
+ */
50
+ private _calculatePowerFromPercentages;
51
+ /**
52
+ * Discovers and caches battery metadata from modbus registers during connection.
53
+ * This method reads static metadata like max capacity and power limits once
54
+ * and stores them for later use in appliance creation.
55
+ */
56
+ private _discoverBatteryMetadata;
57
+ private _initializeAppliance;
58
+ modbusClient(): import("../../packages/energy-app-modbus.js").EnergyAppModbusInstance | undefined;
59
+ }
@@ -0,0 +1,384 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { EnyoApplianceConnectionType } from "../../types/enyo-appliance.js";
3
+ import { EnyoApplianceStateEnum, EnyoApplianceTypeEnum } from "../../types/enyo-appliance.js";
4
+ import { EnyoDataBusMessageEnum } from "../../types/enyo-data-bus-value.js";
5
+ import { EnyoSourceEnum } from "../../types/enyo-source.enum.js";
6
+ import { EnergyAppModbusConfigurationError } from './interfaces.js';
7
+ import { EnergyAppModbusRegisterMapper } from './EnergyAppModbusRegisterMapper.js';
8
+ import { EnergyAppModbusFaultTolerantReader } from './EnergyAppModbusFaultTolerantReader.js';
9
+ export class EnergyAppModbusBattery {
10
+ client;
11
+ config;
12
+ inverter;
13
+ _registerMapper;
14
+ _appliance;
15
+ _batteryMetadata;
16
+ constructor(client, config) {
17
+ this.client = client;
18
+ this.config = config;
19
+ this.config = config;
20
+ this.client = client;
21
+ this.inverter = config.inverter;
22
+ this._registerMapper = new EnergyAppModbusRegisterMapper();
23
+ // Validate configuration
24
+ const validation = this._registerMapper.validateRegisterMap(config.registers);
25
+ if (!validation.valid) {
26
+ throw new EnergyAppModbusConfigurationError(`Invalid battery configuration: ${validation.errors.join(', ')}`);
27
+ }
28
+ if (!config.inverter) {
29
+ throw new EnergyAppModbusConfigurationError('Battery requires an inverter reference');
30
+ }
31
+ }
32
+ get appliance() {
33
+ if (!this._appliance) {
34
+ throw new Error('Battery appliance not initialized. Call connect() first.');
35
+ }
36
+ return this._appliance;
37
+ }
38
+ get networkDevice() {
39
+ if (!this.inverter) {
40
+ throw new Error('Battery requires an inverter reference');
41
+ }
42
+ return this.inverter.networkDevice;
43
+ }
44
+ async connect() {
45
+ if (!this.inverter) {
46
+ throw new Error('Battery requires an inverter reference');
47
+ }
48
+ if (!this.inverter.isConnected()) {
49
+ throw new Error('Inverter must be connected before connecting battery');
50
+ }
51
+ console.log(`Connecting battery to inverter ${this.config.name[0]?.name}...`);
52
+ // Discover battery metadata during connection
53
+ this._batteryMetadata = await this._discoverBatteryMetadata();
54
+ // Initialize appliance
55
+ await this._initializeAppliance();
56
+ console.log(`Successfully connected battery ${this.config.name[0]?.name}`);
57
+ }
58
+ async disconnect() {
59
+ try {
60
+ await this.inverter?.disconnect();
61
+ console.log(`Disconnected from battery at ${this.networkDevice.hostname}`);
62
+ }
63
+ catch (error) {
64
+ console.warn(`Error disconnecting from battery: ${error.message}`);
65
+ }
66
+ }
67
+ isConnected() {
68
+ return this.inverter?.isConnected() || false;
69
+ }
70
+ async updateData() {
71
+ if (!this.inverter || !this.inverter.isConnected() || !this._appliance) {
72
+ throw new Error('Battery not connected. Call connect() first.');
73
+ }
74
+ // Use the inverter's modbus instance
75
+ const modbusInstance = this.inverter._modbusInstance;
76
+ const connectionHealth = this.inverter._connectionHealth;
77
+ if (!modbusInstance) {
78
+ throw new Error('Inverter modbus instance not available');
79
+ }
80
+ const reader = new EnergyAppModbusFaultTolerantReader(modbusInstance, connectionHealth);
81
+ const registerData = await this._registerMapper.readMultipleRegisters(reader, this.config.registers);
82
+ // Extract battery data
83
+ const batteryCurrent = registerData.current || undefined;
84
+ const batteryVoltage = registerData.voltage || undefined;
85
+ const batterySoC = registerData.soc || undefined;
86
+ const batteryPowerW = await this.getPower();
87
+ // Read current battery state if available
88
+ let batteryState;
89
+ try {
90
+ batteryState = await this.getBatteryState() || undefined;
91
+ }
92
+ catch (error) {
93
+ console.warn(`Failed to read battery state: ${error.message}`);
94
+ }
95
+ const message = {
96
+ type: 'message',
97
+ source: EnyoSourceEnum.Device,
98
+ id: randomUUID(),
99
+ timestampIso: new Date().toISOString(),
100
+ message: EnyoDataBusMessageEnum.BatteryValuesUpdateV1,
101
+ applianceId: this._appliance.id,
102
+ data: {
103
+ state: batteryState,
104
+ batteryPowerW: batteryPowerW ?? undefined,
105
+ batterySoC
106
+ },
107
+ resolution: '10s'
108
+ };
109
+ console.log(`Battery Data (${this.config.name[0]?.name}): State=${batteryState || 'N/A'}, Power=${batteryPowerW}W, SoC=${batterySoC}%, Current=${batteryCurrent}A, Voltage=${batteryVoltage}V`);
110
+ return [message];
111
+ }
112
+ // Convenience methods for accessing specific register values
113
+ async getSoc() {
114
+ if (!this.inverter || !this.config.registers.soc) {
115
+ return null;
116
+ }
117
+ const modbusInstance = this.inverter._modbusInstance;
118
+ const connectionHealth = this.inverter._connectionHealth;
119
+ if (!modbusInstance) {
120
+ return null;
121
+ }
122
+ const reader = new EnergyAppModbusFaultTolerantReader(modbusInstance, connectionHealth);
123
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.soc);
124
+ return result.success ? result.value : null;
125
+ }
126
+ async getCurrent() {
127
+ if (!this.inverter || !this.config.registers.current) {
128
+ return null;
129
+ }
130
+ const modbusInstance = this.inverter._modbusInstance;
131
+ const connectionHealth = this.inverter._connectionHealth;
132
+ if (!modbusInstance) {
133
+ return null;
134
+ }
135
+ const reader = new EnergyAppModbusFaultTolerantReader(modbusInstance, connectionHealth);
136
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.current);
137
+ return result.success ? result.value : null;
138
+ }
139
+ async getPower() {
140
+ if (!this.inverter) {
141
+ return null;
142
+ }
143
+ // Priority 1: Direct power register
144
+ if (this.config.registers.power) {
145
+ const modbusInstance = this.inverter._modbusInstance;
146
+ const connectionHealth = this.inverter._connectionHealth;
147
+ if (!modbusInstance) {
148
+ return null;
149
+ }
150
+ const reader = new EnergyAppModbusFaultTolerantReader(modbusInstance, connectionHealth);
151
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.power);
152
+ if (result.success && result.value !== undefined) {
153
+ return result.value;
154
+ }
155
+ }
156
+ // Priority 2: Calculate from percentage registers
157
+ if (this.config.registers.drainPercentage || this.config.registers.loadPercentage) {
158
+ const drainPercentage = await this.getDrainPercentage();
159
+ const loadPercentage = await this.getLoadPercentage();
160
+ const maxCapacityWh = this._batteryMetadata?.maxCapacityWh || null;
161
+ const percentagePower = this._calculatePowerFromPercentages(drainPercentage, loadPercentage, maxCapacityWh);
162
+ if (percentagePower !== null) {
163
+ return percentagePower;
164
+ }
165
+ }
166
+ // Priority 3: Calculate from current and voltage
167
+ const current = await this.getCurrent();
168
+ const voltage = await this.getVoltage();
169
+ if (current !== null && voltage !== null) {
170
+ return current * voltage;
171
+ }
172
+ return null;
173
+ }
174
+ async getVoltage() {
175
+ if (!this.inverter || !this.config.registers.voltage) {
176
+ return null;
177
+ }
178
+ const modbusInstance = this.inverter._modbusInstance;
179
+ const connectionHealth = this.inverter._connectionHealth;
180
+ if (!modbusInstance) {
181
+ return null;
182
+ }
183
+ const reader = new EnergyAppModbusFaultTolerantReader(modbusInstance, connectionHealth);
184
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.voltage);
185
+ return result.success ? result.value : null;
186
+ }
187
+ /**
188
+ * Reads the drain percentage from modbus register.
189
+ * Drain percentage represents the percentage of maximum capacity being discharged.
190
+ *
191
+ * @returns Drain percentage (0-100), or null if not available
192
+ */
193
+ async getDrainPercentage() {
194
+ if (!this.inverter || !this.config.registers.drainPercentage) {
195
+ return null;
196
+ }
197
+ const modbusInstance = this.inverter._modbusInstance;
198
+ const connectionHealth = this.inverter._connectionHealth;
199
+ if (!modbusInstance) {
200
+ return null;
201
+ }
202
+ const reader = new EnergyAppModbusFaultTolerantReader(modbusInstance, connectionHealth);
203
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.drainPercentage);
204
+ return result.success ? result.value : null;
205
+ }
206
+ /**
207
+ * Reads the load percentage from modbus register.
208
+ * Load percentage represents the percentage of maximum capacity being charged.
209
+ *
210
+ * @returns Load percentage (0-100), or null if not available
211
+ */
212
+ async getLoadPercentage() {
213
+ if (!this.inverter || !this.config.registers.loadPercentage) {
214
+ return null;
215
+ }
216
+ const modbusInstance = this.inverter._modbusInstance;
217
+ const connectionHealth = this.inverter._connectionHealth;
218
+ if (!modbusInstance) {
219
+ return null;
220
+ }
221
+ const reader = new EnergyAppModbusFaultTolerantReader(modbusInstance, connectionHealth);
222
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.loadPercentage);
223
+ return result.success ? result.value : null;
224
+ }
225
+ /**
226
+ * Reads the current battery state from modbus registers.
227
+ * Maps the register value to EnyoBatteryApplianceStateEnum using the configured value mapping.
228
+ */
229
+ async getBatteryState() {
230
+ if (!this.inverter || !this.config.registers.state) {
231
+ return null;
232
+ }
233
+ const modbusInstance = this.inverter._modbusInstance;
234
+ const connectionHealth = this.inverter._connectionHealth;
235
+ if (!modbusInstance) {
236
+ return null;
237
+ }
238
+ try {
239
+ const reader = new EnergyAppModbusFaultTolerantReader(modbusInstance, connectionHealth);
240
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.state);
241
+ if (!result.success || result.value === undefined) {
242
+ return null;
243
+ }
244
+ // Use configured value mapping if available
245
+ if (this.config.registers.state.valueMapping) {
246
+ const mapping = this.config.registers.state.valueMapping.find(m => m.value === result.value);
247
+ if (mapping) {
248
+ return mapping.mappedState;
249
+ }
250
+ else {
251
+ console.warn(`No mapping found for battery state value: ${result.value}. Available mappings: ${this.config.registers.state.valueMapping.map(m => m.value).join(', ')}`);
252
+ return null;
253
+ }
254
+ }
255
+ else {
256
+ console.warn('Battery state register configured without value mapping. Please configure valueMapping in register config.');
257
+ return null;
258
+ }
259
+ }
260
+ catch (error) {
261
+ console.warn(`Failed to read battery state: ${error.message}`);
262
+ return null;
263
+ }
264
+ }
265
+ /**
266
+ * Calculates battery power from drain and load percentages.
267
+ *
268
+ * @param drainPercentage - Percentage of max capacity being drained (discharging, positive power)
269
+ * @param loadPercentage - Percentage of max capacity being loaded (charging, negative power)
270
+ * @param maxCapacityWh - Maximum battery capacity in Wh
271
+ * @returns Power in watts (positive for discharging, negative for charging), or null if calculation not possible
272
+ */
273
+ _calculatePowerFromPercentages(drainPercentage, loadPercentage, maxCapacityWh) {
274
+ if (!maxCapacityWh) {
275
+ return null;
276
+ }
277
+ // Priority: drain percentage takes precedence over load percentage
278
+ if (drainPercentage !== null && drainPercentage !== undefined) {
279
+ // Discharging: positive power value
280
+ return (drainPercentage / 100) * maxCapacityWh;
281
+ }
282
+ if (loadPercentage !== null && loadPercentage !== undefined) {
283
+ // Charging: negative power value
284
+ return -(loadPercentage / 100) * maxCapacityWh;
285
+ }
286
+ return null;
287
+ }
288
+ /**
289
+ * Discovers and caches battery metadata from modbus registers during connection.
290
+ * This method reads static metadata like max capacity and power limits once
291
+ * and stores them for later use in appliance creation.
292
+ */
293
+ async _discoverBatteryMetadata() {
294
+ if (!this.inverter || !this.inverter.isConnected()) {
295
+ throw new Error('Inverter must be connected before discovering battery metadata');
296
+ }
297
+ const modbusInstance = this.inverter._modbusInstance;
298
+ const connectionHealth = this.inverter._connectionHealth;
299
+ if (!modbusInstance) {
300
+ throw new Error('Inverter modbus instance not available');
301
+ }
302
+ const reader = new EnergyAppModbusFaultTolerantReader(modbusInstance, connectionHealth);
303
+ const metadata = {};
304
+ try {
305
+ // Read max capacity if configured
306
+ if (this.config.registers.maxCapacityWh) {
307
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.maxCapacityWh);
308
+ if (result.success && result.value !== undefined) {
309
+ metadata.maxCapacityWh = result.value;
310
+ console.log(`Discovered battery max capacity: ${result.value} Wh`);
311
+ }
312
+ }
313
+ // Read max discharge power if configured
314
+ if (this.config.registers.maxDischargePowerW) {
315
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.maxDischargePowerW);
316
+ if (result.success && result.value !== undefined) {
317
+ metadata.maxDischargePowerW = result.value;
318
+ console.log(`Discovered battery max discharge power: ${result.value} W`);
319
+ }
320
+ }
321
+ // Read max charging power if configured
322
+ if (this.config.registers.maxChargingPowerW) {
323
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.maxChargingPowerW);
324
+ if (result.success && result.value !== undefined) {
325
+ metadata.maxChargingPowerW = result.value;
326
+ console.log(`Discovered battery max charging power: ${result.value} W`);
327
+ }
328
+ }
329
+ // Set connected appliance ID to the inverter's appliance ID if available
330
+ if (this.inverter.appliance?.id) {
331
+ metadata.connectedToApplianceId = this.inverter.appliance.id;
332
+ }
333
+ }
334
+ catch (error) {
335
+ console.warn(`Warning: Failed to discover some battery metadata: ${error.message}`);
336
+ }
337
+ return metadata;
338
+ }
339
+ async _initializeAppliance() {
340
+ if (!this.inverter) {
341
+ throw new Error('Battery requires an inverter reference');
342
+ }
343
+ const appliances = await this.client.useAppliances().list();
344
+ let existingAppliance = appliances.find(a => a.networkDeviceIds.includes(this.inverter.networkDevice.id) &&
345
+ a.type === EnyoApplianceTypeEnum.Storage);
346
+ if (!existingAppliance) {
347
+ // Create new appliance
348
+ existingAppliance = {
349
+ id: randomUUID(),
350
+ type: EnyoApplianceTypeEnum.Storage,
351
+ networkDeviceIds: [this.inverter.networkDevice.id],
352
+ name: this.config.name,
353
+ metadata: {
354
+ state: EnyoApplianceStateEnum.Connected,
355
+ connectionType: EnyoApplianceConnectionType.Connector,
356
+ ...this.config.options?.topology && { topology: this.config.options.topology }
357
+ },
358
+ battery: this._batteryMetadata
359
+ };
360
+ await this.client.useAppliances().save(existingAppliance, undefined);
361
+ console.log(`Created new battery appliance: ${this.config.name[0]?.name}`);
362
+ }
363
+ else {
364
+ // Update existing appliance
365
+ existingAppliance = {
366
+ ...existingAppliance,
367
+ name: this.config.name,
368
+ metadata: {
369
+ ...existingAppliance.metadata,
370
+ state: EnyoApplianceStateEnum.Connected,
371
+ connectionType: EnyoApplianceConnectionType.Connector,
372
+ ...this.config.options?.topology && { topology: this.config.options.topology }
373
+ },
374
+ battery: this._batteryMetadata
375
+ };
376
+ await this.client.useAppliances().save(existingAppliance, existingAppliance.id);
377
+ console.log(`Updated existing battery appliance: ${this.config.name[0]?.name}`);
378
+ }
379
+ this._appliance = existingAppliance;
380
+ }
381
+ modbusClient() {
382
+ return this.inverter?.modbusClient();
383
+ }
384
+ }
@@ -0,0 +1,15 @@
1
+ import type { IConnectionHealth } from './interfaces.js';
2
+ export declare class EnergyAppModbusConnectionHealth implements IConnectionHealth {
3
+ private _consecutiveFailures;
4
+ private _lastError?;
5
+ private _lastSuccessTime;
6
+ private readonly _maxFailures;
7
+ private readonly _staleThresholdMs;
8
+ recordSuccess(): void;
9
+ recordFailure(error: Error): void;
10
+ isHealthy(): boolean;
11
+ getConsecutiveFailures(): number;
12
+ getLastError(): Error | undefined;
13
+ getLastSuccessTime(): Date;
14
+ isStale(): boolean;
15
+ }
@@ -0,0 +1,33 @@
1
+ export class EnergyAppModbusConnectionHealth {
2
+ _consecutiveFailures = 0;
3
+ _lastError;
4
+ _lastSuccessTime = new Date();
5
+ _maxFailures = 5;
6
+ _staleThresholdMs = 5 * 60 * 1000; // 5 minutes
7
+ recordSuccess() {
8
+ this._consecutiveFailures = 0;
9
+ this._lastError = undefined;
10
+ this._lastSuccessTime = new Date();
11
+ }
12
+ recordFailure(error) {
13
+ this._consecutiveFailures++;
14
+ this._lastError = error;
15
+ }
16
+ isHealthy() {
17
+ const isNotFailing = this._consecutiveFailures < this._maxFailures;
18
+ const isNotStale = (Date.now() - this._lastSuccessTime.getTime()) < this._staleThresholdMs;
19
+ return isNotFailing && isNotStale;
20
+ }
21
+ getConsecutiveFailures() {
22
+ return this._consecutiveFailures;
23
+ }
24
+ getLastError() {
25
+ return this._lastError;
26
+ }
27
+ getLastSuccessTime() {
28
+ return new Date(this._lastSuccessTime);
29
+ }
30
+ isStale() {
31
+ return (Date.now() - this._lastSuccessTime.getTime()) > this._staleThresholdMs;
32
+ }
33
+ }
@@ -0,0 +1,41 @@
1
+ import type { IDataTypeConverter, EnergyAppModbusDataType } from './interfaces.js';
2
+ /**
3
+ * Data Type Converter for Modbus Register Values
4
+ *
5
+ * @description Converts raw buffer data from Modbus registers into appropriate JavaScript types
6
+ */
7
+ export declare class EnergyAppModbusDataTypeConverter implements IDataTypeConverter {
8
+ /**
9
+ * Converts raw buffer data from Modbus registers into appropriate JavaScript types
10
+ *
11
+ * @param buffer - Raw buffer data from Modbus registers
12
+ * @param dataType - The expected data type for conversion
13
+ * @param scale - Optional scaling factor for numeric types (divide by 10^scale)
14
+ * @param quantity - Required for string types, specifies the string length in characters
15
+ * @returns Converted value (number for numeric types, string for string type)
16
+ */
17
+ convertFromBuffer(buffer: Buffer, dataType: EnergyAppModbusDataType, scale?: number, quantity?: number): any;
18
+ /**
19
+ * Applies scaling to numeric values
20
+ *
21
+ * @param value - The numeric value to scale
22
+ * @param scale - Optional scaling factor (divide by 10^scale)
23
+ * @returns Scaled value or original value if no scale provided
24
+ */
25
+ private applyScale;
26
+ /**
27
+ * Validates if a value is valid for the given data type
28
+ *
29
+ * @param value - The value to validate
30
+ * @param dataType - The expected data type
31
+ * @returns True if the value is valid, false otherwise
32
+ */
33
+ isValidValue(value: any, dataType: EnergyAppModbusDataType): boolean;
34
+ /**
35
+ * Calculates the number of Modbus registers required for a given data type
36
+ *
37
+ * @param dataType - The data type to calculate register quantity for
38
+ * @returns Number of 16-bit registers required
39
+ */
40
+ getRegisterQuantity(dataType: EnergyAppModbusDataType): number;
41
+ }