@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,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnergyAppModbusDataTypeConverter = void 0;
4
+ /**
5
+ * Data Type Converter for Modbus Register Values
6
+ *
7
+ * @description Converts raw buffer data from Modbus registers into appropriate JavaScript types
8
+ */
9
+ class EnergyAppModbusDataTypeConverter {
10
+ /**
11
+ * Converts raw buffer data from Modbus registers into appropriate JavaScript types
12
+ *
13
+ * @param buffer - Raw buffer data from Modbus registers
14
+ * @param dataType - The expected data type for conversion
15
+ * @param scale - Optional scaling factor for numeric types (divide by 10^scale)
16
+ * @param quantity - Required for string types, specifies the string length in characters
17
+ * @returns Converted value (number for numeric types, string for string type)
18
+ */
19
+ convertFromBuffer(buffer, dataType, scale, quantity) {
20
+ try {
21
+ switch (dataType) {
22
+ case 'uint16': {
23
+ const value = buffer.readUInt16BE(0);
24
+ return this.applyScale(value, scale);
25
+ }
26
+ case 'int16': {
27
+ const value = buffer.readInt16BE(0);
28
+ return this.applyScale(value, scale);
29
+ }
30
+ case 'uint32': {
31
+ const value = buffer.readUInt32BE(0);
32
+ return this.applyScale(value, scale);
33
+ }
34
+ case 'int32': {
35
+ const value = buffer.readInt32BE(0);
36
+ return this.applyScale(value, scale);
37
+ }
38
+ case 'float32': {
39
+ const value = buffer.readFloatBE(0);
40
+ return this.applyScale(value, scale);
41
+ }
42
+ case 'string': {
43
+ if (!quantity || quantity <= 0) {
44
+ throw new Error('String data type requires a valid quantity parameter');
45
+ }
46
+ // Convert buffer to string, handling null termination and trimming whitespace
47
+ return buffer.toString('ascii', 0, Math.min(buffer.length, quantity * 2))
48
+ .replace(/\u0000/gmi, '') // Remove null terminators
49
+ .trim(); // Remove leading/trailing whitespace
50
+ }
51
+ default:
52
+ throw new Error(`Unsupported data type: ${dataType}`);
53
+ }
54
+ }
55
+ catch (error) {
56
+ console.error(`Failed to convert Buffer (length ${buffer.length}) to ${dataType}: ${error}`, error);
57
+ throw error;
58
+ }
59
+ }
60
+ /**
61
+ * Applies scaling to numeric values
62
+ *
63
+ * @param value - The numeric value to scale
64
+ * @param scale - Optional scaling factor (divide by 10^scale)
65
+ * @returns Scaled value or original value if no scale provided
66
+ */
67
+ applyScale(value, scale) {
68
+ if (scale !== undefined && scale > 0) {
69
+ return value / Math.pow(10, scale);
70
+ }
71
+ return value;
72
+ }
73
+ /**
74
+ * Validates if a value is valid for the given data type
75
+ *
76
+ * @param value - The value to validate
77
+ * @param dataType - The expected data type
78
+ * @returns True if the value is valid, false otherwise
79
+ */
80
+ isValidValue(value, dataType) {
81
+ if (value === null || value === undefined) {
82
+ return false;
83
+ }
84
+ switch (dataType) {
85
+ case 'string': {
86
+ // For strings, check if it's a valid string and not empty
87
+ return typeof value === 'string' && value.length > 0;
88
+ }
89
+ case 'uint16':
90
+ case 'int16':
91
+ case 'uint32':
92
+ case 'int32':
93
+ case 'float32': {
94
+ // For numeric types, check if it's a valid number and not a common NaN value
95
+ if (typeof value !== 'number' || isNaN(value)) {
96
+ return false;
97
+ }
98
+ // Check for common NaN values used in Modbus devices
99
+ const nanValues = [0x8000, 0xFFFF, 0x80000000, 0xFFFFFFFF];
100
+ // For signed values, also check negative NaN indicators
101
+ if (dataType === 'int16' || dataType === 'int32') {
102
+ nanValues.push(-32768, -2147483648);
103
+ }
104
+ return !nanValues.includes(value);
105
+ }
106
+ default:
107
+ return false;
108
+ }
109
+ }
110
+ /**
111
+ * Calculates the number of Modbus registers required for a given data type
112
+ *
113
+ * @param dataType - The data type to calculate register quantity for
114
+ * @returns Number of 16-bit registers required
115
+ */
116
+ getRegisterQuantity(dataType) {
117
+ switch (dataType) {
118
+ case 'uint16':
119
+ case 'int16':
120
+ return 1;
121
+ case 'uint32':
122
+ case 'int32':
123
+ case 'float32':
124
+ return 2;
125
+ default:
126
+ throw new Error(`Unsupported data type: ${dataType}`);
127
+ }
128
+ }
129
+ }
130
+ exports.EnergyAppModbusDataTypeConverter = EnergyAppModbusDataTypeConverter;
@@ -0,0 +1,41 @@
1
+ import type { IDataTypeConverter, EnergyAppModbusDataType } from './interfaces.cjs';
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
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnergyAppModbusFaultTolerantReader = void 0;
4
+ class EnergyAppModbusFaultTolerantReader {
5
+ _modbusInstance;
6
+ _connectionHealth;
7
+ constructor(modbusInstance, connectionHealth) {
8
+ this._modbusInstance = modbusInstance;
9
+ this._connectionHealth = connectionHealth;
10
+ }
11
+ async readHoldingRegisters(startAddress, quantity) {
12
+ try {
13
+ const result = await this._modbusInstance.readHoldingRegisters(startAddress, quantity);
14
+ this._connectionHealth.recordSuccess();
15
+ return {
16
+ success: true,
17
+ value: result
18
+ };
19
+ }
20
+ catch (error) {
21
+ const err = error;
22
+ this._connectionHealth.recordFailure(err);
23
+ console.warn(`Failed to read registers ${startAddress}-${startAddress + quantity - 1}: ${err.message} ` +
24
+ `(consecutive failures: ${this._connectionHealth.getConsecutiveFailures()})`);
25
+ return {
26
+ success: false,
27
+ error: err
28
+ };
29
+ }
30
+ }
31
+ async readInputRegisters(startAddress, quantity) {
32
+ try {
33
+ // Note: This would need to be implemented in the SDK if input registers are needed
34
+ throw new Error('Input registers not supported by current SDK');
35
+ }
36
+ catch (error) {
37
+ const err = error;
38
+ this._connectionHealth.recordFailure(err);
39
+ return {
40
+ success: false,
41
+ error: err
42
+ };
43
+ }
44
+ }
45
+ isHealthy() {
46
+ return this._connectionHealth.isHealthy();
47
+ }
48
+ }
49
+ exports.EnergyAppModbusFaultTolerantReader = EnergyAppModbusFaultTolerantReader;
@@ -0,0 +1,10 @@
1
+ import type { EnergyAppModbusInstance } from "../../packages/energy-app-modbus.cjs";
2
+ import type { IRegisterReader, IConnectionHealth, RegisterReadResult } from './interfaces.cjs';
3
+ export declare class EnergyAppModbusFaultTolerantReader implements IRegisterReader {
4
+ private readonly _modbusInstance;
5
+ private readonly _connectionHealth;
6
+ constructor(modbusInstance: EnergyAppModbusInstance, connectionHealth: IConnectionHealth);
7
+ readHoldingRegisters(startAddress: number, quantity: number): Promise<RegisterReadResult<Buffer>>;
8
+ readInputRegisters(startAddress: number, quantity: number): Promise<RegisterReadResult<Buffer>>;
9
+ isHealthy(): boolean;
10
+ }
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnergyAppModbusInverter = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const enyo_appliance_js_1 = require("../../types/enyo-appliance.cjs");
6
+ const enyo_appliance_js_2 = require("../../types/enyo-appliance.cjs");
7
+ const enyo_data_bus_value_js_1 = require("../../types/enyo-data-bus-value.cjs");
8
+ const enyo_source_enum_js_1 = require("../../types/enyo-source.enum.cjs");
9
+ const interfaces_js_1 = require("./interfaces.cjs");
10
+ const EnergyAppModbusRegisterMapper_js_1 = require("./EnergyAppModbusRegisterMapper.cjs");
11
+ const EnergyAppModbusConnectionHealth_js_1 = require("./EnergyAppModbusConnectionHealth.cjs");
12
+ const EnergyAppModbusFaultTolerantReader_js_1 = require("./EnergyAppModbusFaultTolerantReader.cjs");
13
+ class EnergyAppModbusInverter {
14
+ client;
15
+ config;
16
+ networkDevice;
17
+ _registerMapper;
18
+ _connectionHealth;
19
+ _modbusInstance;
20
+ _appliance;
21
+ _inverterMetadata;
22
+ constructor(client, config, networkDevice) {
23
+ this.client = client;
24
+ this.config = config;
25
+ this.networkDevice = networkDevice;
26
+ this._registerMapper = new EnergyAppModbusRegisterMapper_js_1.EnergyAppModbusRegisterMapper();
27
+ this._connectionHealth = new EnergyAppModbusConnectionHealth_js_1.EnergyAppModbusConnectionHealth();
28
+ // Validate configuration
29
+ const validation = this._registerMapper.validateRegisterMap(config.registers);
30
+ if (!validation.valid) {
31
+ throw new interfaces_js_1.EnergyAppModbusConfigurationError(`Invalid inverter configuration: ${validation.errors.join(', ')}`);
32
+ }
33
+ this.client = client;
34
+ this.config = config;
35
+ this.networkDevice = networkDevice;
36
+ }
37
+ get appliance() {
38
+ if (!this._appliance) {
39
+ throw new Error('Appliance not initialized. Call connect() first.');
40
+ }
41
+ return this._appliance;
42
+ }
43
+ async connect() {
44
+ try {
45
+ console.log(`Connecting to inverter at ${this.networkDevice.hostname}...`);
46
+ // Create modbus connection
47
+ this._modbusInstance = await this.client.useModbus().connect({
48
+ host: this.networkDevice.hostname,
49
+ unitId: this.config.options?.unitId || 1,
50
+ port: this.config.options?.port || 502,
51
+ timeout: this.config.options?.timeout || 5000
52
+ });
53
+ // Discover inverter metadata during connection
54
+ this._inverterMetadata = await this._discoverInverterMetadata();
55
+ // Initialize appliance
56
+ await this._initializeAppliance();
57
+ console.log(`Successfully connected to inverter ${this.config.name[0]?.name} at ${this.networkDevice.hostname}`);
58
+ }
59
+ catch (error) {
60
+ throw new interfaces_js_1.EnergyAppModbusConnectionError(`Failed to connect to inverter at ${this.networkDevice.hostname}: ${error.message}`, error);
61
+ }
62
+ }
63
+ async disconnect() {
64
+ if (this._modbusInstance) {
65
+ try {
66
+ await this._modbusInstance.disconnect();
67
+ console.log(`Disconnected from inverter at ${this.networkDevice.hostname}`);
68
+ }
69
+ catch (error) {
70
+ console.warn(`Error disconnecting from inverter: ${error.message}`);
71
+ }
72
+ finally {
73
+ this._modbusInstance = undefined;
74
+ }
75
+ }
76
+ }
77
+ isConnected() {
78
+ return this._modbusInstance !== undefined && this._connectionHealth.isHealthy();
79
+ }
80
+ async updateData() {
81
+ if (!this._modbusInstance || !this._appliance) {
82
+ throw new Error('Inverter not connected. Call connect() first.');
83
+ }
84
+ const reader = new EnergyAppModbusFaultTolerantReader_js_1.EnergyAppModbusFaultTolerantReader(this._modbusInstance, this._connectionHealth);
85
+ const registerData = await this._registerMapper.readMultipleRegisters(reader, this.config.registers);
86
+ // Extract known values with fallbacks
87
+ const pvPowerW = registerData.power || 0; // Required field, default to 0 if not available
88
+ const voltageL1 = registerData.voltageL1 || 0; // Required field, default to 0 if not available
89
+ const voltageL2 = registerData.voltageL2 || undefined;
90
+ const voltageL3 = registerData.voltageL3 || undefined;
91
+ // Read current inverter state if available
92
+ let inverterState;
93
+ try {
94
+ inverterState = await this.getInverterState() || undefined;
95
+ }
96
+ catch (error) {
97
+ console.warn(`Failed to read inverter state: ${error.message}`);
98
+ }
99
+ // Read active power limitation if available
100
+ let activePowerLimitationW;
101
+ try {
102
+ activePowerLimitationW = await this.getActivePowerLimitation() || undefined;
103
+ }
104
+ catch (error) {
105
+ console.warn(`Failed to read active power limitation: ${error.message}`);
106
+ }
107
+ // Read string data if available
108
+ const strings = [];
109
+ for (let stringIndex = 1; stringIndex <= 4; stringIndex++) {
110
+ let stringPower;
111
+ let stringVoltage;
112
+ let hasData = false;
113
+ // Try to read string power
114
+ try {
115
+ const power = await this.getStringPower(stringIndex);
116
+ if (power !== null) {
117
+ stringPower = power;
118
+ hasData = true;
119
+ }
120
+ }
121
+ catch (error) {
122
+ console.warn(`Failed to read string${stringIndex} power: ${error.message}`);
123
+ }
124
+ // Try to read string voltage
125
+ try {
126
+ const voltage = await this.getStringVoltage(stringIndex);
127
+ if (voltage !== null) {
128
+ stringVoltage = voltage;
129
+ hasData = true;
130
+ }
131
+ }
132
+ catch (error) {
133
+ console.warn(`Failed to read string${stringIndex} voltage: ${error.message}`);
134
+ }
135
+ // Only add string to array if we have at least one value
136
+ if (hasData) {
137
+ strings.push({
138
+ index: stringIndex,
139
+ ...(stringVoltage !== undefined && { voltage: stringVoltage }),
140
+ ...(stringPower !== undefined && { powerW: stringPower })
141
+ });
142
+ }
143
+ }
144
+ const message = {
145
+ type: 'message',
146
+ source: enyo_source_enum_js_1.EnyoSourceEnum.Device,
147
+ id: (0, node_crypto_1.randomUUID)(),
148
+ timestampIso: new Date().toISOString(),
149
+ message: enyo_data_bus_value_js_1.EnyoDataBusMessageEnum.InverterValuesUpdateV1,
150
+ applianceId: this._appliance.id,
151
+ data: {
152
+ state: inverterState,
153
+ pvPowerW,
154
+ voltageL1,
155
+ voltageL2,
156
+ voltageL3,
157
+ activePowerLimitationW,
158
+ ...(strings.length > 0 && { strings })
159
+ },
160
+ resolution: '10s'
161
+ };
162
+ // Create logging info with string data if available
163
+ const stringInfo = strings.length > 0
164
+ ? `, Strings=[${strings.map(s => `${s.index}:${s.powerW || 'N/A'}W/${s.voltage || 'N/A'}V`).join(',')}]`
165
+ : '';
166
+ console.log(`Inverter Data (${this.config.name[0]?.name}): State=${inverterState || 'N/A'}, Power=${pvPowerW}W, Voltage=${voltageL1}V, PowerLimit=${activePowerLimitationW || 'N/A'}W${stringInfo}`);
167
+ return [message];
168
+ }
169
+ // Convenience methods for accessing specific register values
170
+ async getSerialNumber() {
171
+ if (!this._modbusInstance || !this.config.registers.serialNumber) {
172
+ return null;
173
+ }
174
+ const reader = new EnergyAppModbusFaultTolerantReader_js_1.EnergyAppModbusFaultTolerantReader(this._modbusInstance, this._connectionHealth);
175
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.serialNumber);
176
+ return result.success ? result.value : null;
177
+ }
178
+ async getCurrentPower() {
179
+ if (!this._modbusInstance || !this.config.registers.power) {
180
+ return null;
181
+ }
182
+ const reader = new EnergyAppModbusFaultTolerantReader_js_1.EnergyAppModbusFaultTolerantReader(this._modbusInstance, this._connectionHealth);
183
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.power);
184
+ return result.success ? result.value : null;
185
+ }
186
+ async getTotalEnergy() {
187
+ if (!this._modbusInstance || !this.config.registers.totalEnergy) {
188
+ return null;
189
+ }
190
+ const reader = new EnergyAppModbusFaultTolerantReader_js_1.EnergyAppModbusFaultTolerantReader(this._modbusInstance, this._connectionHealth);
191
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.totalEnergy);
192
+ return result.success ? result.value : null;
193
+ }
194
+ /**
195
+ * Reads the current inverter state from modbus registers.
196
+ * Maps the register value to EnyoInverterStateEnum using the configured value mapping.
197
+ */
198
+ async getInverterState() {
199
+ if (!this._modbusInstance || !this.config.registers.state) {
200
+ return null;
201
+ }
202
+ try {
203
+ const reader = new EnergyAppModbusFaultTolerantReader_js_1.EnergyAppModbusFaultTolerantReader(this._modbusInstance, this._connectionHealth);
204
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.state);
205
+ if (!result.success || result.value === undefined) {
206
+ return null;
207
+ }
208
+ // Use configured value mapping if available
209
+ if (this.config.registers.state.valueMapping) {
210
+ const mapping = this.config.registers.state.valueMapping
211
+ .find(m => m.value === result.value);
212
+ if (mapping) {
213
+ return mapping.mappedState;
214
+ }
215
+ else {
216
+ console.warn(`No mapping found for inverter state value: ${result.value} (Address ${this.config.registers.state.address}, ${this.config.registers.state.dataType}). Available mappings: ${this.config.registers.state.valueMapping.map(m => m.value).join(', ')}`);
217
+ return null;
218
+ }
219
+ }
220
+ else {
221
+ console.warn('Inverter state register configured without value mapping. Please configure valueMapping in register config.');
222
+ return null;
223
+ }
224
+ }
225
+ catch (error) {
226
+ console.warn(`Failed to read inverter state: ${error.message}`);
227
+ return null;
228
+ }
229
+ }
230
+ /**
231
+ * Reads the current active power limitation from modbus registers.
232
+ */
233
+ async getActivePowerLimitation() {
234
+ if (!this._modbusInstance || !this.config.registers.activePowerLimitationW) {
235
+ return null;
236
+ }
237
+ const reader = new EnergyAppModbusFaultTolerantReader_js_1.EnergyAppModbusFaultTolerantReader(this._modbusInstance, this._connectionHealth);
238
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.activePowerLimitationW);
239
+ return result.success ? result.value : null;
240
+ }
241
+ /**
242
+ * Reads the power value for a specific string from modbus registers.
243
+ *
244
+ * @param stringIndex - The string index (1-4)
245
+ * @returns Promise resolving to power value in Watts or null if not available
246
+ */
247
+ async getStringPower(stringIndex) {
248
+ if (!this._modbusInstance || stringIndex < 1 || stringIndex > 4) {
249
+ return null;
250
+ }
251
+ const registerKey = `string${stringIndex}Power`;
252
+ const registerConfig = this.config.registers[registerKey];
253
+ if (!registerConfig) {
254
+ return null;
255
+ }
256
+ const reader = new EnergyAppModbusFaultTolerantReader_js_1.EnergyAppModbusFaultTolerantReader(this._modbusInstance, this._connectionHealth);
257
+ const result = await this._registerMapper.readRegister(reader, registerConfig);
258
+ return result.success ? result.value : null;
259
+ }
260
+ /**
261
+ * Reads the voltage value for a specific string from modbus registers.
262
+ *
263
+ * @param stringIndex - The string index (1-4)
264
+ * @returns Promise resolving to voltage value in Volts or null if not available
265
+ */
266
+ async getStringVoltage(stringIndex) {
267
+ if (!this._modbusInstance || stringIndex < 1 || stringIndex > 4) {
268
+ return null;
269
+ }
270
+ const registerKey = `string${stringIndex}Voltage`;
271
+ const registerConfig = this.config.registers[registerKey];
272
+ if (!registerConfig) {
273
+ return null;
274
+ }
275
+ const reader = new EnergyAppModbusFaultTolerantReader_js_1.EnergyAppModbusFaultTolerantReader(this._modbusInstance, this._connectionHealth);
276
+ const result = await this._registerMapper.readRegister(reader, registerConfig);
277
+ return result.success ? result.value : null;
278
+ }
279
+ /**
280
+ * Discovers and caches inverter metadata from modbus registers during connection.
281
+ * This method reads static metadata like max PV production once
282
+ * and stores them for later use in appliance creation.
283
+ */
284
+ async _discoverInverterMetadata() {
285
+ if (!this._modbusInstance) {
286
+ throw new Error('Modbus instance not available');
287
+ }
288
+ const reader = new EnergyAppModbusFaultTolerantReader_js_1.EnergyAppModbusFaultTolerantReader(this._modbusInstance, this._connectionHealth);
289
+ const metadata = {};
290
+ try {
291
+ // Read max PV production if configured
292
+ if (this.config.registers.maxPvProductionW) {
293
+ const result = await this._registerMapper.readRegister(reader, this.config.registers.maxPvProductionW);
294
+ if (result.success && result.value !== undefined) {
295
+ metadata.maxPvProductionW = result.value;
296
+ console.log(`Discovered inverter max PV production: ${result.value} W`);
297
+ }
298
+ }
299
+ }
300
+ catch (error) {
301
+ console.warn(`Warning: Failed to discover some inverter metadata: ${error.message}`);
302
+ }
303
+ return metadata;
304
+ }
305
+ async _initializeAppliance() {
306
+ const appliances = await this.client.useAppliances().list();
307
+ let existingAppliance = appliances.find(a => a.networkDeviceIds.includes(this.networkDevice.id) &&
308
+ a.type === enyo_appliance_js_2.EnyoApplianceTypeEnum.Inverter);
309
+ if (!existingAppliance) {
310
+ // Create new appliance
311
+ existingAppliance = {
312
+ id: (0, node_crypto_1.randomUUID)(),
313
+ type: enyo_appliance_js_2.EnyoApplianceTypeEnum.Inverter,
314
+ networkDeviceIds: [this.networkDevice.id],
315
+ name: this.config.name,
316
+ metadata: {
317
+ state: enyo_appliance_js_2.EnyoApplianceStateEnum.Connected,
318
+ connectionType: enyo_appliance_js_1.EnyoApplianceConnectionType.Connector,
319
+ ...this.config.options?.topology && { topology: this.config.options.topology }
320
+ },
321
+ inverter: this._inverterMetadata
322
+ };
323
+ await this.client.useAppliances().save(existingAppliance, undefined);
324
+ console.log(`Created new inverter appliance: ${this.config.name[0]?.name}`);
325
+ }
326
+ else {
327
+ // Update existing appliance
328
+ existingAppliance = {
329
+ ...existingAppliance,
330
+ name: this.config.name,
331
+ metadata: {
332
+ ...existingAppliance.metadata,
333
+ connectionType: enyo_appliance_js_1.EnyoApplianceConnectionType.Connector,
334
+ state: enyo_appliance_js_2.EnyoApplianceStateEnum.Connected,
335
+ ...this.config.options?.topology && { topology: this.config.options.topology }
336
+ },
337
+ inverter: this._inverterMetadata
338
+ };
339
+ await this.client.useAppliances().save(existingAppliance, existingAppliance?.id);
340
+ console.log(`Updated existing inverter appliance: ${this.config.name[0]?.name}`);
341
+ }
342
+ this._appliance = existingAppliance;
343
+ }
344
+ modbusClient() {
345
+ return this._modbusInstance;
346
+ }
347
+ }
348
+ exports.EnergyAppModbusInverter = EnergyAppModbusInverter;
@@ -0,0 +1,56 @@
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 { EnyoDataBusMessage, EnyoInverterStateEnum } from "../../types/enyo-data-bus-value.cjs";
5
+ import { type EnergyAppModbusDevice, type EnergyAppModbusInverterConfig } from './interfaces.cjs';
6
+ import { EnergyApp } from "../../index.cjs";
7
+ export declare class EnergyAppModbusInverter implements EnergyAppModbusDevice {
8
+ readonly client: EnergyApp;
9
+ readonly config: EnergyAppModbusInverterConfig;
10
+ readonly networkDevice: EnyoNetworkDevice;
11
+ private readonly _registerMapper;
12
+ private readonly _connectionHealth;
13
+ private _modbusInstance?;
14
+ private _appliance?;
15
+ private _inverterMetadata?;
16
+ constructor(client: EnergyApp, config: EnergyAppModbusInverterConfig, networkDevice: EnyoNetworkDevice);
17
+ get appliance(): EnyoAppliance;
18
+ connect(): Promise<void>;
19
+ disconnect(): Promise<void>;
20
+ isConnected(): boolean;
21
+ updateData(): Promise<EnyoDataBusMessage[]>;
22
+ getSerialNumber(): Promise<string | null>;
23
+ getCurrentPower(): Promise<number | null>;
24
+ getTotalEnergy(): Promise<number | null>;
25
+ /**
26
+ * Reads the current inverter state from modbus registers.
27
+ * Maps the register value to EnyoInverterStateEnum using the configured value mapping.
28
+ */
29
+ getInverterState(): Promise<EnyoInverterStateEnum | null>;
30
+ /**
31
+ * Reads the current active power limitation from modbus registers.
32
+ */
33
+ getActivePowerLimitation(): Promise<number | null>;
34
+ /**
35
+ * Reads the power value for a specific string from modbus registers.
36
+ *
37
+ * @param stringIndex - The string index (1-4)
38
+ * @returns Promise resolving to power value in Watts or null if not available
39
+ */
40
+ getStringPower(stringIndex: number): Promise<number | null>;
41
+ /**
42
+ * Reads the voltage value for a specific string from modbus registers.
43
+ *
44
+ * @param stringIndex - The string index (1-4)
45
+ * @returns Promise resolving to voltage value in Volts or null if not available
46
+ */
47
+ getStringVoltage(stringIndex: number): Promise<number | null>;
48
+ /**
49
+ * Discovers and caches inverter metadata from modbus registers during connection.
50
+ * This method reads static metadata like max PV production once
51
+ * and stores them for later use in appliance creation.
52
+ */
53
+ private _discoverInverterMetadata;
54
+ private _initializeAppliance;
55
+ modbusClient(): EnergyAppModbusInstance | undefined;
56
+ }