@victronenergy/mfd-modules 8.1.1 → 9.0.0

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 (40) hide show
  1. package/dist/src/Modules/Alternators/Alternators.provider.js +1 -1
  2. package/dist/src/Modules/Alternators/Alternators.provider.js.map +1 -1
  3. package/dist/src/Modules/Battery/Batteries.provider.js +1 -1
  4. package/dist/src/Modules/Battery/Batteries.provider.js.map +1 -1
  5. package/dist/src/Modules/Chargers/Chargers.provider.js +1 -1
  6. package/dist/src/Modules/Chargers/Chargers.provider.js.map +1 -1
  7. package/dist/src/Modules/Generators/ConnectedGensets.provider.js +1 -1
  8. package/dist/src/Modules/Generators/ConnectedGensets.provider.js.map +1 -1
  9. package/dist/src/Modules/InverterCharger/InputLimit.provider.d.ts +2 -1
  10. package/dist/src/Modules/InverterCharger/InputLimit.provider.d.ts.map +1 -1
  11. package/dist/src/Modules/InverterCharger/InputLimit.provider.js +5 -7
  12. package/dist/src/Modules/InverterCharger/InputLimit.provider.js.map +1 -1
  13. package/dist/src/Modules/InverterCharger/InputLimitSelector.provider.d.ts +2 -1
  14. package/dist/src/Modules/InverterCharger/InputLimitSelector.provider.d.ts.map +1 -1
  15. package/dist/src/Modules/InverterCharger/InputLimitSelector.provider.js +6 -8
  16. package/dist/src/Modules/InverterCharger/InputLimitSelector.provider.js.map +1 -1
  17. package/dist/src/Modules/InverterCharger/InverterCharger.provider.d.ts +4 -1
  18. package/dist/src/Modules/InverterCharger/InverterCharger.provider.d.ts.map +1 -1
  19. package/dist/src/Modules/InverterCharger/InverterCharger.provider.js +3 -4
  20. package/dist/src/Modules/InverterCharger/InverterCharger.provider.js.map +1 -1
  21. package/dist/src/Modules/Inverters/Inverters.provider.js +2 -2
  22. package/dist/src/Modules/Inverters/Inverters.provider.js.map +1 -1
  23. package/dist/src/Modules/SystemState/SystemState.provider.d.ts +2 -2
  24. package/dist/src/Modules/SystemState/SystemState.provider.d.ts.map +1 -1
  25. package/dist/src/Modules/SystemState/SystemState.provider.js +1 -1
  26. package/dist/src/Modules/SystemState/SystemState.provider.js.map +1 -1
  27. package/dist/src/Modules/Tanks/Tanks.provider.js +1 -1
  28. package/dist/src/Modules/Tanks/Tanks.provider.js.map +1 -1
  29. package/dist/src/Modules/Temperatures/Temperatures.provider.js +1 -1
  30. package/dist/src/Modules/Temperatures/Temperatures.provider.js.map +1 -1
  31. package/dist/src/Modules/Vebus/Vebus.provider.d.ts.map +1 -1
  32. package/dist/src/Modules/Vebus/Vebus.provider.js +58 -49
  33. package/dist/src/Modules/Vebus/Vebus.provider.js.map +1 -1
  34. package/dist/src/Modules/Vebus/Vebus.store.d.ts +10 -9
  35. package/dist/src/Modules/Vebus/Vebus.store.d.ts.map +1 -1
  36. package/dist/src/Modules/Vebus/Vebus.store.js +20 -6
  37. package/dist/src/Modules/Vebus/Vebus.store.js.map +1 -1
  38. package/dist/src/Modules/WindGenerators/WindGenerators.provider.js +1 -1
  39. package/dist/src/Modules/WindGenerators/WindGenerators.provider.js.map +1 -1
  40. package/package.json +5 -5
@@ -18,7 +18,7 @@ export var useAlternators = function () {
18
18
  var alternators_1 = alternatorsStore.alternators;
19
19
  var deviceInstances = Object.values(messages).sort();
20
20
  // TODO: check unordered structural identify of old and new state
21
- // TODO: to avoid unnecessary re-rendering: O(n^2 baby)
21
+ // TODO: to avoid unnecessary re-rendering: O(n^2) baby
22
22
  if (!alternators_1 || alternators_1.length != deviceInstances.length || !deviceInstances.every(function (id) { return alternators_1.includes(id); })) {
23
23
  Logger.log("New alternators instances: ".concat(JSON.stringify(deviceInstances)));
24
24
  alternatorsStore.setAlternators(deviceInstances);
@@ -1 +1 @@
1
- {"version":3,"file":"Alternators.provider.js","sourceRoot":"/","sources":["src/Modules/Alternators/Alternators.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAgB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAExE,MAAM,CAAC,IAAM,cAAc,GAAG;IAC5B,IAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAA;IAC9C,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IAEtB,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,mBAAmB,EAAE,YAAK,QAAQ,iCAA8B;KACjE,CAAC,EAFwC,CAExC,CAAA;IAEF,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEvE,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAEpE,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,4CAA4C;QAC9C,CAAC;aAAM,CAAC;YACN,IAAM,aAAW,GAAG,gBAAgB,CAAC,WAAW,CAAA;YAChD,IAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAoB,CAAA;YACxE,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,CAAC,aAAW,IAAI,aAAW,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,aAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAxB,CAAwB,CAAC,EAAE,CAAC;gBAC7H,MAAM,CAAC,GAAG,CAAC,qCAA8B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAE,CAAC,CAAC;gBAC5E,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;YAClD,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,gBAAgB,CAAA;AACzB,CAAC,CAAA","sourcesContent":["import Logger from \"../../utils/logger\"\nimport { useEffect, useMemo } from \"react\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { AlternatorId, useAlternatorsStore } from \"./Alternators.store\";\n\nexport const useAlternators = () => {\n const alternatorsStore = useAlternatorsStore()\n const mqtt = useMqtt()\n\n const getTopics = (portalId: PortalId) => ({\n alternatorInstances: `N/${portalId}/alternator/+/DeviceInstance`,\n })\n\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const messages = mqtt.messagesByWildcard(topics.alternatorInstances)\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(\"Waiting for alternators...\");\n } else {\n const alternators = alternatorsStore.alternators\n const deviceInstances = Object.values(messages).sort() as AlternatorId[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2 baby)\n if (!alternators || alternators.length != deviceInstances.length || !deviceInstances.every((id) => alternators.includes(id))) {\n Logger.log(`New alternators instances: ${JSON.stringify(deviceInstances)}`);\n alternatorsStore.setAlternators(deviceInstances)\n }\n }\n }, [messages])\n\n return alternatorsStore\n}\n"]}
1
+ {"version":3,"file":"Alternators.provider.js","sourceRoot":"/","sources":["src/Modules/Alternators/Alternators.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAgB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAExE,MAAM,CAAC,IAAM,cAAc,GAAG;IAC5B,IAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAA;IAC9C,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IAEtB,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,mBAAmB,EAAE,YAAK,QAAQ,iCAA8B;KACjE,CAAC,EAFwC,CAExC,CAAA;IAEF,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEvE,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAEpE,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,4CAA4C;QAC9C,CAAC;aAAM,CAAC;YACN,IAAM,aAAW,GAAG,gBAAgB,CAAC,WAAW,CAAA;YAChD,IAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAoB,CAAA;YACxE,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,CAAC,aAAW,IAAI,aAAW,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,aAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAxB,CAAwB,CAAC,EAAE,CAAC;gBAC7H,MAAM,CAAC,GAAG,CAAC,qCAA8B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAE,CAAC,CAAC;gBAC5E,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;YAClD,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,gBAAgB,CAAA;AACzB,CAAC,CAAA","sourcesContent":["import Logger from \"../../utils/logger\"\nimport { useEffect, useMemo } from \"react\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { AlternatorId, useAlternatorsStore } from \"./Alternators.store\";\n\nexport const useAlternators = () => {\n const alternatorsStore = useAlternatorsStore()\n const mqtt = useMqtt()\n\n const getTopics = (portalId: PortalId) => ({\n alternatorInstances: `N/${portalId}/alternator/+/DeviceInstance`,\n })\n\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const messages = mqtt.messagesByWildcard(topics.alternatorInstances)\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(\"Waiting for alternators...\");\n } else {\n const alternators = alternatorsStore.alternators\n const deviceInstances = Object.values(messages).sort() as AlternatorId[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2) baby\n if (!alternators || alternators.length != deviceInstances.length || !deviceInstances.every((id) => alternators.includes(id))) {\n Logger.log(`New alternators instances: ${JSON.stringify(deviceInstances)}`);\n alternatorsStore.setAlternators(deviceInstances)\n }\n }\n }, [messages])\n\n return alternatorsStore\n}\n"]}
@@ -18,7 +18,7 @@ export var useBatteries = function () {
18
18
  var batteries_1 = batteriesStore.batteries;
19
19
  var deviceInstances = Object.values(messages).sort();
20
20
  // TODO: check unordered structural identify of old and new state
21
- // TODO: to avoid unnecessary re-rendering: O(n^2 baby)
21
+ // TODO: to avoid unnecessary re-rendering: O(n^2) baby
22
22
  if (!batteries_1 || batteries_1.length != deviceInstances.length || !deviceInstances.every(function (id) { return batteries_1.includes(id); })) {
23
23
  Logger.log("New batteries instances: ".concat(JSON.stringify(deviceInstances)));
24
24
  batteriesStore.setBatteries(deviceInstances);
@@ -1 +1 @@
1
- {"version":3,"file":"Batteries.provider.js","sourceRoot":"/","sources":["src/Modules/Battery/Batteries.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAa,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAEhE,MAAM,CAAC,IAAM,YAAY,GAAG;IAC1B,IAAM,cAAc,GAAG,iBAAiB,EAAE,CAAA;IAC1C,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IAEtB,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,gBAAgB,EAAE,YAAK,QAAQ,8BAA2B;KAC3D,CAAC,EAFwC,CAExC,CAAA;IAEF,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEvE,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAEjE,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,yCAAyC;QAC3C,CAAC;aAAM,CAAC;YACN,IAAM,WAAS,GAAG,cAAc,CAAC,SAAS,CAAA;YAC1C,IAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAiB,CAAA;YACrE,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,CAAC,WAAS,IAAI,WAAS,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,WAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAtB,CAAsB,CAAC,EAAE,CAAC;gBACvH,MAAM,CAAC,GAAG,CAAC,mCAA4B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAE,CAAC,CAAC;gBAC1E,cAAc,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,cAAc,CAAA;AACvB,CAAC,CAAA","sourcesContent":["import Logger from \"../../utils/logger\"\nimport { useEffect, useMemo } from \"react\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { BatteryId, useBatteriesStore } from \"./Batteries.store\"\n\nexport const useBatteries = () => {\n const batteriesStore = useBatteriesStore()\n const mqtt = useMqtt()\n\n const getTopics = (portalId: PortalId) => ({\n batteryInstances: `N/${portalId}/battery/+/DeviceInstance`,\n })\n\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const messages = mqtt.messagesByWildcard(topics.batteryInstances)\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(\"Waiting for batteries...\")\n } else {\n const batteries = batteriesStore.batteries\n const deviceInstances = Object.values(messages).sort() as BatteryId[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2 baby)\n if (!batteries || batteries.length != deviceInstances.length || !deviceInstances.every((id) => batteries.includes(id))) {\n Logger.log(`New batteries instances: ${JSON.stringify(deviceInstances)}`);\n batteriesStore.setBatteries(deviceInstances)\n }\n }\n }, [messages])\n\n return batteriesStore\n}\n"]}
1
+ {"version":3,"file":"Batteries.provider.js","sourceRoot":"/","sources":["src/Modules/Battery/Batteries.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAa,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAEhE,MAAM,CAAC,IAAM,YAAY,GAAG;IAC1B,IAAM,cAAc,GAAG,iBAAiB,EAAE,CAAA;IAC1C,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IAEtB,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,gBAAgB,EAAE,YAAK,QAAQ,8BAA2B;KAC3D,CAAC,EAFwC,CAExC,CAAA;IAEF,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEvE,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAEjE,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,yCAAyC;QAC3C,CAAC;aAAM,CAAC;YACN,IAAM,WAAS,GAAG,cAAc,CAAC,SAAS,CAAA;YAC1C,IAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAiB,CAAA;YACrE,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,CAAC,WAAS,IAAI,WAAS,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,WAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAtB,CAAsB,CAAC,EAAE,CAAC;gBACvH,MAAM,CAAC,GAAG,CAAC,mCAA4B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAE,CAAC,CAAC;gBAC1E,cAAc,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,cAAc,CAAA;AACvB,CAAC,CAAA","sourcesContent":["import Logger from \"../../utils/logger\"\nimport { useEffect, useMemo } from \"react\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { BatteryId, useBatteriesStore } from \"./Batteries.store\"\n\nexport const useBatteries = () => {\n const batteriesStore = useBatteriesStore()\n const mqtt = useMqtt()\n\n const getTopics = (portalId: PortalId) => ({\n batteryInstances: `N/${portalId}/battery/+/DeviceInstance`,\n })\n\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const messages = mqtt.messagesByWildcard(topics.batteryInstances)\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(\"Waiting for batteries...\")\n } else {\n const batteries = batteriesStore.batteries\n const deviceInstances = Object.values(messages).sort() as BatteryId[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2) baby\n if (!batteries || batteries.length != deviceInstances.length || !deviceInstances.every((id) => batteries.includes(id))) {\n Logger.log(`New batteries instances: ${JSON.stringify(deviceInstances)}`);\n batteriesStore.setBatteries(deviceInstances)\n }\n }\n }, [messages])\n\n return batteriesStore\n}\n"]}
@@ -19,7 +19,7 @@ export var useChargers = function () {
19
19
  var chargers_1 = chargersStore.chargers;
20
20
  var deviceInstances = Object.values(messages);
21
21
  // TODO: check unordered structural identify of old and new state
22
- // TODO: to avoid unnecessary re-rendering: O(n^2 baby)
22
+ // TODO: to avoid unnecessary re-rendering: O(n^2) baby
23
23
  if (!chargers_1 || chargers_1.length != deviceInstances.length || !deviceInstances.every(function (id) { return chargers_1.includes(id); })) {
24
24
  Logger.log("New chargers instances: ".concat(JSON.stringify(deviceInstances)));
25
25
  chargersStore.setChargers(deviceInstances);
@@ -1 +1 @@
1
- {"version":3,"file":"Chargers.provider.js","sourceRoot":"/","sources":["src/Modules/Chargers/Chargers.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAqB,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEtE,MAAM,CAAC,IAAM,WAAW,GAAG;IACzB,IAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;IACxC,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IAEtB,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,gBAAgB,EAAE,YAAK,QAAQ,8BAA2B;KAC3D,CAAC,EAFwC,CAExC,CAAA;IAEF,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEvE,IAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAA;IAEvC,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAEjE,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,wCAAwC;QAC1C,CAAC;aAAM,CAAC;YACN,IAAM,UAAQ,GAAG,aAAa,CAAC,QAAQ,CAAA;YACvC,IAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAwB,CAAA;YACtE,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,CAAC,UAAQ,IAAI,UAAQ,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,UAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAArB,CAAqB,CAAC,EAAE,CAAC;gBACpH,MAAM,CAAC,GAAG,CAAC,kCAA2B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAE,CAAC,CAAC;gBACzE,aAAa,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,aAAa,CAAA;AACtB,CAAC,CAAA","sourcesContent":["import Logger from \"../../utils/logger\";\nimport { useEffect, useMemo } from \"react\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { ChargerInstanceId, useChargersStore } from \"./Chargers.store\"\n\nexport const useChargers = () => {\n const chargersStore = useChargersStore()\n const mqtt = useMqtt()\n\n const getTopics = (portalId: PortalId) => ({\n chargerInstances: `N/${portalId}/charger/+/DeviceInstance`,\n })\n\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const chargers = chargersStore.chargers\n\n const messages = mqtt.messagesByWildcard(topics.chargerInstances)\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(\"Waiting for chargers...\")\n } else {\n const chargers = chargersStore.chargers\n const deviceInstances = Object.values(messages) as ChargerInstanceId[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2 baby)\n if (!chargers || chargers.length != deviceInstances.length || !deviceInstances.every((id) => chargers.includes(id))) {\n Logger.log(`New chargers instances: ${JSON.stringify(deviceInstances)}`);\n chargersStore.setChargers(deviceInstances)\n }\n }\n }, [messages])\n\n return chargersStore\n}\n"]}
1
+ {"version":3,"file":"Chargers.provider.js","sourceRoot":"/","sources":["src/Modules/Chargers/Chargers.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAqB,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEtE,MAAM,CAAC,IAAM,WAAW,GAAG;IACzB,IAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;IACxC,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IAEtB,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,gBAAgB,EAAE,YAAK,QAAQ,8BAA2B;KAC3D,CAAC,EAFwC,CAExC,CAAA;IAEF,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEvE,IAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAA;IAEvC,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAEjE,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,wCAAwC;QAC1C,CAAC;aAAM,CAAC;YACN,IAAM,UAAQ,GAAG,aAAa,CAAC,QAAQ,CAAA;YACvC,IAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAwB,CAAA;YACtE,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,CAAC,UAAQ,IAAI,UAAQ,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,UAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAArB,CAAqB,CAAC,EAAE,CAAC;gBACpH,MAAM,CAAC,GAAG,CAAC,kCAA2B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAE,CAAC,CAAC;gBACzE,aAAa,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,aAAa,CAAA;AACtB,CAAC,CAAA","sourcesContent":["import Logger from \"../../utils/logger\";\nimport { useEffect, useMemo } from \"react\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { ChargerInstanceId, useChargersStore } from \"./Chargers.store\"\n\nexport const useChargers = () => {\n const chargersStore = useChargersStore()\n const mqtt = useMqtt()\n\n const getTopics = (portalId: PortalId) => ({\n chargerInstances: `N/${portalId}/charger/+/DeviceInstance`,\n })\n\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const chargers = chargersStore.chargers\n\n const messages = mqtt.messagesByWildcard(topics.chargerInstances)\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(\"Waiting for chargers...\")\n } else {\n const chargers = chargersStore.chargers\n const deviceInstances = Object.values(messages) as ChargerInstanceId[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2) baby\n if (!chargers || chargers.length != deviceInstances.length || !deviceInstances.every((id) => chargers.includes(id))) {\n Logger.log(`New chargers instances: ${JSON.stringify(deviceInstances)}`);\n chargersStore.setChargers(deviceInstances)\n }\n }\n }, [messages])\n\n return chargersStore\n}\n"]}
@@ -19,7 +19,7 @@ export var useConnectedGensets = function (gensetType) {
19
19
  var gensets_1 = gensetType === ConnectedGensetType.ACGENSET ? store.acGensets : store.dcGensets;
20
20
  var deviceInstances = Object.values(messages).sort();
21
21
  // TODO: check unordered structural identify of old and new state
22
- // TODO: to avoid unnecessary re-rendering: O(n^2 baby)
22
+ // TODO: to avoid unnecessary re-rendering: O(n^2) baby
23
23
  if (!gensets_1 || gensets_1.length != deviceInstances.length || !deviceInstances.every(function (id) { return gensets_1.includes(id); })) {
24
24
  Logger.log("New ".concat(gensetType, "s instances: ").concat(JSON.stringify(deviceInstances)));
25
25
  switch (gensetType) {
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectedGensets.provider.js","sourceRoot":"/","sources":["src/Modules/Generators/ConnectedGensets.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAqB,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEpF,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,UAA+B;IACjE,IAAM,KAAK,GAAG,wBAAwB,EAAE,CAAA;IACxC,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IAEtB,IAAM,SAAS,GAAG,UAAC,QAAkB,EAAE,UAA+B,IAAK,OAAA,CAAC;QAC1E,eAAe,EAAE,YAAK,QAAQ,cAAI,UAAU,sBAAmB;KAChE,CAAC,EAFyE,CAEzE,CAAA;IAEF,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAApC,CAAoC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;IAE/F,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IAEhE,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,+CAA+C;QACjD,CAAC;aAAM,CAAC;YACN,IAAM,SAAO,GAAG,UAAU,KAAK,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAA;YAC/F,IAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAyB,CAAA;YAC7E,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,CAAC,SAAO,IAAI,SAAO,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,SAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAApB,CAAoB,CAAC,EAAE,CAAC;gBACjH,MAAM,CAAC,GAAG,CAAC,cAAO,UAAU,0BAAgB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAE,CAAC,CAAC;gBAC/E,QAAQ,UAAU,EAAE,CAAC;oBACnB,KAAK,mBAAmB,CAAC,QAAQ;wBAC/B,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;wBACnC,MAAK;oBACP,KAAK,mBAAmB,CAAC,QAAQ;wBAC/B,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;wBACnC,MAAK;gBACT,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import Logger from \"../../utils/logger\"\nimport { useEffect, useMemo } from \"react\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { useConnectedGensetsStore } from \"./ConnectedGensets.store\";\nimport { ConnectedGensetId, ConnectedGensetType } from \"./ConnectedGenset.provider\";\n\nexport const useConnectedGensets = (gensetType: ConnectedGensetType) => {\n const store = useConnectedGensetsStore()\n const mqtt = useMqtt()\n\n const getTopics = (portalId: PortalId, gensetType: ConnectedGensetType) => ({\n gensetInstances: `N/${portalId}/${gensetType}/+/DeviceInstance`,\n })\n\n const topics = useMemo(() => getTopics(mqtt.portalId, gensetType), [mqtt.portalId, gensetType])\n\n const messages = mqtt.messagesByWildcard(topics.gensetInstances)\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(`Waiting for ${gensetType}s...`);\n } else {\n const gensets = gensetType === ConnectedGensetType.ACGENSET ? store.acGensets : store.dcGensets\n const deviceInstances = Object.values(messages).sort() as ConnectedGensetId[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2 baby)\n if (!gensets || gensets.length != deviceInstances.length || !deviceInstances.every((id) => gensets.includes(id))) {\n Logger.log(`New ${gensetType}s instances: ${JSON.stringify(deviceInstances)}`);\n switch (gensetType) {\n case ConnectedGensetType.ACGENSET:\n store.setACGensets(deviceInstances)\n break\n case ConnectedGensetType.DCGENSET:\n store.setDCGensets(deviceInstances)\n break\n }\n }\n }\n }, [messages])\n\n return store\n}\n"]}
1
+ {"version":3,"file":"ConnectedGensets.provider.js","sourceRoot":"/","sources":["src/Modules/Generators/ConnectedGensets.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAqB,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEpF,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,UAA+B;IACjE,IAAM,KAAK,GAAG,wBAAwB,EAAE,CAAA;IACxC,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IAEtB,IAAM,SAAS,GAAG,UAAC,QAAkB,EAAE,UAA+B,IAAK,OAAA,CAAC;QAC1E,eAAe,EAAE,YAAK,QAAQ,cAAI,UAAU,sBAAmB;KAChE,CAAC,EAFyE,CAEzE,CAAA;IAEF,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAApC,CAAoC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;IAE/F,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IAEhE,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,+CAA+C;QACjD,CAAC;aAAM,CAAC;YACN,IAAM,SAAO,GAAG,UAAU,KAAK,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAA;YAC/F,IAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAyB,CAAA;YAC7E,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,CAAC,SAAO,IAAI,SAAO,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,SAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAApB,CAAoB,CAAC,EAAE,CAAC;gBACjH,MAAM,CAAC,GAAG,CAAC,cAAO,UAAU,0BAAgB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAE,CAAC,CAAC;gBAC/E,QAAQ,UAAU,EAAE,CAAC;oBACnB,KAAK,mBAAmB,CAAC,QAAQ;wBAC/B,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;wBACnC,MAAK;oBACP,KAAK,mBAAmB,CAAC,QAAQ;wBAC/B,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;wBACnC,MAAK;gBACT,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import Logger from \"../../utils/logger\"\nimport { useEffect, useMemo } from \"react\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { useConnectedGensetsStore } from \"./ConnectedGensets.store\";\nimport { ConnectedGensetId, ConnectedGensetType } from \"./ConnectedGenset.provider\";\n\nexport const useConnectedGensets = (gensetType: ConnectedGensetType) => {\n const store = useConnectedGensetsStore()\n const mqtt = useMqtt()\n\n const getTopics = (portalId: PortalId, gensetType: ConnectedGensetType) => ({\n gensetInstances: `N/${portalId}/${gensetType}/+/DeviceInstance`,\n })\n\n const topics = useMemo(() => getTopics(mqtt.portalId, gensetType), [mqtt.portalId, gensetType])\n\n const messages = mqtt.messagesByWildcard(topics.gensetInstances)\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(`Waiting for ${gensetType}s...`);\n } else {\n const gensets = gensetType === ConnectedGensetType.ACGENSET ? store.acGensets : store.dcGensets\n const deviceInstances = Object.values(messages).sort() as ConnectedGensetId[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2) baby\n if (!gensets || gensets.length != deviceInstances.length || !deviceInstances.every((id) => gensets.includes(id))) {\n Logger.log(`New ${gensetType}s instances: ${JSON.stringify(deviceInstances)}`);\n switch (gensetType) {\n case ConnectedGensetType.ACGENSET:\n store.setACGensets(deviceInstances)\n break\n case ConnectedGensetType.DCGENSET:\n store.setDCGensets(deviceInstances)\n break\n }\n }\n }\n }, [messages])\n\n return store\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import { Topics } from "../Mqtt";
2
+ import { InstanceId } from "../Vebus";
2
3
  export interface InputLimitState {
3
4
  currentLimit: string;
4
5
  currentLimitIsAdjustable: boolean;
@@ -7,5 +8,5 @@ export interface InputLimitTopics extends Topics {
7
8
  currentLimit?: string;
8
9
  currentLimitIsAdjustable?: string;
9
10
  }
10
- export declare function useInputLimit(shorePowerInput: number): InputLimitState;
11
+ export declare function useInputLimit(instanceId: InstanceId, inputId: number): InputLimitState;
11
12
  //# sourceMappingURL=InputLimit.provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InputLimit.provider.d.ts","sourceRoot":"/","sources":["src/Modules/InverterCharger/InputLimit.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAA2B,MAAM,SAAS,CAAA;AAInE,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,wBAAwB,EAAE,OAAO,CAAA;CAClC;AAED,MAAM,WAAW,gBAAiB,SAAQ,MAAM;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,wBAAgB,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,eAAe,CAatE"}
1
+ {"version":3,"file":"InputLimit.provider.d.ts","sourceRoot":"/","sources":["src/Modules/InverterCharger/InputLimit.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAA2B,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAGrC,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,wBAAwB,EAAE,OAAO,CAAA;CAClC;AAED,MAAM,WAAW,gBAAiB,SAAQ,MAAM;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAYtF"}
@@ -10,18 +10,16 @@ var __assign = (this && this.__assign) || function () {
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
12
  import { useMqtt, useTopicsState } from "../Mqtt";
13
- import { useVebusStore } from "../Vebus";
14
13
  import { useMemo } from "react";
15
- export function useInputLimit(shorePowerInput) {
16
- var getTopics = function (portalId, deviceInstanceId, shorePowerInput) {
14
+ export function useInputLimit(instanceId, inputId) {
15
+ var getTopics = function (portalId, deviceInstanceId, inputId) {
17
16
  return {
18
- currentLimit: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/Ac/In/").concat(shorePowerInput, "/CurrentLimit"),
19
- currentLimitIsAdjustable: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/Ac/In/").concat(shorePowerInput, "/CurrentLimitIsAdjustable"),
17
+ currentLimit: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/Ac/In/").concat(inputId, "/CurrentLimit"),
18
+ currentLimitIsAdjustable: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/Ac/In/").concat(inputId, "/CurrentLimitIsAdjustable"),
20
19
  };
21
20
  };
22
21
  var mqtt = useMqtt();
23
- var instanceId = useVebusStore().instanceId;
24
- var topics = useMemo(function () { return getTopics(mqtt.portalId, instanceId, shorePowerInput); }, [mqtt.portalId, instanceId, shorePowerInput]);
22
+ var topics = useMemo(function () { return getTopics(mqtt.portalId, instanceId, inputId); }, [mqtt.portalId, instanceId, inputId]);
25
23
  return __assign({}, useTopicsState(topics));
26
24
  }
27
25
  //# sourceMappingURL=InputLimit.provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InputLimit.provider.js","sourceRoot":"/","sources":["src/Modules/InverterCharger/InputLimit.provider.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAoB,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAc,aAAa,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAY/B,MAAM,UAAU,aAAa,CAAC,eAAuB;IACnD,IAAM,SAAS,GAAG,UAAC,QAAkB,EAAE,gBAA4B,EAAE,eAAuB;QAC1F,OAAO;YACL,YAAY,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,oBAAU,eAAe,kBAAe;YAC7F,wBAAwB,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,oBAAU,eAAe,8BAA2B;SACtH,CAAA;IACH,CAAC,CAAA;IAED,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACd,IAAA,UAAU,GAAK,aAAa,EAAE,WAApB,CAAoB;IACtC,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,EAArD,CAAqD,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAA;IAEjI,oBAAY,cAAc,CAAkB,MAAM,CAAC,EAAE;AACvD,CAAC","sourcesContent":["import { PortalId, Topics, useMqtt, useTopicsState } from \"../Mqtt\"\nimport { InstanceId, useVebusStore } from \"../Vebus\"\nimport { useMemo } from \"react\"\n\nexport interface InputLimitState {\n currentLimit: string\n currentLimitIsAdjustable: boolean\n}\n\nexport interface InputLimitTopics extends Topics {\n currentLimit?: string\n currentLimitIsAdjustable?: string\n}\n\nexport function useInputLimit(shorePowerInput: number): InputLimitState {\n const getTopics = (portalId: PortalId, deviceInstanceId: InstanceId, shorePowerInput: number) => {\n return {\n currentLimit: `N/${portalId}/vebus/${deviceInstanceId}/Ac/In/${shorePowerInput}/CurrentLimit`,\n currentLimitIsAdjustable: `N/${portalId}/vebus/${deviceInstanceId}/Ac/In/${shorePowerInput}/CurrentLimitIsAdjustable`,\n }\n }\n\n const mqtt = useMqtt()\n const { instanceId } = useVebusStore()\n const topics = useMemo(() => getTopics(mqtt.portalId, instanceId, shorePowerInput), [mqtt.portalId, instanceId, shorePowerInput])\n\n return { ...useTopicsState<InputLimitState>(topics) }\n}\n"]}
1
+ {"version":3,"file":"InputLimit.provider.js","sourceRoot":"/","sources":["src/Modules/InverterCharger/InputLimit.provider.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAoB,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAEnE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAY/B,MAAM,UAAU,aAAa,CAAC,UAAsB,EAAE,OAAe;IACnE,IAAM,SAAS,GAAG,UAAC,QAAkB,EAAE,gBAA4B,EAAE,OAAe;QAClF,OAAO;YACL,YAAY,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,oBAAU,OAAO,kBAAe;YACrF,wBAAwB,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,oBAAU,OAAO,8BAA2B;SAC9G,CAAA;IACH,CAAC,CAAA;IAED,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,EAA7C,CAA6C,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;IAEjH,oBAAY,cAAc,CAAkB,MAAM,CAAC,EAAE;AACvD,CAAC","sourcesContent":["import { PortalId, Topics, useMqtt, useTopicsState } from \"../Mqtt\"\nimport { InstanceId } from \"../Vebus\"\nimport { useMemo } from \"react\"\n\nexport interface InputLimitState {\n currentLimit: string\n currentLimitIsAdjustable: boolean\n}\n\nexport interface InputLimitTopics extends Topics {\n currentLimit?: string\n currentLimitIsAdjustable?: string\n}\n\nexport function useInputLimit(instanceId: InstanceId, inputId: number): InputLimitState {\n const getTopics = (portalId: PortalId, deviceInstanceId: InstanceId, inputId: number) => {\n return {\n currentLimit: `N/${portalId}/vebus/${deviceInstanceId}/Ac/In/${inputId}/CurrentLimit`,\n currentLimitIsAdjustable: `N/${portalId}/vebus/${deviceInstanceId}/Ac/In/${inputId}/CurrentLimitIsAdjustable`,\n }\n }\n\n const mqtt = useMqtt()\n const topics = useMemo(() => getTopics(mqtt.portalId, instanceId, inputId), [mqtt.portalId, instanceId, inputId])\n\n return { ...useTopicsState<InputLimitState>(topics) }\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import { Topics } from "../Mqtt";
2
+ import { InstanceId } from "../Vebus";
2
3
  export interface InputLimitSelectorState {
3
4
  currentLimit: number;
4
5
  currentLimitMax: number;
@@ -12,5 +13,5 @@ export interface InputLimitSelectorTopics extends Topics {
12
13
  export interface InputLimitSelectorProvider extends InputLimitSelectorState {
13
14
  updateLimit: (limit: number) => void;
14
15
  }
15
- export declare function useInputLimitSelector(shorePowerInput: number): InputLimitSelectorProvider;
16
+ export declare function useInputLimitSelector(instanceId: InstanceId, inputId: number): InputLimitSelectorProvider;
16
17
  //# sourceMappingURL=InputLimitSelector.provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InputLimitSelector.provider.d.ts","sourceRoot":"/","sources":["src/Modules/InverterCharger/InputLimitSelector.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAA2B,MAAM,SAAS,CAAA;AAInE,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,wBAAyB,SAAQ,MAAM;IACtD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;IACzE,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACrC;AAED,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,MAAM,GAAG,0BAA0B,CAsBzF"}
1
+ {"version":3,"file":"InputLimitSelector.provider.d.ts","sourceRoot":"/","sources":["src/Modules/InverterCharger/InputLimitSelector.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAA2B,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,UAAU,EAAiB,MAAM,UAAU,CAAA;AAGpD,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,wBAAyB,SAAQ,MAAM;IACtD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;IACzE,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACrC;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,0BAA0B,CAqBzG"}
@@ -10,23 +10,21 @@ var __assign = (this && this.__assign) || function () {
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
12
  import { useMqtt, useTopicsState } from "../Mqtt";
13
- import { useVebusStore } from "../Vebus";
14
13
  import { useMemo } from "react";
15
- export function useInputLimitSelector(shorePowerInput) {
14
+ export function useInputLimitSelector(instanceId, inputId) {
16
15
  var getTopics = function (portalId, deviceInstanceId) {
17
16
  return {
18
- currentLimit: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/Ac/In/").concat(shorePowerInput, "/CurrentLimit"),
19
- currentLimitMax: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/Ac/In/").concat(shorePowerInput, "/CurrentLimitGetMax"),
17
+ currentLimit: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/Ac/In/").concat(inputId, "/CurrentLimit"),
18
+ currentLimitMax: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/Ac/In/").concat(inputId, "/CurrentLimitGetMax"),
20
19
  productId: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/ProductId"),
21
20
  };
22
21
  };
23
22
  var mqtt = useMqtt();
24
- var instanceId = useVebusStore().instanceId;
25
23
  var topics = useMemo(function () { return getTopics(mqtt.portalId, instanceId); }, [mqtt.portalId, instanceId]);
26
- var getWriteTopics = function (portalId, deviceInstanceId, shorePowerInput) { return ({
27
- limit: "W/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/Ac/In/").concat(shorePowerInput, "/CurrentLimit"),
24
+ var getWriteTopics = function (portalId, deviceInstanceId, inputId) { return ({
25
+ limit: "W/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/Ac/In/").concat(inputId, "/CurrentLimit"),
28
26
  }); };
29
- var writeTopics = useMemo(function () { return getWriteTopics(mqtt.portalId, instanceId, shorePowerInput); }, [mqtt.portalId, instanceId, shorePowerInput]);
27
+ var writeTopics = useMemo(function () { return getWriteTopics(mqtt.portalId, instanceId, inputId); }, [mqtt.portalId, instanceId, inputId]);
30
28
  var updateLimit = function (limit) { return mqtt.publish(writeTopics.limit, limit); };
31
29
  return __assign(__assign({}, useTopicsState(topics)), { updateLimit: updateLimit });
32
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InputLimitSelector.provider.js","sourceRoot":"/","sources":["src/Modules/InverterCharger/InputLimitSelector.provider.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAoB,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAc,aAAa,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAkB/B,MAAM,UAAU,qBAAqB,CAAC,eAAuB;IAC3D,IAAM,SAAS,GAAG,UAAC,QAAkB,EAAE,gBAA4B;QACjE,OAAO;YACL,YAAY,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,oBAAU,eAAe,kBAAe;YAC7F,eAAe,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,oBAAU,eAAe,wBAAqB;YACtG,SAAS,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,eAAY;SAC/D,CAAA;IACH,CAAC,CAAA;IAED,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACd,IAAA,UAAU,GAAK,aAAa,EAAE,WAApB,CAAoB;IACtC,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAApC,CAAoC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;IAE/F,IAAM,cAAc,GAAG,UAAC,QAAkB,EAAE,gBAA4B,EAAE,eAAuB,IAAK,OAAA,CAAC;QACrG,KAAK,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,oBAAU,eAAe,kBAAe;KACvF,CAAC,EAFoG,CAEpG,CAAA;IAEF,IAAM,WAAW,GAAG,OAAO,CAAC,cAAM,OAAA,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,EAA1D,CAA0D,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAA;IAE3I,IAAM,WAAW,GAAG,UAAC,KAAa,IAAK,OAAA,IAAI,CAAC,OAAO,CAAC,WAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAvC,CAAuC,CAAA;IAE9E,OAAO,sBAAK,cAAc,CAA0B,MAAM,CAAC,KAAE,WAAW,aAAA,GAAgC,CAAA;AAC1G,CAAC","sourcesContent":["import { PortalId, Topics, useMqtt, useTopicsState } from \"../Mqtt\"\nimport { InstanceId, useVebusStore } from \"../Vebus\"\nimport { useMemo } from \"react\"\n\nexport interface InputLimitSelectorState {\n currentLimit: number\n currentLimitMax: number\n productId: number\n}\n\nexport interface InputLimitSelectorTopics extends Topics {\n currentLimit?: string\n currentLimitMax?: string\n productId?: string\n}\n\nexport interface InputLimitSelectorProvider extends InputLimitSelectorState {\n updateLimit: (limit: number) => void\n}\n\nexport function useInputLimitSelector(shorePowerInput: number): InputLimitSelectorProvider {\n const getTopics = (portalId: PortalId, deviceInstanceId: InstanceId) => {\n return {\n currentLimit: `N/${portalId}/vebus/${deviceInstanceId}/Ac/In/${shorePowerInput}/CurrentLimit`,\n currentLimitMax: `N/${portalId}/vebus/${deviceInstanceId}/Ac/In/${shorePowerInput}/CurrentLimitGetMax`,\n productId: `N/${portalId}/vebus/${deviceInstanceId}/ProductId`,\n }\n }\n\n const mqtt = useMqtt()\n const { instanceId } = useVebusStore()\n const topics = useMemo(() => getTopics(mqtt.portalId, instanceId), [mqtt.portalId, instanceId])\n\n const getWriteTopics = (portalId: PortalId, deviceInstanceId: InstanceId, shorePowerInput: number) => ({\n limit: `W/${portalId}/vebus/${deviceInstanceId}/Ac/In/${shorePowerInput}/CurrentLimit`,\n })\n\n const writeTopics = useMemo(() => getWriteTopics(mqtt.portalId, instanceId, shorePowerInput), [mqtt.portalId, instanceId, shorePowerInput])\n\n const updateLimit = (limit: number) => mqtt.publish(writeTopics!.limit, limit)\n\n return { ...useTopicsState<InputLimitSelectorState>(topics), updateLimit } as InputLimitSelectorProvider\n}\n"]}
1
+ {"version":3,"file":"InputLimitSelector.provider.js","sourceRoot":"/","sources":["src/Modules/InverterCharger/InputLimitSelector.provider.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAoB,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAEnE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAkB/B,MAAM,UAAU,qBAAqB,CAAC,UAAsB,EAAE,OAAe;IAC3E,IAAM,SAAS,GAAG,UAAC,QAAkB,EAAE,gBAA4B;QACjE,OAAO;YACL,YAAY,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,oBAAU,OAAO,kBAAe;YACrF,eAAe,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,oBAAU,OAAO,wBAAqB;YAC9F,SAAS,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,eAAY;SAC/D,CAAA;IACH,CAAC,CAAA;IAED,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAApC,CAAoC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;IAE/F,IAAM,cAAc,GAAG,UAAC,QAAkB,EAAE,gBAA4B,EAAE,OAAe,IAAK,OAAA,CAAC;QAC7F,KAAK,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,oBAAU,OAAO,kBAAe;KAC/E,CAAC,EAF4F,CAE5F,CAAA;IAEF,IAAM,WAAW,GAAG,OAAO,CAAC,cAAM,OAAA,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,EAAlD,CAAkD,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;IAE3H,IAAM,WAAW,GAAG,UAAC,KAAa,IAAK,OAAA,IAAI,CAAC,OAAO,CAAC,WAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAvC,CAAuC,CAAA;IAE9E,OAAO,sBAAK,cAAc,CAA0B,MAAM,CAAC,KAAE,WAAW,aAAA,GAAgC,CAAA;AAC1G,CAAC","sourcesContent":["import { PortalId, Topics, useMqtt, useTopicsState } from \"../Mqtt\"\nimport { InstanceId, useVebusStore } from \"../Vebus\"\nimport { useMemo } from \"react\"\n\nexport interface InputLimitSelectorState {\n currentLimit: number\n currentLimitMax: number\n productId: number\n}\n\nexport interface InputLimitSelectorTopics extends Topics {\n currentLimit?: string\n currentLimitMax?: string\n productId?: string\n}\n\nexport interface InputLimitSelectorProvider extends InputLimitSelectorState {\n updateLimit: (limit: number) => void\n}\n\nexport function useInputLimitSelector(instanceId: InstanceId, inputId: number): InputLimitSelectorProvider {\n const getTopics = (portalId: PortalId, deviceInstanceId: InstanceId) => {\n return {\n currentLimit: `N/${portalId}/vebus/${deviceInstanceId}/Ac/In/${inputId}/CurrentLimit`,\n currentLimitMax: `N/${portalId}/vebus/${deviceInstanceId}/Ac/In/${inputId}/CurrentLimitGetMax`,\n productId: `N/${portalId}/vebus/${deviceInstanceId}/ProductId`,\n }\n }\n\n const mqtt = useMqtt()\n const topics = useMemo(() => getTopics(mqtt.portalId, instanceId), [mqtt.portalId, instanceId])\n\n const getWriteTopics = (portalId: PortalId, deviceInstanceId: InstanceId, inputId: number) => ({\n limit: `W/${portalId}/vebus/${deviceInstanceId}/Ac/In/${inputId}/CurrentLimit`,\n })\n\n const writeTopics = useMemo(() => getWriteTopics(mqtt.portalId, instanceId, inputId), [mqtt.portalId, instanceId, inputId])\n\n const updateLimit = (limit: number) => mqtt.publish(writeTopics!.limit, limit)\n\n return { ...useTopicsState<InputLimitSelectorState>(topics), updateLimit } as InputLimitSelectorProvider\n}\n"]}
@@ -1,7 +1,9 @@
1
1
  import { Topics } from "../Mqtt";
2
+ import { InstanceId } from "../Vebus";
2
3
  export interface InverterChargerState {
3
4
  state: string;
4
5
  mode: string;
6
+ numberOfAcInputs: number;
5
7
  customName: string;
6
8
  productName: string;
7
9
  modeIsAdjustable: number;
@@ -9,6 +11,7 @@ export interface InverterChargerState {
9
11
  export interface InverterChargerTopics extends Topics {
10
12
  state?: string;
11
13
  mode?: string;
14
+ numberOfAcInputs?: string;
12
15
  customName?: string;
13
16
  productName?: string;
14
17
  modeIsAdjustable?: string;
@@ -16,5 +19,5 @@ export interface InverterChargerTopics extends Topics {
16
19
  export interface InverterChargerProvider extends InverterChargerState {
17
20
  updateMode: (mode: number) => void;
18
21
  }
19
- export declare function useInverterCharger(): InverterChargerProvider;
22
+ export declare function useInverterCharger(instanceId: InstanceId): InverterChargerProvider;
20
23
  //# sourceMappingURL=InverterCharger.provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InverterCharger.provider.d.ts","sourceRoot":"/","sources":["src/Modules/InverterCharger/InverterCharger.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,EAGP,MAAM,SAAS,CAAA;AAIhB,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,qBAAsB,SAAQ,MAAM;IACnD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,uBAAwB,SAAQ,oBAAoB;IACnE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,wBAAgB,kBAAkB,IAAI,uBAAuB,CA2B5D"}
1
+ {"version":3,"file":"InverterCharger.provider.d.ts","sourceRoot":"/","sources":["src/Modules/InverterCharger/InverterCharger.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,EAGP,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAGrC,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,qBAAsB,SAAQ,MAAM;IACnD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,uBAAwB,SAAQ,oBAAoB;IACnE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,uBAAuB,CA2BlF"}
@@ -11,12 +11,12 @@ var __assign = (this && this.__assign) || function () {
11
11
  };
12
12
  import { useMemo } from "react";
13
13
  import { useMqtt, useTopicsState, } from "../Mqtt";
14
- import { useVebusStore } from "../Vebus";
15
- export function useInverterCharger() {
14
+ export function useInverterCharger(instanceId) {
16
15
  var getTopics = function (portalId, deviceInstanceId) {
17
16
  return {
18
- state: "N/".concat(portalId, "/system/0/SystemState/State"),
17
+ state: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/State"),
19
18
  mode: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/Mode"),
19
+ numberOfAcInputs: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/Ac/NumberOfAcInputs"),
20
20
  customName: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/CustomName"),
21
21
  productName: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/ProductName"),
22
22
  modeIsAdjustable: "N/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/ModeIsAdjustable"),
@@ -26,7 +26,6 @@ export function useInverterCharger() {
26
26
  mode: "W/".concat(portalId, "/vebus/").concat(deviceInstanceId, "/Mode")
27
27
  }); };
28
28
  var mqtt = useMqtt();
29
- var instanceId = useVebusStore().instanceId;
30
29
  var topics = useMemo(function () { return getTopics(mqtt.portalId, instanceId); }, [mqtt.portalId, instanceId]);
31
30
  var writeTopics = useMemo(function () { return getWriteTopics(mqtt.portalId, instanceId); }, [mqtt.portalId, instanceId]);
32
31
  var updateMode = function (mode) { return mqtt.publish(writeTopics.mode, mode); };
@@ -1 +1 @@
1
- {"version":3,"file":"InverterCharger.provider.js","sourceRoot":"/","sources":["src/Modules/InverterCharger/InverterCharger.provider.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAGL,OAAO,EACP,cAAc,GACf,MAAM,SAAS,CAAA;AAChB,OAAO,EAAc,aAAa,EAAE,MAAM,UAAU,CAAA;AAuBpD,MAAM,UAAU,kBAAkB;IAChC,IAAM,SAAS,GAAG,UAAC,QAAkB,EAAE,gBAA4B;QACjE,OAAO;YACL,KAAK,EAAE,YAAK,QAAQ,gCAA6B;YACjD,IAAI,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,UAAO;YACpD,UAAU,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,gBAAa;YAChE,WAAW,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,iBAAc;YAClE,gBAAgB,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,sBAAmB;SAC7E,CAAC;IACJ,CAAC,CAAC;IAEF,IAAM,cAAc,GAAG,UAAC,QAAkB,EAAE,gBAA4B,IAAK,OAAA,CAAC;QAC5E,IAAI,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,UAAO;KACrD,CAAC,EAF2E,CAE3E,CAAC;IAEH,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACf,IAAA,UAAU,GAAK,aAAa,EAAE,WAApB,CAAqB;IAEvC,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAApC,CAAoC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAChG,IAAM,WAAW,GAAG,OAAO,CAAC,cAAM,OAAA,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAzC,CAAyC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAE1G,IAAM,UAAU,GAAG,UAAC,IAAY,IAAK,OAAA,IAAI,CAAC,OAAO,CAAC,WAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAArC,CAAqC,CAAC;IAE3E,6BACK,cAAc,CAAuB,MAAM,CAAC,KAC/C,UAAU,YAAA,IACX;AACH,CAAC","sourcesContent":["import { useMemo } from \"react\"\nimport {\n PortalId,\n Topics,\n useMqtt,\n useTopicsState,\n} from \"../Mqtt\"\nimport { InstanceId, useVebusStore } from \"../Vebus\"\n\n\nexport interface InverterChargerState {\n state: string\n mode: string\n customName: string\n productName: string\n modeIsAdjustable: number\n}\n\nexport interface InverterChargerTopics extends Topics {\n state?: string\n mode?: string\n customName?: string\n productName?: string\n modeIsAdjustable?: string\n}\n\nexport interface InverterChargerProvider extends InverterChargerState {\n updateMode: (mode: number) => void;\n}\n\nexport function useInverterCharger(): InverterChargerProvider {\n const getTopics = (portalId: PortalId, deviceInstanceId: InstanceId) => {\n return {\n state: `N/${portalId}/system/0/SystemState/State`,\n mode: `N/${portalId}/vebus/${deviceInstanceId}/Mode`,\n customName: `N/${portalId}/vebus/${deviceInstanceId}/CustomName`,\n productName: `N/${portalId}/vebus/${deviceInstanceId}/ProductName`,\n modeIsAdjustable: `N/${portalId}/vebus/${deviceInstanceId}/ModeIsAdjustable`,\n };\n };\n\n const getWriteTopics = (portalId: PortalId, deviceInstanceId: InstanceId) => ({\n mode: `W/${portalId}/vebus/${deviceInstanceId}/Mode`\n });\n\n const mqtt = useMqtt();\n const { instanceId } = useVebusStore();\n\n const topics = useMemo(() => getTopics(mqtt.portalId, instanceId), [mqtt.portalId, instanceId]);\n const writeTopics = useMemo(() => getWriteTopics(mqtt.portalId, instanceId), [mqtt.portalId, instanceId]);\n\n const updateMode = (mode: number) => mqtt.publish(writeTopics!.mode, mode);\n\n return {\n ...useTopicsState<InverterChargerState>(topics),\n updateMode,\n }\n}\n"]}
1
+ {"version":3,"file":"InverterCharger.provider.js","sourceRoot":"/","sources":["src/Modules/InverterCharger/InverterCharger.provider.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAGL,OAAO,EACP,cAAc,GACf,MAAM,SAAS,CAAA;AA0BhB,MAAM,UAAU,kBAAkB,CAAC,UAAsB;IACvD,IAAM,SAAS,GAAG,UAAC,QAAkB,EAAE,gBAA4B;QACjE,OAAO;YACL,KAAK,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,WAAQ;YACtD,IAAI,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,UAAO;YACpD,gBAAgB,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,yBAAsB;YAC/E,UAAU,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,gBAAa;YAChE,WAAW,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,iBAAc;YAClE,gBAAgB,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,sBAAmB;SAC7E,CAAC;IACJ,CAAC,CAAC;IAEF,IAAM,cAAc,GAAG,UAAC,QAAkB,EAAE,gBAA4B,IAAK,OAAA,CAAC;QAC5E,IAAI,EAAE,YAAK,QAAQ,oBAAU,gBAAgB,UAAO;KACrD,CAAC,EAF2E,CAE3E,CAAC;IAEH,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAApC,CAAoC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAChG,IAAM,WAAW,GAAG,OAAO,CAAC,cAAM,OAAA,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAzC,CAAyC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAE1G,IAAM,UAAU,GAAG,UAAC,IAAY,IAAK,OAAA,IAAI,CAAC,OAAO,CAAC,WAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAArC,CAAqC,CAAC;IAE3E,6BACK,cAAc,CAAuB,MAAM,CAAC,KAC/C,UAAU,YAAA,IACX;AACH,CAAC","sourcesContent":["import { useMemo } from \"react\"\nimport {\n PortalId,\n Topics,\n useMqtt,\n useTopicsState,\n} from \"../Mqtt\"\nimport { InstanceId } from \"../Vebus\"\n\n\nexport interface InverterChargerState {\n state: string\n mode: string\n numberOfAcInputs: number\n customName: string\n productName: string\n modeIsAdjustable: number\n}\n\nexport interface InverterChargerTopics extends Topics {\n state?: string\n mode?: string\n numberOfAcInputs?: string,\n customName?: string\n productName?: string\n modeIsAdjustable?: string\n}\n\nexport interface InverterChargerProvider extends InverterChargerState {\n updateMode: (mode: number) => void;\n}\n\nexport function useInverterCharger(instanceId: InstanceId): InverterChargerProvider {\n const getTopics = (portalId: PortalId, deviceInstanceId: InstanceId) => {\n return {\n state: `N/${portalId}/vebus/${deviceInstanceId}/State`,\n mode: `N/${portalId}/vebus/${deviceInstanceId}/Mode`,\n numberOfAcInputs: `N/${portalId}/vebus/${deviceInstanceId}/Ac/NumberOfAcInputs`,\n customName: `N/${portalId}/vebus/${deviceInstanceId}/CustomName`,\n productName: `N/${portalId}/vebus/${deviceInstanceId}/ProductName`,\n modeIsAdjustable: `N/${portalId}/vebus/${deviceInstanceId}/ModeIsAdjustable`,\n };\n };\n\n const getWriteTopics = (portalId: PortalId, deviceInstanceId: InstanceId) => ({\n mode: `W/${portalId}/vebus/${deviceInstanceId}/Mode`\n });\n\n const mqtt = useMqtt();\n\n const topics = useMemo(() => getTopics(mqtt.portalId, instanceId), [mqtt.portalId, instanceId]);\n const writeTopics = useMemo(() => getWriteTopics(mqtt.portalId, instanceId), [mqtt.portalId, instanceId]);\n\n const updateMode = (mode: number) => mqtt.publish(writeTopics!.mode, mode);\n\n return {\n ...useTopicsState<InverterChargerState>(topics),\n updateMode,\n }\n}\n"]}
@@ -15,13 +15,13 @@ export function useInverters() {
15
15
  var messages = mqtt.messagesByWildcard(topics.inverters);
16
16
  useEffect(function () {
17
17
  if (!messages || Object.entries(messages).length === 0) {
18
- // Logger.log("Waiting for alternators...");
18
+ // Logger.log("Waiting for inverters...");
19
19
  }
20
20
  else {
21
21
  var inverters_1 = invertersStore.inverters;
22
22
  var deviceInstances = Object.values(messages);
23
23
  // TODO: check unordered structural identify of old and new state
24
- // TODO: to avoid unnecessary re-rendering: O(n^2 baby)
24
+ // TODO: to avoid unnecessary re-rendering: O(n^2) baby
25
25
  if (!inverters_1 || inverters_1.length != deviceInstances.length || !deviceInstances.every(function (id) { return inverters_1.includes(id); })) {
26
26
  Logger.log("New inverters instances: ".concat(JSON.stringify(deviceInstances)));
27
27
  invertersStore.setInverters(deviceInstances);
@@ -1 +1 @@
1
- {"version":3,"file":"Inverters.provider.js","sourceRoot":"/","sources":["src/Modules/Inverters/Inverters.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAoB,OAAO,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAsB,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAU1C,MAAM,UAAU,YAAY;IAC1B,IAAM,cAAc,GAAG,iBAAiB,EAAE,CAAA;IAE1C,IAAM,SAAS,GAAG,UAAC,QAAkB;QACnC,OAAO;YACL,SAAS,EAAE,YAAK,QAAQ,+BAA4B;SACrD,CAAA;IACH,CAAC,CAAA;IAED,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEvE,IAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAA;IAE1C,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAE1D,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,4CAA4C;QAC9C,CAAC;aAAM,CAAC;YACN,IAAM,WAAS,GAAG,cAAc,CAAC,SAAS,CAAA;YAC1C,IAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAyB,CAAA;YACvE,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,CAAC,WAAS,IAAI,WAAS,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,WAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAtB,CAAsB,CAAC,EAAE,CAAC;gBACvH,MAAM,CAAC,GAAG,CAAC,mCAA4B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAE,CAAC,CAAC;gBAC1E,cAAc,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,cAAc,CAAA;AACvB,CAAC","sourcesContent":["import Logger from \"../../utils/logger\"\nimport { PortalId, Topics, useMqtt } from \"../Mqtt\"\nimport { InverterInstanceId, useInvertersStore } from \"./Inverters.store\"\nimport { useEffect, useMemo } from \"react\"\n\nexport interface InvertersState {\n inverters: InverterInstanceId[]\n}\n\nexport interface InvertersTopics extends Topics {\n inverters?: string\n}\n\nexport function useInverters(): InvertersState {\n const invertersStore = useInvertersStore()\n\n const getTopics = (portalId: PortalId) => {\n return {\n inverters: `N/${portalId}/inverter/+/DeviceInstance`\n }\n }\n\n const mqtt = useMqtt()\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const inverters = invertersStore.inverters\n\n const messages = mqtt.messagesByWildcard(topics.inverters)\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(\"Waiting for alternators...\");\n } else {\n const inverters = invertersStore.inverters\n const deviceInstances = Object.values(messages) as InverterInstanceId[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2 baby)\n if (!inverters || inverters.length != deviceInstances.length || !deviceInstances.every((id) => inverters.includes(id))) {\n Logger.log(`New inverters instances: ${JSON.stringify(deviceInstances)}`);\n invertersStore.setInverters(deviceInstances)\n }\n }\n }, [messages])\n\n return invertersStore\n}\n"]}
1
+ {"version":3,"file":"Inverters.provider.js","sourceRoot":"/","sources":["src/Modules/Inverters/Inverters.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAoB,OAAO,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAsB,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAU1C,MAAM,UAAU,YAAY;IAC1B,IAAM,cAAc,GAAG,iBAAiB,EAAE,CAAA;IAE1C,IAAM,SAAS,GAAG,UAAC,QAAkB;QACnC,OAAO;YACL,SAAS,EAAE,YAAK,QAAQ,+BAA4B;SACrD,CAAA;IACH,CAAC,CAAA;IAED,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEvE,IAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAA;IAE1C,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAE1D,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,0CAA0C;QAC5C,CAAC;aAAM,CAAC;YACN,IAAM,WAAS,GAAG,cAAc,CAAC,SAAS,CAAA;YAC1C,IAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAyB,CAAA;YACvE,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,CAAC,WAAS,IAAI,WAAS,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,WAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAtB,CAAsB,CAAC,EAAE,CAAC;gBACvH,MAAM,CAAC,GAAG,CAAC,mCAA4B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAE,CAAC,CAAC;gBAC1E,cAAc,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,cAAc,CAAA;AACvB,CAAC","sourcesContent":["import Logger from \"../../utils/logger\"\nimport { PortalId, Topics, useMqtt } from \"../Mqtt\"\nimport { InverterInstanceId, useInvertersStore } from \"./Inverters.store\"\nimport { useEffect, useMemo } from \"react\"\n\nexport interface InvertersState {\n inverters: InverterInstanceId[]\n}\n\nexport interface InvertersTopics extends Topics {\n inverters?: string\n}\n\nexport function useInverters(): InvertersState {\n const invertersStore = useInvertersStore()\n\n const getTopics = (portalId: PortalId) => {\n return {\n inverters: `N/${portalId}/inverter/+/DeviceInstance`\n }\n }\n\n const mqtt = useMqtt()\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const inverters = invertersStore.inverters\n\n const messages = mqtt.messagesByWildcard(topics.inverters)\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(\"Waiting for inverters...\");\n } else {\n const inverters = invertersStore.inverters\n const deviceInstances = Object.values(messages) as InverterInstanceId[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2) baby\n if (!inverters || inverters.length != deviceInstances.length || !deviceInstances.every((id) => inverters.includes(id))) {\n Logger.log(`New inverters instances: ${JSON.stringify(deviceInstances)}`);\n invertersStore.setInverters(deviceInstances)\n }\n }\n }, [messages])\n\n return invertersStore\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  import { Topics } from "../Mqtt";
2
2
  export interface SystemStateState {
3
- state: number;
3
+ systemState: number;
4
4
  }
5
5
  export interface SystemStateTopics extends Topics {
6
- state?: string;
6
+ systemState?: string;
7
7
  }
8
8
  export declare function useSystemState(): SystemStateState;
9
9
  //# sourceMappingURL=SystemState.provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SystemState.provider.d.ts","sourceRoot":"/","sources":["src/Modules/SystemState/SystemState.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAA2B,MAAM,SAAS,CAAA;AAGnE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,iBAAkB,SAAQ,MAAM;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,cAAc,IAAI,gBAAgB,CASjD"}
1
+ {"version":3,"file":"SystemState.provider.d.ts","sourceRoot":"/","sources":["src/Modules/SystemState/SystemState.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAA2B,MAAM,SAAS,CAAA;AAGnE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,MAAM;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,cAAc,IAAI,gBAAgB,CASjD"}
@@ -2,7 +2,7 @@ import { useMqtt, useTopicsState } from "../Mqtt";
2
2
  import { useMemo } from "react";
3
3
  export function useSystemState() {
4
4
  var getTopics = function (portalId) { return ({
5
- state: "N/".concat(portalId, "/system/0/SystemState/State"),
5
+ systemState: "N/".concat(portalId, "/system/0/SystemState/State"),
6
6
  }); };
7
7
  var portalId = useMqtt().portalId;
8
8
  var topics = useMemo(function () { return getTopics(portalId); }, [portalId]);
@@ -1 +1 @@
1
- {"version":3,"file":"SystemState.provider.js","sourceRoot":"/","sources":["src/Modules/SystemState/SystemState.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAU/B,MAAM,UAAU,cAAc;IAC5B,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,KAAK,EAAE,YAAK,QAAQ,gCAA6B;KAClD,CAAC,EAFwC,CAExC,CAAA;IAEM,IAAA,QAAQ,GAAK,OAAO,EAAE,SAAd,CAAc;IAC9B,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,QAAQ,CAAC,EAAnB,CAAmB,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAE7D,OAAO,cAAc,CAAmB,MAAM,CAAC,CAAA;AACjD,CAAC","sourcesContent":["import { PortalId, Topics, useMqtt, useTopicsState } from \"../Mqtt\"\nimport { useMemo } from \"react\"\n\nexport interface SystemStateState {\n state: number\n}\n\nexport interface SystemStateTopics extends Topics {\n state?: string\n}\n\nexport function useSystemState(): SystemStateState {\n const getTopics = (portalId: PortalId) => ({\n state: `N/${portalId}/system/0/SystemState/State`,\n })\n\n const { portalId } = useMqtt()\n const topics = useMemo(() => getTopics(portalId), [portalId])\n\n return useTopicsState<SystemStateState>(topics)\n}\n"]}
1
+ {"version":3,"file":"SystemState.provider.js","sourceRoot":"/","sources":["src/Modules/SystemState/SystemState.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAU/B,MAAM,UAAU,cAAc;IAC5B,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,WAAW,EAAE,YAAK,QAAQ,gCAA6B;KACxD,CAAC,EAFwC,CAExC,CAAA;IAEM,IAAA,QAAQ,GAAK,OAAO,EAAE,SAAd,CAAc;IAC9B,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,QAAQ,CAAC,EAAnB,CAAmB,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAE7D,OAAO,cAAc,CAAmB,MAAM,CAAC,CAAA;AACjD,CAAC","sourcesContent":["import { PortalId, Topics, useMqtt, useTopicsState } from \"../Mqtt\"\nimport { useMemo } from \"react\"\n\nexport interface SystemStateState {\n systemState: number\n}\n\nexport interface SystemStateTopics extends Topics {\n systemState?: string\n}\n\nexport function useSystemState(): SystemStateState {\n const getTopics = (portalId: PortalId) => ({\n systemState: `N/${portalId}/system/0/SystemState/State`,\n })\n\n const { portalId } = useMqtt()\n const topics = useMemo(() => getTopics(portalId), [portalId])\n\n return useTopicsState<SystemStateState>(topics)\n}\n"]}
@@ -22,7 +22,7 @@ export var useTanks = function () {
22
22
  var oldTanks = tanksStore.tanks;
23
23
  var newTanks = deviceInstances_1.map(function (tankInstanceId) { return mqtt.messagesByTopics(getTankStateTopics(mqtt.portalId, tankInstanceId)); });
24
24
  // TODO: check unordered structural identify of old and new state
25
- // TODO: to avoid unnecessary re-rendering: O(n^2 baby)
25
+ // TODO: to avoid unnecessary re-rendering: O(n^2) baby
26
26
  if (!oldTanks || oldTanks.length != newTanks.length || !oldTanks.every(function (id) { return deviceInstances_1.includes(id.instance); })) {
27
27
  Logger.log("New tanks instances: ".concat(JSON.stringify(deviceInstances_1)));
28
28
  tanksStore.setTanks(newTanks);
@@ -1 +1 @@
1
- {"version":3,"file":"Tanks.provider.js","sourceRoot":"/","sources":["src/Modules/Tanks/Tanks.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAA6B,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE1C,MAAM,CAAC,IAAM,QAAQ,GAAG;IACtB,IAAM,UAAU,GAAG,aAAa,EAAE,CAAA;IAElC,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,KAAK,EAAE,YAAK,QAAQ,2BAAwB;KAC7C,CAAC,EAFwC,CAExC,CAAA;IAEF,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEvE,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAEtD,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,qCAAqC;QACvC,CAAC;aAAM,CAAC;YACN,IAAM,iBAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAqB,CAAA;YACnE,IAAM,SAAO,GAAG,OAAO,CAAC;gBACtB,IAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAA;gBACjC,IAAM,QAAQ,GAAG,iBAAe,CAAC,GAAG,CAAC,UAAC,cAAc,IAAK,OAAA,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,EAAxE,CAAwE,CAA2B,CAAA;gBAC5J,iEAAiE;gBACjE,uDAAuD;gBACvD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,iBAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAArC,CAAqC,CAAC,EAAE,CAAC;oBACtH,MAAM,CAAC,GAAG,CAAC,+BAAwB,IAAI,CAAC,SAAS,CAAC,iBAAe,CAAC,CAAE,CAAC,CAAC;oBACtE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBAC/B,CAAC;YACH,CAAC,CAAC,CAAA;YACF,OAAO,cAAM,OAAA,SAAO,EAAE,EAAT,CAAS,CAAA;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,IAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;IAE9B,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA","sourcesContent":["import { autorun } from \"mobx\"\nimport Logger from \"../../utils/logger\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { getTankStateTopics, TankInstanceId, TankState } from \"./Tank.provider\"\nimport { useTanksStore } from \"./Tanks.store\"\nimport { useMemo, useEffect } from \"react\"\n\nexport const useTanks = () => {\n const tanksStore = useTanksStore()\n\n const getTopics = (portalId: PortalId) => ({\n tanks: `N/${portalId}/tank/+/DeviceInstance`,\n })\n\n const mqtt = useMqtt()\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const messages = mqtt.messagesByWildcard(topics.tanks)\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(\"Waiting for tanks...\")\n } else {\n const deviceInstances = Object.values(messages) as TankInstanceId[]\n const dispose = autorun(() => {\n const oldTanks = tanksStore.tanks\n const newTanks = deviceInstances.map((tankInstanceId) => mqtt.messagesByTopics(getTankStateTopics(mqtt.portalId, tankInstanceId))) as unknown as TankState[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2 baby)\n if (!oldTanks || oldTanks.length != newTanks.length || !oldTanks.every((id) => deviceInstances.includes(id.instance))) {\n Logger.log(`New tanks instances: ${JSON.stringify(deviceInstances)}`);\n tanksStore.setTanks(newTanks)\n }\n })\n return () => dispose()\n }\n }, [messages])\n\n const tanks = tanksStore.tanks\n\n return tanksStore\n}\n"]}
1
+ {"version":3,"file":"Tanks.provider.js","sourceRoot":"/","sources":["src/Modules/Tanks/Tanks.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAA6B,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE1C,MAAM,CAAC,IAAM,QAAQ,GAAG;IACtB,IAAM,UAAU,GAAG,aAAa,EAAE,CAAA;IAElC,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,KAAK,EAAE,YAAK,QAAQ,2BAAwB;KAC7C,CAAC,EAFwC,CAExC,CAAA;IAEF,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEvE,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAEtD,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,qCAAqC;QACvC,CAAC;aAAM,CAAC;YACN,IAAM,iBAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAqB,CAAA;YACnE,IAAM,SAAO,GAAG,OAAO,CAAC;gBACtB,IAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAA;gBACjC,IAAM,QAAQ,GAAG,iBAAe,CAAC,GAAG,CAAC,UAAC,cAAc,IAAK,OAAA,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,EAAxE,CAAwE,CAA2B,CAAA;gBAC5J,iEAAiE;gBACjE,uDAAuD;gBACvD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,iBAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAArC,CAAqC,CAAC,EAAE,CAAC;oBACtH,MAAM,CAAC,GAAG,CAAC,+BAAwB,IAAI,CAAC,SAAS,CAAC,iBAAe,CAAC,CAAE,CAAC,CAAC;oBACtE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBAC/B,CAAC;YACH,CAAC,CAAC,CAAA;YACF,OAAO,cAAM,OAAA,SAAO,EAAE,EAAT,CAAS,CAAA;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,IAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;IAE9B,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA","sourcesContent":["import { autorun } from \"mobx\"\nimport Logger from \"../../utils/logger\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { getTankStateTopics, TankInstanceId, TankState } from \"./Tank.provider\"\nimport { useTanksStore } from \"./Tanks.store\"\nimport { useMemo, useEffect } from \"react\"\n\nexport const useTanks = () => {\n const tanksStore = useTanksStore()\n\n const getTopics = (portalId: PortalId) => ({\n tanks: `N/${portalId}/tank/+/DeviceInstance`,\n })\n\n const mqtt = useMqtt()\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const messages = mqtt.messagesByWildcard(topics.tanks)\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(\"Waiting for tanks...\")\n } else {\n const deviceInstances = Object.values(messages) as TankInstanceId[]\n const dispose = autorun(() => {\n const oldTanks = tanksStore.tanks\n const newTanks = deviceInstances.map((tankInstanceId) => mqtt.messagesByTopics(getTankStateTopics(mqtt.portalId, tankInstanceId))) as unknown as TankState[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2) baby\n if (!oldTanks || oldTanks.length != newTanks.length || !oldTanks.every((id) => deviceInstances.includes(id.instance))) {\n Logger.log(`New tanks instances: ${JSON.stringify(deviceInstances)}`);\n tanksStore.setTanks(newTanks)\n }\n })\n return () => dispose()\n }\n }, [messages])\n\n const tanks = tanksStore.tanks\n\n return tanksStore\n}\n"]}
@@ -23,7 +23,7 @@ export function useTemperatures() {
23
23
  var oldTemperatures = temperaturesStore.temperatures;
24
24
  var newTemperatures = deviceInstances_1.map(function (temperatureInstanceId) { return mqtt.messagesByTopics(getTemperatureStateTopics(mqtt.portalId, temperatureInstanceId)); });
25
25
  // TODO: check unordered structural identify of old and new state
26
- // TODO: to avoid unnecessary re-rendering: O(n^2 baby)
26
+ // TODO: to avoid unnecessary re-rendering: O(n^2) baby
27
27
  if (!oldTemperatures || oldTemperatures.length != newTemperatures.length || !oldTemperatures.every(function (id) { return deviceInstances_1.includes(id.instance); })) {
28
28
  Logger.log("New temperatures instances: ".concat(JSON.stringify(deviceInstances_1)));
29
29
  temperaturesStore.setTemperatures(newTemperatures);
@@ -1 +1 @@
1
- {"version":3,"file":"Temperatures.provider.js","sourceRoot":"/","sources":["src/Modules/Temperatures/Temperatures.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,yBAAyB,EAA2C,MAAM,wBAAwB,CAAC;AAC5G,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,UAAU,eAAe;IAC7B,IAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;IACjD,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,oBAAoB,EAAE,YAAK,QAAQ,kCAA+B;KACnE,CAAC,EAFwC,CAExC,CAAC;IAEH,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAExE,IAAM,YAAY,GAAG,iBAAiB,CAAC,YAAY,CAAC;IAEpD,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAEtE,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,6CAA6C;QAC/C,CAAC;aAAM,CAAC;YACN,IAAM,iBAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAA4B,CAAC;YAC3E,IAAM,SAAO,GAAG,OAAO,CAAC;gBACtB,IAAM,eAAe,GAAG,iBAAiB,CAAC,YAAY,CAAA;gBACtD,IAAM,eAAe,GAAG,iBAAe,CAAC,GAAG,CAAC,UAAC,qBAAqB,IAAK,OAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,EAAtF,CAAsF,CAAkC,CAAA;gBAC/L,iEAAiE;gBACjE,uDAAuD;gBACvD,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,iBAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAArC,CAAqC,CAAC,EAAE,CAAC;oBAClJ,MAAM,CAAC,GAAG,CAAC,sCAA+B,IAAI,CAAC,SAAS,CAAC,iBAAe,CAAC,CAAE,CAAC,CAAC;oBAC7E,iBAAiB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC,CAAC,CAAA;YACF,OAAO,cAAM,OAAA,SAAO,EAAE,EAAT,CAAS,CAAA;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,iBAAiB,CAAA;AAC1B,CAAC","sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport { PortalId, useMqtt } from \"../Mqtt\";\nimport { useTemperaturesStore } from \"./Temperatures.store\";\nimport Logger from \"../../utils/logger\";\nimport { getTemperatureStateTopics, TemperatureInstanceId, TemperatureState } from \"./Temperature.provider\";\nimport { autorun } from \"mobx\";\n\nexport function useTemperatures() {\n const temperaturesStore = useTemperaturesStore();\n const mqtt = useMqtt();\n\n const getTopics = (portalId: PortalId) => ({\n temperatureInstances: `N/${portalId}/temperature/+/DeviceInstance`,\n });\n\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId]);\n\n const temperatures = temperaturesStore.temperatures;\n\n const messages = mqtt.messagesByWildcard(topics.temperatureInstances);\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(\"Waiting for temperatures...\");\n } else {\n const deviceInstances = Object.values(messages) as TemperatureInstanceId[];\n const dispose = autorun(() => {\n const oldTemperatures = temperaturesStore.temperatures\n const newTemperatures = deviceInstances.map((temperatureInstanceId) => mqtt.messagesByTopics(getTemperatureStateTopics(mqtt.portalId, temperatureInstanceId))) as unknown as TemperatureState[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2 baby)\n if (!oldTemperatures || oldTemperatures.length != newTemperatures.length || !oldTemperatures.every((id) => deviceInstances.includes(id.instance))) {\n Logger.log(`New temperatures instances: ${JSON.stringify(deviceInstances)}`);\n temperaturesStore.setTemperatures(newTemperatures);\n }\n })\n return () => dispose()\n }\n }, [messages])\n\n return temperaturesStore\n}\n"]}
1
+ {"version":3,"file":"Temperatures.provider.js","sourceRoot":"/","sources":["src/Modules/Temperatures/Temperatures.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,yBAAyB,EAA2C,MAAM,wBAAwB,CAAC;AAC5G,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,UAAU,eAAe;IAC7B,IAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;IACjD,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,oBAAoB,EAAE,YAAK,QAAQ,kCAA+B;KACnE,CAAC,EAFwC,CAExC,CAAC;IAEH,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAExE,IAAM,YAAY,GAAG,iBAAiB,CAAC,YAAY,CAAC;IAEpD,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAEtE,SAAS,CAAC;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,6CAA6C;QAC/C,CAAC;aAAM,CAAC;YACN,IAAM,iBAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAA4B,CAAC;YAC3E,IAAM,SAAO,GAAG,OAAO,CAAC;gBACtB,IAAM,eAAe,GAAG,iBAAiB,CAAC,YAAY,CAAA;gBACtD,IAAM,eAAe,GAAG,iBAAe,CAAC,GAAG,CAAC,UAAC,qBAAqB,IAAK,OAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,EAAtF,CAAsF,CAAkC,CAAA;gBAC/L,iEAAiE;gBACjE,uDAAuD;gBACvD,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,iBAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAArC,CAAqC,CAAC,EAAE,CAAC;oBAClJ,MAAM,CAAC,GAAG,CAAC,sCAA+B,IAAI,CAAC,SAAS,CAAC,iBAAe,CAAC,CAAE,CAAC,CAAC;oBAC7E,iBAAiB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC,CAAC,CAAA;YACF,OAAO,cAAM,OAAA,SAAO,EAAE,EAAT,CAAS,CAAA;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,iBAAiB,CAAA;AAC1B,CAAC","sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport { PortalId, useMqtt } from \"../Mqtt\";\nimport { useTemperaturesStore } from \"./Temperatures.store\";\nimport Logger from \"../../utils/logger\";\nimport { getTemperatureStateTopics, TemperatureInstanceId, TemperatureState } from \"./Temperature.provider\";\nimport { autorun } from \"mobx\";\n\nexport function useTemperatures() {\n const temperaturesStore = useTemperaturesStore();\n const mqtt = useMqtt();\n\n const getTopics = (portalId: PortalId) => ({\n temperatureInstances: `N/${portalId}/temperature/+/DeviceInstance`,\n });\n\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId]);\n\n const temperatures = temperaturesStore.temperatures;\n\n const messages = mqtt.messagesByWildcard(topics.temperatureInstances);\n\n useEffect(() => {\n if (!messages || Object.entries(messages).length === 0) {\n // Logger.log(\"Waiting for temperatures...\");\n } else {\n const deviceInstances = Object.values(messages) as TemperatureInstanceId[];\n const dispose = autorun(() => {\n const oldTemperatures = temperaturesStore.temperatures\n const newTemperatures = deviceInstances.map((temperatureInstanceId) => mqtt.messagesByTopics(getTemperatureStateTopics(mqtt.portalId, temperatureInstanceId))) as unknown as TemperatureState[]\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2) baby\n if (!oldTemperatures || oldTemperatures.length != newTemperatures.length || !oldTemperatures.every((id) => deviceInstances.includes(id.instance))) {\n Logger.log(`New temperatures instances: ${JSON.stringify(deviceInstances)}`);\n temperaturesStore.setTemperatures(newTemperatures);\n }\n })\n return () => dispose()\n }\n }, [messages])\n\n return temperaturesStore\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Vebus.provider.d.ts","sourceRoot":"/","sources":["src/Modules/Vebus/Vebus.provider.ts"],"names":[],"mappings":"AASA,OAAO,EAGL,UAAU,EACX,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,QAAQ,QAAO,UAuE3B,CAAC"}
1
+ {"version":3,"file":"Vebus.provider.d.ts","sourceRoot":"/","sources":["src/Modules/Vebus/Vebus.provider.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,UAAU,EACX,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,QAAQ,QAAO,UAuE3B,CAAC"}
@@ -1,68 +1,77 @@
1
1
  import { useEffect, useMemo } from "react";
2
- import { toJS } from "mobx";
3
- import { isEqual } from "lodash-es";
4
2
  import Logger from "../../utils/logger";
5
- import { useMqtt, useTopicsState } from "../Mqtt";
3
+ import { useMqtt, useTopicState } from "../Mqtt";
6
4
  import { useVebusStore, } from "./Vebus.store";
7
5
  export var useVebus = function () {
8
6
  var mqtt = useMqtt();
9
7
  var vebusStore = useVebusStore();
10
8
  var portalId = mqtt.portalId;
11
9
  var getTopics = function (portalId) { return ({
10
+ vebusInstanceId: "N/".concat(portalId, "/system/0/VebusInstance"),
12
11
  deviceInstances: "N/".concat(portalId, "/vebus/+/DeviceInstance"),
13
12
  }); };
14
13
  var topics = useMemo(function () { return getTopics(portalId); }, [portalId]);
14
+ var vebusInstanceId = useTopicState(topics.vebusInstanceId);
15
15
  var messages = mqtt.messagesByWildcard(topics.deviceInstances);
16
- // Checks for old inverter paths, if not equal, set new path.
17
16
  useEffect(function () {
18
- var deviceInstances = Object.values(messages);
19
- var possibleInvertersPaths = deviceInstances.reduce(function (acc, id) {
20
- acc[id] = "N/".concat(portalId, "/vebus/").concat(id, "/Ac/NumberOfAcInputs");
21
- return acc;
22
- }, {});
23
- var oldInvertersPaths = toJS(vebusStore.possibleInvertersPaths);
24
- if (!isEqual(possibleInvertersPaths, oldInvertersPaths)) {
25
- Logger.log("Saving vebus inverters paths");
26
- vebusStore.setPossibleInvertersPaths(possibleInvertersPaths);
27
- }
28
- }, [messages]);
29
- var subsMessages = useTopicsState(vebusStore.possibleInvertersPaths);
30
- // set vebus instanceId (system with multiple inputs)
31
- useEffect(function () {
32
- // Logger.log("Setting vebus device instance");
33
- // Sometimes "ghost" instances of devices linger in MQTT, so we need to select the highest (i.e. latest) instance ID
34
- var multiInstances = Object.entries(subsMessages)
35
- // Take only "Multi" devices -> must have more than one AcInput
36
- .filter(function (_a) {
37
- var _ = _a[0], nAcInputs = _a[1];
38
- return nAcInputs && parseInt(nAcInputs) !== 0;
39
- })
40
- .map(function (instance) { return parseInt(instance[0]); })
41
- .sort(function (a, b) { return b - a; });
42
- var newInstanceId = multiInstances && multiInstances.length && multiInstances[0];
43
- if (newInstanceId && newInstanceId !== vebusStore.instanceId) {
44
- Logger.log("New VE.Bus instance ID: ".concat(newInstanceId));
45
- vebusStore.setInstanceId(newInstanceId);
17
+ if (vebusInstanceId && vebusInstanceId !== vebusStore.instanceId) {
18
+ Logger.log("New VE.Bus instance ID: ".concat(vebusInstanceId));
19
+ vebusStore.setInstanceId(vebusInstanceId);
46
20
  }
47
- }, [subsMessages]);
48
- // set vebus inverters
49
- useEffect(function () {
50
- // Logger.log("Setting vebus device inverters");
51
- var vebusInverters = Object.entries(subsMessages)
52
- .filter(function (_a) {
53
- var _ = _a[0], nAcInputs = _a[1];
54
- return parseInt(nAcInputs) === 0;
55
- })
56
- .map(function (_a) {
57
- var instance = _a[0];
58
- return parseInt(instance);
59
- });
60
- var oldInverters = toJS(vebusStore.vebusInverters);
61
- if (!isEqual(vebusInverters, oldInverters)) {
62
- Logger.log("New VE.Bus device inverters: ".concat(JSON.stringify(vebusInverters)));
21
+ var oldDevices = vebusStore.vebusInstanceIds;
22
+ var deviceInstances = Object.values(messages);
23
+ // TODO: check unordered structural identify of old and new state
24
+ // TODO: to avoid unnecessary re-rendering: O(n^2) baby
25
+ if (!oldDevices || oldDevices.length != deviceInstances.length || !deviceInstances.every(function (id) { return oldDevices.includes(id); })) {
26
+ Logger.log("New VE.Bus devices: ".concat(JSON.stringify(deviceInstances)));
27
+ vebusStore.setVebusInstanceIds(deviceInstances);
28
+ var possibleInvertersPaths = deviceInstances.reduce(function (acc, id) {
29
+ acc["".concat(id)] = "N/".concat(portalId, "/vebus/").concat(id, "/Ac/NumberOfAcInputs");
30
+ return acc;
31
+ }, {});
32
+ var vebusDevices = mqtt.messagesByTopics(possibleInvertersPaths);
33
+ // extract devices with no ac input -> pure inverters
34
+ var vebusInverters = Object.entries(vebusDevices)
35
+ .filter(function (_a) {
36
+ var _ = _a[0], nAcInputs = _a[1];
37
+ return parseInt(nAcInputs) === 0;
38
+ })
39
+ .map(function (_a) {
40
+ var instance = _a[0];
41
+ return parseInt(instance);
42
+ })
43
+ // make sure vebusInstanceId is always listed first, then ascending
44
+ .sort(function (a, b) {
45
+ if (a == vebusInstanceId)
46
+ return -1;
47
+ if (b == vebusInstanceId)
48
+ return 1;
49
+ return a - b;
50
+ });
51
+ // extract devices with at least one ac input -> inverters + chargers
52
+ var vebusInverterChargers = Object.entries(vebusDevices)
53
+ .filter(function (_a) {
54
+ var _ = _a[0], nAcInputs = _a[1];
55
+ return parseInt(nAcInputs) > 0;
56
+ })
57
+ .map(function (_a) {
58
+ var instance = _a[0];
59
+ return parseInt(instance);
60
+ })
61
+ // make sure vebusInstanceId is always listed first, then ascending
62
+ .sort(function (a, b) {
63
+ if (a == vebusInstanceId)
64
+ return -1;
65
+ if (b == vebusInstanceId)
66
+ return 1;
67
+ return a - b;
68
+ });
69
+ Logger.log("New VE.Bus inverters: ".concat(JSON.stringify(vebusInverters)));
63
70
  vebusStore.setVebusInverters(vebusInverters);
71
+ Logger.log("New VE.Bus inverter/chargers: ".concat(JSON.stringify(vebusInverterChargers)));
72
+ vebusStore.setVebusInverterChargers(vebusInverterChargers);
64
73
  }
65
- }, [subsMessages]);
74
+ }, [vebusInstanceId, messages]);
66
75
  return vebusStore;
67
76
  };
68
77
  //# sourceMappingURL=Vebus.provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Vebus.provider.js","sourceRoot":"/","sources":["src/Modules/Vebus/Vebus.provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport { runInAction, toJS, when } from \"mobx\";\nimport { isEqual } from \"lodash-es\";\nimport Logger from \"../../utils/logger\";\nimport {\n PortalId,\n useMqtt,\n useTopicsState\n} from \"../Mqtt\";\nimport {\n PossibleInvertersPathsType,\n useVebusStore,\n VebusState,\n} from \"./Vebus.store\";\n\nexport const useVebus = (): VebusState => {\n const mqtt = useMqtt();\n const vebusStore = useVebusStore();\n const portalId = mqtt.portalId;\n\n const getTopics = (portalId: PortalId) => ({\n deviceInstances: `N/${portalId}/vebus/+/DeviceInstance`,\n });\n\n const topics = useMemo(() => getTopics(portalId), [portalId]);\n const messages = mqtt.messagesByWildcard(topics.deviceInstances);\n\n // Checks for old inverter paths, if not equal, set new path.\n useEffect(() => {\n const deviceInstances = Object.values(messages);\n const possibleInvertersPaths = deviceInstances.reduce(\n (acc: { [key: string]: string }, id) => {\n acc[id as string] = `N/${portalId}/vebus/${id}/Ac/NumberOfAcInputs`;\n return acc;\n },\n {}\n );\n\n const oldInvertersPaths = toJS(vebusStore.possibleInvertersPaths);\n\n if (!isEqual(possibleInvertersPaths, oldInvertersPaths)) {\n Logger.log(\"Saving vebus inverters paths\");\n vebusStore.setPossibleInvertersPaths(possibleInvertersPaths)\n }\n }, [messages])\n\n const subsMessages = useTopicsState<PossibleInvertersPathsType>(\n vebusStore.possibleInvertersPaths\n );\n\n // set vebus instanceId (system with multiple inputs)\n useEffect(() => {\n // Logger.log(\"Setting vebus device instance\");\n // Sometimes \"ghost\" instances of devices linger in MQTT, so we need to select the highest (i.e. latest) instance ID\n const multiInstances = Object.entries(subsMessages)\n // Take only \"Multi\" devices -> must have more than one AcInput\n .filter(([_, nAcInputs]) => nAcInputs && parseInt(nAcInputs) !== 0)\n .map((instance) => parseInt(instance[0]))\n .sort((a, b) => b - a);\n\n const newInstanceId =\n multiInstances && multiInstances.length && multiInstances[0];\n\n if (newInstanceId && newInstanceId !== vebusStore.instanceId) {\n Logger.log(`New VE.Bus instance ID: ${newInstanceId}`);\n vebusStore.setInstanceId(newInstanceId);\n }\n }, [subsMessages]);\n\n // set vebus inverters\n useEffect(() => {\n // Logger.log(\"Setting vebus device inverters\");\n\n const vebusInverters = Object.entries(subsMessages)\n .filter(([_, nAcInputs]) => parseInt(nAcInputs) === 0)\n .map(([instance]) => parseInt(instance));\n\n const oldInverters = toJS(vebusStore.vebusInverters);\n\n if (!isEqual(vebusInverters, oldInverters)) {\n Logger.log(`New VE.Bus device inverters: ${JSON.stringify(vebusInverters)}`);\n vebusStore.setVebusInverters(vebusInverters);\n }\n }, [subsMessages]);\n\n return vebusStore;\n};\n"]}
1
+ {"version":3,"file":"Vebus.provider.js","sourceRoot":"/","sources":["src/Modules/Vebus/Vebus.provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport Logger from \"../../utils/logger\";\nimport {\n PortalId,\n useMqtt,\n useTopicState\n} from \"../Mqtt\";\nimport {\n InstanceId,\n useVebusStore,\n VebusDevices,\n VebusState,\n} from \"./Vebus.store\";\n\nexport const useVebus = (): VebusState => {\n const mqtt = useMqtt();\n const vebusStore = useVebusStore();\n const portalId = mqtt.portalId;\n\n const getTopics = (portalId: PortalId) => ({\n vebusInstanceId: `N/${portalId}/system/0/VebusInstance`,\n deviceInstances: `N/${portalId}/vebus/+/DeviceInstance`,\n });\n\n const topics = useMemo(() => getTopics(portalId), [portalId]);\n const vebusInstanceId = useTopicState<InstanceId>(topics.vebusInstanceId)\n const messages = mqtt.messagesByWildcard(topics.deviceInstances);\n\n useEffect(() => {\n if (vebusInstanceId && vebusInstanceId !== vebusStore.instanceId) {\n Logger.log(`New VE.Bus instance ID: ${vebusInstanceId}`);\n vebusStore.setInstanceId(vebusInstanceId);\n }\n\n const oldDevices = vebusStore.vebusInstanceIds\n const deviceInstances = Object.values(messages) as VebusDevices;\n\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2) baby\n if (!oldDevices || oldDevices.length != deviceInstances.length || !deviceInstances.every((id) => oldDevices.includes(id))) {\n\n Logger.log(`New VE.Bus devices: ${JSON.stringify(deviceInstances)}`);\n vebusStore.setVebusInstanceIds(deviceInstances)\n\n const possibleInvertersPaths = deviceInstances.reduce(\n (acc: { [key: string]: string }, id) => {\n acc[`${id}`] = `N/${portalId}/vebus/${id}/Ac/NumberOfAcInputs`;\n return acc;\n },\n {}\n );\n\n const vebusDevices = mqtt.messagesByTopics(possibleInvertersPaths) as unknown as { [key: string]: string}\n\n // extract devices with no ac input -> pure inverters\n const vebusInverters = Object.entries(vebusDevices)\n .filter(([_, nAcInputs]) => parseInt(nAcInputs) === 0)\n .map(([instance]) => parseInt(instance))\n // make sure vebusInstanceId is always listed first, then ascending\n .sort((a, b) => {\n if (a == vebusInstanceId) return -1\n if (b == vebusInstanceId) return 1\n return a - b\n })\n\n // extract devices with at least one ac input -> inverters + chargers\n const vebusInverterChargers = Object.entries(vebusDevices)\n .filter(([_, nAcInputs]) => parseInt(nAcInputs) > 0)\n .map(([instance]) => parseInt(instance))\n // make sure vebusInstanceId is always listed first, then ascending\n .sort((a, b) => {\n if (a == vebusInstanceId) return -1\n if (b == vebusInstanceId) return 1\n return a - b\n })\n\n Logger.log(`New VE.Bus inverters: ${JSON.stringify(vebusInverters)}`);\n vebusStore.setVebusInverters(vebusInverters);\n\n Logger.log(`New VE.Bus inverter/chargers: ${JSON.stringify(vebusInverterChargers)}`);\n vebusStore.setVebusInverterChargers(vebusInverterChargers);\n }\n }, [vebusInstanceId, messages])\n\n return vebusStore;\n};\n"]}
@@ -1,19 +1,20 @@
1
1
  export type InstanceId = number | null | undefined;
2
- export type PossibleInvertersPathsType = {
3
- [key: string]: string;
4
- };
5
- export type VebusInverters = Array<number>;
2
+ export type VebusDevices = Array<number>;
6
3
  export interface VebusState {
7
4
  instanceId: InstanceId;
8
- vebusInverters: VebusInverters;
5
+ vebusInstanceIds: VebusDevices;
6
+ vebusInverters: VebusDevices;
7
+ vebusInverterChargers: VebusDevices;
9
8
  }
10
9
  export declare class VebusStore {
11
10
  instanceId: InstanceId;
12
- possibleInvertersPaths: PossibleInvertersPathsType;
13
- vebusInverters: VebusInverters;
11
+ vebusInstanceIds: VebusDevices;
12
+ vebusInverters: VebusDevices;
13
+ vebusInverterChargers: VebusDevices;
14
14
  constructor();
15
- setPossibleInvertersPaths: (possibleInvertersPaths: PossibleInvertersPathsType) => PossibleInvertersPathsType;
16
- setVebusInverters: (vebusInverters: VebusInverters) => VebusInverters;
15
+ setVebusInstanceIds: (devices: VebusDevices) => VebusDevices;
16
+ setVebusInverters: (devices: VebusDevices) => VebusDevices;
17
+ setVebusInverterChargers: (devices: VebusDevices) => VebusDevices;
17
18
  setInstanceId: (instanceId: InstanceId) => InstanceId;
18
19
  }
19
20
  export declare function useVebusStore(): VebusStore;
@@ -1 +1 @@
1
- {"version":3,"file":"Vebus.store.d.ts","sourceRoot":"/","sources":["src/Modules/Vebus/Vebus.store.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;AAClD,MAAM,MAAM,0BAA0B,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAC,CAAA;AACjE,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;AAC1C,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,UAAU,CAAA;IACtB,cAAc,EAAE,cAAc,CAAA;CAC/B;AAED,qBAAa,UAAU;IACrB,UAAU,EAAE,UAAU,CAAA;IACtB,sBAAsB,EAAE,0BAA0B,CAAA;IAClD,cAAc,EAAE,cAAc,CAAA;;IAY9B,yBAAyB,2BAA4B,0BAA0B,gCAA0D;IAEzI,iBAAiB,mBAAoB,cAAc,oBAA0C;IAE7F,aAAa,eAAgB,UAAU,gBAAiC;CACzE;AAYD,wBAAgB,aAAa,eAE5B"}
1
+ {"version":3,"file":"Vebus.store.d.ts","sourceRoot":"/","sources":["src/Modules/Vebus/Vebus.store.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;AAElD,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;AAExC,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,UAAU,CAAA;IACtB,gBAAgB,EAAE,YAAY,CAAA;IAC9B,cAAc,EAAE,YAAY,CAAA;IAC5B,qBAAqB,EAAE,YAAY,CAAA;CACpC;AAED,qBAAa,UAAU;IACrB,UAAU,EAAE,UAAU,CAAA;IACtB,gBAAgB,EAAE,YAAY,CAAA;IAC9B,cAAc,EAAE,YAAY,CAAA;IAC5B,qBAAqB,EAAE,YAAY,CAAA;;IAcnC,mBAAmB,YAAa,YAAY,kBAAqC;IAEjF,iBAAiB,YAAa,YAAY,kBAAmC;IAE7E,wBAAwB,YAAa,YAAY,kBAA0C;IAE3F,aAAa,eAAgB,UAAU,gBAAiC;CACzE;AAYD,wBAAgB,aAAa,eAE5B"}
@@ -10,7 +10,7 @@ var VebusStore = /** @class */ (function () {
10
10
  writable: true,
11
11
  value: void 0
12
12
  });
13
- Object.defineProperty(this, "possibleInvertersPaths", {
13
+ Object.defineProperty(this, "vebusInstanceIds", {
14
14
  enumerable: true,
15
15
  configurable: true,
16
16
  writable: true,
@@ -22,17 +22,29 @@ var VebusStore = /** @class */ (function () {
22
22
  writable: true,
23
23
  value: void 0
24
24
  });
25
- Object.defineProperty(this, "setPossibleInvertersPaths", {
25
+ Object.defineProperty(this, "vebusInverterChargers", {
26
26
  enumerable: true,
27
27
  configurable: true,
28
28
  writable: true,
29
- value: function (possibleInvertersPaths) { return _this.possibleInvertersPaths = possibleInvertersPaths; }
29
+ value: void 0
30
+ });
31
+ Object.defineProperty(this, "setVebusInstanceIds", {
32
+ enumerable: true,
33
+ configurable: true,
34
+ writable: true,
35
+ value: function (devices) { return _this.vebusInstanceIds = devices; }
30
36
  });
31
37
  Object.defineProperty(this, "setVebusInverters", {
32
38
  enumerable: true,
33
39
  configurable: true,
34
40
  writable: true,
35
- value: function (vebusInverters) { return _this.vebusInverters = vebusInverters; }
41
+ value: function (devices) { return _this.vebusInverters = devices; }
42
+ });
43
+ Object.defineProperty(this, "setVebusInverterChargers", {
44
+ enumerable: true,
45
+ configurable: true,
46
+ writable: true,
47
+ value: function (devices) { return _this.vebusInverterChargers = devices; }
36
48
  });
37
49
  Object.defineProperty(this, "setInstanceId", {
38
50
  enumerable: true,
@@ -41,12 +53,14 @@ var VebusStore = /** @class */ (function () {
41
53
  value: function (instanceId) { return _this.instanceId = instanceId; }
42
54
  });
43
55
  makeAutoObservable(this, {
44
- setPossibleInvertersPaths: action,
56
+ setVebusInstanceIds: action,
45
57
  setVebusInverters: action,
58
+ setVebusInverterChargers: action,
46
59
  setInstanceId: action
47
60
  });
48
- this.possibleInvertersPaths = {};
61
+ this.vebusInstanceIds = [];
49
62
  this.vebusInverters = [];
63
+ this.vebusInverterChargers = [];
50
64
  }
51
65
  return VebusStore;
52
66
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"Vebus.store.js","sourceRoot":"/","sources":["src/Modules/Vebus/Vebus.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAe,MAAM,MAAM,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,IAAI,KAAiB,CAAA;AAUrB;IAKE;QAAA,iBAQC;QAZD;;;;;WAAsB;QACtB;;;;;WAAkD;QAClD;;;;;WAA8B;QAY9B;;;;mBAA4B,UAAC,sBAAkD,IAAK,OAAA,KAAI,CAAC,sBAAsB,GAAG,sBAAsB,EAApD,CAAoD;WAAC;QAEzI;;;;mBAAoB,UAAC,cAA8B,IAAK,OAAA,KAAI,CAAC,cAAc,GAAG,cAAc,EAApC,CAAoC;WAAC;QAE7F;;;;mBAAgB,UAAC,UAAsB,IAAK,OAAA,KAAI,CAAC,UAAU,GAAG,UAAU,EAA5B,CAA4B;WAAA;QAbtE,kBAAkB,CAAC,IAAI,EAAE;YACvB,yBAAyB,EAAE,MAAM;YACjC,iBAAiB,EAAE,MAAM;YACzB,aAAa,EAAE,MAAM;SACtB,CAAC,CAAA;QACF,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAA;QAChC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;IAC1B,CAAC;IAOH,iBAAC;AAAD,CAAC,AApBD,IAoBC;;AAED,SAAS,eAAe;IACtB,IAAM,MAAM,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,IAAI,UAAU,EAAE,CAAA;IACxC,4CAA4C;IAC5C,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,MAAM,CAAA;IAChD,sCAAsC;IACtC,IAAI,CAAC,KAAK;QAAE,KAAK,GAAG,MAAM,CAAA;IAE1B,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,cAAM,OAAA,eAAe,EAAE,EAAjB,CAAiB,EAAE,EAAE,CAAC,CAAA;AAC7C,CAAC","sourcesContent":["import { action, makeAutoObservable, runInAction } from \"mobx\"\nimport { useMemo } from \"react\"\n\nlet store: VebusStore\n\nexport type InstanceId = number | null | undefined\nexport type PossibleInvertersPathsType = { [key: string]: string}\nexport type VebusInverters = Array<number>\nexport interface VebusState {\n instanceId: InstanceId\n vebusInverters: VebusInverters\n}\n\nexport class VebusStore {\n instanceId: InstanceId\n possibleInvertersPaths: PossibleInvertersPathsType\n vebusInverters: VebusInverters\n\n constructor() {\n makeAutoObservable(this, {\n setPossibleInvertersPaths: action,\n setVebusInverters: action,\n setInstanceId: action\n })\n this.possibleInvertersPaths = {}\n this.vebusInverters = []\n }\n\n setPossibleInvertersPaths = (possibleInvertersPaths: PossibleInvertersPathsType) => this.possibleInvertersPaths = possibleInvertersPaths;\n\n setVebusInverters = (vebusInverters: VebusInverters) => this.vebusInverters = vebusInverters;\n\n setInstanceId = (instanceId: InstanceId) => this.instanceId = instanceId\n}\n\nfunction initializeStore() {\n const _store = store ?? new VebusStore()\n // For SSG and SSR always create a new store\n if (typeof window === \"undefined\") return _store\n // Create the store once in the client\n if (!store) store = _store\n\n return _store\n}\n\nexport function useVebusStore() {\n return useMemo(() => initializeStore(), [])\n}\n"]}
1
+ {"version":3,"file":"Vebus.store.js","sourceRoot":"/","sources":["src/Modules/Vebus/Vebus.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAe,MAAM,MAAM,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,IAAI,KAAiB,CAAA;AAarB;IAME;QAAA,iBAUC;QAfD;;;;;WAAsB;QACtB;;;;;WAA8B;QAC9B;;;;;WAA4B;QAC5B;;;;;WAAmC;QAcnC;;;;mBAAsB,UAAC,OAAqB,IAAK,OAAA,KAAI,CAAC,gBAAgB,GAAG,OAAO,EAA/B,CAA+B;WAAC;QAEjF;;;;mBAAoB,UAAC,OAAqB,IAAK,OAAA,KAAI,CAAC,cAAc,GAAG,OAAO,EAA7B,CAA6B;WAAC;QAE7E;;;;mBAA2B,UAAC,OAAqB,IAAK,OAAA,KAAI,CAAC,qBAAqB,GAAG,OAAO,EAApC,CAAoC;WAAC;QAE3F;;;;mBAAgB,UAAC,UAAsB,IAAK,OAAA,KAAI,CAAC,UAAU,GAAG,UAAU,EAA5B,CAA4B;WAAA;QAjBtE,kBAAkB,CAAC,IAAI,EAAE;YACvB,mBAAmB,EAAE,MAAM;YAC3B,iBAAiB,EAAE,MAAM;YACzB,wBAAwB,EAAE,MAAM;YAChC,aAAa,EAAE,MAAM;SACtB,CAAC,CAAA;QACF,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAA;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;QACxB,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAA;IACjC,CAAC;IASH,iBAAC;AAAD,CAAC,AAzBD,IAyBC;;AAED,SAAS,eAAe;IACtB,IAAM,MAAM,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,IAAI,UAAU,EAAE,CAAA;IACxC,4CAA4C;IAC5C,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,MAAM,CAAA;IAChD,sCAAsC;IACtC,IAAI,CAAC,KAAK;QAAE,KAAK,GAAG,MAAM,CAAA;IAE1B,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,cAAM,OAAA,eAAe,EAAE,EAAjB,CAAiB,EAAE,EAAE,CAAC,CAAA;AAC7C,CAAC","sourcesContent":["import { action, makeAutoObservable, runInAction } from \"mobx\"\nimport { useMemo } from \"react\"\n\nlet store: VebusStore\n\nexport type InstanceId = number | null | undefined\n\nexport type VebusDevices = Array<number>\n\nexport interface VebusState {\n instanceId: InstanceId\n vebusInstanceIds: VebusDevices\n vebusInverters: VebusDevices\n vebusInverterChargers: VebusDevices\n}\n\nexport class VebusStore {\n instanceId: InstanceId\n vebusInstanceIds: VebusDevices\n vebusInverters: VebusDevices\n vebusInverterChargers: VebusDevices\n\n constructor() {\n makeAutoObservable(this, {\n setVebusInstanceIds: action,\n setVebusInverters: action,\n setVebusInverterChargers: action,\n setInstanceId: action\n })\n this.vebusInstanceIds = []\n this.vebusInverters = []\n this.vebusInverterChargers = []\n }\n\n setVebusInstanceIds = (devices: VebusDevices) => this.vebusInstanceIds = devices;\n\n setVebusInverters = (devices: VebusDevices) => this.vebusInverters = devices;\n\n setVebusInverterChargers = (devices: VebusDevices) => this.vebusInverterChargers = devices;\n\n setInstanceId = (instanceId: InstanceId) => this.instanceId = instanceId\n}\n\nfunction initializeStore() {\n const _store = store ?? new VebusStore()\n // For SSG and SSR always create a new store\n if (typeof window === \"undefined\") return _store\n // Create the store once in the client\n if (!store) store = _store\n\n return _store\n}\n\nexport function useVebusStore() {\n return useMemo(() => initializeStore(), [])\n}\n"]}
@@ -25,7 +25,7 @@ export var useWindGenerators = function () {
25
25
  }
26
26
  });
27
27
  // TODO: check unordered structural identify of old and new state
28
- // TODO: to avoid unnecessary re-rendering: O(n^2 baby)
28
+ // TODO: to avoid unnecessary re-rendering: O(n^2) baby
29
29
  if (!windGenerators_1 || windGenerators_1.length != deviceInstances_1.length || !deviceInstances_1.every(function (id) { return windGenerators_1.includes(id); })) {
30
30
  Logger.log("New wind generators instances: ".concat(JSON.stringify(deviceInstances_1)));
31
31
  windGeneratorsStore.setWindGenerators(deviceInstances_1);
@@ -1 +1 @@
1
- {"version":3,"file":"WindGenerators.provider.js","sourceRoot":"/","sources":["src/Modules/WindGenerators/WindGenerators.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAmB,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,CAAC,IAAM,iBAAiB,GAAG;IAC/B,IAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAA;IACpD,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IAEtB,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,oBAAoB,EAAE,YAAK,QAAQ,qCAAkC;KACtE,CAAC,EAFwC,CAExC,CAAA;IAEF,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEvE,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;IAErE,SAAS,CAAC;QACR,IAAI,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtD,IAAM,gBAAc,GAAG,mBAAmB,CAAC,cAAc,CAAA;YACzD,IAAM,iBAAe,GAAsB,EAAE,CAAA;YAE7C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;;gBAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,sBAAsB,CAAC,cAAc,EAAE,CAAC;oBAC7D,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACvE,IAAM,QAAQ,GAAG,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,QAAQ,mCAAI,EAAE,CAAA;oBACnD,IAAI,QAAQ,KAAK,EAAE;wBAAE,iBAAe,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAA;gBACtD,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,CAAC,gBAAc,IAAI,gBAAc,CAAC,MAAM,IAAI,iBAAe,CAAC,MAAM,IAAI,CAAC,iBAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,gBAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,EAA3B,CAA2B,CAAC,EAAE,CAAC;gBACtI,MAAM,CAAC,GAAG,CAAC,yCAAkC,IAAI,CAAC,SAAS,CAAC,iBAAe,CAAC,CAAE,CAAC,CAAC;gBAChF,mBAAmB,CAAC,iBAAiB,CAAC,iBAAe,CAAC,CAAA;YACxD,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,mBAAmB,CAAA;AAC5B,CAAC,CAAA","sourcesContent":["import Logger from \"../../utils/logger\";\nimport { useEffect, useMemo } from \"react\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { WindGeneratorId, useWindGeneratorsStore } from \"./WindGenerators.store\"\nimport { DC_SOURCE_MONITOR_MODE } from \"../../utils/constants\";\n\nexport const useWindGenerators = () => {\n const windGeneratorsStore = useWindGeneratorsStore()\n const mqtt = useMqtt()\n\n const getTopics = (portalId: PortalId) => ({\n dcSourceMonitorModes: `N/${portalId}/dcsource/+/Settings/MonitorMode`,\n })\n\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const messages = mqtt.messagesByWildcard(topics.dcSourceMonitorModes)\n\n useEffect(() => {\n if (messages && Object.entries(messages).length !== 0) {\n const windGenerators = windGeneratorsStore.windGenerators\n const deviceInstances: WindGeneratorId[] = []\n\n Object.keys(messages).forEach(path => {\n if (messages[path] === DC_SOURCE_MONITOR_MODE.WIND_GENERATOR) {\n const regExpExec = new RegExp('dcsource\\/(?<instance>\\\\d*)').exec(path)\n const instance = regExpExec?.groups?.instance ?? \"\"\n if (instance !== \"\") deviceInstances.push(+instance)\n }\n })\n\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2 baby)\n if (!windGenerators || windGenerators.length != deviceInstances.length || !deviceInstances.every((id) => windGenerators.includes(id))) {\n Logger.log(`New wind generators instances: ${JSON.stringify(deviceInstances)}`);\n windGeneratorsStore.setWindGenerators(deviceInstances)\n }\n }\n }, [messages])\n\n return windGeneratorsStore\n}\n"]}
1
+ {"version":3,"file":"WindGenerators.provider.js","sourceRoot":"/","sources":["src/Modules/WindGenerators/WindGenerators.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAY,OAAO,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAmB,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,CAAC,IAAM,iBAAiB,GAAG;IAC/B,IAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAA;IACpD,IAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IAEtB,IAAM,SAAS,GAAG,UAAC,QAAkB,IAAK,OAAA,CAAC;QACzC,oBAAoB,EAAE,YAAK,QAAQ,qCAAkC;KACtE,CAAC,EAFwC,CAExC,CAAA;IAEF,IAAM,MAAM,GAAG,OAAO,CAAC,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAxB,CAAwB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEvE,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;IAErE,SAAS,CAAC;QACR,IAAI,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtD,IAAM,gBAAc,GAAG,mBAAmB,CAAC,cAAc,CAAA;YACzD,IAAM,iBAAe,GAAsB,EAAE,CAAA;YAE7C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;;gBAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,sBAAsB,CAAC,cAAc,EAAE,CAAC;oBAC7D,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACvE,IAAM,QAAQ,GAAG,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,QAAQ,mCAAI,EAAE,CAAA;oBACnD,IAAI,QAAQ,KAAK,EAAE;wBAAE,iBAAe,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAA;gBACtD,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,CAAC,gBAAc,IAAI,gBAAc,CAAC,MAAM,IAAI,iBAAe,CAAC,MAAM,IAAI,CAAC,iBAAe,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,gBAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,EAA3B,CAA2B,CAAC,EAAE,CAAC;gBACtI,MAAM,CAAC,GAAG,CAAC,yCAAkC,IAAI,CAAC,SAAS,CAAC,iBAAe,CAAC,CAAE,CAAC,CAAC;gBAChF,mBAAmB,CAAC,iBAAiB,CAAC,iBAAe,CAAC,CAAA;YACxD,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,mBAAmB,CAAA;AAC5B,CAAC,CAAA","sourcesContent":["import Logger from \"../../utils/logger\";\nimport { useEffect, useMemo } from \"react\"\nimport { PortalId, useMqtt } from \"../Mqtt\"\nimport { WindGeneratorId, useWindGeneratorsStore } from \"./WindGenerators.store\"\nimport { DC_SOURCE_MONITOR_MODE } from \"../../utils/constants\";\n\nexport const useWindGenerators = () => {\n const windGeneratorsStore = useWindGeneratorsStore()\n const mqtt = useMqtt()\n\n const getTopics = (portalId: PortalId) => ({\n dcSourceMonitorModes: `N/${portalId}/dcsource/+/Settings/MonitorMode`,\n })\n\n const topics = useMemo(() => getTopics(mqtt.portalId), [mqtt.portalId])\n\n const messages = mqtt.messagesByWildcard(topics.dcSourceMonitorModes)\n\n useEffect(() => {\n if (messages && Object.entries(messages).length !== 0) {\n const windGenerators = windGeneratorsStore.windGenerators\n const deviceInstances: WindGeneratorId[] = []\n\n Object.keys(messages).forEach(path => {\n if (messages[path] === DC_SOURCE_MONITOR_MODE.WIND_GENERATOR) {\n const regExpExec = new RegExp('dcsource\\/(?<instance>\\\\d*)').exec(path)\n const instance = regExpExec?.groups?.instance ?? \"\"\n if (instance !== \"\") deviceInstances.push(+instance)\n }\n })\n\n // TODO: check unordered structural identify of old and new state\n // TODO: to avoid unnecessary re-rendering: O(n^2) baby\n if (!windGenerators || windGenerators.length != deviceInstances.length || !deviceInstances.every((id) => windGenerators.includes(id))) {\n Logger.log(`New wind generators instances: ${JSON.stringify(deviceInstances)}`);\n windGeneratorsStore.setWindGenerators(deviceInstances)\n }\n }\n }, [messages])\n\n return windGeneratorsStore\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@victronenergy/mfd-modules",
3
- "version": "8.1.1",
3
+ "version": "9.0.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -22,9 +22,9 @@
22
22
  "js-cookie": "^3.0.5",
23
23
  "localforage": "^1.10.0",
24
24
  "lodash-es": "^4.17.21",
25
- "mobx": "^6.13.3",
25
+ "mobx": "^6.13.5",
26
26
  "mobx-persist-store": "^1.1.5",
27
- "mobx-utils": "^6.0.8",
27
+ "mobx-utils": "^6.1.0",
28
28
  "mqtt": "^4.3.8"
29
29
  },
30
30
  "devDependencies": {
@@ -33,8 +33,8 @@
33
33
  "@types/js-cookie": "^3.0.6",
34
34
  "@types/lodash-es": "^4.17.12",
35
35
  "@types/react": "^18.3.11",
36
- "semantic-release": "^24.1.2",
37
- "typescript": "^5.6.2"
36
+ "semantic-release": "^24.2.1",
37
+ "typescript": "^5.7.3"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "react": "17 || 18"