tesla-fleet-api 0.4.0 → 0.5.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 (219) hide show
  1. package/README.md +284 -1
  2. package/dist/_virtual/_rolldown/runtime.cjs +10 -0
  3. package/dist/bluetooth/adapters/shared.cjs +38 -0
  4. package/dist/bluetooth/adapters/shared.mjs +36 -0
  5. package/dist/bluetooth/async.cjs +121 -0
  6. package/dist/bluetooth/async.d.cts +10 -0
  7. package/dist/bluetooth/async.d.mts +10 -0
  8. package/dist/bluetooth/async.mjs +116 -0
  9. package/dist/bluetooth/broadcast.cjs +153 -0
  10. package/dist/bluetooth/broadcast.d.cts +59 -0
  11. package/dist/bluetooth/broadcast.d.mts +59 -0
  12. package/dist/bluetooth/broadcast.mjs +151 -0
  13. package/dist/bluetooth/constants.cjs +99 -0
  14. package/dist/bluetooth/constants.d.cts +70 -0
  15. package/dist/bluetooth/constants.d.mts +70 -0
  16. package/dist/bluetooth/constants.mjs +72 -0
  17. package/dist/bluetooth/esphome.cjs +292 -0
  18. package/dist/bluetooth/esphome.d.cts +83 -0
  19. package/dist/bluetooth/esphome.d.mts +83 -0
  20. package/dist/bluetooth/esphome.mjs +291 -0
  21. package/dist/bluetooth/framing.cjs +125 -0
  22. package/dist/bluetooth/framing.d.cts +45 -0
  23. package/dist/bluetooth/framing.d.mts +45 -0
  24. package/dist/bluetooth/framing.mjs +122 -0
  25. package/dist/bluetooth/homey.cjs +155 -0
  26. package/dist/bluetooth/homey.d.cts +75 -0
  27. package/dist/bluetooth/homey.d.mts +75 -0
  28. package/dist/bluetooth/homey.mjs +150 -0
  29. package/dist/bluetooth/names.cjs +24 -0
  30. package/dist/bluetooth/names.d.cts +10 -0
  31. package/dist/bluetooth/names.d.mts +10 -0
  32. package/dist/bluetooth/names.mjs +20 -0
  33. package/dist/bluetooth/noble.cjs +178 -0
  34. package/dist/bluetooth/noble.d.cts +58 -0
  35. package/dist/bluetooth/noble.d.mts +58 -0
  36. package/dist/bluetooth/noble.mjs +177 -0
  37. package/dist/bluetooth/streamglue.cjs +157 -0
  38. package/dist/bluetooth/streamglue.d.cts +37 -0
  39. package/dist/bluetooth/streamglue.d.mts +37 -0
  40. package/dist/bluetooth/streamglue.mjs +154 -0
  41. package/dist/bluetooth/teslabluetooth.cjs +67 -0
  42. package/dist/bluetooth/teslabluetooth.d.cts +41 -0
  43. package/dist/bluetooth/teslabluetooth.d.mts +41 -0
  44. package/dist/bluetooth/teslabluetooth.mjs +66 -0
  45. package/dist/bluetooth/transport.cjs +10 -0
  46. package/dist/bluetooth/transport.d.cts +95 -0
  47. package/dist/bluetooth/transport.d.mts +95 -0
  48. package/dist/bluetooth/transport.mjs +10 -0
  49. package/dist/bluetooth/vehiclebluetooth.cjs +1272 -0
  50. package/dist/bluetooth/vehiclebluetooth.d.cts +495 -0
  51. package/dist/bluetooth/vehiclebluetooth.d.mts +495 -0
  52. package/dist/bluetooth/vehiclebluetooth.mjs +1270 -0
  53. package/dist/bluetooth/verify.cjs +93 -0
  54. package/dist/bluetooth/verify.d.cts +35 -0
  55. package/dist/bluetooth/verify.d.mts +35 -0
  56. package/dist/bluetooth/verify.mjs +91 -0
  57. package/dist/bluetooth.cjs +53 -0
  58. package/dist/bluetooth.d.cts +10 -0
  59. package/dist/bluetooth.d.mts +10 -0
  60. package/dist/bluetooth.mjs +9 -0
  61. package/dist/commands.cjs +1080 -85
  62. package/dist/commands.d.cts +585 -54
  63. package/dist/commands.d.mts +583 -51
  64. package/dist/commands.mjs +1084 -93
  65. package/dist/const.cjs +22 -0
  66. package/dist/const.d.cts +21 -0
  67. package/dist/const.d.mts +21 -0
  68. package/dist/const.mjs +20 -1
  69. package/dist/energy.cjs +24 -19
  70. package/dist/energy.d.cts +21 -15
  71. package/dist/energy.d.mts +21 -15
  72. package/dist/energy.mjs +24 -19
  73. package/dist/energyisland.cjs +38 -0
  74. package/dist/energyisland.mjs +37 -0
  75. package/dist/energyparsers.cjs +118 -0
  76. package/dist/energyparsers.d.cts +39 -0
  77. package/dist/energyparsers.d.mts +39 -0
  78. package/dist/energyparsers.mjs +116 -0
  79. package/dist/energyspecific.cjs +375 -17
  80. package/dist/energyspecific.d.cts +199 -19
  81. package/dist/energyspecific.d.mts +197 -16
  82. package/dist/energyspecific.mjs +370 -18
  83. package/dist/exceptions.cjs +3 -2
  84. package/dist/exceptions.d.cts +3 -2
  85. package/dist/exceptions.d.mts +3 -2
  86. package/dist/exceptions.mjs +3 -2
  87. package/dist/funnel.cjs +297 -0
  88. package/dist/funnel.d.cts +118 -0
  89. package/dist/funnel.d.mts +118 -0
  90. package/dist/funnel.mjs +292 -0
  91. package/dist/index.cjs +61 -0
  92. package/dist/index.d.cts +22 -8
  93. package/dist/index.d.mts +22 -8
  94. package/dist/index.mjs +19 -6
  95. package/dist/log.cjs +75 -0
  96. package/dist/log.d.cts +4 -0
  97. package/dist/log.d.mts +4 -0
  98. package/dist/log.mjs +71 -0
  99. package/dist/oauth.cjs +143 -0
  100. package/dist/oauth.d.cts +69 -0
  101. package/dist/oauth.d.mts +69 -0
  102. package/dist/oauth.mjs +143 -0
  103. package/dist/powerwall/client.cjs +818 -0
  104. package/dist/powerwall/client.d.cts +297 -0
  105. package/dist/powerwall/client.d.mts +297 -0
  106. package/dist/powerwall/client.mjs +807 -0
  107. package/dist/powerwall/components.cjs +188 -0
  108. package/dist/powerwall/components.d.cts +45 -0
  109. package/dist/powerwall/components.d.mts +45 -0
  110. package/dist/powerwall/components.mjs +182 -0
  111. package/dist/powerwall/energysite.cjs +216 -0
  112. package/dist/powerwall/energysite.d.cts +104 -0
  113. package/dist/powerwall/energysite.d.mts +104 -0
  114. package/dist/powerwall/energysite.mjs +214 -0
  115. package/dist/powerwall/exceptions.cjs +59 -0
  116. package/dist/powerwall/exceptions.d.cts +38 -0
  117. package/dist/powerwall/exceptions.d.mts +38 -0
  118. package/dist/powerwall/exceptions.mjs +51 -0
  119. package/dist/powerwall/gateway.cjs +102 -0
  120. package/dist/powerwall/gateway.d.cts +57 -0
  121. package/dist/powerwall/gateway.d.mts +57 -0
  122. package/dist/powerwall/gateway.mjs +101 -0
  123. package/dist/powerwall/merge.cjs +163 -0
  124. package/dist/powerwall/merge.d.cts +63 -0
  125. package/dist/powerwall/merge.d.mts +63 -0
  126. package/dist/powerwall/merge.mjs +159 -0
  127. package/dist/powerwall/models.d.cts +95 -0
  128. package/dist/powerwall/models.d.mts +95 -0
  129. package/dist/powerwall/queries.cjs +17 -0
  130. package/dist/powerwall/queries.mjs +10 -0
  131. package/dist/powerwall/transport.cjs +232 -0
  132. package/dist/powerwall/transport.mjs +227 -0
  133. package/dist/powerwall.cjs +47 -0
  134. package/dist/powerwall.d.cts +9 -0
  135. package/dist/powerwall.d.mts +9 -0
  136. package/dist/powerwall.mjs +8 -0
  137. package/dist/router/base.cjs +203 -0
  138. package/dist/router/base.d.cts +112 -0
  139. package/dist/router/base.d.mts +112 -0
  140. package/dist/router/base.mjs +200 -0
  141. package/dist/router/energysite.cjs +65 -0
  142. package/dist/router/energysite.d.cts +47 -0
  143. package/dist/router/energysite.d.mts +47 -0
  144. package/dist/router/energysite.mjs +60 -0
  145. package/dist/router.cjs +13 -0
  146. package/dist/router.d.cts +3 -1
  147. package/dist/router.d.mts +3 -1
  148. package/dist/router.mjs +3 -1
  149. package/dist/signing/crypto.cjs +28 -0
  150. package/dist/signing/crypto.mjs +26 -1
  151. package/dist/signing/energy.cjs +123 -0
  152. package/dist/signing/energy.d.cts +45 -0
  153. package/dist/signing/energy.d.mts +45 -0
  154. package/dist/signing/energy.mjs +120 -0
  155. package/dist/signing/jws.cjs +229 -0
  156. package/dist/signing/jws.d.cts +45 -0
  157. package/dist/signing/jws.d.mts +45 -0
  158. package/dist/signing/jws.mjs +211 -0
  159. package/dist/signing/keys.cjs +191 -0
  160. package/dist/signing/keys.d.cts +21 -0
  161. package/dist/signing/keys.d.mts +21 -0
  162. package/dist/signing/keys.mjs +182 -0
  163. package/dist/signing/session.cjs +104 -30
  164. package/dist/signing/session.d.cts +60 -23
  165. package/dist/signing/session.d.mts +60 -23
  166. package/dist/signing/session.mjs +105 -31
  167. package/dist/tariff.cjs +27 -0
  168. package/dist/tariff.d.cts +11 -0
  169. package/dist/tariff.d.mts +11 -0
  170. package/dist/tariff.mjs +27 -1
  171. package/dist/teslafleetapi.cjs +256 -55
  172. package/dist/teslafleetapi.d.cts +110 -14
  173. package/dist/teslafleetapi.d.mts +110 -14
  174. package/dist/teslafleetapi.mjs +258 -57
  175. package/dist/teslemetry.cjs +152 -5
  176. package/dist/teslemetry.d.cts +95 -5
  177. package/dist/teslemetry.d.mts +93 -3
  178. package/dist/teslemetry.mjs +151 -6
  179. package/dist/teslemetryenergy.cjs +287 -0
  180. package/dist/teslemetryenergy.d.cts +154 -0
  181. package/dist/teslemetryenergy.d.mts +154 -0
  182. package/dist/teslemetryenergy.mjs +282 -0
  183. package/dist/teslemetryvehicle.cjs +407 -0
  184. package/dist/teslemetryvehicle.d.cts +238 -0
  185. package/dist/teslemetryvehicle.d.mts +238 -0
  186. package/dist/teslemetryvehicle.mjs +405 -0
  187. package/dist/tessie.cjs +42 -5
  188. package/dist/tessie.d.cts +51 -5
  189. package/dist/tessie.d.mts +49 -3
  190. package/dist/tessie.mjs +42 -5
  191. package/dist/tessievehicle.cjs +514 -0
  192. package/dist/tessievehicle.d.cts +333 -0
  193. package/dist/tessievehicle.d.mts +333 -0
  194. package/dist/tessievehicle.mjs +513 -0
  195. package/dist/types/live_status.d.cts +16 -16
  196. package/dist/types/live_status.d.mts +16 -16
  197. package/dist/types/responses.d.cts +5 -1
  198. package/dist/types/responses.d.mts +5 -1
  199. package/dist/types/vehicle.d.cts +7 -1
  200. package/dist/types/vehicle.d.mts +7 -1
  201. package/dist/types.d.cts +3 -3
  202. package/dist/types.d.mts +3 -3
  203. package/dist/util.cjs +41 -0
  204. package/dist/util.d.cts +18 -0
  205. package/dist/util.d.mts +18 -0
  206. package/dist/util.mjs +40 -0
  207. package/dist/vehicle.cjs +79 -36
  208. package/dist/vehicle.d.cts +42 -26
  209. package/dist/vehicle.d.mts +42 -26
  210. package/dist/vehicle.mjs +80 -37
  211. package/dist/vehiclesigned.cjs +20 -5
  212. package/dist/vehiclesigned.d.cts +14 -5
  213. package/dist/vehiclesigned.d.mts +14 -5
  214. package/dist/vehiclesigned.mjs +20 -5
  215. package/dist/vehiclespecific.cjs +126 -15
  216. package/dist/vehiclespecific.d.cts +82 -18
  217. package/dist/vehiclespecific.d.mts +82 -18
  218. package/dist/vehiclespecific.mjs +126 -15
  219. package/package.json +70 -3
@@ -0,0 +1,159 @@
1
+ import { LOCAL_LIVE_STATUS_KEYS, LOCAL_SITE_INFO_KEYS, merge_local_into_cloud } from "../router/energysite.mjs";
2
+ import { PowerwallError } from "./exceptions.mjs";
3
+ // src/powerwall/merge.ts
4
+ /** How often to call `LiveStatusMerge.poll()`. */
5
+ const ENERGY_LIVE_INTERVAL_MS = 5e3;
6
+ /** The longest `LiveStatusMerge` waits between local attempts after failures. */
7
+ const ENERGY_LIVE_LOCAL_MAX_BACKOFF_MS = 6e4;
8
+ /** How often to call `SiteInfoMerge.poll()`. */
9
+ const ENERGY_CONFIG_INTERVAL_MS = 3e4;
10
+ const MAX_BACKOFF_TICKS = ENERGY_LIVE_LOCAL_MAX_BACKOFF_MS / ENERGY_LIVE_INTERVAL_MS;
11
+ /**
12
+ * Keeps the latest cloud `live_status` and local reading, and re-merges on either
13
+ * update. The cloud never clobbers a healthy local key, and a failed poll clears
14
+ * the local reading, so everything falls back to cloud values rather than to
15
+ * unavailable. All documents are unwrapped: the value under `response`.
16
+ *
17
+ * A failed poll never changes availability by itself. `poll()` resolves on a
18
+ * `PowerwallError` and rejects on anything else, which is a bug, so attach a
19
+ * rejection handler.
20
+ */
21
+ var LiveStatusMerge = class {
22
+ #site;
23
+ #owned_keys;
24
+ #cloud;
25
+ #local = null;
26
+ #healthy = null;
27
+ #last_error = null;
28
+ #polling = false;
29
+ #backoff_ticks = 1;
30
+ #ticks_to_skip = 0;
31
+ constructor(local, cloud, options = {}) {
32
+ this.#site = local;
33
+ this.#cloud = cloud;
34
+ this.#owned_keys = options.owned_keys ?? LOCAL_LIVE_STATUS_KEYS;
35
+ }
36
+ /** The cloud document with the local reading overlaid. */
37
+ get merged() {
38
+ return merge_local_into_cloud(this.#cloud, this.#local, this.#owned_keys);
39
+ }
40
+ /** True after a successful poll, false after a failed one, null before the first. */
41
+ get healthy() {
42
+ return this.#healthy;
43
+ }
44
+ /** The error from the last poll, or null after a success. */
45
+ get last_error() {
46
+ return this.#last_error;
47
+ }
48
+ /** Store a cloud document and return the merged view. */
49
+ set_cloud(cloud) {
50
+ this.#cloud = cloud;
51
+ return this.merged;
52
+ }
53
+ /** One 5 s tick. Returns the merged view, or null when the tick was skipped. */
54
+ async poll() {
55
+ if (this.#polling) return null;
56
+ if (this.#ticks_to_skip > 0) {
57
+ this.#ticks_to_skip--;
58
+ return null;
59
+ }
60
+ this.#polling = true;
61
+ try {
62
+ this.#local = (await this.#site.live_status()).response;
63
+ this.#backoff_ticks = 1;
64
+ this.#healthy = true;
65
+ this.#last_error = null;
66
+ } catch (error) {
67
+ if (!(error instanceof PowerwallError)) throw error;
68
+ this.#local = null;
69
+ this.#backoff_ticks = Math.min(this.#backoff_ticks * 2, MAX_BACKOFF_TICKS);
70
+ this.#ticks_to_skip = this.#backoff_ticks - 1;
71
+ this.#healthy = false;
72
+ this.#last_error = error;
73
+ } finally {
74
+ this.#polling = false;
75
+ }
76
+ return this.merged;
77
+ }
78
+ };
79
+ /**
80
+ * Keeps the latest cloud `site_info` and local `config.json` view, and holds a
81
+ * command's value until its source next reports it, so neither a poll that
82
+ * straddles the command nor a failed poll reverts what the user just set. All
83
+ * documents are unwrapped: the value under `response`.
84
+ *
85
+ * `poll()` resolves on a `PowerwallError` and rejects on anything else, which is a
86
+ * bug, so attach a rejection handler.
87
+ */
88
+ var SiteInfoMerge = class {
89
+ #site;
90
+ #owned_keys;
91
+ #cloud;
92
+ #local = null;
93
+ #held = {};
94
+ #generation = 0;
95
+ #healthy = null;
96
+ #last_error = null;
97
+ #polling = false;
98
+ constructor(local, cloud, options = {}) {
99
+ this.#site = local;
100
+ this.#cloud = cloud;
101
+ this.#owned_keys = options.owned_keys ?? LOCAL_SITE_INFO_KEYS;
102
+ }
103
+ /** The cloud document with held values, then the local view, overlaid. */
104
+ get merged() {
105
+ return merge_local_into_cloud({
106
+ ...this.#cloud,
107
+ ...this.#held
108
+ }, this.#local, this.#owned_keys);
109
+ }
110
+ /** True after a successful read, false after a failed one, null before the first. */
111
+ get healthy() {
112
+ return this.#healthy;
113
+ }
114
+ /** The error from the last read, or null after a success. */
115
+ get last_error() {
116
+ return this.#last_error;
117
+ }
118
+ /** Store a cloud document, which reports every held value, and return the merged view. */
119
+ set_cloud(cloud) {
120
+ this.#cloud = cloud;
121
+ this.#held = {};
122
+ return this.merged;
123
+ }
124
+ /** One 30 s tick. Returns the merged view, or null when the tick was skipped or its read discarded. */
125
+ async poll() {
126
+ if (this.#polling) return null;
127
+ const generation = this.#generation;
128
+ this.#polling = true;
129
+ let local = null;
130
+ try {
131
+ local = await this.#site.local_config();
132
+ this.#healthy = true;
133
+ this.#last_error = null;
134
+ } catch (error) {
135
+ if (!(error instanceof PowerwallError)) throw error;
136
+ this.#healthy = false;
137
+ this.#last_error = error;
138
+ } finally {
139
+ this.#polling = false;
140
+ }
141
+ if (generation !== this.#generation) return null;
142
+ this.#local = local;
143
+ for (const key of this.#owned_keys) if (local?.[key] !== void 0 && local[key] !== null) delete this.#held[key];
144
+ return this.merged;
145
+ }
146
+ /** Hold a successful command's value until its source next reports it. */
147
+ hold_command_value(key, value) {
148
+ if (this.#owned_keys.includes(key)) {
149
+ this.#local = {
150
+ ...this.#local,
151
+ [key]: value
152
+ };
153
+ this.#generation++;
154
+ }
155
+ this.#held[key] = value;
156
+ return this.merged;
157
+ }
158
+ };
159
+ export { ENERGY_CONFIG_INTERVAL_MS, ENERGY_LIVE_INTERVAL_MS, ENERGY_LIVE_LOCAL_MAX_BACKOFF_MS, LiveStatusMerge, SiteInfoMerge };
@@ -0,0 +1,95 @@
1
+ export type PowerLocation = "BATTERY" | "SITE" | "LOAD" | "SOLAR" | "SOLAR_RGM" | "GENERATOR" | "CONDUCTOR";
2
+ export type ConfigPayload = Record<string, any>;
3
+ export type StatusPayload = Record<string, any>;
4
+ export type ControllerPayload = Record<string, any>;
5
+ export type ComponentsPayload = Record<string, any>;
6
+ /** An enum as its name without the common prefix, or the raw number when a newer firmware reports one this package does not know. */
7
+ export type EnumName = string | number;
8
+ export type FirmwareDetails = {
9
+ system: {
10
+ gateway: {
11
+ partNumber: string;
12
+ serialNumber: string;
13
+ };
14
+ din: string;
15
+ version: {
16
+ text: string;
17
+ githash: Uint8Array;
18
+ };
19
+ update_status: number;
20
+ device_type: number;
21
+ wireless: {
22
+ device: unknown[];
23
+ };
24
+ };
25
+ };
26
+ export type BackupEvent = {
27
+ id: string;
28
+ name: string;
29
+ start_time: number;
30
+ duration_seconds: number;
31
+ /** A decimal string: the maximum priority, `2^64 - 1`, does not fit a JS number. */
32
+ priority: string;
33
+ };
34
+ export type ManualBackupInfo = {
35
+ start_time: number;
36
+ duration_seconds: number;
37
+ end_time: number;
38
+ active: boolean;
39
+ /** A decimal string: the maximum priority, `2^64 - 1`, does not fit a JS number. */
40
+ priority: string;
41
+ };
42
+ export type BackupEventsPayload = {
43
+ manual_backup: ManualBackupInfo | null;
44
+ backup_events: BackupEvent[];
45
+ };
46
+ export type BatteryCalibrationDelayStatus = {
47
+ calibration_delays_left: number;
48
+ calibration_delay_remaining_seconds: number;
49
+ max_calibration_delays: number;
50
+ };
51
+ /** One schedule boundary of a controllable device program. Tesla-protocol 6 replaced Python's epoch seconds with this. */
52
+ export type ProgramBoundary = {
53
+ static_condition: EnumName;
54
+ timestamp: number | null;
55
+ islanding_state: EnumName;
56
+ state_of_energy: EnumName;
57
+ };
58
+ export type ControllableDeviceProgram = {
59
+ key: {
60
+ device_id: string;
61
+ priority: EnumName;
62
+ };
63
+ settings: {
64
+ contactor_state: EnumName;
65
+ };
66
+ schedule: {
67
+ start: ProgramBoundary | null;
68
+ end: ProgramBoundary | null;
69
+ expiry: ProgramBoundary | null;
70
+ };
71
+ };
72
+ export type ControllableDeviceProgramsPayload = {
73
+ active_programs: ControllableDeviceProgram[];
74
+ inactive_programs: ControllableDeviceProgram[];
75
+ };
76
+ /** One record from the gateway's `list_authorized_clients`. See `find_authorized_clients` for the shared typed form. */
77
+ export type AuthorizedClientRecord = {
78
+ /** Base64 of the DER public key. */
79
+ public_key: string;
80
+ state: EnumName;
81
+ type: EnumName;
82
+ description: string;
83
+ key_type: EnumName;
84
+ roles: EnumName[];
85
+ verification: EnumName;
86
+ /** Epoch seconds. */
87
+ added_time: number | null;
88
+ identifier: string | null;
89
+ /** Base64, like `public_key`. */
90
+ authorized_by_public_key: string | null;
91
+ };
92
+ export type AuthorizedClientsPayload = {
93
+ clients: AuthorizedClientRecord[];
94
+ enable_line_switch_off: boolean;
95
+ };
@@ -0,0 +1,95 @@
1
+ export type PowerLocation = "BATTERY" | "SITE" | "LOAD" | "SOLAR" | "SOLAR_RGM" | "GENERATOR" | "CONDUCTOR";
2
+ export type ConfigPayload = Record<string, any>;
3
+ export type StatusPayload = Record<string, any>;
4
+ export type ControllerPayload = Record<string, any>;
5
+ export type ComponentsPayload = Record<string, any>;
6
+ /** An enum as its name without the common prefix, or the raw number when a newer firmware reports one this package does not know. */
7
+ export type EnumName = string | number;
8
+ export type FirmwareDetails = {
9
+ system: {
10
+ gateway: {
11
+ partNumber: string;
12
+ serialNumber: string;
13
+ };
14
+ din: string;
15
+ version: {
16
+ text: string;
17
+ githash: Uint8Array;
18
+ };
19
+ update_status: number;
20
+ device_type: number;
21
+ wireless: {
22
+ device: unknown[];
23
+ };
24
+ };
25
+ };
26
+ export type BackupEvent = {
27
+ id: string;
28
+ name: string;
29
+ start_time: number;
30
+ duration_seconds: number;
31
+ /** A decimal string: the maximum priority, `2^64 - 1`, does not fit a JS number. */
32
+ priority: string;
33
+ };
34
+ export type ManualBackupInfo = {
35
+ start_time: number;
36
+ duration_seconds: number;
37
+ end_time: number;
38
+ active: boolean;
39
+ /** A decimal string: the maximum priority, `2^64 - 1`, does not fit a JS number. */
40
+ priority: string;
41
+ };
42
+ export type BackupEventsPayload = {
43
+ manual_backup: ManualBackupInfo | null;
44
+ backup_events: BackupEvent[];
45
+ };
46
+ export type BatteryCalibrationDelayStatus = {
47
+ calibration_delays_left: number;
48
+ calibration_delay_remaining_seconds: number;
49
+ max_calibration_delays: number;
50
+ };
51
+ /** One schedule boundary of a controllable device program. Tesla-protocol 6 replaced Python's epoch seconds with this. */
52
+ export type ProgramBoundary = {
53
+ static_condition: EnumName;
54
+ timestamp: number | null;
55
+ islanding_state: EnumName;
56
+ state_of_energy: EnumName;
57
+ };
58
+ export type ControllableDeviceProgram = {
59
+ key: {
60
+ device_id: string;
61
+ priority: EnumName;
62
+ };
63
+ settings: {
64
+ contactor_state: EnumName;
65
+ };
66
+ schedule: {
67
+ start: ProgramBoundary | null;
68
+ end: ProgramBoundary | null;
69
+ expiry: ProgramBoundary | null;
70
+ };
71
+ };
72
+ export type ControllableDeviceProgramsPayload = {
73
+ active_programs: ControllableDeviceProgram[];
74
+ inactive_programs: ControllableDeviceProgram[];
75
+ };
76
+ /** One record from the gateway's `list_authorized_clients`. See `find_authorized_clients` for the shared typed form. */
77
+ export type AuthorizedClientRecord = {
78
+ /** Base64 of the DER public key. */
79
+ public_key: string;
80
+ state: EnumName;
81
+ type: EnumName;
82
+ description: string;
83
+ key_type: EnumName;
84
+ roles: EnumName[];
85
+ verification: EnumName;
86
+ /** Epoch seconds. */
87
+ added_time: number | null;
88
+ identifier: string | null;
89
+ /** Base64, like `public_key`. */
90
+ authorized_by_public_key: string | null;
91
+ };
92
+ export type AuthorizedClientsPayload = {
93
+ clients: AuthorizedClientRecord[];
94
+ enable_line_switch_off: boolean;
95
+ };
@@ -0,0 +1,17 @@
1
+ // src/powerwall/queries.ts
2
+ const STATUS_QUERY = " query DeviceControllerQuery {\n control {\n systemStatus {\n nominalFullPackEnergyWh\n nominalEnergyRemainingWh\n }\n islanding {\n customerIslandMode\n contactorClosed\n microGridOK\n gridOK\n }\n meterAggregates {\n location\n realPowerW\n }\n alerts {\n active\n },\n siteShutdown {\n isShutDown\n reasons\n }\n batteryBlocks {\n din\n disableReasons\n }\n pvInverters {\n din\n disableReasons\n }\n }\n system {\n time\n sitemanagerStatus {\n isRunning\n }\n updateUrgencyCheck {\n urgency\n version {\n version\n gitHash\n }\n timestamp\n }\n }\n neurio {\n isDetectingWiredMeters\n readings {\n serial\n dataRead {\n voltageV\n realPowerW\n reactivePowerVAR\n currentA\n }\n timestamp\n }\n pairings {\n serial\n shortId\n status\n errors\n macAddress\n isWired\n modbusPort\n modbusId\n lastUpdateTimestamp\n }\n }\n pw3Can {\n firmwareUpdate {\n isUpdating\n progress {\n updating\n numSteps\n currentStep\n currentStepProgress\n progress\n }\n }\n }\n esCan {\n bus {\n PVAC {\n packagePartNumber\n packageSerialNumber\n subPackagePartNumber\n subPackageSerialNumber\n PVAC_Status {\n isMIA\n PVAC_Pout\n PVAC_State\n PVAC_Vout\n PVAC_Fout\n }\n PVAC_InfoMsg {\n PVAC_appGitHash\n }\n PVAC_Logging {\n isMIA\n PVAC_PVCurrent_A\n PVAC_PVCurrent_B\n PVAC_PVCurrent_C\n PVAC_PVCurrent_D\n PVAC_PVMeasuredVoltage_A\n PVAC_PVMeasuredVoltage_B\n PVAC_PVMeasuredVoltage_C\n PVAC_PVMeasuredVoltage_D\n PVAC_VL1Ground\n PVAC_VL2Ground\n }\n alerts {\n isComplete\n isMIA\n active\n }\n }\n PINV {\n PINV_Status {\n isMIA\n PINV_Fout\n PINV_Pout\n PINV_Vout\n PINV_State\n PINV_GridState\n }\n PINV_AcMeasurements {\n isMIA\n PINV_VSplit1\n PINV_VSplit2\n }\n PINV_PowerCapability {\n isComplete\n isMIA\n PINV_Pnom\n }\n alerts {\n isComplete\n isMIA\n active\n }\n }\n PVS {\n PVS_Status {\n isMIA\n PVS_State\n PVS_vLL\n PVS_StringA_Connected\n PVS_StringB_Connected\n PVS_StringC_Connected\n PVS_StringD_Connected\n PVS_SelfTestState\n }\n alerts {\n isComplete\n isMIA\n active\n }\n }\n THC {\n packagePartNumber\n packageSerialNumber\n THC_InfoMsg {\n isComplete\n isMIA\n THC_appGitHash\n }\n THC_Logging {\n THC_LOG_PW_2_0_EnableLineState\n }\n }\n POD {\n POD_EnergyStatus {\n isMIA\n POD_nom_energy_remaining\n POD_nom_full_pack_energy\n }\n POD_InfoMsg {\n POD_appGitHash\n }\n }\n MSA {\n packagePartNumber\n packageSerialNumber\n MSA_InfoMsg {\n isMIA\n MSA_appGitHash\n MSA_assemblyId\n }\n METER_Z_AcMeasurements {\n isMIA\n lastRxTime\n METER_Z_CTA_InstRealPower\n METER_Z_CTA_InstReactivePower\n METER_Z_CTA_I\n METER_Z_VL1G\n METER_Z_CTB_InstRealPower\n METER_Z_CTB_InstReactivePower\n METER_Z_CTB_I\n METER_Z_VL2G\n }\n MSA_Status {\n lastRxTime\n }\n }\n SYNC {\n packagePartNumber\n packageSerialNumber\n SYNC_InfoMsg {\n isMIA\n SYNC_appGitHash\n }\n METER_X_AcMeasurements {\n isMIA\n isComplete\n lastRxTime\n METER_X_CTA_InstRealPower\n METER_X_CTA_InstReactivePower\n METER_X_CTA_I\n METER_X_VL1N\n METER_X_CTB_InstRealPower\n METER_X_CTB_InstReactivePower\n METER_X_CTB_I\n METER_X_VL2N\n METER_X_CTC_InstRealPower\n METER_X_CTC_InstReactivePower\n METER_X_CTC_I\n METER_X_VL3N\n }\n METER_Y_AcMeasurements {\n isMIA\n isComplete\n lastRxTime\n METER_Y_CTA_InstRealPower\n METER_Y_CTA_InstReactivePower\n METER_Y_CTA_I\n METER_Y_VL1N\n METER_Y_CTB_InstRealPower\n METER_Y_CTB_InstReactivePower\n METER_Y_CTB_I\n METER_Y_VL2N\n METER_Y_CTC_InstRealPower\n METER_Y_CTC_InstReactivePower\n METER_Y_CTC_I\n METER_Y_VL3N\n }\n SYNC_Status {\n lastRxTime\n }\n }\n ISLANDER {\n ISLAND_GridConnection {\n ISLAND_GridConnected\n isComplete\n }\n ISLAND_AcMeasurements {\n ISLAND_VL1N_Main\n ISLAND_FreqL1_Main\n ISLAND_VL2N_Main\n ISLAND_FreqL2_Main\n ISLAND_VL3N_Main\n ISLAND_FreqL3_Main\n ISLAND_VL1N_Load\n ISLAND_FreqL1_Load\n ISLAND_VL2N_Load\n ISLAND_FreqL2_Load\n ISLAND_VL3N_Load\n ISLAND_FreqL3_Load\n ISLAND_GridState\n lastRxTime\n isComplete\n isMIA\n }\n }\n }\n enumeration {\n inProgress\n numACPW\n numPVI\n }\n firmwareUpdate {\n isUpdating\n powerwalls {\n updating\n numSteps\n currentStep\n currentStepProgress\n progress\n }\n msa {\n updating\n numSteps\n currentStep\n currentStepProgress\n progress\n }\n sync {\n updating\n numSteps\n currentStep\n currentStepProgress\n progress\n }\n pvInverters {\n updating\n numSteps\n currentStep\n currentStepProgress\n progress\n }\n }\n phaseDetection {\n inProgress\n lastUpdateTimestamp\n powerwalls {\n din\n progress\n phase\n }\n }\n inverterSelfTests {\n isRunning\n isCanceled\n pinvSelfTestsResults {\n din\n overall {\n status\n test\n summary\n setMagnitude\n setTime\n tripMagnitude\n tripTime\n accuracyMagnitude\n accuracyTime\n currentMagnitude\n timestamp\n lastError\n }\n testResults {\n status\n test\n summary\n setMagnitude\n setTime\n tripMagnitude\n tripTime\n accuracyMagnitude\n accuracyTime\n currentMagnitude\n timestamp\n lastError\n }\n }\n }\n }\n}\n";
3
+ const STATUS_CODE = Buffer.from("MIGGAkEUsZelf621utFyGqi9asUYmDC2EkKitHBPshR2ZLfOGgz+0lYBDH8q9uXbZ18vYAsWlV9xYxMk0455vn7dQTESeAJBcAdftB9dxD7y7gWlVsF/KgjHDqZdH4Ki60l+2s8R3gYbcc/JtM38HvVzupWNI28hzXrr5XqW9eEMta5y+8svFx8=", "base64");
4
+ const CONTROLLER_QUERY = "query DeviceControllerQuery($msaComp:ComponentFilter$msaSignals:[String!]){control{systemStatus{nominalFullPackEnergyWh nominalEnergyRemainingWh}islanding{customerIslandMode contactorClosed microGridOK gridOK disableReasons}meterAggregates{location realPowerW}alerts{active}siteShutdown{isShutDown reasons}batteryBlocks{din disableReasons}pvInverters{din disableReasons}}system{time supportMode{remoteService{isEnabled expiryTime sessionId}}sitemanagerStatus{isRunning}updateUrgencyCheck{urgency version{version gitHash}timestamp}}neurio{isDetectingWiredMeters readings{firmwareVersion serial dataRead{voltageV realPowerW reactivePowerVAR currentA}timestamp}pairings{serial shortId status errors macAddress hostname isWired modbusPort modbusId lastUpdateTimestamp}}teslaRemoteMeter{meters{din reading{timestamp firmwareVersion ctReadings{voltageV realPowerW reactivePowerVAR energyExportedWs energyImportedWs currentA}}firmwareUpdate{updating numSteps currentStep currentStepProgress progress}}detectedWired{din serialPort}}pw3Can{firmwareUpdate{isUpdating progress{updating numSteps currentStep currentStepProgress progress}}enumeration{inProgress}}esCan{bus{PVAC{packagePartNumber packageSerialNumber subPackagePartNumber subPackageSerialNumber PVAC_Status{isMIA PVAC_Pout PVAC_State PVAC_Vout PVAC_Fout}PVAC_InfoMsg{PVAC_appGitHash}PVAC_Logging{isMIA PVAC_PVCurrent_A PVAC_PVCurrent_B PVAC_PVCurrent_C PVAC_PVCurrent_D PVAC_PVMeasuredVoltage_A PVAC_PVMeasuredVoltage_B PVAC_PVMeasuredVoltage_C PVAC_PVMeasuredVoltage_D PVAC_VL1Ground PVAC_VL2Ground}alerts{isComplete isMIA active}}PINV{PINV_Status{isMIA PINV_Fout PINV_Pout PINV_Vout PINV_State PINV_GridState}PINV_AcMeasurements{isMIA PINV_VSplit1 PINV_VSplit2}PINV_PowerCapability{isComplete isMIA PINV_Pnom}alerts{isComplete isMIA active}}PVS{PVS_Status{isMIA PVS_State PVS_vLL PVS_StringA_Connected PVS_StringB_Connected PVS_StringC_Connected PVS_StringD_Connected PVS_SelfTestState}PVS_Logging{PVS_numStringsLockoutBits PVS_sbsComplete}alerts{isComplete isMIA active}}THC{packagePartNumber packageSerialNumber THC_InfoMsg{isComplete isMIA THC_appGitHash}THC_Logging{THC_LOG_PW_2_0_EnableLineState}}POD{POD_EnergyStatus{isMIA POD_nom_energy_remaining POD_nom_full_pack_energy}POD_InfoMsg{POD_appGitHash}}SYNC{packagePartNumber packageSerialNumber SYNC_InfoMsg{isMIA SYNC_appGitHash SYNC_assemblyId}METER_X_AcMeasurements{isMIA isComplete METER_X_CTA_InstRealPower METER_X_CTA_InstReactivePower METER_X_CTA_I METER_X_VL1N METER_X_CTB_InstRealPower METER_X_CTB_InstReactivePower METER_X_CTB_I METER_X_VL2N METER_X_CTC_InstRealPower METER_X_CTC_InstReactivePower METER_X_CTC_I METER_X_VL3N}METER_Y_AcMeasurements{isMIA isComplete METER_Y_CTA_InstRealPower METER_Y_CTA_InstReactivePower METER_Y_CTA_I METER_Y_VL1N METER_Y_CTB_InstRealPower METER_Y_CTB_InstReactivePower METER_Y_CTB_I METER_Y_VL2N METER_Y_CTC_InstRealPower METER_Y_CTC_InstReactivePower METER_Y_CTC_I METER_Y_VL3N}}ISLANDER{ISLAND_GridConnection{ISLAND_GridConnected isComplete}ISLAND_AcMeasurements{ISLAND_VL1N_Main ISLAND_FreqL1_Main ISLAND_VL2N_Main ISLAND_FreqL2_Main ISLAND_VL3N_Main ISLAND_FreqL3_Main ISLAND_VL1N_Load ISLAND_FreqL1_Load ISLAND_VL2N_Load ISLAND_FreqL2_Load ISLAND_VL3N_Load ISLAND_FreqL3_Load ISLAND_GridState isComplete isMIA}}}enumeration{inProgress numACPW numPVI}firmwareUpdate{isUpdating powerwalls{updating numSteps currentStep currentStepProgress progress}msa{updating numSteps currentStep currentStepProgress progress}msa1{updating numSteps currentStep currentStepProgress progress}sync{updating numSteps currentStep currentStepProgress progress}pvInverters{updating numSteps currentStep currentStepProgress progress}}phaseDetection{inProgress lastUpdateTimestamp powerwalls{din progress phase}}inverterSelfTests{isRunning isCanceled pinvSelfTestsResults{din overall{status test summary setMagnitude setTime tripMagnitude tripTime accuracyMagnitude accuracyTime currentMagnitude timestamp lastError}testResults{status test summary setMagnitude setTime tripMagnitude tripTime accuracyMagnitude accuracyTime currentMagnitude timestamp lastError}}}}components{msa:components(filter:$msaComp){partNumber serialNumber signals(names:$msaSignals){name value textValue boolValue timestamp}activeAlerts{name}}}ieee20305{longFormDeviceID polledResources{url name pollRateSeconds lastPolledTimestamp}controls{defaultControl{mRID setGradW opModEnergize opModMaxLimW opModImpLimW opModExpLimW opModGenLimW opModLoadLimW}activeControls{opModEnergize opModMaxLimW opModImpLimW opModExpLimW opModGenLimW opModLoadLimW}}registration{dateTimeRegistered pin}}}";
5
+ const CONTROLLER_CODE = Buffer.from("MIGHAkIBQZUS40LRyhrTAPZ9C0VAL5qfwA0GJawsDmohKQpk7+Y3i69i1/gmCy7BrNkhH9aD/2tJbfNcStjuaVRZ3n/FeFICQR1DA0j7OCKw5NYY3hHENbKpVkKmSo8InbqG8SBXzUqMAioFEst7PJvIZ8mdOYtSs4m48fEPDhZF7de/1SYpki4S", "base64");
6
+ const CONTROLLER_VARIABLES = "{\"msaComp\":{\"types\" :[\"PVS\",\"PVAC\", \"TESYNC\", \"TEPINV\", \"TETHC\", \"STSTSM\", \"TEMSA\", \"TEPINV\", \"PW3BMS\" ]},\n \"msaSignals\":[\n \"MSA_pcbaId\",\n \"MSA_usageId\",\n \"MSA_appGitHash\",\n \"PVAC_Fan_Speed_Actual_RPM\",\n \"PVAC_Fan_Speed_Target_RPM\",\n \"MSA_HeatingRateOccurred\",\n \"THC_AmbientTemp\",\n \"METER_Z_CTA_InstRealPower\",\n \"METER_Z_CTA_InstReactivePower\",\n \"METER_Z_CTA_I\",\n \"METER_Z_VL1G\",\n \"METER_Z_CTB_InstRealPower\",\n \"METER_Z_CTB_InstReactivePower\",\n \"METER_Z_CTB_I\",\n \"METER_Z_VL2G\",\n \"METER_Z_CTC_InstRealPower\",\n \"METER_Z_CTC_InstReactivePower\",\n \"METER_Z_CTC_I\",\n \"METER_Z_VL3G\",\n \"METER_Z_LifetimeEnergyExport\",\n \"METER_Z_LifetimeEnergyImport\",\n \"BMS_nominalFullPackEnergy\",\n \"BMS_nominalEnergyRemaining\"]}";
7
+ const COMPONENTS_QUERY = " query ComponentsQuery (\n $pchComponentsFilter: ComponentFilter,\n $pchSignalNames: [String!],\n $pwsComponentsFilter: ComponentFilter,\n $pwsSignalNames: [String!],\n $bmsComponentsFilter: ComponentFilter,\n $bmsSignalNames: [String!],\n $hvpComponentsFilter: ComponentFilter,\n $hvpSignalNames: [String!],\n $baggrComponentsFilter: ComponentFilter,\n $baggrSignalNames: [String!],\n ) {\n # TODO STST-57686: Introduce GraphQL fragments to shorten\n pw3Can {\n firmwareUpdate {\n isUpdating\n progress {\n updating\n numSteps\n currentStep\n currentStepProgress\n progress\n }\n }\n }\n components {\n pws: components(filter: $pwsComponentsFilter) {\n signals(names: $pwsSignalNames) {\n name\n value\n textValue\n boolValue\n timestamp\n }\n activeAlerts {\n name\n }\n }\n pch: components(filter: $pchComponentsFilter) {\n signals(names: $pchSignalNames) {\n name\n value\n textValue\n boolValue\n timestamp\n }\n activeAlerts {\n name\n }\n }\n bms: components(filter: $bmsComponentsFilter) {\n signals(names: $bmsSignalNames) {\n name\n value\n textValue\n boolValue\n timestamp\n }\n activeAlerts {\n name\n }\n }\n hvp: components(filter: $hvpComponentsFilter) {\n partNumber\n serialNumber\n signals(names: $hvpSignalNames) {\n name\n value\n textValue\n boolValue\n timestamp\n }\n activeAlerts {\n name\n }\n }\n baggr: components(filter: $baggrComponentsFilter) {\n signals(names: $baggrSignalNames) {\n name\n value\n textValue\n boolValue\n timestamp\n }\n activeAlerts {\n name\n }\n }\n }\n}\n";
8
+ const COMPONENTS_CODE = Buffer.from("MIGIAkIAuHHsPqNt1XD5U6uZ5n46Go5+orOHD0y7T4N1objbd5vsvqZosqOtsQeCRL/reBNPEsOOtAgtJ2k28D5Cn57EpG0CQgETUGsbKb+e4lK0p2ewdR4T9jLsousdkZwXpdFK4uUfcbJP5DYt681tMZ96YWkw4YdDNMfAWn9AaN3XEzmqZgqGVw==", "base64");
9
+ const COMPONENTS_VARIABLES = "{\"pwsComponentsFilter\":{\"types\":[\"PW3SAF\"]},\"pwsSignalNames\":[\"PWS_SelfTest\",\"PWS_PeImpTestState\",\"PWS_PvIsoTestState\",\"PWS_RelaySelfTest_State\",\"PWS_MciTestState\",\"PWS_appGitHash\",\"PWS_ProdSwitch_State\"],\"pchComponentsFilter\":{\"types\":[\"PCH\"]},\"pchSignalNames\":[\"PCH_State\",\"PCH_PvState_A\",\"PCH_PvState_B\",\"PCH_PvState_C\",\"PCH_PvState_D\",\"PCH_PvState_E\",\"PCH_PvState_F\",\"PCH_AcFrequency\",\"PCH_AcVoltageAB\",\"PCH_AcVoltageAN\",\"PCH_AcVoltageBN\",\"PCH_packagePartNumber_1_7\",\"PCH_packagePartNumber_8_14\",\"PCH_packagePartNumber_15_20\",\"PCH_packageSerialNumber_1_7\",\"PCH_packageSerialNumber_8_14\",\"PCH_PvVoltageA\",\"PCH_PvVoltageB\",\"PCH_PvVoltageC\",\"PCH_PvVoltageD\",\"PCH_PvVoltageE\",\"PCH_PvVoltageF\",\"PCH_PvCurrentA\",\"PCH_PvCurrentB\",\"PCH_PvCurrentC\",\"PCH_PvCurrentD\",\"PCH_PvCurrentE\",\"PCH_PvCurrentF\",\"PCH_BatteryPower\",\"PCH_AcRealPowerAB\",\"PCH_SlowPvPowerSum\",\"PCH_AcMode\",\"PCH_AcFrequency\",\"PCH_DcdcState_A\",\"PCH_DcdcState_B\",\"PCH_appGitHash\"],\"bmsComponentsFilter\":{\"types\":[\"PW3BMS\"]},\"bmsSignalNames\":[\"BMS_nominalEnergyRemaining\",\"BMS_nominalFullPackEnergy\",\"BMS_appGitHash\"],\"hvpComponentsFilter\":{\"types\":[\"PW3HVP\"]},\"hvpSignalNames\":[\"HVP_State\",\"HVP_appGitHash\"],\"baggrComponentsFilter\":{\"types\":[\"BAGGR\"]},\"baggrSignalNames\":[\"BAGGR_State\",\"BAGGR_OperationRequest\",\"BAGGR_NumBatteriesConnected\",\"BAGGR_NumBatteriesPresent\",\"BAGGR_NumBatteriesExpected\",\"BAGGR_LOG_BattConnectionStatus0\",\"BAGGR_LOG_BattConnectionStatus1\",\"BAGGR_LOG_BattConnectionStatus2\",\"BAGGR_LOG_BattConnectionStatus3\"]}";
10
+ exports.COMPONENTS_CODE = COMPONENTS_CODE;
11
+ exports.COMPONENTS_QUERY = COMPONENTS_QUERY;
12
+ exports.COMPONENTS_VARIABLES = COMPONENTS_VARIABLES;
13
+ exports.CONTROLLER_CODE = CONTROLLER_CODE;
14
+ exports.CONTROLLER_QUERY = CONTROLLER_QUERY;
15
+ exports.CONTROLLER_VARIABLES = CONTROLLER_VARIABLES;
16
+ exports.STATUS_CODE = STATUS_CODE;
17
+ exports.STATUS_QUERY = STATUS_QUERY;
@@ -0,0 +1,10 @@
1
+ // src/powerwall/queries.ts
2
+ const STATUS_QUERY = " query DeviceControllerQuery {\n control {\n systemStatus {\n nominalFullPackEnergyWh\n nominalEnergyRemainingWh\n }\n islanding {\n customerIslandMode\n contactorClosed\n microGridOK\n gridOK\n }\n meterAggregates {\n location\n realPowerW\n }\n alerts {\n active\n },\n siteShutdown {\n isShutDown\n reasons\n }\n batteryBlocks {\n din\n disableReasons\n }\n pvInverters {\n din\n disableReasons\n }\n }\n system {\n time\n sitemanagerStatus {\n isRunning\n }\n updateUrgencyCheck {\n urgency\n version {\n version\n gitHash\n }\n timestamp\n }\n }\n neurio {\n isDetectingWiredMeters\n readings {\n serial\n dataRead {\n voltageV\n realPowerW\n reactivePowerVAR\n currentA\n }\n timestamp\n }\n pairings {\n serial\n shortId\n status\n errors\n macAddress\n isWired\n modbusPort\n modbusId\n lastUpdateTimestamp\n }\n }\n pw3Can {\n firmwareUpdate {\n isUpdating\n progress {\n updating\n numSteps\n currentStep\n currentStepProgress\n progress\n }\n }\n }\n esCan {\n bus {\n PVAC {\n packagePartNumber\n packageSerialNumber\n subPackagePartNumber\n subPackageSerialNumber\n PVAC_Status {\n isMIA\n PVAC_Pout\n PVAC_State\n PVAC_Vout\n PVAC_Fout\n }\n PVAC_InfoMsg {\n PVAC_appGitHash\n }\n PVAC_Logging {\n isMIA\n PVAC_PVCurrent_A\n PVAC_PVCurrent_B\n PVAC_PVCurrent_C\n PVAC_PVCurrent_D\n PVAC_PVMeasuredVoltage_A\n PVAC_PVMeasuredVoltage_B\n PVAC_PVMeasuredVoltage_C\n PVAC_PVMeasuredVoltage_D\n PVAC_VL1Ground\n PVAC_VL2Ground\n }\n alerts {\n isComplete\n isMIA\n active\n }\n }\n PINV {\n PINV_Status {\n isMIA\n PINV_Fout\n PINV_Pout\n PINV_Vout\n PINV_State\n PINV_GridState\n }\n PINV_AcMeasurements {\n isMIA\n PINV_VSplit1\n PINV_VSplit2\n }\n PINV_PowerCapability {\n isComplete\n isMIA\n PINV_Pnom\n }\n alerts {\n isComplete\n isMIA\n active\n }\n }\n PVS {\n PVS_Status {\n isMIA\n PVS_State\n PVS_vLL\n PVS_StringA_Connected\n PVS_StringB_Connected\n PVS_StringC_Connected\n PVS_StringD_Connected\n PVS_SelfTestState\n }\n alerts {\n isComplete\n isMIA\n active\n }\n }\n THC {\n packagePartNumber\n packageSerialNumber\n THC_InfoMsg {\n isComplete\n isMIA\n THC_appGitHash\n }\n THC_Logging {\n THC_LOG_PW_2_0_EnableLineState\n }\n }\n POD {\n POD_EnergyStatus {\n isMIA\n POD_nom_energy_remaining\n POD_nom_full_pack_energy\n }\n POD_InfoMsg {\n POD_appGitHash\n }\n }\n MSA {\n packagePartNumber\n packageSerialNumber\n MSA_InfoMsg {\n isMIA\n MSA_appGitHash\n MSA_assemblyId\n }\n METER_Z_AcMeasurements {\n isMIA\n lastRxTime\n METER_Z_CTA_InstRealPower\n METER_Z_CTA_InstReactivePower\n METER_Z_CTA_I\n METER_Z_VL1G\n METER_Z_CTB_InstRealPower\n METER_Z_CTB_InstReactivePower\n METER_Z_CTB_I\n METER_Z_VL2G\n }\n MSA_Status {\n lastRxTime\n }\n }\n SYNC {\n packagePartNumber\n packageSerialNumber\n SYNC_InfoMsg {\n isMIA\n SYNC_appGitHash\n }\n METER_X_AcMeasurements {\n isMIA\n isComplete\n lastRxTime\n METER_X_CTA_InstRealPower\n METER_X_CTA_InstReactivePower\n METER_X_CTA_I\n METER_X_VL1N\n METER_X_CTB_InstRealPower\n METER_X_CTB_InstReactivePower\n METER_X_CTB_I\n METER_X_VL2N\n METER_X_CTC_InstRealPower\n METER_X_CTC_InstReactivePower\n METER_X_CTC_I\n METER_X_VL3N\n }\n METER_Y_AcMeasurements {\n isMIA\n isComplete\n lastRxTime\n METER_Y_CTA_InstRealPower\n METER_Y_CTA_InstReactivePower\n METER_Y_CTA_I\n METER_Y_VL1N\n METER_Y_CTB_InstRealPower\n METER_Y_CTB_InstReactivePower\n METER_Y_CTB_I\n METER_Y_VL2N\n METER_Y_CTC_InstRealPower\n METER_Y_CTC_InstReactivePower\n METER_Y_CTC_I\n METER_Y_VL3N\n }\n SYNC_Status {\n lastRxTime\n }\n }\n ISLANDER {\n ISLAND_GridConnection {\n ISLAND_GridConnected\n isComplete\n }\n ISLAND_AcMeasurements {\n ISLAND_VL1N_Main\n ISLAND_FreqL1_Main\n ISLAND_VL2N_Main\n ISLAND_FreqL2_Main\n ISLAND_VL3N_Main\n ISLAND_FreqL3_Main\n ISLAND_VL1N_Load\n ISLAND_FreqL1_Load\n ISLAND_VL2N_Load\n ISLAND_FreqL2_Load\n ISLAND_VL3N_Load\n ISLAND_FreqL3_Load\n ISLAND_GridState\n lastRxTime\n isComplete\n isMIA\n }\n }\n }\n enumeration {\n inProgress\n numACPW\n numPVI\n }\n firmwareUpdate {\n isUpdating\n powerwalls {\n updating\n numSteps\n currentStep\n currentStepProgress\n progress\n }\n msa {\n updating\n numSteps\n currentStep\n currentStepProgress\n progress\n }\n sync {\n updating\n numSteps\n currentStep\n currentStepProgress\n progress\n }\n pvInverters {\n updating\n numSteps\n currentStep\n currentStepProgress\n progress\n }\n }\n phaseDetection {\n inProgress\n lastUpdateTimestamp\n powerwalls {\n din\n progress\n phase\n }\n }\n inverterSelfTests {\n isRunning\n isCanceled\n pinvSelfTestsResults {\n din\n overall {\n status\n test\n summary\n setMagnitude\n setTime\n tripMagnitude\n tripTime\n accuracyMagnitude\n accuracyTime\n currentMagnitude\n timestamp\n lastError\n }\n testResults {\n status\n test\n summary\n setMagnitude\n setTime\n tripMagnitude\n tripTime\n accuracyMagnitude\n accuracyTime\n currentMagnitude\n timestamp\n lastError\n }\n }\n }\n }\n}\n";
3
+ const STATUS_CODE = Buffer.from("MIGGAkEUsZelf621utFyGqi9asUYmDC2EkKitHBPshR2ZLfOGgz+0lYBDH8q9uXbZ18vYAsWlV9xYxMk0455vn7dQTESeAJBcAdftB9dxD7y7gWlVsF/KgjHDqZdH4Ki60l+2s8R3gYbcc/JtM38HvVzupWNI28hzXrr5XqW9eEMta5y+8svFx8=", "base64");
4
+ const CONTROLLER_QUERY = "query DeviceControllerQuery($msaComp:ComponentFilter$msaSignals:[String!]){control{systemStatus{nominalFullPackEnergyWh nominalEnergyRemainingWh}islanding{customerIslandMode contactorClosed microGridOK gridOK disableReasons}meterAggregates{location realPowerW}alerts{active}siteShutdown{isShutDown reasons}batteryBlocks{din disableReasons}pvInverters{din disableReasons}}system{time supportMode{remoteService{isEnabled expiryTime sessionId}}sitemanagerStatus{isRunning}updateUrgencyCheck{urgency version{version gitHash}timestamp}}neurio{isDetectingWiredMeters readings{firmwareVersion serial dataRead{voltageV realPowerW reactivePowerVAR currentA}timestamp}pairings{serial shortId status errors macAddress hostname isWired modbusPort modbusId lastUpdateTimestamp}}teslaRemoteMeter{meters{din reading{timestamp firmwareVersion ctReadings{voltageV realPowerW reactivePowerVAR energyExportedWs energyImportedWs currentA}}firmwareUpdate{updating numSteps currentStep currentStepProgress progress}}detectedWired{din serialPort}}pw3Can{firmwareUpdate{isUpdating progress{updating numSteps currentStep currentStepProgress progress}}enumeration{inProgress}}esCan{bus{PVAC{packagePartNumber packageSerialNumber subPackagePartNumber subPackageSerialNumber PVAC_Status{isMIA PVAC_Pout PVAC_State PVAC_Vout PVAC_Fout}PVAC_InfoMsg{PVAC_appGitHash}PVAC_Logging{isMIA PVAC_PVCurrent_A PVAC_PVCurrent_B PVAC_PVCurrent_C PVAC_PVCurrent_D PVAC_PVMeasuredVoltage_A PVAC_PVMeasuredVoltage_B PVAC_PVMeasuredVoltage_C PVAC_PVMeasuredVoltage_D PVAC_VL1Ground PVAC_VL2Ground}alerts{isComplete isMIA active}}PINV{PINV_Status{isMIA PINV_Fout PINV_Pout PINV_Vout PINV_State PINV_GridState}PINV_AcMeasurements{isMIA PINV_VSplit1 PINV_VSplit2}PINV_PowerCapability{isComplete isMIA PINV_Pnom}alerts{isComplete isMIA active}}PVS{PVS_Status{isMIA PVS_State PVS_vLL PVS_StringA_Connected PVS_StringB_Connected PVS_StringC_Connected PVS_StringD_Connected PVS_SelfTestState}PVS_Logging{PVS_numStringsLockoutBits PVS_sbsComplete}alerts{isComplete isMIA active}}THC{packagePartNumber packageSerialNumber THC_InfoMsg{isComplete isMIA THC_appGitHash}THC_Logging{THC_LOG_PW_2_0_EnableLineState}}POD{POD_EnergyStatus{isMIA POD_nom_energy_remaining POD_nom_full_pack_energy}POD_InfoMsg{POD_appGitHash}}SYNC{packagePartNumber packageSerialNumber SYNC_InfoMsg{isMIA SYNC_appGitHash SYNC_assemblyId}METER_X_AcMeasurements{isMIA isComplete METER_X_CTA_InstRealPower METER_X_CTA_InstReactivePower METER_X_CTA_I METER_X_VL1N METER_X_CTB_InstRealPower METER_X_CTB_InstReactivePower METER_X_CTB_I METER_X_VL2N METER_X_CTC_InstRealPower METER_X_CTC_InstReactivePower METER_X_CTC_I METER_X_VL3N}METER_Y_AcMeasurements{isMIA isComplete METER_Y_CTA_InstRealPower METER_Y_CTA_InstReactivePower METER_Y_CTA_I METER_Y_VL1N METER_Y_CTB_InstRealPower METER_Y_CTB_InstReactivePower METER_Y_CTB_I METER_Y_VL2N METER_Y_CTC_InstRealPower METER_Y_CTC_InstReactivePower METER_Y_CTC_I METER_Y_VL3N}}ISLANDER{ISLAND_GridConnection{ISLAND_GridConnected isComplete}ISLAND_AcMeasurements{ISLAND_VL1N_Main ISLAND_FreqL1_Main ISLAND_VL2N_Main ISLAND_FreqL2_Main ISLAND_VL3N_Main ISLAND_FreqL3_Main ISLAND_VL1N_Load ISLAND_FreqL1_Load ISLAND_VL2N_Load ISLAND_FreqL2_Load ISLAND_VL3N_Load ISLAND_FreqL3_Load ISLAND_GridState isComplete isMIA}}}enumeration{inProgress numACPW numPVI}firmwareUpdate{isUpdating powerwalls{updating numSteps currentStep currentStepProgress progress}msa{updating numSteps currentStep currentStepProgress progress}msa1{updating numSteps currentStep currentStepProgress progress}sync{updating numSteps currentStep currentStepProgress progress}pvInverters{updating numSteps currentStep currentStepProgress progress}}phaseDetection{inProgress lastUpdateTimestamp powerwalls{din progress phase}}inverterSelfTests{isRunning isCanceled pinvSelfTestsResults{din overall{status test summary setMagnitude setTime tripMagnitude tripTime accuracyMagnitude accuracyTime currentMagnitude timestamp lastError}testResults{status test summary setMagnitude setTime tripMagnitude tripTime accuracyMagnitude accuracyTime currentMagnitude timestamp lastError}}}}components{msa:components(filter:$msaComp){partNumber serialNumber signals(names:$msaSignals){name value textValue boolValue timestamp}activeAlerts{name}}}ieee20305{longFormDeviceID polledResources{url name pollRateSeconds lastPolledTimestamp}controls{defaultControl{mRID setGradW opModEnergize opModMaxLimW opModImpLimW opModExpLimW opModGenLimW opModLoadLimW}activeControls{opModEnergize opModMaxLimW opModImpLimW opModExpLimW opModGenLimW opModLoadLimW}}registration{dateTimeRegistered pin}}}";
5
+ const CONTROLLER_CODE = Buffer.from("MIGHAkIBQZUS40LRyhrTAPZ9C0VAL5qfwA0GJawsDmohKQpk7+Y3i69i1/gmCy7BrNkhH9aD/2tJbfNcStjuaVRZ3n/FeFICQR1DA0j7OCKw5NYY3hHENbKpVkKmSo8InbqG8SBXzUqMAioFEst7PJvIZ8mdOYtSs4m48fEPDhZF7de/1SYpki4S", "base64");
6
+ const CONTROLLER_VARIABLES = "{\"msaComp\":{\"types\" :[\"PVS\",\"PVAC\", \"TESYNC\", \"TEPINV\", \"TETHC\", \"STSTSM\", \"TEMSA\", \"TEPINV\", \"PW3BMS\" ]},\n \"msaSignals\":[\n \"MSA_pcbaId\",\n \"MSA_usageId\",\n \"MSA_appGitHash\",\n \"PVAC_Fan_Speed_Actual_RPM\",\n \"PVAC_Fan_Speed_Target_RPM\",\n \"MSA_HeatingRateOccurred\",\n \"THC_AmbientTemp\",\n \"METER_Z_CTA_InstRealPower\",\n \"METER_Z_CTA_InstReactivePower\",\n \"METER_Z_CTA_I\",\n \"METER_Z_VL1G\",\n \"METER_Z_CTB_InstRealPower\",\n \"METER_Z_CTB_InstReactivePower\",\n \"METER_Z_CTB_I\",\n \"METER_Z_VL2G\",\n \"METER_Z_CTC_InstRealPower\",\n \"METER_Z_CTC_InstReactivePower\",\n \"METER_Z_CTC_I\",\n \"METER_Z_VL3G\",\n \"METER_Z_LifetimeEnergyExport\",\n \"METER_Z_LifetimeEnergyImport\",\n \"BMS_nominalFullPackEnergy\",\n \"BMS_nominalEnergyRemaining\"]}";
7
+ const COMPONENTS_QUERY = " query ComponentsQuery (\n $pchComponentsFilter: ComponentFilter,\n $pchSignalNames: [String!],\n $pwsComponentsFilter: ComponentFilter,\n $pwsSignalNames: [String!],\n $bmsComponentsFilter: ComponentFilter,\n $bmsSignalNames: [String!],\n $hvpComponentsFilter: ComponentFilter,\n $hvpSignalNames: [String!],\n $baggrComponentsFilter: ComponentFilter,\n $baggrSignalNames: [String!],\n ) {\n # TODO STST-57686: Introduce GraphQL fragments to shorten\n pw3Can {\n firmwareUpdate {\n isUpdating\n progress {\n updating\n numSteps\n currentStep\n currentStepProgress\n progress\n }\n }\n }\n components {\n pws: components(filter: $pwsComponentsFilter) {\n signals(names: $pwsSignalNames) {\n name\n value\n textValue\n boolValue\n timestamp\n }\n activeAlerts {\n name\n }\n }\n pch: components(filter: $pchComponentsFilter) {\n signals(names: $pchSignalNames) {\n name\n value\n textValue\n boolValue\n timestamp\n }\n activeAlerts {\n name\n }\n }\n bms: components(filter: $bmsComponentsFilter) {\n signals(names: $bmsSignalNames) {\n name\n value\n textValue\n boolValue\n timestamp\n }\n activeAlerts {\n name\n }\n }\n hvp: components(filter: $hvpComponentsFilter) {\n partNumber\n serialNumber\n signals(names: $hvpSignalNames) {\n name\n value\n textValue\n boolValue\n timestamp\n }\n activeAlerts {\n name\n }\n }\n baggr: components(filter: $baggrComponentsFilter) {\n signals(names: $baggrSignalNames) {\n name\n value\n textValue\n boolValue\n timestamp\n }\n activeAlerts {\n name\n }\n }\n }\n}\n";
8
+ const COMPONENTS_CODE = Buffer.from("MIGIAkIAuHHsPqNt1XD5U6uZ5n46Go5+orOHD0y7T4N1objbd5vsvqZosqOtsQeCRL/reBNPEsOOtAgtJ2k28D5Cn57EpG0CQgETUGsbKb+e4lK0p2ewdR4T9jLsousdkZwXpdFK4uUfcbJP5DYt681tMZ96YWkw4YdDNMfAWn9AaN3XEzmqZgqGVw==", "base64");
9
+ const COMPONENTS_VARIABLES = "{\"pwsComponentsFilter\":{\"types\":[\"PW3SAF\"]},\"pwsSignalNames\":[\"PWS_SelfTest\",\"PWS_PeImpTestState\",\"PWS_PvIsoTestState\",\"PWS_RelaySelfTest_State\",\"PWS_MciTestState\",\"PWS_appGitHash\",\"PWS_ProdSwitch_State\"],\"pchComponentsFilter\":{\"types\":[\"PCH\"]},\"pchSignalNames\":[\"PCH_State\",\"PCH_PvState_A\",\"PCH_PvState_B\",\"PCH_PvState_C\",\"PCH_PvState_D\",\"PCH_PvState_E\",\"PCH_PvState_F\",\"PCH_AcFrequency\",\"PCH_AcVoltageAB\",\"PCH_AcVoltageAN\",\"PCH_AcVoltageBN\",\"PCH_packagePartNumber_1_7\",\"PCH_packagePartNumber_8_14\",\"PCH_packagePartNumber_15_20\",\"PCH_packageSerialNumber_1_7\",\"PCH_packageSerialNumber_8_14\",\"PCH_PvVoltageA\",\"PCH_PvVoltageB\",\"PCH_PvVoltageC\",\"PCH_PvVoltageD\",\"PCH_PvVoltageE\",\"PCH_PvVoltageF\",\"PCH_PvCurrentA\",\"PCH_PvCurrentB\",\"PCH_PvCurrentC\",\"PCH_PvCurrentD\",\"PCH_PvCurrentE\",\"PCH_PvCurrentF\",\"PCH_BatteryPower\",\"PCH_AcRealPowerAB\",\"PCH_SlowPvPowerSum\",\"PCH_AcMode\",\"PCH_AcFrequency\",\"PCH_DcdcState_A\",\"PCH_DcdcState_B\",\"PCH_appGitHash\"],\"bmsComponentsFilter\":{\"types\":[\"PW3BMS\"]},\"bmsSignalNames\":[\"BMS_nominalEnergyRemaining\",\"BMS_nominalFullPackEnergy\",\"BMS_appGitHash\"],\"hvpComponentsFilter\":{\"types\":[\"PW3HVP\"]},\"hvpSignalNames\":[\"HVP_State\",\"HVP_appGitHash\"],\"baggrComponentsFilter\":{\"types\":[\"BAGGR\"]},\"baggrSignalNames\":[\"BAGGR_State\",\"BAGGR_OperationRequest\",\"BAGGR_NumBatteriesConnected\",\"BAGGR_NumBatteriesPresent\",\"BAGGR_NumBatteriesExpected\",\"BAGGR_LOG_BattConnectionStatus0\",\"BAGGR_LOG_BattConnectionStatus1\",\"BAGGR_LOG_BattConnectionStatus2\",\"BAGGR_LOG_BattConnectionStatus3\"]}";
10
+ export { COMPONENTS_CODE, COMPONENTS_QUERY, COMPONENTS_VARIABLES, CONTROLLER_CODE, CONTROLLER_QUERY, CONTROLLER_VARIABLES, STATUS_CODE, STATUS_QUERY };