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