diff --git a/CodeGenerationTools/GridworksCore/Enum/DeriveEnums.xslt b/CodeGenerationTools/GridworksCore/Enum/DeriveEnums.xslt index a1a3b251..66572a41 100644 --- a/CodeGenerationTools/GridworksCore/Enum/DeriveEnums.xslt +++ b/CodeGenerationTools/GridworksCore/Enum/DeriveEnums.xslt @@ -110,7 +110,7 @@ class """ - + diff --git a/CodeGenerationTools/GridworksCore/Enum/EnumTest/DeriveEnumTests.xslt b/CodeGenerationTools/GridworksCore/Enum/EnumTest/DeriveEnumTests.xslt index 9e209ccc..50485e32 100644 --- a/CodeGenerationTools/GridworksCore/Enum/EnumTest/DeriveEnumTests.xslt +++ b/CodeGenerationTools/GridworksCore/Enum/EnumTest/DeriveEnumTests.xslt @@ -34,6 +34,7 @@ + ../../../../tests/enums/ _test.py @@ -51,8 +52,8 @@ def test_ assert set(.values()) == { - - + + " diff --git a/CodeGenerationTools/GridworksCore/ODXML/DataSchema.odxml b/CodeGenerationTools/GridworksCore/ODXML/DataSchema.odxml index 92c881f4..476636c9 100644 --- a/CodeGenerationTools/GridworksCore/ODXML/DataSchema.odxml +++ b/CodeGenerationTools/GridworksCore/ODXML/DataSchema.odxml @@ -114,11 +114,7 @@ CRUD - rec9Hc4AlRRUtSxkeNone2022-08-18T13:37:21769062022-08-18T13:37:21StringCurrentSemanticEndrecIuUqkLn41mZ8TSej@ssot.me, jessica.lynn.millar@gmail.comrec4P1HPQcymxTOlErecYfeHO0N6fC3sxJ1715. Scada-develop-v2022.05.16.323366. SchemaRoot.CurrentSemanticEnd20.0SchemaRootrecIuUqkLn41mZ8TSCurrentSemanticEnd76398000SchemasSchemas01String763990150 - - - CRUD - recVpLt1h1lFaJPPtNone2022-08-18T13:37:22769072022-08-18T13:37:22StringSchemasrecIuUqkLn41mZ8TSej@ssot.me, jessica.lynn.millar@gmail.comrec4P1HPQcymxTOlErecYfeHO0N6fC3sxJ1715. Scada-develop-v2022.05.16.323366. SchemaRoot.Schemas21.0SchemaRootrecIuUqkLn41mZ8TSSchemas76399000SchemaRootscopySchemaRoots copy01String764000150 + rec9Hc4AlRRUtSxkeNone2022-08-18T13:37:21769062022-08-18T13:37:21StringCurrentSemanticEndrecIuUqkLn41mZ8TSej@ssot.me, jessica.lynn.millar@gmail.comrec4P1HPQcymxTOlErecYfeHO0N6fC3sxJ1715. Scada-develop-v2022.05.16.323366. SchemaRoot.CurrentSemanticEnd20.0SchemaRootrecIuUqkLn41mZ8TSCurrentSemanticEnd76398000recVpLt1h1lFaJPPtNone2023-04-30T22:27:17769072022-08-18T13:37:22StringSchemastrueSchemasrecIuUqkLn41mZ8TSej@ssot.me, jessica.lynn.millar@gmail.comrec4P1HPQcymxTOlErecYfeHO0N6fC3sxJ1715. Scada-develop-v2022.05.16.323366. SchemaRoot.Schemas21.0SchemaRootrecIuUqkLn41mZ8TSSchemas763990SchemaRootscopySchemaRoots copy01String764000150 CRUD @@ -146,7 +142,11 @@ CRUD - recnMa5xJD7jb3ierNone2023-01-09T16:32:26821502023-01-09T16:32:26StringUrlrecIuUqkLn41mZ8TSej@ssot.me, jessica.lynn.millar@gmail.comrec4P1HPQcymxTOlErecYfeHO0N6fC3sxJ1715. Scada-develop-v2022.05.16.323366. SchemaRoot.Url30.0SchemaRootrecIuUqkLn41mZ8TSUrl81642000recuSRXe41GdtS77crecd0wQ7MgMBERZHOrecR593Dz0RXe99QZrec7FNSU0EcIocQa7reckkC2u8ssqKX5vIrecumZN3MTdFhMVeEreciPgA34pOecvd1trecJ4fMHwpJ2Z2i7qrecozztBYRd8AWt7DrecxOeQLIO5YViRUgrecbBSrV4Ei9b5iHkrecDNlzyDMR1Z0pwYrec0a1M0CB09zwEmarecT0Gm2LwjkHugZarecj3l62MyNQC9IAQrecJxkH3K9wyb7eKIrecKcHq27mlYUxUSnrecpdQ3t7SESNI2akrecXcBZ7voNPHg0Ydrec9Hc4AlRRUtSxkerecVpLt1h1lFaJPPtrecCHqdjf2zGBNMhzrecsd3la7kaOFw8yqrecUcGE6a9kjAbbwHrecsCmQ5g1sy3MKx6recuhuEDQn3NKBJJfrec2djRgncV4Fpy3UrecnMa5xJD7jb3ierRestfulGetRestfulGetsRestfulGetsRestfulGets + recnMa5xJD7jb3ierNone2023-01-09T16:32:26821502023-01-09T16:32:26StringUrlrecIuUqkLn41mZ8TSej@ssot.me, jessica.lynn.millar@gmail.comrec4P1HPQcymxTOlErecYfeHO0N6fC3sxJ1715. Scada-develop-v2022.05.16.323366. SchemaRoot.Url30.0SchemaRootrecIuUqkLn41mZ8TSUrl81642000ExtraAllowedExtraAllowed01Boolean825640150 + + + CRUD + recNZ1bh0Ysk48HHNNone2023-04-30T22:27:18830722023-04-30T22:27:18BooleanExtraAllowedrecIuUqkLn41mZ8TSej@ssot.me, jessica.lynn.millar@gmail.comrec4P1HPQcymxTOlErecYfeHO0N6fC3sxJ1715. Scada-develop-v2022.05.16.323366. SchemaRoot.ExtraAllowed31.0SchemaRootrecIuUqkLn41mZ8TSExtraAllowed82564000recuSRXe41GdtS77crecd0wQ7MgMBERZHOrecR593Dz0RXe99QZrec7FNSU0EcIocQa7reckkC2u8ssqKX5vIrecumZN3MTdFhMVeEreciPgA34pOecvd1trecJ4fMHwpJ2Z2i7qrecozztBYRd8AWt7DrecxOeQLIO5YViRUgrecbBSrV4Ei9b5iHkrecDNlzyDMR1Z0pwYrec0a1M0CB09zwEmarecT0Gm2LwjkHugZarecj3l62MyNQC9IAQrecJxkH3K9wyb7eKIrecKcHq27mlYUxUSnrecpdQ3t7SESNI2akrecXcBZ7voNPHg0Ydrec9Hc4AlRRUtSxkerecVpLt1h1lFaJPPtrecCHqdjf2zGBNMhzrecsd3la7kaOFw8yqrecUcGE6a9kjAbbwHrecsCmQ5g1sy3MKx6recuhuEDQn3NKBJJfrec2djRgncV4Fpy3UrecnMa5xJD7jb3ierrecNZ1bh0Ysk48HHNRestfulGetRestfulGetsRestfulGetsRestfulGets CRUD @@ -572,7 +572,15 @@ CRUD - recCc4GQB5icU2hYHNone2023-03-12T17:17:28822652023-03-12T17:17:28BooleanNotInInitrecIuUqkLn41mZ8TSej@ssot.me, jessica.lynn.millar@gmail.comrecO8F0MCngKPsXiirecYfeHO0N6fC3sxJ1715. Scada-develop-v2022.05.16.323366. Schema.NotInInit43.0SchemarecIuUqkLn41mZ8TSNotInInit81757000recFqhvZF5ZxPsxHIrecRmjpAvVSDNJUOyrecEAZlYvJoznIlDtrecoeRwmw5gM4sUywrecK3TmgvWgU41rzPrec6rUCCriZUENHnyrecSguyKFhRciuJQLrec8veT969D0X8XjZrecQd9hkAt1T75SnBrectqsp5nVV67Pw29recK1P9TaQUNavBXxrecXmcmorQT2xLPZ6recerYEce3irBax2JrecAOy9ZmwD9ImZbSrecWkHnNHrMvKe6LjrecNuAUKwdpBP9iyGrecmcm2sjpbTwQroUrechhGzNfVM4Ua9YdrecUhQ9rXPjUFix4HrecF2gl6BCCKUSUrnrecnGyPJnpH6R9f2lrec9VRrzy03CABwW5rec1yQZz9QnS5j8NgrecNgrvONa0eoDSi7recM6WmGTyRm5VyiGrecLKvaHUspm7AQTArecIcfGu9JI3P1Y0rrecsXqU5tmQrN0PLGrecfmpeSrnwWf703CreceVwqQPlXurn2u6recoVSJwWopQoUB9wrecYgokYN3jlk73WsrecPJRU0Way9OrFu5reckxYGDyhq2U6aGZrec8tPHK1RWLcyXDqrec4UQz0uQGTOXP7vrecjBcWHaD0txkThTrecPChJ4Z0yYiZUOArecCc4GQB5icU2hYHSchemaAttributeSchemaAttributesSchemaAttributesSchemaAttributes + recCc4GQB5icU2hYHNone2023-03-12T17:17:28822652023-03-12T17:17:28BooleanNotInInitrecIuUqkLn41mZ8TSej@ssot.me, jessica.lynn.millar@gmail.comrecO8F0MCngKPsXiirecYfeHO0N6fC3sxJ1715. Scada-develop-v2022.05.16.323366. Schema.NotInInit43.0SchemarecIuUqkLn41mZ8TSNotInInit81757000ProtocolsProtocols01String825651150 + + + CRUD + recnHjL5hWmhS57nYreccu5newyZkH4tOkLookupLookupLookup-to-Lookup2023-04-30T22:27:19true830732023-04-30T22:27:19StringProtocolstruerecIuUqkLn41mZ8TSej@ssot.me, jessica.lynn.millar@gmail.comrecO8F0MCngKPsXiirecYfeHO0N6fC3sxJ1715. Scada-develop-v2022.05.16.323366. Schema.Protocols44.0SchemarecIuUqkLn41mZ8TSProtocols82565recM6WmGTyRm5VyiGProtocolTypesProtocolName0ProtocolTypeProtocolNameSchemaProtocolTypeType11ProtocolTypeProtocolTypeIdProtocolNamereccu5newyZkH4tOkrecscYGbW4n76PZ8RLookupNoneLookup-to-None2022-10-30T17:37:19true812192022-10-30T17:36:39StringProtocolNamerecIuUqkLn41mZ8TSej@ssot.me, jessica.lynn.millar@gmail.comrecevnfBvpOqzbUaQrecYfeHO0N6fC3sxJ1715. Scada-develop-v2022.05.16.323366. ProtocolType.ProtocolName5.0ProtocolTyperecIuUqkLn41mZ8TSProtocolName80711rec8Q6HYmsmkuRsNsProtocolName0ProtocolNameProtocolTypeProtocolProtocolTypesExtraAllowedExtraAllowed01Boolean825661150 + + + CRUD + recHpojco9I09N58xrecNZ1bh0Ysk48HHNLookupNoneLookup-to-None2023-04-30T22:28:01true830742023-04-30T22:27:20BooleanExtraAllowedrecIuUqkLn41mZ8TSej@ssot.me, jessica.lynn.millar@gmail.comrecO8F0MCngKPsXiirecYfeHO0N6fC3sxJ1715. Scada-develop-v2022.05.16.323366. Schema.ExtraAllowed45.0SchemarecIuUqkLn41mZ8TSExtraAllowed82566recRmjpAvVSDNJUOySchemaRootExtraAllowed0SchemaRootExtraAllowedSchemaSchemaRootSchemaRootscopy01SchemaRootSchemaRootIdExtraAllowedrecNZ1bh0Ysk48HHNNone2023-04-30T22:27:18830722023-04-30T22:27:18BooleanExtraAllowedrecIuUqkLn41mZ8TSej@ssot.me, jessica.lynn.millar@gmail.comrec4P1HPQcymxTOlErecYfeHO0N6fC3sxJ1715. Scada-develop-v2022.05.16.323366. SchemaRoot.ExtraAllowed31.0SchemaRootrecIuUqkLn41mZ8TSExtraAllowed825640recFqhvZF5ZxPsxHIrecRmjpAvVSDNJUOyrecEAZlYvJoznIlDtrecoeRwmw5gM4sUywrecK3TmgvWgU41rzPrec6rUCCriZUENHnyrecSguyKFhRciuJQLrec8veT969D0X8XjZrecQd9hkAt1T75SnBrectqsp5nVV67Pw29recK1P9TaQUNavBXxrecXmcmorQT2xLPZ6recerYEce3irBax2JrecAOy9ZmwD9ImZbSrecWkHnNHrMvKe6LjrecNuAUKwdpBP9iyGrecmcm2sjpbTwQroUrechhGzNfVM4Ua9YdrecUhQ9rXPjUFix4HrecF2gl6BCCKUSUrnrecnGyPJnpH6R9f2lrec9VRrzy03CABwW5rec1yQZz9QnS5j8NgrecNgrvONa0eoDSi7recM6WmGTyRm5VyiGrecLKvaHUspm7AQTArecIcfGu9JI3P1Y0rrecsXqU5tmQrN0PLGrecfmpeSrnwWf703CreceVwqQPlXurn2u6recoVSJwWopQoUB9wrecYgokYN3jlk73WsrecPJRU0Way9OrFu5reckxYGDyhq2U6aGZrec8tPHK1RWLcyXDqrec4UQz0uQGTOXP7vrecjBcWHaD0txkThTrecPChJ4Z0yYiZUOArecCc4GQB5icU2hYHrecnHjL5hWmhS57nYrecHpojco9I09N58xSchemaAttributeSchemaAttributesSchemaAttributesSchemaAttributes CRUD diff --git a/CodeGenerationTools/GridworksCore/SSoT/Airtable.xml b/CodeGenerationTools/GridworksCore/SSoT/Airtable.xml index baf12fd3..1dfea429 100644 --- a/CodeGenerationTools/GridworksCore/SSoT/Airtable.xml +++ b/CodeGenerationTools/GridworksCore/SSoT/Airtable.xml @@ -106,12 +106,12 @@ recg6kZdbgxDUXAAh 2022-11-08T17:16:29Z reczel9oTcNrweZ1X - recvGFiTtzXNrhLBm recH9GUDdSB7SiwNG + recvGFiTtzXNrhLBm + atn.bid + marketmaker Post atn.bid to marketmaker MarketMaker - marketmaker - atn.bid 000 000 bid.ack @@ -121,800 +121,853 @@ rec0Od5vGZi8EDj7g 2022-11-23T14:01:26Z - Json - recPxYqZlRvCFlD8p - Active sla.enter + Active + Json 000 - sla.enter + recPxYqZlRvCFlD8p 1 + sla.enter rec0dMwyxvm5Cx9Hu 2022-09-19T15:06:21Z - Json - rec1SFXYQUXElpeJ9 - Active tavalidatorcert.algo.transfer + Active + Json + 000 + rec1SFXYQUXElpeJ9 Meant to be sent from a pending TaValidator to the GNodeFactory (Gnf), so the Gnf will transfer its ValidatorCert to the pending TaValidator's Algorand address. Used for Step 2 of TaValidator certification - 000 https://gridworks.readthedocs.io/en/latest/ta-validator.html - tavalidatorcert.algo.transfer 1 + tavalidatorcert.algo.transfer rec0r8Vc4daPOhatR 2022-11-04T17:08:01Z - Json - recvWBuo1Ws1SIL4b - Active new.tadeed.algo.optin + Active + Json 000 - new.tadeed.algo.optin + recvWBuo1Ws1SIL4b 1 + new.tadeed.algo.optin rec15cMarXKQ9TAEw 2023-02-20T13:58:24Z - Json - rec7aaxWBgMiALe49 - Active gridworks.event.gt.sh.status + Active + Json 000 + rec7aaxWBgMiALe49 true - gridworks.event.gt.sh.status 1 + gridworks.event.gt.sh.status rec1E12bdSXOtQ9qP 2022-06-23T18:39:41Z - Json - Unnamed record - recDEr7ob2KLqM4gU - Active telemetry.reporting.config - ElectricalQuantityReportingConfigList + Active + Json 000 - telemetry.reporting.config + recDEr7ob2KLqM4gU + Unnamed record 1 + telemetry.reporting.config rec1gy4a9zTVXe420 2022-11-07T20:20:21Z - Json - rec7peRuDqMNa0vlW - Active sim.timestep + Active + Json + 000 + rec7peRuDqMNa0vlW For simulated actors, time progresses discretely on receipt of these time steps. Sent by TimeCoordinators to coordinate time - 000 - sim.timestep 1 + sim.timestep rec1joYefgk9OQTyG 2022-07-10T12:49:03Z + resistive.heater.component.gt + Active Json - Unnamed record - recDjO3rdq76LMOoL - ResistiveHeaterComponent + 000 true - Active - resistive.heater.component.gt + ResistiveHeaterComponent + true + recDjO3rdq76LMOoL GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Component associated to a SpaceheatNode is part of this structure. + Unnamed record Type for tracking Resistive Heater Components - true - 000 https://g-node-registry.readthedocs.io/en/latest/component.html - resistive.heater.component.gt 1 + resistive.heater.component.gt rec23C6am0WIH9veT 2022-06-15T22:55:39Z - Json - recE32bnkaJFE5q4Y - Deprecated gt.sh.simple.status + Deprecated + Json 100 - gt.sh.simple.status + recE32bnkaJFE5q4Y 1 + gt.sh.simple.status rec3iTEohsap8GRP8 2022-11-17T06:07:40Z - Json - rec3H5b04RB2vmYrk - Active market.price + Active + Json 000 - market.price + rec3H5b04RB2vmYrk 1 + market.price rec430tANcSG2ZavF 2022-09-19T18:20:13Z - Json - recXCK8GTrT3hnfKX - Deprecated tadeed.algo.exchange + Deprecated + Json 001 - tadeed.algo.exchange + recXCK8GTrT3hnfKX 1 + tadeed.algo.exchange rec4u5c6FO198haBK 2022-06-07T09:29:22Z + pipe.flow.sensor.component.gt + Active Json - Unnamed record - recGuvhjDYO65d5rP - PipeFlowSensorComponent + 000 true - Active - pipe.flow.sensor.component.gt + PipeFlowSensorComponent + true + recGuvhjDYO65d5rP GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Component associated to a SpaceheatNode is part of this structure. - PipeFlowSensorComponents + Unnamed record Type for tracking Pipe Flow Sensor Components - true - 000 https://g-node-registry.readthedocs.io/en/latest/component.html - pipe.flow.sensor.component.gt 1 + pipe.flow.sensor.component.gt rec6PDgvHMkqnbyOQ 2022-11-08T04:30:38Z + market.type.gt + Active Json - recDYjXYf8RbWmUFe - MarketType + 000 true - Active - market.type.gt + MarketType + recDYjXYf8RbWmUFe A [MarketMaker](https://gridworks.readthedocs.io/en/latest/market-maker.html) GNode can run several types of Markets. For example, it can run an hourly real-time market and also an ancillary services market for Regulation. This is captured by the concept of MarketType. Used by MarketMakers to simultaneously run several different types of Markets - 000 https://gridworks.readthedocs.io/en/latest/market-type.html - market.type.gt 1 + market.type.gt rec77AahxpNNz6eNx 2023-02-14T14:25:10Z - Json - recEGOX7VX0bQ3Lvf - Active egauge.io + Active + Json + 000 + recEGOX7VX0bQ3Lvf When the component associated to a PowerMeter ShNode has MakeModel EGAUGE__4030, there is a significant amount of configuration required to specify both what is read from the eGauge (input) and what is then sent up to the SCADA (output). This type handles that information. Used for an eGauge meter's component information in a hardware layout - 000 https://gridworks-protocol.readthedocs.io/en/latest/egauge-io.html - egauge.io 1 + egauge.io rec9aKp2kx0NQDDc6 2022-11-08T08:14:04Z - Json - recd5K0XiAzHsj2Pw - Active latest.price + Active + Json + 000 + recd5K0XiAzHsj2Pw The price of the current MarketSlot Latest Price for a MarketType, sent by a MarketMaker - 000 https://gridworks.readthedocs.io/en/latest/market-slot.html - latest.price 1 + latest.price recBNevzmPrROWd5j 2022-08-11T17:27:11Z - Json - Unnamed record, Unnamed record - recdNEAMkZeOLS8Vo - Active telemetry.snapshot.spaceheat + Active + Json + 000 + recdNEAMkZeOLS8Vo A snapshot of all current sensed states, sent from a spaceheat SCADA to its AtomicTNode. The nth element of each of the three lists refer to the same reading (i.e., what is getting read, what the value is, what the TelemetryNames are.) - Snapshot - Snapshot of Telemetry Data from a SpaceHeat SCADA - 000 true + Unnamed record, Unnamed record + Snapshot of Telemetry Data from a SpaceHeat SCADA https://gridworks-protocol.readthedocs.io/en/latest/spaceheat-node.html - telemetry.snapshot.spaceheat 1 + telemetry.snapshot.spaceheat recBX9s6MqEmX6EjU 2022-07-12T18:11:34Z + current.transformer.cac.gt + Active Json - true - recdXzxjKArjU2z9Z - current.transformer.cac.gt.100.100 - CurrentTransformerCac + 000 true - Active - current.transformer.cac.gt + CurrentTransformerCac + true + recdXzxjKArjU2z9Z GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Cac, or ComponentAttributeClass, is part of this structure. Type for trackingCurrent Transformer ComponentAttributeClasses - 000 https://g-node-registry.readthedocs.io/en/latest/component-attribute-class.html - current.transformer.cac.gt 1 + current.transformer.cac.gt recBr8F2Oy5JbxQGP 2022-11-08T17:23:52Z - Json - recvGFiTtzXNrhLBm - Active bid.ack + Active + Json + 000 + recvGFiTtzXNrhLBm This is not a legally binding contract (see accepted.bid). Designed for a POST response. Bid ack - 000 - bid.ack 1 + bid.ack recCGkiwasshpUQnL 2022-07-03T22:18:03Z - Json - Unnamed record, Unnamed record - receGKnJ8CfemQLdQ - Active gt.sh.multipurpose.telemetry.status + Active + Json + 100 + receGKnJ8CfemQLdQ A list of readings about a specific SpaceheatNode made by a MultipurposeSensor node, for a Spaceheat SCADA. Designed as part of a status message sent from the SCADA to its AtomicTNode typically once every 5 minutes. The nth element of each of its two lists refer to the same reading (i.e. what the value is, when it was read). - MultipurposeTelemetryList, MultipurposeTelemetryList - Data read from a MultipurposeSensor run by a Spaceheat SCADA - 100 true + Unnamed record, Unnamed record + Data read from a MultipurposeSensor run by a Spaceheat SCADA https://gridworks-protocol.readthedocs.io/en/latest/multipurpose-sensor.html - gt.sh.multipurpose.telemetry.status 1 + gt.sh.multipurpose.telemetry.status recCKmWozQuINHiaT 2022-12-04T14:19:58Z - Json - recwp0F6Gdrg8qLwb - Active super.starter - Used by world to seed a docker container with data needed to spawn and superviser GNodeInstances + Active + Json 000 - super.starter + recwp0F6Gdrg8qLwb + Used by world to seed a docker container with data needed to spawn and superviser GNodeInstances 1 + super.starter recCPb9SbFhFCSw5m 2023-01-12T16:52:24Z - Json - recE3bIWWFpMPqyS1 - recDq5Oo6baJLVS5s - Active heartbeat.b - Heartbeat for Scada-AtomicTNode DispatchContract, to send via RabbitMQ + Active + Json 001 - heartbeat.b + recE3bIWWFpMPqyS1 + recDq5Oo6baJLVS5s + Heartbeat for Scada-AtomicTNode DispatchContract, to send via RabbitMQ 1 + heartbeat.b recCpUQ75l1hoKN45 2022-07-09T23:03:52Z - Json - recepkVk3vOelGIUa - Pending spaceheat.status + Pending + Json 100 - spaceheat.status + recepkVk3vOelGIUa 1 + spaceheat.status recDarbsgFFIi5Cnv 2023-01-08T03:25:10Z - Json - rectayh08KEGGGcZc - Active gw.cert.id - Clarifies whether cert id is an Algorand Standard Asset or SmartSig + Active + Json 000 - gw.cert.id + rectayh08KEGGGcZc + Clarifies whether cert id is an Algorand Standard Asset or SmartSig 1 + gw.cert.id recDnKXIasoP8ODSd 2022-11-06T20:01:05Z + g.node.gt + Active Json - rec8uTC7GK5qgXzg9 - GNode + 002 true - Active - g.node.gt + GNode + rec8uTC7GK5qgXzg9 GNodes are the building blocks of Gridworks. They have slowly-changing state that must be kept in sync across a distributed system. Therefore, they require a global registry to act as Single Source of Truth (SSoT). This class is used for that SSoT to share information with actors about their GNodes, and the GNodes that they will observe and communicate with. Used to send and receive updates about GNodes - 002 https://gridworks.readthedocs.io/en/latest/g-node.html - g.node.gt 1 + g.node.gt recERKCcoJa8mkC8L 2022-11-04T13:41:08Z - Json - recAWKkS0hcyws7O6 - recUtSmERYdWUVAPm - Active initial.tadeed.algo.optin + Active + Json + 002 + recAWKkS0hcyws7O6 + recUtSmERYdWUVAPm The TaDaemon must opt into the TaDeed before receiving it. This message prompts that action. Received by TaDaemon so that it can opt into intial TaDeed - 002 - initial.tadeed.algo.optin 1 + initial.tadeed.algo.optin recEdlcUTBfQ9Hy6D 2022-06-14T10:57:42Z - Json - recgdLh7RL2N6DtWI - Component - true - Active component.gt - OtherComponents, Component, Component, Component + Active + Json 000 - component.gt + true + Component + recgdLh7RL2N6DtWI 1 + component.gt recEfMvX9DPwXpcJ3 2022-09-21T16:38:08Z - Json - rec5bEVzI1k5qcXYg - Active discoverycert.algo.create + Active + Json 000 - discoverycert.algo.create + rec5bEVzI1k5qcXYg 1 + discoverycert.algo.create recEoebL6fHn6xzXL 2022-09-30T19:07:43Z - Json - rec2qJdOZXwT9U5UP - Deprecated signandsubmit.mtx.algo + Deprecated + Json 000 - signandsubmit.mtx.algo + rec2qJdOZXwT9U5UP 1 + signandsubmit.mtx.algo recF3FhhkKiMKyjJZ 2022-11-17T06:13:26Z - Json - recacY2b5R2bByiAQ - Active accepted.bid + Active + Json + 000 + recacY2b5R2bByiAQ This is a legally binding contract for the bidder to consume or produce the quantity in its Bid consistent with the actual price. Bid acceptance sent from MarketMaker to a market partipant - 000 https://gridworks.readthedocs.io/en/latest/market-bid.html + 1 accepted.bid + + + recGMHAv9IvCjusuS + 2023-05-09T21:46:06Z + flo.params + Active + Json + 000 + recvJ9OVpqVVP895H + Derived classes are expected to have TypeNames enforced as literals that start with flo.params. E.g. flo.params.brickstorageheater. This container is used for sending messages that include flo.params (i.e, flo.params.report + Base class for Forward Looking Optimizer params + https://gridworks-atn.readthedocs.io/en/latest/flo.html#flo-params + true 1 + flo.params recGPwKi4Sb6sxayy 2022-08-11T15:25:06Z - Json - reciPWPv22Y3pt5oD - Active ear.g.node.alias.list.toss + Active + Json 100 - ear.g.node.alias.list.toss + reciPWPv22Y3pt5oD 1 + ear.g.node.alias.list.toss recGQ4lX5HOPJraGN 2022-11-08T03:38:14Z - Json - rechXkF4uGNAulje7 - Active price.quantity - 000 - price.quantity + Active + Json + 000 + rechXkF4uGNAulje7 1 + price.quantity recGf44plaa1jjiWQ 2022-11-17T01:54:13Z - Json - rechVGhiKUuIgoWYy - Active market.maker.info + Active + Json 000 + rechVGhiKUuIgoWYy + 1 market.maker.info + + + recGoMNEoqUIuEXwz + 2023-04-30T18:09:17Z + atn.params + Active + Json + 000 + rec4yUxGiLZpqWQqb + This is a partial type, which is expected to be satisfied by all types starting with atn.params (like atn.params.heatpumpwithbooststore). It is used to describe the generic info required for configuring an AtomicTNode. + Generic AtnParams + true 1 + atn.params recHrNVLHcDTTqaCq 2022-06-07T09:29:41Z + simple.temp.sensor.component.gt + Active Json - Unnamed record - recjrd0YFmqQQm5sv - SimpleTempSensorComponent + 000 true - Active - simple.temp.sensor.component.gt + SimpleTempSensorComponent + true + recjrd0YFmqQQm5sv GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Component associated to a SpaceheatNode is part of this structure. - TempSensorComponents + Unnamed record Type for tracking Simple Temp Sensor Components - true - 000 https://g-node-registry.readthedocs.io/en/latest/component.html - simple.temp.sensor.component.gt 1 + simple.temp.sensor.component.gt recIjNSTFZEY0rZ5x 2022-07-12T18:02:08Z + electric.meter.cac.gt + Active Json - true - recqhQADHovWX1hOl - ElectricMeterCac + 000 true - Active - electric.meter.cac.gt + ElectricMeterCac + true + recqhQADHovWX1hOl GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Cac, or ComponentAttributeClass, is part of this structure. Type for tracking Electric Meter ComponentAttributeClasses - 000 https://g-node-registry.readthedocs.io/en/latest/component-attribute-class.html + 1 electric.meter.cac.gt + + + recJEHz9XprAIplqG + 2023-06-25T20:37:23Z + flo.params.simpleresistivehydronic + Active + Json + 000 + rec2EA0TG0Xexi6wg 1 + flo.params.simpleresistivehydronic recK5H9Pt9ZpF6hgi 2022-06-14T10:58:01Z - Json - recm57e2rjMmC2c6n - ComponentAttributeClass - true - Active component.attribute.class.gt - OtherCacs, ComponentAttributeClass + Active + Json 000 - component.attribute.class.gt + true + ComponentAttributeClass + recm57e2rjMmC2c6n 1 + component.attribute.class.gt recKA0g4F2FAH28QX 2023-01-28T00:16:22Z + multipurpose.sensor.component.gt + Active Json - recbMWz8PxqJUI41L - MultipurposeSensorComponent + 000 true - Active - multipurpose.sensor.component.gt + MultipurposeSensorComponent + true + recbMWz8PxqJUI41L GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Component associated to a SpaceheatNode is part of this structure. Type for tracking Multupurpose Sensor Components - true - 000 https://g-node-registry.readthedocs.io/en/latest/component.html - multipurpose.sensor.component.gt 1 + multipurpose.sensor.component.gt recKVkCs5ktwXS3Bu 2022-06-04T19:17:25Z + pipe.flow.sensor.cac.gt + Active Json - true - Unnamed record - recmVKHF3ugtUOYrz - PipeFlowSensorCac + 000 true - Active - pipe.flow.sensor.cac.gt + PipeFlowSensorCac + true + recmVKHF3ugtUOYrz GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Cac, or ComponentAttributeClass, is part of this structure. - ComponentAttributeClass, PipeFlowSensorCacs + Unnamed record Type for tracking Pipe Flow Sensor ComponentAttributeClasses - 000 https://g-node-registry.readthedocs.io/en/latest/component-attribute-class.html - pipe.flow.sensor.cac.gt 1 + pipe.flow.sensor.cac.gt recLF7qGdmXsqb9M2 2022-11-08T04:10:06Z - Json - recH9GUDdSB7SiwNG - recECSz5o4Z7NFjhG - Active atn.bid - AtomicTNode bid sent to a MarketMaker + Active + Json 001 + recH9GUDdSB7SiwNG + recECSz5o4Z7NFjhG + AtomicTNode bid sent to a MarketMaker https://gridworks.readthedocs.io/en/latest/market-bid.html - atn.bid 1 + atn.bid recLc7QnBdk9iPdHI 2022-06-15T22:49:36Z - Json - recncxVAzn76fL8xN - Deprecated gt.sh.simple.single.status - SimpleSingleStatusList + Deprecated + Json 100 - gt.sh.simple.single.status + recncxVAzn76fL8xN 1 + gt.sh.simple.single.status recMDHEwaShpGskfS 2022-11-29T13:24:19Z - Json - recNIlQetbTDVNam8 - Active g.nodes.broadcast + Active + Json 000 - g.nodes.broadcast + recNIlQetbTDVNam8 1 + g.nodes.broadcast recNH5aI7c5Latl1K 2022-07-03T22:18:20Z - Json - Unnamed record, Unnamed record - recpHvfV5mSI7pgRP - Active gt.sh.booleanactuator.cmd.status - BooleanactuatorCmdList, BooleanactuatorCmdList + Active + Json 100 + recpHvfV5mSI7pgRP true - gt.sh.booleanactuator.cmd.status + Unnamed record, Unnamed record 1 + gt.sh.booleanactuator.cmd.status recNShQmJ0F04UlrH 2022-09-21T11:37:21Z - Json - reca1A5UXpnpmZdiH - Active basegnode.other.create + Active + Json 000 - basegnode.other.create + reca1A5UXpnpmZdiH 1 + basegnode.other.create recNZGEdUh6l7BfYp 2022-07-12T18:12:07Z + current.transformer.component.gt + Active Json - recpZ6JqSrTi4xaOu - CurrentTransformerComponent + 000 true - Active - current.transformer.component.gt + CurrentTransformerComponent + true + recpZ6JqSrTi4xaOu GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Component associated to a SpaceheatNode is part of this structure. Type for tracking Current Transformer Components - true - 000 https://g-node-registry.readthedocs.io/en/latest/component.html - current.transformer.component.gt 1 + current.transformer.component.gt recNgGDYcengufuFe 2022-11-10T22:58:17Z - Json - rec3fLb6b0gIeuCTO + atn.params.report Active - atn.params.report.heatpumpwithbooststore + Json + 000 + rec3fLb6b0gIeuCTO Parameters like the size of the thermal store. AtomicTNode reporting its AtnParams - 000 - atn.params.report.heatpumpwithbooststore 1 + atn.params.report recNgwEZ9cfcNmeTI 2022-11-07T18:57:19Z - Json - recbAMyCyUX2bLKfz + simplesim.snapshot.heatpumpwithbooststore Active - snapshot.heatpumpwithbooststore + Json 000 - snapshot.heatpumpwithbooststore + recbAMyCyUX2bLKfz 1 + simplesim.snapshot.heatpumpwithbooststore recNkT1cGWR3vqFMM 2022-11-09T22:59:05Z - Json - recrZz3gmzl97POA1 - Active atn.params.heatpumpwithbooststore - 000 - atn.params.heatpumpwithbooststore + Active + Json + 001 + recrZz3gmzl97POA1 + Params for HeatpumpWIthBoostStore Atn strategy 1 + atn.params.heatpumpwithbooststore recPnrf8TmF9WBgAm 2022-08-11T17:26:39Z - Json - recWWAN9rudjlUYst - Unnamed record, Unnamed record - recrnRklRws6Txbqr - Active snapshot.spaceheat + Active + Json 000 + recWWAN9rudjlUYst + recrnRklRws6Txbqr true - snapshot.spaceheat + Unnamed record, Unnamed record 1 + snapshot.spaceheat recRob19Mg7TFO5bB 2023-01-16T07:59:46Z - Json - rec9kYNek59Vqps4S + simplesim.driver.data.hpwb Active - sim.scada.driver.report + Json 000 - sim.scada.driver.report + rec9kYNek59Vqps4S 1 + simplesim.driver.data.hpwb recTSdWeNPEKAZuAP 2022-11-04T17:59:21Z - Json - recPy6SuizSerb3JG - Active new.tadeed.send + Active + Json 000 - new.tadeed.send + recPy6SuizSerb3JG 1 + new.tadeed.send recUrIRjO9EYJRQhG 2022-06-23T18:37:48Z - Json - Unnamed record - recwr8WwMjrVGNL7L - Active gt.powermeter.reporting.config + Active + Json 100 - gt.powermeter.reporting.config + recwr8WwMjrVGNL7L + Unnamed record 1 + gt.powermeter.reporting.config recUtfxpuihd6JBQ9 2022-09-21T11:42:02Z - Json - recn0YpsBzBOA9yvq - Active discoverycert.algo.transfer + Active + Json 000 - discoverycert.algo.transfer + recn0YpsBzBOA9yvq 1 + discoverycert.algo.transfer recVNiapT0HIufahj 2022-06-20T12:49:53Z - Json - recxNIfCRauFrb57o - recFrR35Q6mQhx1KM - Active heartbeat.a + Active + Json + 100 + recxNIfCRauFrb57o + recFrR35Q6mQhx1KM Payload for direct messages sent back and forth between actors, for example a Supervisor and one of its subordinates. Used to check that an actor can both send and receive messages - 100 https://gridworks.readthedocs.io/en/latest/g-node-instance.html - heartbeat.a 1 + heartbeat.a recWDAtZiKvWaXnRX 2022-07-12T18:02:06Z - Json - recyD0ycgUiT7TiH2 - Active hardware.layout + Active + Json 000 + recyD0ycgUiT7TiH2 + 1 hardware.layout + + + recWWeMXxAoiOeWwx + 2023-05-01T21:52:42Z + simplesim.driver.data.bsh + Active + Json + 000 + recwXD4ryogKVwsnE 1 + simplesim.driver.data.bsh recWnYsIlIcwBPwZY 2023-01-16T17:25:00Z - Json - recF9KonH58AltK0K - Active basegnode.scada.create + Active + Json + 000 + recF9KonH58AltK0K This is a payload designed to be sent from a TaOwner to the GNodeFactory. The TaOwner creates a private Algorand key and puts it on the Scada Device that will sense and control their TerminalAsset. The public address is associated with the Scada GNode by the GNodeFactory. Scada BaseGNode Creation - 000 + 1 basegnode.scada.create + + + recXUDaPBBDl9wqBu + 2023-06-25T20:38:33Z + atn.params.simpleresistivehydronic + Active + Json + 000 + rechp89wabr5kkqti 1 + atn.params.simpleresistivehydronic recZhfzRnHkE804iR 2022-09-20T12:04:51Z + base.g.node.gt + Active Json - recDp8U1jLA9zeEx2 - BaseGNode + 002 true - Active - base.g.node.gt + BaseGNode + recDp8U1jLA9zeEx2 BaseGNode. Authority is GNodeFactory. - 002 - base.g.node.gt 1 + base.g.node.gt recaDjX9PV6CUrf6k 2022-11-08T04:03:25Z - Json - recsHXkpUxoOF9vYp - Active price.quantity.unitless + Active + Json 000 - price.quantity.unitless + recsHXkpUxoOF9vYp 1 + price.quantity.unitless recb8a2JTfYBmC6v7 2022-09-19T18:24:49Z - Json - recazQb2vEXgbroHd - Active basegnode.terminalasset.create + Active + Json 000 - basegnode.terminalasset.create + recazQb2vEXgbroHd 1 + basegnode.terminalasset.create recbbx6wGZEfqP2Kn 2022-07-05T12:48:52Z + gt.sh.status + Active Json + 110 reckop7rgbzAi5Iqq - Unnamed record, Unnamed record - recNe1NhrgRzyRlSA - recNbXbJE9rcnLXAs - Active - gt.sh.status + recNe1NhrgRzyRlSA + recNbXbJE9rcnLXAs Status message sent by a Spaceheat SCADA every 5 minutes - 110 true - gt.sh.status + Unnamed record, Unnamed record 1 + gt.sh.status recblgO1LGjgyHR2Y 2022-11-21T05:21:17Z - Json - recX2g8OLICXZHuHr - Active resume.time + Active + Json 000 - resume.time + recX2g8OLICXZHuHr 1 + resume.time recbm5aHNmuHvaYKJ 2023-01-16T17:17:50Z - Json - recBEBBA0ctnOYQnC - Active join.dispatch.contract + Active + Json + 000 + recBEBBA0ctnOYQnC This is sent as an invitation to join the DispatchContract. Upon receipt of this, the AtomicTNode can check that the DispatchContract has finished the first part of its bootstrapping. This means it is well-funded, and also has the Scada Cert Id @@ -926,33 +979,33 @@ by the concept of MarketType. https://gridworks.readthedocs.io/en/latest/dispatch-contract.html Sent from a Scada to its paired AtomicTNode on RabbitMQ - 000 - join.dispatch.contract 1 + join.dispatch.contract recc5qGcZNQPmktbe 2022-05-11T18:08:26Z + gs.pwr + Active GridworksSerial + 100 + p rec0DJdNtBZJr6pOK - recO5QLpXXDMjgo1j - Active - gs.pwr + recO5QLpXXDMjgo1j Used by a SCADA -> Atn or Atn -> AggregatedTNode to report real-time power of their TerminalAsset. Positive number means WITHDRAWAL from the grid - so generating electricity creates a negative number. This message is considered worse than useless to send after the first attempt, and does not require an ack. Shares the same purpose as power.watts, but designed to be small in size (thus using the GridWorks Serial protocol instead of JSON). The idea is this message, instantaneous reporting of power, is the highest priority message in the system and thus gets to have its metadata made explicit in the structure of the code instead of parameterized. One result is the size of the sent data is very small. Sometimes bandwidth can be an issue, and smaller messages are very useful. + true Real-time power of TerminalAsset in Watts - 100 - true - p - gs.pwr 1 + gs.pwr reccq04oqFsHHPTlN 2022-11-04T16:43:48Z - Json - recPf7eAhpge7kvO7 - Active initial.tadeed.algo.transfer + Active + Json + 000 + recPf7eAhpge7kvO7 Once the TaValidator has done the initial on-site inspection of the Transactive Device including its location and the type and quality of its power and energy metering, the TaValidator lets the GNodeFactory know by sending this message. @@ -972,270 +1025,333 @@ by the concept of MarketType. TaValidator sends to GNodeFactory after validating Transactive Device - 000 - initial.tadeed.algo.transfer 1 + initial.tadeed.algo.transfer reccsb7VI48EdWlGk 2022-11-02T12:51:03Z - Json - rec8ILTteHhn4MpGd - Active basegnodes.get + Active + Json 000 + rec8ILTteHhn4MpGd + 1 basegnodes.get + + + recd7xonsiIxHvW98 + 2023-05-03T12:44:11Z + simplesim.snapshot + Active + Json + 000 + Parent class for snapshots sent in a Scada SimpleSimulation 1 + simplesim.snapshot recdbl99ZoQqyOhS7 2022-06-06T18:44:52Z + relay.component.gt + Active Json - recPbLemXyDnvKcIc - RelayComponent + 000 true - Active - relay.component.gt + RelayComponent + true + recPbLemXyDnvKcIc GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Component associated to a SpaceheatNode is part of this structure. - BooleanActuatorComponents Type for tracking Relay Components - true - 000 https://g-node-registry.readthedocs.io/en/latest/component.html - relay.component.gt 1 + relay.component.gt recde7ZQpg5BRpHxm 2022-11-04T16:50:16Z - Json - recMyDdiQjtfTMAP1 - Active old.tadeed.algo.return + Active + Json 000 - old.tadeed.algo.return + recMyDdiQjtfTMAP1 1 + old.tadeed.algo.return recdi7BezBflZlH45 2022-09-20T13:29:20Z - Json - rech8RtBLsLVe51DN - Deprecated tadeed.algo.transfer + Deprecated + Json 001 - tadeed.algo.transfer + rech8RtBLsLVe51DN 1 + tadeed.algo.transfer recdjt7dskJqDJASY 2022-11-17T06:20:24Z - Json - recbZXiheXqQdc7b6 - Active market.book - MarketMaker's list of bids for a MarketSlot + Active + Json 000 - market.book + recbZXiheXqQdc7b6 + MarketMaker's list of bids for a MarketSlot 1 + market.book recdmZpmDC9qq3Wz5 2022-07-03T21:26:12Z - Json - Unnamed record - recPmpuzBMWnnZRpa - Active gt.driver.booleanactuator.cmd + Active + Json 100 + recPmpuzBMWnnZRpa true - gt.driver.booleanactuator.cmd + Unnamed record 1 + gt.driver.booleanactuator.cmd rece1suo3h3SqfW4M 2022-06-09T21:31:30Z - Json - Unnamed record - recQ1SzB1rQPnbRUR - SensorReportingConfig - Active gt.sensor.reporting.config + Active + Json 100 - gt.sensor.reporting.config + SensorReportingConfig + recQ1SzB1rQPnbRUR + Unnamed record 0 + gt.sensor.reporting.config receVdNEfIE1HLnwN 2022-07-05T12:55:18Z - Json - recHA9kJVs2sT0Fkx - Unnamed record, Unnamed record - recm2rM5o9GxgCqbL - recQVDSRdSrYEHimS - Active gt.sh.cli.atn.cmd + Active + Json 110 + recHA9kJVs2sT0Fkx + recm2rM5o9GxgCqbL + recQVDSRdSrYEHimS true + Unnamed record, Unnamed record + 1 gt.sh.cli.atn.cmd + + + recedgBdJvQBnspbO + 2023-05-01T22:01:34Z + simplesim.driver.data + Active + Json + 000 + rec8IDXjSvdhHGds4 + Generic driver report for a simple Scada Simulation + true 1 + simplesim.driver.data recfTTPpGH16HQ9aY 2022-11-21T22:35:54Z + g.node.instance.gt + Active Json - recV0KuDFayH4qGIl - GNodeInstance + 000 true - Active - g.node.instance.gt + GNodeInstance + recV0KuDFayH4qGIl One of the layers of abstraction connecting a GNode with a running app in a Docker container. Used to send and receive updates about GNodeInstances - 000 https://gridworks.readthedocs.io/en/latest/g-node-instance.html + 1 g.node.instance.gt + + + rech3pl8AhjCA01Q1 + 2023-05-01T17:28:06Z + atn.params.brickstorageheater + Active + Json + 000 + recw5evm1WetKAzZG + Parameters for a model of a ceramic brick thermal storage room unit, using a two-dimensional Dijstra graph parameterized by 'fullness of the thermal battery' and time. + Params for a BrickStorageHeater Atn Strategy + https://gridworks-atn.readthedocs.io/en/latest/brick-storage-heater.html 1 + atn.params.brickstorageheater rechCPLYrkc1asuPJ 2022-09-14T16:26:22Z - Json - reccFZLsGTVhuzGsn - Active tavalidatorcert.algo.create + Active + Json + 000 + reccFZLsGTVhuzGsn Meant to be sent from a pending TaValidator to the GNodeFactory (Gnf), to initiate the process of certifying the pending TaValidator. Used for Step 1 of TaValidator certification - 000 https://gridworks.readthedocs.io/en/latest/ta-validator.html + 1 tavalidatorcert.algo.create + + + rechWdY7ztMafROYr + 2023-05-10T14:02:46Z + flo.params.report + Active + Json + 000 + recBqSlQdF17CgMPY + Type used for a message provided by an AtomicTNode or SCADA actor re the flo parameters just used to run a FLO. + Flo Params Report + https://gridworks-atn.readthedocs.io/en/latest/flo.html#flo-params 1 + flo.params.report rechZ9OTpGxuT8xWl 2022-05-11T18:08:26Z - Json - recTZzT6nQkrQ4sMq - Pending gt.power.sync + Pending + Json 100 - gt.power.sync + recTZzT6nQkrQ4sMq 1 + gt.power.sync rechZBY0G1JuNeEuG 2022-07-05T11:32:23Z + gt.dispatch.boolean + Active Json + 110 recmwngNXL4YDMudy - Unnamed record, Unnamed record - recTZ13dEbwrKazkL - reckTci9LVdsEt2WQ - Active - gt.dispatch.boolean + recTZ13dEbwrKazkL + reckTci9LVdsEt2WQ Boolean dispatch command sent over the cloud broker from one GNode (FromGNodeAlias/ FromGNodeId) to another (ToGNodeAlias). AboutNodeAlias is the node getting dispatched. It may be a GNode, but it can also be a SpaceHeatNode. - 110 true - gt.dispatch.boolean + Unnamed record, Unnamed record 1 + gt.dispatch.boolean reci4VO3iee2LGfcG 2022-11-10T13:22:20Z - Json - reczzIn3wGYrEKtbr - Active flo.params.heatpumpwithbooststore - 000 - flo.params.heatpumpwithbooststore + Active + Json + 001 + reczzIn3wGYrEKtbr + Flo params for the (private) HeatPumpWithBoostStore AtomicTNode strategy. + https://gridworks.readthedocs.io/en/latest/enums.html#gridworks.enums.StrategyName 1 + flo.params.heatpumpwithbooststore recijDUCMCF0drLi3 2022-07-10T14:13:06Z + spaceheat.node.gt + Active Json - recUj3ZPKMsXanG88 - recEhzcpob8H7VuEF - reccsu6ZeZHKoDqDy - ShNode + 100 true - Active - spaceheat.node.gt + ShNode + recUj3ZPKMsXanG88 + recEhzcpob8H7VuEF + reccsu6ZeZHKoDqDy Type for tracking information about a Spaceheat Node. Spaceheat Node - 100 https://gridworks-protocol.readthedocs.io/en/latest/spaceheat-node.html + 1 spaceheat.node.gt + + + recioXjg9Rh1AaoBV + 2023-05-01T17:49:59Z + simplesim.snapshot.brickstorageheater + Active + Json + 000 + recm5UcVaAPAtrrFS 1 + simplesim.snapshot.brickstorageheater recjFoqZkvOjg0VXc 2023-03-25T22:52:13Z - Json - rec3EIGuvfybwwFOK - Active power.watts + Active + Json + 000 + rec3EIGuvfybwwFOK Used by a SCADA -> Atn or Atn -> AggregatedTNode to report real-time power of their TerminalAsset. Positive number means WITHDRAWAL from the grid - so generating electricity creates a negative number. This message is considered worse than useless to send after the first attempt, and does not require an ack. Shares the same purpose as gs.pwr, but is not designed to minimize bytes so comes in JSON format. Real-time power of TerminalAsset in Watts. - 000 - power.watts 1 + power.watts recjI10N2qf36kpmC 2022-07-05T12:55:36Z - Json - reccy0CAc6XAa6fGb - recVIr500A203gkcH - Deprecated gt.sh.cli.scada.response - recPnrf8TmF9WBgAm + Deprecated + Json 110 - gt.sh.cli.scada.response + recPnrf8TmF9WBgAm + reccy0CAc6XAa6fGb + recVIr500A203gkcH 1 + gt.sh.cli.scada.response snapshot.spaceheat recjpCj1MoKBvlAbR 2022-11-08T03:22:29Z - Json - recXGRmBBB6Pch163 - recc2Km1jUViJqVeK - Active ready + Active + Json + 001 + recc2Km1jUViJqVeK Only intended for simulations that do not have sub-second TimeSteps. TimeCoordinators based on ```gridworks-timecoordinator``` have a notion of actors whose `Ready` must be received before issuing the next TimeStep. + recXGRmBBB6Pch163 Used in simulations by TimeCoordinator GNodes - 001 https://gridworks.readthedocs.io/en/latest/time-coordinator.html - ready 1 + ready reckliobnY6Igi5Fa 2022-11-21T05:20:22Z - Json - recf5K0BP9qLabpdS - Active pause.time + Active + Json 000 - pause.time + recf5K0BP9qLabpdS 1 + pause.time recl00nd7rYLyLDUL 2022-11-14T15:41:26Z - Json - recPPTLAWZu08mD7s - Active terminalasset.certify.hack + Active + Json 000 - terminalasset.certify.hack + recPPTLAWZu08mD7s 1 + terminalasset.certify.hack reclb8xqooxtyPZZc @@ -1246,384 +1362,426 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recmRa74R0GAk0PKx 2022-09-21T11:35:54Z - Json - rec70ndc2atifo8Ri - Active basegnode.marketmaker.create + Active + Json 000 - basegnode.marketmaker.create + rec70ndc2atifo8Ri 1 + basegnode.marketmaker.create recn81szg83l6vw2o 2022-11-30T19:43:13Z - Json - rece2rn8uFKupSOZM - Active debug.tc.reinitialize.time + Active + Json 000 - debug.tc.reinitialize.time + rece2rn8uFKupSOZM 1 + debug.tc.reinitialize.time recnOen6KenxkwQtB 2022-06-14T10:41:17Z - Json - recZOEsjIoauhsLjG - ThermalEdge - Pending gt.thermal.edge - ThermalEdges + Pending + Json 100 - gt.thermal.edge + ThermalEdge + recZOEsjIoauhsLjG 0 + gt.thermal.edge recnUzSx1WgKUdTZO 2022-07-03T17:26:39Z - Json - Deprecated gt.dispatch - rechZBY0G1JuNeEuG + Deprecated + Json 110 - gt.dispatch + rechZBY0G1JuNeEuG 1 + gt.dispatch gt.dispatch.boolean recoAsAg06Qp7jYp3 2022-07-05T11:32:40Z - Json - Unnamed record - rec0ASFtYgDm4fTf8 - reciGkEyh61sro7R0 - Active gt.dispatch.boolean.local - By Locally, this means sent without access to Internet. The HomeAlone actor must reside within the Local Area Network of the SCADA - typically it should reside on the same hardware. - Dispatch message sent locally by SCADA HomeAlone actor + Active + Json 110 + rec0ASFtYgDm4fTf8 + reciGkEyh61sro7R0 + By Locally, this means sent without access to Internet. The HomeAlone actor must reside within the Local Area Network of the SCADA - typically it should reside on the same hardware. true + Unnamed record + Dispatch message sent locally by SCADA HomeAlone actor + 1 gt.dispatch.boolean.local + + + recoB5GFAkU3CD9Pu + 2023-05-01T22:05:19Z 1 recpqtAlI1M19QR9b 2023-01-28T00:16:07Z + multipurpose.sensor.cac.gt + Active Json - true - recULIwPg69M69185 - MultipurposeSensorCac + 000 true - Active - multipurpose.sensor.cac.gt + MultipurposeSensorCac + true + recULIwPg69M69185 GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Cac, or ComponentAttributeClass, is part of this structure. Type for tracking Multipuprose Sensor ComponentAttributeClasses - 000 https://g-node-registry.readthedocs.io/en/latest/component-attribute-class.html - multipurpose.sensor.cac.gt 1 + multipurpose.sensor.cac.gt recqmA1Cu9GIg4hpp 2022-07-10T12:48:52Z + resistive.heater.cac.gt + Active Json - true - Unnamed record - rec2m06PsjtFd0cfu - ResistiveHeaterCac + 000 true - Active - resistive.heater.cac.gt + ResistiveHeaterCac + true + rec2m06PsjtFd0cfu GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Cac, or ComponentAttributeClass, is part of this structure. + Unnamed record Type for tracking Resistive Heater ComponentAttributeClasses - 000 https://g-node-registry.readthedocs.io/en/latest/component-attribute-class.html - resistive.heater.cac.gt 1 + resistive.heater.cac.gt recrNYtQoRa7YhqI4 2022-06-04T19:21:25Z + simple.temp.sensor.cac.gt + Active Json - true - Unnamed record - rec3Noy3m1X4Vdly9 - SimpleTempSensorCac + 000 true - Active - simple.temp.sensor.cac.gt + SimpleTempSensorCac + true + rec3Noy3m1X4Vdly9 GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Cac, or ComponentAttributeClass, is part of this structure. - ComponentAttributeClass, TempSensorCacs + Unnamed record Type for tracking Simple Temp Sensor ComponentAttributeClasses - 000 https://g-node-registry.readthedocs.io/en/latest/component-attribute-class.html - simple.temp.sensor.cac.gt 1 + simple.temp.sensor.cac.gt + itrHua59IITXpXqvf/recrNYtQoRa7YhqI4 recsMoh2JkG2YPR8u 2022-06-07T09:29:06Z + electric.meter.component.gt + Active Json - Unnamed record - recxdlQ6gCN8mD39r - ElectricMeterComponent + 000 true - Active - electric.meter.component.gt + ElectricMeterComponent + true + recxdlQ6gCN8mD39r GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Component associated to a SpaceheatNode is part of this structure. - ElectricMeterComponents + Unnamed record Type for tracking Electric Meter Components - true - 000 https://g-node-registry.readthedocs.io/en/latest/component.html - electric.meter.component.gt 1 + electric.meter.component.gt rect6WA80mNWDt7v0 2022-09-19T20:20:07Z - Json - recJH4tbXOqVJkMVW - Active basegnode.ctn.create + Active + Json 000 - basegnode.ctn.create + recJH4tbXOqVJkMVW 1 + basegnode.ctn.create rectwW4fAko33gT7a 2023-01-19T23:59:02Z - Json - recbrp6V9qD6J1NHb - Active scada.cert.transfer + Active + Json + 000 + recbrp6V9qD6J1NHb This is a payload designed to be sent from a SCADA device to the GNodeFactory after the SCADA has opted into its certificate. Scada Certificate Transfer - 000 - scada.cert.transfer 1 + scada.cert.transfer recu1iYKh47xRDEt9 2023-01-13T18:48:04Z - Json - rechKgkXf88R5dkGD - Active heartbeat.algo.audit + Active + Json + 000 + rechKgkXf88R5dkGD Algo payload with report of last HeartbeatB sent to partner via Rabbit, to be sent to DispatchContract on Algo blockchain - 000 - heartbeat.algo.audit 1 + heartbeat.algo.audit recu7baM2BVbAYQAH 2023-02-20T14:22:24Z - Json - recObejFqCYx5kpak - Active gridworks.header + Active + Json 000 + recObejFqCYx5kpak true - gridworks.header 1 + gridworks.header recuGgxcKPz76mhQc 2022-11-12T08:14:49Z - Json - recbGrdqqYGiwVYVK - Active tadeed.specs.hack + Active + Json 000 + recbGrdqqYGiwVYVK + 1 tadeed.specs.hack + + + recuoD0qsOivs7xOo + 2023-05-09T21:46:16Z + flo.params.brickstorageheater + Active + Json + 000 + recfDQscmquO0odpo + FloParams for the BrickStorageHeater AtomicTNode strategy. + https://gridworks-atn.readthedocs.io/en/latest/brick-storage-heater.html 1 + flo.params.brickstorageheater recuocYj9OaOIsmtn 2022-09-21T11:38:10Z - Json - recXrOxZu3uUqL6pH - Active tatradingrights.algo.create + Active + Json 000 + recXrOxZu3uUqL6pH + 1 tatradingrights.algo.create + + + recuzRX6RAVYBuYO4 + 2023-06-28T14:03:17Z + atn.outside.temp.regr.coeffs + Active + Json + 000 + recy7fqBm5Cl94dnF + Coefficients for a linear regression of avg power leaving a building as a function of weather: + +PowerOut = Alpha + Beta * OutsideTempF + + These are an example of Slowly Varying State variables maintained for a thermal storage heating Terminal Asset by + its AtomicTNode and Scada. + https://gridworks-atn.readthedocs.io/en/latest/data-categories.html#slowly-varying-state-variables 1 + atn.outside.temp.regr.coeffs recwEHKPPTKLK8OFz 2022-11-17T06:03:05Z - Json - recLufl9jSdsMGsFR - Active market.slot - MarketSlot + Active + Json 000 + recLufl9jSdsMGsFR + MarketSlot https://gridworks.readthedocs.io/en/latest/market-slot.html - market.slot 1 + market.slot recwcEF6jm0pivW8K 2022-07-03T22:15:16Z - Json - Unnamed record, Unnamed record - rec8c4KjhwNmfrRYP - Active gt.sh.simple.telemetry.status + Active + Json + 100 + rec8c4KjhwNmfrRYP A list of readings from a simple sensor for a Spaceheat SCADA. Designed as part of a status message sent from the SCADA to its AtomicTNode typically once every 5 minutes. The nth element of each of its two lists refer to the same reading (i.e. what the value is, when it was read). - SimpleTelemetryList, SimpleTelemetryList - Data read from a SimpleSensor run by a SpaceHeat SCADA - 100 true + Unnamed record, Unnamed record + Data read from a SimpleSensor run by a SpaceHeat SCADA https://gridworks-protocol.readthedocs.io/en/latest/simple-sensor.html - gt.sh.simple.telemetry.status 1 + gt.sh.simple.telemetry.status recx3kwLemvtMaT0t 2022-06-24T20:28:53Z - Json - Unnamed record - rec93KBYcwiqJ6OQy - Active gt.sh.telemetry.from.multipurpose.sensor + Active + Json + 100 + rec93KBYcwiqJ6OQy A set of readings made at the same time by a multipurpose sensor, sent by the MultipurposeSensor SpaceheatNode actor to its SCADA. The nth element of each of its three readings (what is getting read, what the value is, what the TelemetryNames are). - Data sent from a MultipurposeSensor to a Spaceheat SCADA - 100 true + Unnamed record + Data sent from a MultipurposeSensor to a Spaceheat SCADA https://gridworks-protocol.readthedocs.io/en/latest/multipurpose-sensor.html - gt.sh.telemetry.from.multipurpose.sensor 1 + gt.sh.telemetry.from.multipurpose.sensor recx4EL5mDebUhtzp 2022-06-09T15:17:43Z - Json - Unnamed record - rec2V7vc3NDSaRb1D - rec944QikN18Rdopu - Active gt.telemetry + Active + Json 110 + rec2V7vc3NDSaRb1D + rec944QikN18Rdopu true - gt.telemetry + Unnamed record 1 + gt.telemetry - itroCzUO7RmOhCI03/recx4EL5mDebUhtzp recxXnNUXYPwJi4ns 2023-02-14T13:12:20Z - Json - rec9dL2CYkm5s4OXX - Active egauge.register.config + Active + Json + 000 + rec9dL2CYkm5s4OXX This type captures the information provided by eGauge in its modbus csv map, when reading current, power, energy, voltage, frequency etc from an eGauge 4030. Used to translate eGauge's Modbus Map - 000 - egauge.register.config 1 + egauge.register.config recxnrRBEZg5cPVPt 2022-10-03T04:44:51Z - Json - rec9udDZT7JDuAbjl - Deprecated optin.tadeed.algo - Sent by Gnf to Daemon to opt into a new tadeed. + Deprecated + Json 100 - optin.tadeed.algo + rec9udDZT7JDuAbjl + Sent by Gnf to Daemon to opt into a new tadeed. 1 + optin.tadeed.algo recxvwvC3YlR3RGEN 2022-11-29T13:56:49Z - Json - reczVqlxJInFWonml - Active supervisor.container.gt + Active + Json + 000 + reczVqlxJInFWonml Sent from a GNodeRegistry to a World, and used also by the World as it spawns GNodeInstances in docker instances (i.e., the SupervisorContainers). Used to send and receive updates about SupervisorContainers - 000 https://gridworks.readthedocs.io/en/latest/supervisor.html + 1 supervisor.container.gt + + + recxwsQKMLrM6UR5g + 2023-05-01T22:06:03Z + simplesim.driver.report + Active + Json + 000 + reckQg9yTsSw2dxbh 1 + simplesim.driver.report recy2lAURQitTqKTR 2022-06-03T18:20:11Z + relay.cac.gt + Active Json - true - reca2LF7P05qQmFJW - RelayCac + 000 true - Active - relay.cac.gt + RelayCac + true + reca2LF7P05qQmFJW GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Cac, or ComponentAttributeClass, is part of this structure. - ComponentAttributeClass, BooleanActuatorCacs Type for tracking Relay ComponentAttributeClasses - 000 https://g-node-registry.readthedocs.io/en/latest/component-attribute-class.html - relay.cac.gt 1 + relay.cac.gt recySyBLBbcax7x8D 2023-04-03T20:20:42Z - Json - recyETDKMGTbGb0zf - Active data.channel + Active + Json + 000 + recyETDKMGTbGb0zf A data channel is a concept of some collection of readings that share all characteristics other than time. Data Channel - 000 - data.channel 1 + data.channel recyuQKkp5CFejv2j 2022-09-21T18:01:12Z - Json - recO8OdobcISYms0B - Active initial.tadeed.algo.create + Active + Json + 000 + recO8OdobcISYms0B If this message is valid, the GNodeFactory co-signs and submits the TaDeed creation. In addition, the GnodeFactory creates a TerminalAsset with GNodeStatus pending. For more information: [TaDeed](https://gridworks.readthedocs.io/en/latest/ta-deed.html) [TaValidator](https://gridworks.readthedocs.io/en/latest/ta-validator.html) TaValidator sends to GNodeFactory to complete creation of an initial TaDeed - 000 - initial.tadeed.algo.create 1 + initial.tadeed.algo.create recyuopIDguUgR1mI 2022-06-20T13:16:05Z - Json - recauOuVBqhRdNWcN - Deprecated gt.sh.status.snapshot - Snapshot, Snapshot - recBNevzmPrROWd5j + Deprecated + Json 110 - gt.sh.status.snapshot + recBNevzmPrROWd5j + recauOuVBqhRdNWcN 1 + gt.sh.status.snapshot telemetry.snapshot.spaceheat reczIxfEiJFKQYsNw 2023-01-16T17:25:02Z - Json - rec3kcgktiHCBYpA4 + dispatch.contract.confirmed Active - dispatch.contract.confirmed.heatpumpwithbooststore + Json + 000 + rec3kcgktiHCBYpA4 Paired with join.dispatch.contract. Sent from AtomicTNode back to SCADA once the AtomicTNode has successfully finished bootstrapping the Dispatch Contract and opted in. Once it has done this, the Dispatch Contract is ready @@ -1631,20 +1789,19 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come https://gridworks.readthedocs.io/en/latest/dispatch-contract.html Message sent from AtomicTNode back to SCADA via Rabbit - 000 - dispatch.contract.confirmed.heatpumpwithbooststore 1 + dispatch.contract.confirmed reczYInsSYetUcVpZ 2022-09-20T12:14:51Z - Json - recT4SSkJ18pz5YoZ - Active basegnodes.broadcast + Active + Json 000 - basegnodes.broadcast + recT4SSkJ18pz5YoZ 1 + basegnodes.broadcast @@ -1653,10 +1810,10 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 2022-11-08T16:36:45Z reczel9oTcNrweZ1X recd5K0XiAzHsj2Pw - Get latest.price from marketmaker - MarketMaker latest.price marketmaker + Get latest.price from marketmaker + MarketMaker 000 @@ -1664,7 +1821,6 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come rec2HyLffy6QK9QId 2022-05-11T18:30:57Z - Active recOAkkrDxlp0hZYR recAu5abxRBSG7Csu recPOwKTDIww8SLUy @@ -1678,9 +1834,24 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recPV5eCtZVeT7zmX recX4AWEX4SombnY3 recSO1tOVjY3EhnSS + recfMyBibCC1lqTy1 + recAy1MJ6WTkJC2Bt + recFfaru1gmnzHcg3 + rec1TiEjRVAsU1G6T + rec367deUgDqEaq89 + recjhPIPtr6UXppHQ + recydLuwKpW0ptMyj + rec6fCUex0HlMSbTR + recjuJ8RaGljvo9ZZ + recl3xwMzRxkadUBM + rec0oIFJ2LAVcoLeV + rec2Mwqc5DnE715Ck + recJokmStFWW1yWsq + spaceheat.telemetry.name + telemetry.name UpperPython - SpaceheatTelemetryName - https://gridworks-protocol.readthedocs.io/en/latest/telemetry-name.html + Active + true recDEr7ob2KLqM4gU recQ1SzB1rQPnbRUR rec3Noy3m1X4Vdly9 @@ -1693,85 +1864,76 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recbMWz8PxqJUI41L recqhQADHovWX1hOl recyETDKMGTbGb0zf + recZR3u3WuSGv96su + recqt9zKlCbThWViA 000 Specifies the name of sensed data reported by a Spaceheat SCADA - recRncRvdA6tysnAt - recfpS2uOHAcfWGdN - recqt9zKlCbThWViA - recZR3u3WuSGv96su - telemetry.name - spaceheat.telemetry.name - true - recfMyBibCC1lqTy1 - recAy1MJ6WTkJC2Bt - recFfaru1gmnzHcg3 - rec1TiEjRVAsU1G6T - rec367deUgDqEaq89 - recjhPIPtr6UXppHQ - recydLuwKpW0ptMyj - rec6fCUex0HlMSbTR - recjuJ8RaGljvo9ZZ - recl3xwMzRxkadUBM - rec0oIFJ2LAVcoLeV - rec2Mwqc5DnE715Ck - recJokmStFWW1yWsq + SpaceheatTelemetryName + https://gridworks-protocol.readthedocs.io/en/latest/telemetry-name.html spaceheat.telemetry.name.000 - 00000000 Unknown SpaceheatTelemetryName000 + 00000000 rec4S3L3NZiPihbLi 2022-11-08T00:10:06Z - Active recmvMaXSyZBYlpNZ recAUdFybCuqCJwTQ rechQD0Jf8c5xaUzc + recY6HHhAS5y7TB48 + recr1lA07ReOr9HMQ + recWpU6k2DSQfofVc + recnabpmvAZza5CWK + rec3MAw2y2MewO5VK + recAoJrWkdqNbZwLx + recm85TehRT6oXtTP + recDgwmeLksJ4L46f + distribution.tariff + distribution.tariff UpperPython - DistributionTariff + Active recrZz3gmzl97POA1 reczzIn3wGYrEKtbr + recw5evm1WetKAzZG + rechp89wabr5kkqti + rec2EA0TG0Xexi6wg + recmvMaXSyZBYlpNZ + rec1AjUKBV2cKU0zq + recUJdyAtLmKAZB4S 000 Name of distribution tariff of local network company/utility - rec1AjUKBV2cKU0zq - recmvMaXSyZBYlpNZ - distribution.tariff - distribution.tariff - recr1lA07ReOr9HMQ - recWpU6k2DSQfofVc - recnabpmvAZza5CWK - rec3MAw2y2MewO5VK + DistributionTariff distribution.tariff.000 - 00000000 Unknown DistributionTariff000 + 00000000 rec57bh9xoIxLUHjY 2022-11-08T00:07:37Z - Active rectyLwNNQRCXsJnR recmlXyeV4QRYx0Vp + recy6wm0IgQI90zHG + rec0DytUWYZc8xqSl + sh.dist.pump.feedback.model + sh.dist.pump.feedback.model UpperPython - EmitterPumpFeedbackModel + Active recrZz3gmzl97POA1 reczzIn3wGYrEKtbr - 000 - recLromkpguogn9x9 rectyLwNNQRCXsJnR - emitter.pump.feedback.model - emitter.pump.feedback.model - recy6wm0IgQI90zHG - rec0DytUWYZc8xqSl - emitter.pump.feedback.model.000 - 00000000 + recLromkpguogn9x9 + 000 + ShDistPumpFeedbackModel + sh.dist.pump.feedback.model.000 ConstantDeltaT - EmitterPumpFeedbackModel000 + ShDistPumpFeedbackModel000 + 00000000 rec5HXPeyp3jic6FV 2022-08-02T17:19:39Z - Active recOCvGJeUYjgNnhB rec7m1gszFhiCmwBB recSzV4YyUAPnTaO5 @@ -1780,64 +1942,59 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come reclMrRIA4ISmRw6t recvNW0XMWSQSZEGn recj7R1VzYtkQ3rX5 + recEpIg7AB9Qr2dpX + recGSAil9ULCQw1S1 + core.g.node.role + core.g.node.role UpperPython - CoreGNodeRole + Active true - https://gridworks.readthedocs.io/en/latest/core-g-node-role.html recDp8U1jLA9zeEx2 rec5bEVzI1k5qcXYg + reclMrRIA4ISmRw6t + recLRAc86dtBYsogW 000 CoreGNodeRole assigned by GNodeFactory - recX5VXrxWR81za5J - recCEQgAR8tPu4mgu - recLRAc86dtBYsogW - rec6qUrXNHuchMTRb - reclMrRIA4ISmRw6t - core.g.node.role - core.g.node.role - recEpIg7AB9Qr2dpX - recGSAil9ULCQw1S1 + CoreGNodeRole + https://gridworks.readthedocs.io/en/latest/core-g-node-role.html core.g.node.role.000 - 00000000 Other CoreGNodeRole000 + 00000000 rec75xMuw0SMkzjVc 2022-11-08T03:48:57Z - Active reczQc8UjfHLBjqBM + recEPPqtrPd0FeUOQ + recQJb1dVOhb9b4gc + recRU6cvY6FKUwxbv + recSWBVF41HakpB18 + recRwEFucyvVZaXY2 + recfzsWHMU0fhZE47 + market.price.unit + market.price.unit UpperPython - MarketPriceUnit + Active rechXkF4uGNAulje7 recH9GUDdSB7SiwNG recDYjXYf8RbWmUFe recd5K0XiAzHsj2Pw rec3H5b04RB2vmYrk recECSz5o4Z7NFjhG + reczQc8UjfHLBjqBM + rec3OJ7Qnn65b8uug 000 Price unit assigned to MarketMaker MarketType - rec8B7NqLQHwAZjcw - recmNuAp0alwhubds - rec3OJ7Qnn65b8uug - reczQc8UjfHLBjqBM - market.price.unit - market.price.unit - recEPPqtrPd0FeUOQ - recQJb1dVOhb9b4gc - recRU6cvY6FKUwxbv - recSWBVF41HakpB18 - recRwEFucyvVZaXY2 - recfzsWHMU0fhZE47 + MarketPriceUnit market.price.unit.000 - 00000000 USDPerMWh MarketPriceUnit000 + 00000000 rec7Ck8y72m0NytYa 2022-06-23T16:10:33Z - Active recyOP19Dh8Ldz3q1 recO4pWIknEU18DRO recUbUSUjbSTDsCnD @@ -1847,27 +2004,26 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recaStmQ39S4Zsbza rechyjciVYC2Y6FWo rec00UKpmRMOkjCGx + rec3NEaYaETLIXR9Z + local.comm.interface + local.comm.interface Upper - LocalCommInterface + Active recqhQADHovWX1hOl - 000 - Categorization of in-house comm mechanisms for SCADA + reco9UaGyf9bBkYcs recM4mFl7a9iTxdrm - recaR5EUku9iF2rKc recE24bIOzJ4vCtXl - reco9UaGyf9bBkYcs - local.comm.interface - local.comm.interface - rec3NEaYaETLIXR9Z + 000 + Categorization of in-house comm mechanisms for SCADA + LocalCommInterface local.comm.interface.000 - 00000000 Unknown LocalCommInterface000 + 00000000 rec7pzii3dy9m3jCe 2022-11-08T21:52:51Z - Active recjlLyMGMXYaff8w recEDRPnUux2WZ3vI recS2IaAF6JHWcYjI @@ -1876,124 +2032,125 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recyO1LPQqlZeZX7v recyNnqxvxbEGLzhG recWYzqc5sRK0ksAD + message.category + message.category UpperPython - MessageCategory + Active + recjlLyMGMXYaff8w + recNmqSEf7jl4AsqG 000 Categorizes how GridWorks messages are sent and decoded/encoded - recaaXWI5JSINnLOx - recaWGhVScY6KXA44 - rec9HtmIiTasYUNy0 - recV9jP0nFcRCDphV - reczs2uW5OOP1dIaw - recT6IKeUqmmI7L84 - recNmqSEf7jl4AsqG - recjlLyMGMXYaff8w - message.category - message.category + MessageCategory message.category.000 - 00000000 Unknown MessageCategory000 + 00000000 rec7qsokBmd2hN5vT 2022-08-01T12:18:20Z - Active reconXBspv9L7OQqS recQH1y9oFoMDcnsd recqZ8LSzlPWUPcKF recVVshv4AuJAbuyp + component.category + component.category UpperPython - ComponentCategory + Active true 000 Rough breakdown of devices by category - component.category - component.category + ComponentCategory component.category.000 ComponentCategory000 recA15Ak50x6bNMx1 2022-11-07T22:56:11Z - Active recfW76lkiFHpOg3N recgTxLB3WCMDRLJM recdZoU45YlNxDBUe + recV7ixIyYTmrGAbL + reclsQog4UhrdIbyr + recFv92txxktPwANR + recwO34MxjMi4xVbh + recbIZmTs1RacVBoR + recCRcF7T7qTSMD37 + reccuXB02dnW4Wl6y + recognized.currency.unit + recognized.currency.unit Upper - RecognizedCurrencyUnit + Active recDYjXYf8RbWmUFe recrZz3gmzl97POA1 reczzIn3wGYrEKtbr + recw5evm1WetKAzZG + recfDQscmquO0odpo + rechp89wabr5kkqti + rec2EA0TG0Xexi6wg + recdZoU45YlNxDBUe + recEAaklKzWgLdKio 000 Unit of currency - recVdbIqzBFT6Qpsd - rechPYPk940Fi7Uud - reck0WsxFdPOoe5ZM - recEAaklKzWgLdKio - recdZoU45YlNxDBUe - recognized.currency.unit - recognized.currency.unit - recV7ixIyYTmrGAbL - reclsQog4UhrdIbyr - recFv92txxktPwANR + RecognizedCurrencyUnit recognized.currency.unit.000 - 00000000 Unknown RecognizedCurrencyUnit000 + 00000000 recCQyaQ1Oq0MlT20 2023-01-06T03:03:24Z - Active rec4Ro9hLznPv7jIw recm2rIwNRJUR8CCY + recI9U053gkcDYRVB + rec2pvNC90x1j8fhm + algo.cert.type + algo.cert.type UpperPython - AlgoCertType + Active recUtSmERYdWUVAPm rectayh08KEGGGcZc + recm2rIwNRJUR8CCY + recdz6xbHSpZlJDxe 000 Used to distinguish ASA vs SmartSignature certificates - recdz6xbHSpZlJDxe - recvmdMYmWLhBwujD - recsHlBETSCTId6TE - recm2rIwNRJUR8CCY - algo.cert.type - algo.cert.type - recI9U053gkcDYRVB - rec2pvNC90x1j8fhm + AlgoCertType algo.cert.type.000 - 00000000 ASA AlgoCertType000 + 00000000 recEyU9EKDtM3bD18 2022-11-08T00:09:22Z - Active recPDb4imbs6ehnwD rec02K3Si20fVlsyc + recn1qW3ADtk1dB5T + recVtRiqtAcpf0fqr + recBoiuVaUD2AUett + recEmOauAesrLmBV2 + recognized.temperature.unit + recognized.temperature.unit UpperPython - RecognizedTemperatureUnit + Active recrZz3gmzl97POA1 reczzIn3wGYrEKtbr + recw5evm1WetKAzZG + recfDQscmquO0odpo + recPDb4imbs6ehnwD + rec9izwc0IQmbp6gf 000 Unit of temperature - rec9izwc0IQmbp6gf - recPDb4imbs6ehnwD - recognized.temperature.unit - recognized.temperature.unit - recn1qW3ADtk1dB5T - recVtRiqtAcpf0fqr + RecognizedTemperatureUnit recognized.temperature.unit.000 - 00000000 C RecognizedTemperatureUnit000 + 00000000 recLQWqTvGwSz2GcN 2022-06-03T18:20:52Z - Active recqfo3DV2CZigvn5 recgLuWiIpBnWvI8T recljcVVnRh9ne2dH @@ -2008,9 +2165,21 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come reclpWTi7clJae05G rec0IwWL8iQqD3anq recnC6OKNs1p2giG9 + recpHGTkKtzs36Fvw + recjCvwGoMdYArjAn + rec0mssbZhVSJPTp8 + recYch7I4D20ee78G + rec9E6HTIAJLoh9wW + recrX6PgQEW9ggu8q + recRTTglTWqlyAaQW + rec1nhmaOdYNQmXTy + recLfb3AjS6LNracR + recpWdhk8DkfrmbVD + recZJ9AJ4rOoBcDpv + spaceheat.make.model + make.model Upper - SpaceheatMakeModel - https://gridworks-protocol.readthedocs.io/en/latest/make-model.html + Pending reca2LF7P05qQmFJW recdXzxjKArjU2z9Z recmVKHF3ugtUOYrz @@ -2018,58 +2187,58 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come rec3Noy3m1X4Vdly9 recqhQADHovWX1hOl recULIwPg69M69185 - 000 - Determines Make/Model of device associated to a Spaceheat Node supervised by SCADA - recDa8t2QVwfTLzpo - recfXjHuQMUL0RQ7H - recVpliEuu2jtKKUj - rec4ZV16eScgcdZAE recqfsKuobhERLH1d - make.model - spaceheat.make.model - rec9E6HTIAJLoh9wW - recrX6PgQEW9ggu8q - recRTTglTWqlyAaQW - rec1nhmaOdYNQmXTy - recLfb3AjS6LNracR - recpWdhk8DkfrmbVD - recZJ9AJ4rOoBcDpv - spaceheat.make.model.000 - 00000000 + rec4ZV16eScgcdZAE + 001 + Determines Make/Model of device associated to a Spaceheat Node supervised by SCADA + SpaceheatMakeModel + https://gridworks-protocol.readthedocs.io/en/latest/make-model.html + spaceheat.make.model.001 UnknownMake__UnknownModel - SpaceheatMakeModel000 + SpaceheatMakeModel001 + 00000000 + + + recM2pM6KPgGbqEe2 + 2023-05-12T13:11:54Z + recL0xmZgHaR1Z5Wm + recVP2uNFpOFanI2j + recognized.irradiance.type + recognized.irradiance.type + UpperPython + Active + recL0xmZgHaR1Z5Wm + recg48Xi06BYdm33C + 000 + recognized.irradiance.type.000 + PlaneOfArray + 000 + 00000000 recPvHsXzCenxLa7v 2022-11-09T19:38:22Z - Active recrqYsXVPagMEhO3 reclgi3dCrOboE4Dn recsRZi1bpgYSIj81 + universe.type + universe.type UpperPython - UniverseType - https://gridworks.readthedocs.io/en/latest/universe.html + Active + recrqYsXVPagMEhO3 + recNZQe0b4tOcjM0W 000 Allows for multiple GridWorks, in particular for development and shared simulations - rec4dIrr33GsfXGEi - recGcb0eH9z0Np8jd - recihvUJVR6oEfEap - recfChwtbhGYGwQAx - rec7riMLKDhllLHJF - recZKMG3hALXcWQuc - recNZQe0b4tOcjM0W - recrqYsXVPagMEhO3 - universe.type - universe.type + UniverseType + https://gridworks.readthedocs.io/en/latest/universe.html universe.type.000 - 00000000 Dev UniverseType000 + 00000000 recQeMNisJZjsYXTl 2022-07-20T21:01:38Z - Active rec8yn5AqUJJxZVsa recOGGYynMVbu3Xi9 recyHL0VJtn5jmtIW @@ -2079,84 +2248,79 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recc1TC8wyNJUO4Vq recBec6UbnZzyTdpG recIHpeeM6gwIE1Ec - recsgSJKZIgLynrjL + recYtyZl3uBr6N9Ey + recXk1RFSZEvWMYii + rec3JoWyUlqUfiTLp + sh.actor.class + actor.class UpperPython - SpaceheatActorClass - https://gridworks-protocol.readthedocs.io/en/latest/actor-class.html + Active recUj3ZPKMsXanG88 recEhzcpob8H7VuEF reccsu6ZeZHKoDqDy - 001 - Determines the code running Spaceheat Nodes supervised by Spaceheat SCADA software - recyDSPjw1NYVGiOH + recaZld1o7mqNRDS9 recu25eXE4ralXooT - recg4YcVJnk1bG3PL recTsc0Fiab7VGVWX - recaZld1o7mqNRDS9 - actor.class - sh.actor.class - recYtyZl3uBr6N9Ey - recXk1RFSZEvWMYii - rec3JoWyUlqUfiTLp - sh.actor.class.001 - 00000000 + 000 + Determines the code running Spaceheat Nodes supervised by Spaceheat SCADA software + SpaceheatActorClass + https://gridworks-protocol.readthedocs.io/en/latest/actor-class.html + sh.actor.class.000 NoActor - SpaceheatActorClass001 + SpaceheatActorClass000 + 00000000 recWX07Mlzf8djb6q 2022-11-29T13:46:05Z - Active recPS1VuBOSiGbyiI recnnxKBRYfc7uy2Q rec8UlSDyBAUUZnZ8 rec2qfQHVVYwNQYRf + recuB9KYdZDBm0dal + gni.status + gni.status UpperPython - GniStatus - https://gridworks.readthedocs.io/en/latest/g-node-instance.html + Active recV0KuDFayH4qGIl + recPS1VuBOSiGbyiI + recdOkYhGUBlj7FBT 000 Enum for managing GNodeInstance lifecycle - rec3lKyK0qukOmAfT - reckI8CRWIPcmOTrC - recdOkYhGUBlj7FBT - recPS1VuBOSiGbyiI - gni.status - gni.status - recuB9KYdZDBm0dal + GniStatus + https://gridworks.readthedocs.io/en/latest/g-node-instance.html gni.status.000 - 00000000 Unknown GniStatus000 + 00000000 recX0A9nSriRUvl9n 2022-11-08T00:08:31Z - Active recuzlYpywiv3imR3 recE3kKfePg8GJvEC rec2JJLqGIPAzbj6K + recygXnG0FNBHKEpI + rec5N3oYOvCWemw2p + sh.mixing.valve.feedback.model + sh.mixing.valve.feedback.model UpperPython - MixingValveFeedbackModel + Active recrZz3gmzl97POA1 reczzIn3wGYrEKtbr + recuzlYpywiv3imR3 + recUKBtypJxJFHldg 000 Control mechanism for a mixing valve, used by Spaceheat SCADAs - recUKBtypJxJFHldg - recuzlYpywiv3imR3 - mixing.valve.feedback.model - mixing.valve.feedback.model - recygXnG0FNBHKEpI - rec5N3oYOvCWemw2p - mixing.valve.feedback.model.000 - 00000000 + ShMixingValveFeedbackModel + sh.mixing.valve.feedback.model.000 ConstantSwt - MixingValveFeedbackModel000 + ShMixingValveFeedbackModel000 + 00000000 recZB6uJDEaCzvTZX 2022-11-06T20:10:43Z - Active recyZNh6DHD8cSQJs rec0rH864GSip8TkD recue7CvgzoOvpWSK @@ -2172,32 +2336,26 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recBvWAtxnRxd7bry recBTSPLKqojr0im3 recuFrnfEo5wsUKx9 + recF8QiEbhrOARMRK + g.node.role + g.node.role UpperPython - GNodeRole - https://gridworks.readthedocs.io/en/latest/g-node-role.html + Active rec8uTC7GK5qgXzg9 + recyZNh6DHD8cSQJs + recFcFz3hJ9GJbVDh 000 Categorizes GNodes by their function within GridWorks - reczplFItDku5AaRa - recpKd5HOmAf37QY5 - rect0T4CM09fP7g2t - recxchS4k09ivH7vN - recjOCdfp4V6Ugqfs - recA0Q62wqmXkzSse - recFcFz3hJ9GJbVDh - recyZNh6DHD8cSQJs - g.node.role - g.node.role - recF8QiEbhrOARMRK + GNodeRole + https://gridworks.readthedocs.io/en/latest/g-node-role.html g.node.role.000 - 00000000 GNode GNodeRole000 + 00000000 recZmZP13YV9Rmbnw 2022-11-08T04:21:08Z - Active recLOiNkyzP8oSI06 reco5WtUl0pdbMf5Z rec0ltWNsJ1nSwP7i @@ -2206,29 +2364,27 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recHj4ppdCe6klLwJ rec3KCdGZftmsMARP receT6Fp8JXN2GXQY + recOxmICij5REVdXj + market.type.name + market.type.name UpperPython - MarketTypeName + Active recDYjXYf8RbWmUFe recH9GUDdSB7SiwNG recECSz5o4Z7NFjhG + reco5WtUl0pdbMf5Z + rectmy7sSSaRVzm4x 000 Categorizes different markets run by MarketMaker - recJX40Wt0rcWDFET - rec8YFBXCvMbO7Fnc - rectmy7sSSaRVzm4x - reco5WtUl0pdbMf5Z - market.type.name - market.type.name - recOxmICij5REVdXj + MarketTypeName market.type.name.000 - 00000000 unknown MarketTypeName000 + 00000000 recc1W1unmzowrKX9 2022-06-16T10:08:00Z - Deprecated recD09OLaDB4NHeH0 recY1j4wZLAwwD5K5 recoQaLaEtnGeQcwe @@ -2239,34 +2395,31 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recCwEZ0rWNNQogj3 recMaTvAWUEtfZ3yk reccY0eF2JadrVovu + recF5JRJR6AVkfQsK + recL9BeJniQtSOgyV + recEwx1N4X1KFrH7d + recDSzwJ1nc31pFT2 + spaceheat.unit + unit UpperPython - SpaceheatUnit + Deprecated recDEr7ob2KLqM4gU recQ1SzB1rQPnbRUR rec3Noy3m1X4Vdly9 recULIwPg69M69185 + recIg9jSoS2FGMvEJ + recfpgcDj8PWcwGZe 000 Specifies the physical unit of sensed data reported by SCADA - recLjDrJSnNnwWD54 - recWrjAGRucT1hiRq - recV83OsyQx8GqHV8 - recfpgcDj8PWcwGZe - recIg9jSoS2FGMvEJ - unit - spaceheat.unit - recF5JRJR6AVkfQsK - recL9BeJniQtSOgyV - recEwx1N4X1KFrH7d - recDSzwJ1nc31pFT2 + SpaceheatUnit spaceheat.unit.000 - 00000000 Unknown SpaceheatUnit000 + 00000000 recdH9n0oS3nRRWON 2022-11-29T13:49:28Z - Active recPNIzAaCIFw5mT8 recVBvjU9QYshrQ7c rec37H4Wr3fhZuqBA @@ -2274,101 +2427,99 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recgphsceOlnshETa recnn8MUgeat2N88w rectV4strhNnQayZ6 + recunD4ijwQh302Oo + supervisor.container.status + supervisor.container.status UpperPython - SupervisorContainerStatus + Active reczVqlxJInFWonml + recPNIzAaCIFw5mT8 + reczQlMuDvW3WO9oA 000 Manages lifecycle of the docker containers where GridWorks actors run - rec3aEohPrsl8Z6M3 - rec3tGkwCYPLdVaio - reczQlMuDvW3WO9oA - recPNIzAaCIFw5mT8 - supervisor.container.status - supervisor.container.status - recunD4ijwQh302Oo + SupervisorContainerStatus supervisor.container.status.000 - 00000000 Unknown SupervisorContainerStatus000 + 00000000 recf9ZTshqRu81HZo 2022-11-08T00:10:39Z - Active reclSgYLAFa1ll8vp recN22aM14AVV1PuR rece9uqvosClHWLDu - UpperPython - EnergySupplyType - recrZz3gmzl97POA1 - reczzIn3wGYrEKtbr - 000 - reclDWkXtj41G28wW - reclSgYLAFa1ll8vp - energy.supply.type - energy.supply.type recc5ycF0PbAAyQtA recrrGZ3RvMBzGjrP rec85nrhXQw9tRODn recaaEpN2NrRBsCmW + recIClynqMSTgczNz + recQVmUtZgyRJS0Fw + recOaBXisU25ozsU1 + energy.supply.type + energy.supply.type + UpperPython + Active + recrZz3gmzl97POA1 + reczzIn3wGYrEKtbr + recw5evm1WetKAzZG + rechp89wabr5kkqti + rec2EA0TG0Xexi6wg + reclSgYLAFa1ll8vp + reclDWkXtj41G28wW + recSXyujnroySodqB + 000 + EnergySupplyType energy.supply.type.000 - 00000000 Unknown EnergySupplyType000 - - - recfdR0NaoJuQy24A - 2023-04-09T21:06:02Z - . + 00000000 recgq98LIAwVwgALk 2022-12-02T17:35:02Z - Active recchYovfZl6dZtje recmcoCNDhq8Dknn5 recaYTfkpFUTDvJQd + atn.spaceheat.strategy.name + atn.spaceheat.strategy.name UpperPython - AtnSpaceheatStrategyName - 000 - rec6kz3pyxVALoFsu - recKJi6uA9s9Sp8XM + Active recmcoCNDhq8Dknn5 - atn.spaceheat.strategy.name - atn.spaceheat.strategy.name + 000 + AtnSpaceheatStrategyName atn.spaceheat.strategy.name.000 - 00000000 NoActor AtnSpaceheatStrategyName000 + 00000000 rechRk6DjahLATrOI 2022-08-30T18:04:21Z - Active rec46s7o3XEL0nMyc recYZ4i0CenNHSN68 rectW0RYQ9V3zy3cY recPY9T9Npi1jCIVV recEHVFmBtSGMPmxk recWvHiwQvwKVnBgW + registry.g.node.role + registry.g.node.role UpperPython - RegistryGNodeRole + Active true - 000 + recWvHiwQvwKVnBgW recr9TyWTi2Ct7iKH recmacM072NkqkOW1 - recWvHiwQvwKVnBgW - registry.g.node.role - registry.g.node.role + 000 + RegistryGNodeRole registry.g.node.role.000 - 00000000 Unknown RegistryGNodeRole000 + 00000000 reclaO4DqpDmwPOIC 2022-11-08T22:23:48Z - Active rechaotHblmyukrn1 recBbKNjWyV1mwxXD recLgRPx2UGsQFiRr @@ -2377,29 +2528,23 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recZthcBSla9DrcCf recuWBQ06IQsYr0or recbUxpxV3qnYpYEA + message.category.symbol + message.category.symbol UpperPython - MessageCategorySymbol + Active + rechaotHblmyukrn1 + rec7umpHOe1zBQgmH 000 Shorthand symbols for MessageCategory000 Enum, used in meta-data like routing keys - rec9bDgohSOum1o1F - recf2bjSGV3D1Ml5i - recISSyBDybwCsc9S - recLgjTEHK9NGb3nq - recesY3Van2qeFjV0 - recsRpVdgR7q3fCML - rec7umpHOe1zBQgmH - rechaotHblmyukrn1 - message.category.symbol - message.category.symbol + MessageCategorySymbol message.category.symbol.000 - 00000000 unknown MessageCategorySymbol000 + 00000000 recomGYBJ9ldSsiNU 2022-06-25T21:51:48Z - Active reclVQqsN9eKLnIFs recmK3fpzdj9xCe10 recYLv2x2lR5rftCy @@ -2420,133 +2565,122 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recOiGQpWfPtwhP9F recawk0tnuNgj0Vn2 recBamnEI4FxIrDzE + recMomsDfu8ViRPzW + recKf4zpfW8Q9hzkW + rechsgO8WdwiCbPKX + sh.node.role + role UpperPython - ShNodeRole - https://gridworks-protocol.readthedocs.io/en/latest/spaceheat-node-role.html + Active recUj3ZPKMsXanG88 recEhzcpob8H7VuEF reccsu6ZeZHKoDqDy + recBamnEI4FxIrDzE + receRjseORDOQyD4F 000 Categorizes SpaceheatNodes by their function within the heating system - recqMWuADrFZz8VgP - rec1OdnzZiXinfwfj - recEIu8DZMwf0J7za - receRjseORDOQyD4F - recBamnEI4FxIrDzE - role - sh.node.role - recMomsDfu8ViRPzW - recKf4zpfW8Q9hzkW - rechsgO8WdwiCbPKX + ShNodeRole + https://gridworks-protocol.readthedocs.io/en/latest/spaceheat-node-role.html sh.node.role.000 - 00000000 Unknown ShNodeRole000 + 00000000 recounhEj97w5SfDm 2022-11-08T03:47:08Z - Active recdMV7TkDw8zFcf9 recRYMQ5xAzlYZafa + recehDezdvO5nKJJQ + rec5yCVNnWVXBDdMc + recOhTtiANrJcVKgf + recREgyk5HQKEtSMJ + market.quantity.unit + market.quantity.unit UpperPython - MarketQuantityUnit + Active rechXkF4uGNAulje7 recH9GUDdSB7SiwNG recDYjXYf8RbWmUFe recECSz5o4Z7NFjhG + recdMV7TkDw8zFcf9 + rectGOQvuxBQ1f8LZ 000 Quantity unit assigned to MarketMaker MarketType - recy37qKrW01vTt7S - recGhJkY0Egp6jCRt - rectGOQvuxBQ1f8LZ - recdMV7TkDw8zFcf9 - market.quantity.unit - market.quantity.unit - recehDezdvO5nKJJQ - rec5yCVNnWVXBDdMc - recOhTtiANrJcVKgf - recREgyk5HQKEtSMJ + MarketQuantityUnit market.quantity.unit.000 - 00000000 AvgMW MarketQuantityUnit000 + 00000000 recqx4EqT3OFtnxTG 2022-08-01T19:40:48Z - Active recX4LfgcX5340LCn reccbyMtvH1trII7S recBxzAFmSdGMky9f recuDHqYzSnUGgaOA recmkdghA4yolcvkz + rec3Ip25a5UdscQKD + recVtNsE7nmGPy31j + g.node.status + g.node.status UpperPython - GNodeStatus + Active true - https://gridworks.readthedocs.io/en/latest/g-node-status.html recDp8U1jLA9zeEx2 rec8uTC7GK5qgXzg9 + recmkdghA4yolcvkz + recIyZCjcgxuH7wbv 100 Enum for managing GNode lifecycle - rec8Ahq8RdNkgPzQN - recOCu54C8gBud4Rp - recZKMmBxWot2RY5F - recTt38mXlQtJdywQ - recWkTXMymydxR5UX - recUiiAdTTH4zmBfJ - recIyZCjcgxuH7wbv - recmkdghA4yolcvkz - g.node.status - g.node.status - rec3Ip25a5UdscQKD - recVtNsE7nmGPy31j + GNodeStatus + https://gridworks.readthedocs.io/en/latest/g-node-status.html g.node.status.100 - 00000000 Unknown GNodeStatus100 + 00000000 recv25tG4mBjyVeMY 2022-08-02T20:12:55Z - Active rectpVbb3vrmCp4X9 reciyc2Iq5RQOs8kr recF26uqkY2rHT7Xp + schema.status + schema.status UpperPython - SchemaStatus + Active 000 - schema.status - schema.status + SchemaStatus schema.status.000 SchemaStatus000 recyOOpe9zHor9FIY 2022-12-02T23:45:13Z - Active recMMj6g6FxFlaABn recRHbwNE0YPqaThx recHV1XP9JK2N3mBN rechjwPVSGfZctKi2 recOgl1jT8XKEDvZw rec1dipUc4zFFowvS + recZKpSeaBMKswWfh + reccsr0glHYFUIca3 + strategy.name + strategy.name UpperPython - StrategyName + Active recV0KuDFayH4qGIl - 000 - Used to assign code to run a particular GNodeInstance - recpwlwbrp4FbfXbU - recf9z2cLhcr9up3s - recfKJvRoPrS32Ima recMMj6g6FxFlaABn - strategy.name - strategy.name - reccsr0glHYFUIca3 - strategy.name.000 - 00000000 + recfKJvRoPrS32Ima + 001 + Used to assign code to run a particular GNodeInstance + StrategyName + strategy.name.001 NoActor - StrategyName000 + StrategyName001 + 00000000 @@ -2556,18 +2690,26 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come supervisor rec2Ecw4AiDnLjr1m recoddRuayvzh5LI2 + recLd50n420SZT2Ph + rec4QRsw9pyqletk7 + recHOaQXKeRZPL0Nb recXkDh6rUnHrjUgP recknL0adnUfQpqPN rechLbeILCDyEGO1Y + recB8H3txw2ls31X2 + recsikwiyHUpGY4pw Supervisor recTX2jQM519euXg3 2022-12-23T11:35:39Z timecoordinator + recsikwiyHUpGY4pw reczKXN1K75S2z24T recVyGGSoV8hXTdEX recZM7YGf3lwhBZXp + rec3Wz3mODtKI1hno + rec4QRsw9pyqletk7 TimeCoordinator @@ -2575,6 +2717,9 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 2022-12-23T11:34:49Z marketmaker recknL0adnUfQpqPN + rec3Wz3mODtKI1hno + recB5lUNdb61JWFzw + recHOaQXKeRZPL0Nb MarketMaker @@ -2600,6 +2745,9 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 2022-12-23T11:34:49Z atomictnode recVyGGSoV8hXTdEX + recB8H3txw2ls31X2 + recB5lUNdb61JWFzw + recLd50n420SZT2Ph AtomicTNode @@ -2607,140 +2755,218 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come rec2Ecw4AiDnLjr1m 2022-12-23T12:00:21Z - recVpxgbZYRNPQBo7 recBICOfWLnejLDbV - supervisor -> gnode + recVpxgbZYRNPQBo7 supervisor gnode + supervisor -> gnode - recVyGGSoV8hXTdEX - 2022-12-23T11:59:35Z + rec3Wz3mODtKI1hno + 2023-06-22T12:16:15Z + recV7jilfpQAiKSJC recTX2jQM519euXg3 - rect67WIHRrRgUGHb - atomictnode -> timecoordinator - atomictnode + marketmaker timecoordinator + marketmaker -> timecoordinator - recXkDh6rUnHrjUgP - 2022-12-23T11:56:54Z - recBICOfWLnejLDbV - recVpxgbZYRNPQBo7 - gnode -> supervisor - gnode + rec4QRsw9pyqletk7 + 2023-06-22T19:31:09Z + recBICOfWLnejLDbV + recTX2jQM519euXg3 + supervisor + timecoordinator + supervisor -> timecoordinator + + + recB5lUNdb61JWFzw + 2023-06-22T19:19:58Z + rect67WIHRrRgUGHb + recV7jilfpQAiKSJC + atomictnode + marketmaker + atomictnode -> marketmaker + + + recB8H3txw2ls31X2 + 2023-06-22T19:12:47Z + rect67WIHRrRgUGHb + recBICOfWLnejLDbV + atomictnode + supervisor + atomictnode -> supervisor + + + recHOaQXKeRZPL0Nb + 2023-06-22T19:31:16Z + recBICOfWLnejLDbV + recV7jilfpQAiKSJC + supervisor + marketmaker + supervisor -> marketmaker + + + recLd50n420SZT2Ph + 2023-06-22T12:14:34Z + recBICOfWLnejLDbV + rect67WIHRrRgUGHb + supervisor + atomictnode + supervisor -> atomictnode + + + recVyGGSoV8hXTdEX + 2022-12-23T11:59:35Z + rect67WIHRrRgUGHb + recTX2jQM519euXg3 + atomictnode + timecoordinator + atomictnode -> timecoordinator + + + recXkDh6rUnHrjUgP + 2022-12-23T11:56:54Z + recVpxgbZYRNPQBo7 + recBICOfWLnejLDbV + gnode supervisor + gnode -> supervisor recZM7YGf3lwhBZXp 2022-12-23T12:00:35Z - recTX2jQM519euXg3 recYJDvKOf8sVkLY9 - world -> timecoordinator + recTX2jQM519euXg3 world timecoordinator + world -> timecoordinator rechLbeILCDyEGO1Y 2022-12-23T12:00:46Z - recBICOfWLnejLDbV recYJDvKOf8sVkLY9 - world -> supervisor + recBICOfWLnejLDbV world supervisor + world -> supervisor recknL0adnUfQpqPN 2022-12-23T12:00:06Z - recBICOfWLnejLDbV recV7jilfpQAiKSJC - marketmaker -> supervisor + recBICOfWLnejLDbV marketmaker supervisor + marketmaker -> supervisor recoddRuayvzh5LI2 2022-12-23T12:02:12Z - recYJDvKOf8sVkLY9 recBICOfWLnejLDbV - supervisor -> world + recYJDvKOf8sVkLY9 supervisor world + supervisor -> world + + + recsikwiyHUpGY4pw + 2023-06-22T19:29:13Z + recTX2jQM519euXg3 + recBICOfWLnejLDbV + timecoordinator + supervisor + timecoordinator -> supervisor reczKXN1K75S2z24T 2022-12-23T11:56:54Z - recTX2jQM519euXg3 recVpxgbZYRNPQBo7 - gnode -> timecoordinator + recTX2jQM519euXg3 gnode timecoordinator + gnode -> timecoordinator rec00UKpmRMOkjCGx 2022-06-23T17:58:41Z + Analog_4_20_mA + rec7Ck8y72m0NytYa 653c73b8 7 000 - Analog_4_20_mA - rec7Ck8y72m0NytYa local.comm.interface.000__Analog_4_20_mA rec02K3Si20fVlsyc 2022-11-08T00:13:11Z + F + recEyU9EKDtM3bD18 6f16ee63 Fahrenheit 1 - F - recEyU9EKDtM3bD18 recognized.temperature.unit.000__F rec0IwWL8iQqD3anq 2023-02-09T14:47:37Z + GridWorks__SimTSnap1 + recLQWqTvGwSz2GcN 3042c432 Simulated SCADA Box 10 000 - GridWorks__SimTSnap1 - recLQWqTvGwSz2GcN - spaceheat.make.model.000__GridWorks__SimTSnap1 + spaceheat.make.model.001__GridWorks__SimTSnap1 rec0ltWNsJ1nSwP7i 2022-11-08T04:21:41Z + rt60gate5 + recZmZP13YV9Rmbnw b36cbfb4 Real-time energy, 60 minute MarketSlots, gate closing 5 minutes prior to start 2 - rt60gate5 - recZmZP13YV9Rmbnw market.type.name.000__rt60gate5 + + rec0mssbZhVSJPTp8 + 2023-09-22T12:52:43Z + spaceheat.make.model.001__Amphenol__NTC_10K_Thermistor_MA100GG103BN + recLQWqTvGwSz2GcN + Amphenol__NTC_10K_Thermistor_MA100GG103BN + 15 + A small gauge, low-cost, rapid response NTC 10K Thermistor designed for medical applications. + https://drive.google.com/drive/u/0/folders/11HW4ov66UvxKAwqApW6IrtoXatZBLQkd + 001 + 46f21cd5 + rec0rH864GSip8TkD 2022-11-06T20:13:05Z + TerminalAsset + recZB6uJDEaCzvTZX bdeaa0b1 An avatar for a real-word Transactive Device 1 000 - TerminalAsset - recZB6uJDEaCzvTZX https://gridworks.readthedocs.io/en/latest/transactive-device.html g.node.role.000__TerminalAsset rec1dipUc4zFFowvS 2022-12-03T21:30:51Z + WorldA + recyOOpe9zHor9FIY 642c83d3 - Basic GridWorks world strategy + Authority on GNodeInstances, and their private keys. Maintains a FastAPI used + for relational information about backoffice information held locally + and/or in the GNodeRegistry/GNodeFactory. + [More Info](https://gridworks.readthedocs.io/en/latest/world-role.html) 1 000 - WorldA - recyOOpe9zHor9FIY - strategy.name.000__WorldA + strategy.name.001__WorldA rec1u3bNUp0jNp9sm @@ -2750,104 +2976,105 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come rec2JJLqGIPAzbj6K 2022-11-08T00:15:49Z + NaiveVariableSwt + recX0A9nSriRUvl9n 0397c1df Variable Source Water Temp, naive assumptions about distribution system capabilities 1 - NaiveVariableSwt - recX0A9nSriRUvl9n - mixing.valve.feedback.model.000__NaiveVariableSwt + sh.mixing.valve.feedback.model.000__NaiveVariableSwt rec2jUtFQpNHrTK7d 2022-06-03T22:00:34Z - f652d87f HeatedSpace + f652d87f __HeatedSpace rec2qfQHVVYwNQYRf 2022-11-29T13:51:24Z + Active + recWX07Mlzf8djb6q 69241259 Active in its GridWorks world. If the GNodeInstance has an actor, that actor is communicating 2 0 - Active - recWX07Mlzf8djb6q gni.status.000__Active rec37H4Wr3fhZuqBA 2022-11-29T13:50:11Z + Launching + recdH9n0oS3nRRWON 17c5cc54 World has launched the container 2 0 - Launching - recdH9n0oS3nRRWON supervisor.container.status.000__Launching rec3CAP2O1QnDmoZO 2022-06-14T10:26:53Z + BoostElement + recomGYBJ9ldSsiNU 99c5f326 Resistive element used for providing heat to a thermal store. 5 000 - BoostElement - recomGYBJ9ldSsiNU sh.node.role.000__BoostElement rec3HXGuVG1ysS4cB 2022-11-06T20:13:12Z + Supervisor + recZB6uJDEaCzvTZX 88112a93 Responsible for GNode actors running in a container 9 000 - Supervisor - recZB6uJDEaCzvTZX + https://gridworks.readthedocs.io/en/latest/supervisor.html g.node.role.000__Supervisor rec3KCdGZftmsMARP 2022-11-08T04:21:59Z + rt30gate5 + recZmZP13YV9Rmbnw e997ccfb Real-time energy, 30 minute MarketSlots, gate closing 5 minutes prior to start 7 - rt30gate5 - recZmZP13YV9Rmbnw market.type.name.000__rt30gate5 rec46s7o3XEL0nMyc 2022-08-30T18:04:59Z + GNodeFactory + rechRk6DjahLATrOI 79503448 1 000 - GNodeFactory - rechRk6DjahLATrOI registry.g.node.role.000__GNodeFactory rec4Ro9hLznPv7jIw 2023-01-06T03:03:47Z + SmartSig + recCQyaQ1Oq0MlT20 086b5165 Certificate based on Algorand Smart Signature 1 000 - SmartSig - recCQyaQ1Oq0MlT20 algo.cert.type.000__SmartSig rec4UxxZLx0pcrNYV 2022-06-21T16:13:33Z + PowerW + rec2HyLffy6QK9QId af39eec9 Power in Watts 1 000 - PowerW - rec2HyLffy6QK9QId spaceheat.telemetry.name.000__PowerW @@ -2858,28 +3085,28 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come rec7DAQOMxfbTg2ar 2022-06-03T22:00:41Z - 6eb05344 Outdoors + 6eb05344 __Outdoors rec7m1gszFhiCmwBB 2022-08-02T17:20:16Z + ConductorTopologyNode + rec5HXPeyp3jic6FV 4502e355 5 1 - ConductorTopologyNode - rec5HXPeyp3jic6FV core.g.node.role.000__ConductorTopologyNode rec7ncccsiImnbc78 2022-11-08T04:21:44Z + rt60gate30 + recZmZP13YV9Rmbnw 5f335bdb Real-time energy, 60 minute MarketSlots, gate closing 30 minutes prior to start 4 - rt60gate30 - recZmZP13YV9Rmbnw market.type.name.000__rt60gate30 @@ -2891,225 +3118,234 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come rec8UlSDyBAUUZnZ8 2022-11-29T13:46:40Z + Pending + recWX07Mlzf8djb6q 7890ab0a Has been created by the World, but has not yet finished provisioning 1 0 - Pending - recWX07Mlzf8djb6q gni.status.000__Pending rec8yn5AqUJJxZVsa 2022-07-20T21:02:36Z + Atn + recQeMNisJZjsYXTl b103058f A SpaceheatNode representing the AtomicTNode. Note that the code running the AtomicTNode is not local within the SCADA code, except for a stub used for testing purposes. 5 000 - Atn - recQeMNisJZjsYXTl https://gridworks.readthedocs.io/en/latest/atomic-t-node.html - sh.actor.class.001__Atn + sh.actor.class.000__Atn rec90WWRRGoXVDSFG 2022-06-03T22:00:30Z - eb1eb8b3 ElectricHeater + eb1eb8b3 __ElectricHeater rec9HQGNlXpTRVF1D 2022-06-14T10:30:01Z + PipeFlowMeter + recomGYBJ9ldSsiNU ece3b600 A meter that measures flow of liquid through a pipe, in units of VOLUME/TIME 12 000 - PipeFlowMeter - recomGYBJ9ldSsiNU sh.node.role.000__PipeFlowMeter rec9n5zRdlLVYTfp1 2022-06-03T18:27:44Z + GridWorks__WaterTempHighPrecision + recLQWqTvGwSz2GcN f8b497e8 Simulated temp sensor 5 000 - GridWorks__WaterTempHighPrecision - recLQWqTvGwSz2GcN - spaceheat.make.model.000__GridWorks__WaterTempHighPrecision + spaceheat.make.model.001__GridWorks__WaterTempHighPrecision rec9xQpKaAPQNQavK 2022-07-20T17:31:27Z - a8d9a70d - Magnelab 50A current transformer - 14 - 001 Magnelab__SCT-0300-050 recLQWqTvGwSz2GcN - spaceheat.make.model.000__Magnelab__SCT-0300-050 + a8d9a70d + Magnelab 50A current transformer + 18 + 002 + spaceheat.make.model.001__Magnelab__SCT-0300-050 recAUdFybCuqCJwTQ 2022-11-08T00:17:04Z + VersantA1StorageHeatTariff + rec4S3L3NZiPihbLi 2127aba6 + Versant is a utility serving customers in Maine, and in particular serves much of the area behind the Keene Rd Constraint in the [GridWorks Millinocket Demo](https://gridworks.readthedocs.io/en/latest/millinocket-demo.html#background). Alternately known as the 'Home Eco Rate With Bonus Meter, Time-of-Use.' Look for rate A1 in Versant +[rate schedules](https://www.versantpower.com/residential/rates/rates-schedules/); +details are also available [here](https://drive.google.com/drive/u/0/folders/1mhIeNj2JWVyIJrQnSHmBDOkBpNnRRVKB). + +More: +Service under this rate will be available to residential customers with thermal energy storage devices, electric battery storage devices, and/or vehicle chargers who agree to install a second metered point of delivery. The customer will be subject to inspections to ensure that the thermal storage device, electric battery storage device, and electric vehicle charger(s) are sized appropriately for residential use. If the thermal storage device, electric battery storage device, and electric vehicle charger(s) do not pass Company inspection, then the service will be denied. Service will be single-phase, alternating current, 60 hertz, at one standard secondary distribution voltage. Customers taking service under this rate schedule are responsible for paying both Distribution Service and Stranded Cost. + +See attached csv for instantiation of this rate as an 8760. 1 - VersantStorageHeatTariff - rec4S3L3NZiPihbLi - distribution.tariff.000__VersantStorageHeatTariff + https://github.com/thegridelectric/gridworks-ps/blob/dev/input_data/electricity_prices/isone/distp__w.isone.stetson__2022__gw.me.versant.a1.res.ets.csv + distribution.tariff.000__VersantA1StorageHeatTariff recAu5abxRBSG7Csu 2022-05-11T18:31:54Z + WaterTempFTimes1000 + rec2HyLffy6QK9QId 793505aa Water temperature, in Degrees F multiplied by 1000. So 142100 means 142.1 deg F 4 000 - WaterTempFTimes1000 - rec2HyLffy6QK9QId spaceheat.telemetry.name.000__WaterTempFTimes1000 recBTSPLKqojr0im3 2022-12-31T22:46:22Z + AggregatedTNode + recZB6uJDEaCzvTZX db57d184 An aggregation of AtomicTNodes 13 000 - AggregatedTNode - recZB6uJDEaCzvTZX g.node.role.000__AggregatedTNode recBUljA6RHgKD5H9 2022-06-03T22:00:44Z - f6a567c9 PowerMeter + f6a567c9 __PowerMeter recBamnEI4FxIrDzE 2023-03-06T14:20:29Z + Unknown + recomGYBJ9ldSsiNU 00000000 - recomGYBJ9ldSsiNU Unknown Role 0 + recomGYBJ9ldSsiNU 000 - Unknown - recomGYBJ9ldSsiNU sh.node.role.000__Unknown recBbKNjWyV1mwxXD 2022-11-08T22:27:18Z + rj + reclaO4DqpDmwPOIC 7e4957a3 Serialized Json message sent on the world rabbit broker from one GNode actor to another 1 000 - rj - reclaO4DqpDmwPOIC message.category.symbol.000__rj recBec6UbnZzyTdpG 2022-07-20T21:04:09Z + MultipurposeSensor + recQeMNisJZjsYXTl 7c483ad0 A sensor that either reads multiple kinds of readings from the same sensing device (for example reads current and voltage), reads multiple different objects (temperature from two different thermisters) or both. 7 000 - MultipurposeSensor - recQeMNisJZjsYXTl https://gridworks-protocol.readthedocs.io/en/latest/multipurpose-sensor.html - sh.actor.class.001__MultipurposeSensor + sh.actor.class.000__MultipurposeSensor recBotb5JTDTQSfLs 2022-06-20T11:27:40Z + Scada 6d37aa41 0 - Scada __Scada recBsLU3Sz3l2g9UF 2022-06-03T22:00:05Z - cfab7629 AtomicTNode + cfab7629 __AtomicTNode recBvWAtxnRxd7bry 2022-11-08T15:43:36Z + Scada + recZB6uJDEaCzvTZX 674ad859 GNode associated to the device and code that directly monitors and actuates a Transactive Device 10 000 - Scada - recZB6uJDEaCzvTZX g.node.role.000__Scada recBxzAFmSdGMky9f 2022-08-02T13:49:42Z + PermanentlyDeactivated + recqx4EqT3OFtnxTG 839b38db The GNode can no longer be used, now or in the future. 3 100 - PermanentlyDeactivated - recqx4EqT3OFtnxTG g.node.status.100__PermanentlyDeactivated recCwEZ0rWNNQogj3 2022-07-12T18:08:06Z + WattHours + recc1W1unmzowrKX9 d66f1622 6 000 - WattHours - recc1W1unmzowrKX9 spaceheat.unit.000__WattHours recD09OLaDB4NHeH0 2022-06-16T10:08:41Z + Celcius + recc1W1unmzowrKX9 ec14bd47 3 000 - Celcius - recc1W1unmzowrKX9 spaceheat.unit.000__Celcius recD9SeBr2hL70oTB 2022-06-14T10:27:03Z + PowerMeter + recomGYBJ9ldSsiNU 9ac68b6e A SpaceheatNode representing the power meter that is used to settle financial transactions with the TerminalAsset. That is, this is the power meter whose accuracy is certified in the creation of the TerminalAsset GNode via creation of the TaDeed. 4 000 - PowerMeter - recomGYBJ9ldSsiNU https://gridworks.readthedocs.io/en/latest/terminal-asset.html sh.node.role.000__PowerMeter recDOV8tGrCBYIi9Z 2022-06-21T02:15:31Z + HomeAlone 32d3d19f 1 - HomeAlone __HomeAlone recDdWr2o8kupiLgA 2022-11-08T22:27:20Z + s + reclaO4DqpDmwPOIC eb802736 GwSerial protocol message sent on the world rabbit broker 3 000 - s - reclaO4DqpDmwPOIC message.category.symbol.000__s @@ -3120,83 +3356,83 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recDxlFepZ1Ta6TjM 2022-11-06T20:13:09Z + ConductorTopologyNode + recZB6uJDEaCzvTZX 234cfaa2 An avatar for a real-world electric grid node - e.g. a substation or transformer 5 000 - ConductorTopologyNode - recZB6uJDEaCzvTZX g.node.role.000__ConductorTopologyNode recE3kKfePg8GJvEC 2022-11-08T00:15:46Z + CautiousVariableSwt + recX0A9nSriRUvl9n 6a668ab8 Variable Source Water Temp, conservative assumptions about distribution system capabilities 2 - CautiousVariableSwt - recX0A9nSriRUvl9n - mixing.valve.feedback.model.000__CautiousVariableSwt + sh.mixing.valve.feedback.model.000__CautiousVariableSwt recEDRPnUux2WZ3vI 2022-11-08T21:53:24Z + RabbitJsonDirect + rec7pzii3dy9m3jCe 9057ab24 Serialized Json message sent on the world rabbit broker from one GNode actor to another 1 000 - RabbitJsonDirect - rec7pzii3dy9m3jCe message.category.000__RabbitJsonDirect recEHVFmBtSGMPmxk 2022-08-30T18:05:25Z + WorldInstanceRegistry + rechRk6DjahLATrOI baa537f6 3 000 - WorldInstanceRegistry - rechRk6DjahLATrOI registry.g.node.role.000__WorldInstanceRegistry recEpQyhK6EjK50v3 2022-08-02T17:20:25Z + AtomicTNode + rec5HXPeyp3jic6FV d9823442 2 0 - AtomicTNode - rec5HXPeyp3jic6FV core.g.node.role.000__AtomicTNode recF26uqkY2rHT7Xp 2022-08-02T20:13:22Z - eec5f61c - The Schema is no longer in use Deprecated recv25tG4mBjyVeMY + eec5f61c + The Schema is no longer in use schema.status.000__Deprecated recFoYhRoxxQ5pAPB 2022-06-21T16:09:11Z + GallonsTimes100 + rec2HyLffy6QK9QId 329a68c0 Gallons multipled by 100 7 000 - GallonsTimes100 - rec2HyLffy6QK9QId spaceheat.telemetry.name.000__GallonsTimes100 recG3HM3txYdopTc6 2022-06-22T22:01:29Z + AmpsRms + recc1W1unmzowrKX9 a969ac7c 7 000 - AmpsRms - recc1W1unmzowrKX9 spaceheat.unit.000__AmpsRms @@ -3207,16 +3443,16 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recGGHw0aiNtDGYMK 2022-06-20T11:27:08Z + BooleanActuator fddd0064 2 - BooleanActuator __BooleanActuator recGLghuUh9gPboZY 2022-06-11T13:09:24Z - 64044e41 BaseboardRadiator + 64044e41 __BaseboardRadiator @@ -3227,89 +3463,89 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recHV1XP9JK2N3mBN 2022-12-02T23:47:02Z + AtnHeatPumpWithBoostStore + recyOOpe9zHor9FIY f5961401 - GridWorks strategy for an AtomicTNode representing a type of heat pump storage heating system + AtomicTNode for a heat pump thermal storage heating system with a boost element and a thermal \n heated by the boost element. [More on AtomicTNodes](https://gridworks.readthedocs.io/en/latest/atomic-t-node.html) 2 000 - AtnHeatPumpWithBoostStore - recyOOpe9zHor9FIY - strategy.name.000__AtnHeatPumpWithBoostStore + strategy.name.001__AtnHeatPumpWithBoostStore recHa5PoDhycQozqP 2022-06-14T10:26:55Z + HeatedSpace + recomGYBJ9ldSsiNU 65725f44 A Heated Space. 13 000 - HeatedSpace - recomGYBJ9ldSsiNU sh.node.role.000__HeatedSpace recHj4ppdCe6klLwJ 2022-11-08T04:21:45Z + rt15gate5 + recZmZP13YV9Rmbnw 01a84101 Real-time energy, 15 minute MarketSlots, gate closing 5 minutes prior to start 5 - rt15gate5 - recZmZP13YV9Rmbnw market.type.name.000__rt15gate5 recHqypHWJo3QHaJm 2022-06-21T16:31:02Z + Gpm + recc1W1unmzowrKX9 b4580361 5 000 - Gpm - recc1W1unmzowrKX9 spaceheat.unit.000__Gpm recIHpeeM6gwIE1Ec 2022-07-20T21:04:23Z + Thermostat + recQeMNisJZjsYXTl 4a9c1785 A SpaceheatNode representing a thermostat. 8 000 - Thermostat - recQeMNisJZjsYXTl - sh.actor.class.001__Thermostat + sh.actor.class.000__Thermostat recIT8TBlmotrGEdj 2022-11-08T21:53:26Z + RabbitGwSerial + rec7pzii3dy9m3jCe 9d70744e GwSerial protocol message sent on the world rabbit broker 3 000 - RabbitGwSerial - rec7pzii3dy9m3jCe message.category.000__RabbitGwSerial recIg9jSoS2FGMvEJ 2022-11-06T17:21:49Z + Unknown + recc1W1unmzowrKX9 00000000 - recc1W1unmzowrKX9 0 + recc1W1unmzowrKX9 000 - Unknown - recc1W1unmzowrKX9 spaceheat.unit.000__Unknown recJgbyK2OW0Mmspx 2022-07-20T17:31:29Z + OpenEnergy__EmonPi + recLQWqTvGwSz2GcN c75d269f Open Energy's open source multipurpose sensing device (including internal power meter) 9 000 - OpenEnergy__EmonPi - recLQWqTvGwSz2GcN https://docs.openenergymonitor.org/emonpi/technical.html - spaceheat.make.model.000__OpenEnergy__EmonPi + spaceheat.make.model.001__OpenEnergy__EmonPi recJgt6lpr2Y4SOSw @@ -3319,106 +3555,119 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recK6xt05hjixHV0W 2022-11-06T20:13:08Z + AtomicTNode + recZB6uJDEaCzvTZX 8021dcad Transacts in markets on behalf of, and controlling the power use of, a TerminalAsset 2 000 - AtomicTNode - recZB6uJDEaCzvTZX + https://gridworks.readthedocs.io/en/latest/atomic-t-node.html g.node.role.000__AtomicTNode recKOYKvUY1kPI2EC 2022-06-14T10:27:06Z + Scada + recomGYBJ9ldSsiNU d0afb424 Primary SCADA 1 000 - Scada - recomGYBJ9ldSsiNU sh.node.role.000__Scada recKU7bGZnIOJVL1Z 2022-06-14T10:26:57Z + HydronicPipe + recomGYBJ9ldSsiNU fe3cbdd5 A pipe carrying techinical water or other fluid (e.g. glycol) in a heating system. 14 000 - HydronicPipe - recomGYBJ9ldSsiNU sh.node.role.000__HydronicPipe recKvhVnUDsdpOydG 2022-06-14T10:32:14Z + PipeTempSensor + recomGYBJ9ldSsiNU c480f612 A temperature sensor used for measuring the temperature of a tank. Typically curved metal thermistor with thermal grease for good contact. 9 000 - PipeTempSensor - recomGYBJ9ldSsiNU sh.node.role.000__PipeTempSensor + + recL0xmZgHaR1Z5Wm + 2023-05-12T13:28:36Z + PlaneOfArray + recM2pM6KPgGbqEe2 + 00000000 + The sum of the direct normal (DNI) and diffuse (DHI) irradiance components incident on a surface with a given tilt and angle of incidence (AOI) + 0 + recM2pM6KPgGbqEe2 + 111 + recognized.irradiance.type.000__PlaneOfArray + recLFu70SV2EdhpM6 2022-06-20T11:27:11Z + PowerMeter 2ea112b9 3 - PowerMeter __PowerMeter recLOiNkyzP8oSI06 2022-11-08T04:21:24Z + rt5gate5 + recZmZP13YV9Rmbnw d20b81e4 Real-time energy, 5 minute MarketSlots, gate closing 5 minutes prior to start 1 - rt5gate5 - recZmZP13YV9Rmbnw market.type.name.000__rt5gate5 recLVFwHNrVH3Qrt4 2023-01-06T03:03:43Z + ASA 00000000 An Algorand Standard Asset with unit-name TADEED and quantity 1 0 000 - ASA __ASA recLgRPx2UGsQFiRr 2022-11-08T22:27:19Z + rjb + reclaO4DqpDmwPOIC 68bb105c Serailized Json message broadcast on the world rabbit broker by a GNode actor 2 000 - rjb - reclaO4DqpDmwPOIC message.category.symbol.000__rjb recMMj6g6FxFlaABn 2022-12-02T23:46:48Z + NoActor + recyOOpe9zHor9FIY 00000000 - recyOOpe9zHor9FIY Assigned to GNodes that do not have actors 0 + recyOOpe9zHor9FIY 000 - NoActor - recyOOpe9zHor9FIY - strategy.name.000__NoActor + strategy.name.001__NoActor recMaTvAWUEtfZ3yk 2022-07-12T18:08:51Z + VoltsRms + recc1W1unmzowrKX9 e5d7555c 8 000 - VoltsRms - recc1W1unmzowrKX9 spaceheat.unit.000__VoltsRms @@ -3429,32 +3678,32 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recN22aM14AVV1PuR 2022-11-08T00:11:18Z - cb18f937 - 1 StandardOffer recf9ZTshqRu81HZo + cb18f937 + 1 energy.supply.type.000__StandardOffer recNCSlxyWPHkPwtx 2022-06-14T10:27:10Z + BaseboardRadiator + recomGYBJ9ldSsiNU 05fdd645 A baseboard radiator - one kind of emitter in a hydronic heating system. 15 000 - BaseboardRadiator - recomGYBJ9ldSsiNU sh.node.role.000__BaseboardRadiator recNSUqY6jN9iBJXq 2022-11-29T13:50:14Z + Provisioning + recdH9n0oS3nRRWON ec342324 Container has started, but is going through its provisioning process 3 0 - Provisioning - recdH9n0oS3nRRWON supervisor.container.status.000__Provisioning @@ -3465,158 +3714,160 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recO4pWIknEU18DRO 2022-06-23T16:13:51Z + RS232 + rec7Ck8y72m0NytYa 0843a726 8 000 - RS232 - rec7Ck8y72m0NytYa local.comm.interface.000__RS232 recOAkkrDxlp0hZYR 2022-05-11T18:31:54Z + GpmTimes100 + rec2HyLffy6QK9QId d70cce28 Gallons Per Minute multiplied by 100. So 433 means 4.33 gallons per minute. 5 000 - GpmTimes100 - rec2HyLffy6QK9QId spaceheat.telemetry.name.000__GpmTimes100 recOCvGJeUYjgNnhB 2022-08-02T17:20:11Z + TerminalAsset + rec5HXPeyp3jic6FV 0f8872f7 1 0 - TerminalAsset - rec5HXPeyp3jic6FV core.g.node.role.000__TerminalAsset recOEbA071k9xzfv3 2022-06-03T22:01:10Z - e7a8d05a PrimaryScada + e7a8d05a __PrimaryScada recOGGYynMVbu3Xi9 2022-07-20T21:02:15Z + BooleanActuator + recQeMNisJZjsYXTl fddd0064 A SpaceheatNode representing a generic boolean actuator capable of turning on (closing a circuit) or turning off (opening a circuit). 3 000 - BooleanActuator - recQeMNisJZjsYXTl - sh.actor.class.001__BooleanActuator + sh.actor.class.000__BooleanActuator recOVz3BfaUEoVjbv 2022-07-20T18:46:55Z + MilliWattHours + rec2HyLffy6QK9QId e0bb014b Energy in MilliWattHours. 10 001 - MilliWattHours - rec2HyLffy6QK9QId spaceheat.telemetry.name.000__MilliWattHours recOgl1jT8XKEDvZw 2022-12-02T23:49:28Z + MarketMakerA + recyOOpe9zHor9FIY 5e18a52e - Simple GridWorks MarketMaker strategy, in [gridworks-marketmaker repo](https://github.com/thegridelectric/gridworks-marketmaker) + Runs a two-sided market associated to its GNode as part of the copper + GNode sub-tree. + [More on MarketMakers](https://gridworks.readthedocs.io/en/latest/market-maker.html) 4 000 - MarketMakerA - recyOOpe9zHor9FIY - strategy.name.000__MarketMakerA + strategy.name.001__MarketMakerA recOiGQpWfPtwhP9F 2022-06-25T17:15:45Z + RadiatorFan + recomGYBJ9ldSsiNU 6896109b A fan that can amplify the power out of a radiator. 16 000 - RadiatorFan - recomGYBJ9ldSsiNU sh.node.role.000__RadiatorFan recPDb4imbs6ehnwD 2022-11-08T00:13:25Z + C + recEyU9EKDtM3bD18 00000000 - recEyU9EKDtM3bD18 Celcius 0 - C - recEyU9EKDtM3bD18 + recEyU9EKDtM3bD18 recognized.temperature.unit.000__C recPNIzAaCIFw5mT8 2022-11-29T13:50:00Z + Unknown + recdH9n0oS3nRRWON 00000000 - recdH9n0oS3nRRWON Default value 0 + recdH9n0oS3nRRWON 0 - Unknown - recdH9n0oS3nRRWON supervisor.container.status.000__Unknown recPOwKTDIww8SLUy 2022-05-11T18:31:54Z + WaterTempCTimes1000 + rec2HyLffy6QK9QId c89d0ba1 Water temperature, in Degrees Celcius multiplied by 1000. So 43200 means 43.2 deg C 3 000 - WaterTempCTimes1000 - rec2HyLffy6QK9QId spaceheat.telemetry.name.000__WaterTempCTimes1000 recPS1VuBOSiGbyiI 2022-11-29T13:46:29Z + Unknown + recWX07Mlzf8djb6q 00000000 - recWX07Mlzf8djb6q Default Value 0 + recWX07Mlzf8djb6q 0 - Unknown - recWX07Mlzf8djb6q gni.status.000__Unknown recPV5eCtZVeT7zmX 2022-07-20T18:47:00Z + FrequencyMicroHz + rec2HyLffy6QK9QId 337b8659 Frequency in MicroHz 11 001 - FrequencyMicroHz - rec2HyLffy6QK9QId spaceheat.telemetry.name.000__FrequencyMicroHz recPY9T9Npi1jCIVV 2022-08-30T18:05:22Z + World + rechRk6DjahLATrOI 06469a3c 4 000 - World - rechRk6DjahLATrOI registry.g.node.role.000__World recQH1y9oFoMDcnsd 2022-08-01T12:19:41Z - f8cf443b Generator rec7qsokBmd2hN5vT + f8cf443b component.category.000__Generator @@ -3627,108 +3878,110 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recREfopISHOktVI2 2022-06-20T11:27:04Z + Atn b103058f 4 - Atn __Atn + itrrXEIStZn65gqTP/recREfopISHOktVI2 recRHbwNE0YPqaThx 2022-12-02T23:46:57Z + SupervisorA + recyOOpe9zHor9FIY 4bb2cf7e - Supervisor A Strategy, in [gridworks-atn package](https://pypi.org/project/gridworks-atn/) + A simple supervisor that monitors its supervised AtomicTNode GNode strategies + via a heartbeat health check. + [More Info](https://gridworks.readthedocs.io/en/latest/supervisor.html) 1 000 - SupervisorA - recyOOpe9zHor9FIY - strategy.name.000__SupervisorA + strategy.name.001__SupervisorA recRYMQ5xAzlYZafa 2022-11-08T03:47:41Z - c272f3b3 - 1 AvgkW recounhEj97w5SfDm + c272f3b3 + 1 market.quantity.unit.000__AvgkW - itrXUA84T0mWm2ABX/recRYMQ5xAzlYZafa recRhxuG4B3RCPPqB 2022-06-23T18:00:39Z - spaceheat.make.model.000__Gridworks__SimPm1 Gridworks__SimPm1 recLQWqTvGwSz2GcN 076da322 Simulated power meter 6 000 + spaceheat.make.model.001__Gridworks__SimPm1 recS2IaAF6JHWcYjI 2022-11-08T21:53:25Z - message.category.000__RabbitJsonBroadcast RabbitJsonBroadcast rec7pzii3dy9m3jCe 7813eb50 Serailized Json message broadcast on the world rabbit broker by a GNode actor 2 000 + message.category.000__RabbitJsonBroadcast recSO1tOVjY3EhnSS 2023-02-19T19:57:07Z - spaceheat.telemetry.name.000__AirTempFTimes1000 AirTempFTimes1000 rec2HyLffy6QK9QId 4c3f8c78 Air temperature, in Degrees F multiplied by 1000. 13 002 + spaceheat.telemetry.name.000__AirTempFTimes1000 recSnVcPTdO1wigJU 2022-07-20T17:31:24Z - spaceheat.make.model.000__YHDC__SCT013-100 YHDC__SCT013-100 recLQWqTvGwSz2GcN 08da3f7d YHDC current transformer - 15 - 001 + 16 + 002 https://en.yhdc.com/product/SCT013-401.html + spaceheat.make.model.001__YHDC__SCT013-100 recSzV4YyUAPnTaO5 2022-08-02T17:20:18Z - core.g.node.role.000__InterconnectionComponent InterconnectionComponent rec5HXPeyp3jic6FV d67e564e 6 1 + core.g.node.role.000__InterconnectionComponent recT4WgGgNHq8EM8c 2022-06-06T18:00:38Z - spaceheat.telemetry.name.000__RelayState RelayState rec2HyLffy6QK9QId 5a71d4b3 - State of a Relay. 0 means open, 1 means closed + State of a Boolean Actuator (relay or otherwise). 0 means open (no current can flow), 1 means closed (no current can flow) 2 000 + spaceheat.telemetry.name.000__RelayState recTkPuXChChEmYZD 2022-07-20T18:46:45Z - spaceheat.telemetry.name.000__VoltageRmsMilliVolts VoltageRmsMilliVolts rec2HyLffy6QK9QId bb6fdd59 Voltage in Root Mean Square MilliVolts 9 001 + spaceheat.telemetry.name.000__VoltageRmsMilliVolts recTlCdO0J9hFlAfv @@ -3738,137 +3991,160 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recTyArL6Li3xWPx4 2022-11-06T20:18:32Z - g.node.role.000__World World recZB6uJDEaCzvTZX 3901c7d2 Adminstrative GNode responsible for managing and authorizing instances 7 000 + https://gridworks.readthedocs.io/en/latest/world-role.html + g.node.role.000__World recUbUSUjbSTDsCnD 2022-06-23T16:27:31Z - local.comm.interface.000__I2C I2C rec7Ck8y72m0NytYa 9ec8bc49 1 000 + local.comm.interface.000__I2C recUtA3HI1KJ6BADP 2022-11-06T20:14:10Z - g.node.role.000__PriceService PriceService recZB6uJDEaCzvTZX 2161739f Provides price forecasts for markets run by MarketMakers 11 000 + g.node.role.000__PriceService recVBo0pAOd0H7NK7 2023-01-30T20:55:06Z - __MultipurposeSensor MultipurposeSensor 7c483ad0 7 + __MultipurposeSensor recVBvjU9QYshrQ7c 2022-11-29T13:50:03Z - supervisor.container.status.000__Authorized Authorized recdH9n0oS3nRRWON f48cff43 World has created the information for starting the container 1 0 + supervisor.container.status.000__Authorized + + + recVP2uNFpOFanI2j + 2023-05-12T13:28:39Z + Hor + recM2pM6KPgGbqEe2 + 6abfcdab + Also known as Global Horizontal Irradiance (GHI), this is the total solar radiation incident on a horizontal surface. It is the sum of Direct Normal Irradiance (DNI), Diffuse Horizontal Irradiance, and ground-reflected radiation + 1 + 000 + recognized.irradiance.type.000__Hor recVVshv4AuJAbuyp 2022-08-01T12:19:47Z - component.category.000__Load Load rec7qsokBmd2hN5vT c8b4617d + component.category.000__Load recWYzqc5sRK0ksAD 2022-11-08T22:21:38Z - message.category.000__RestApiPostResponse RestApiPostResponse rec7pzii3dy9m3jCe 7cbba191 REST API post response 6 000 + message.category.000__RestApiPostResponse recWvHiwQvwKVnBgW 2022-10-30T22:57:15Z - registry.g.node.role.000__Unknown Unknown rechRk6DjahLATrOI 00000000 0 rechRk6DjahLATrOI 000 + registry.g.node.role.000__Unknown recX4AWEX4SombnY3 2023-02-19T19:56:52Z - spaceheat.telemetry.name.000__AirTempCTimes1000 AirTempCTimes1000 rec2HyLffy6QK9QId 0f627faa Air temperature, in Degrees Celsius multiplied by 1000. 12 002 + spaceheat.telemetry.name.000__AirTempCTimes1000 recX4LfgcX5340LCn 2022-08-02T13:49:12Z - g.node.status.100__Pending Pending recqx4EqT3OFtnxTG 153d3475 The GNode exists but cannot be used yet. 1 100 + g.node.status.100__Pending recXi8PVkahKyMdi1 2022-11-06T20:13:09Z - g.node.role.000__MarketMaker MarketMaker recZB6uJDEaCzvTZX 304890c5 Runs energy markets at its Node in the GNodeTree 3 000 + https://gridworks.readthedocs.io/en/latest/market-maker.html + g.node.role.000__MarketMaker recY1j4wZLAwwD5K5 2022-06-16T10:09:12Z - spaceheat.unit.000__Fahrenheit Fahrenheit recc1W1unmzowrKX9 7d8832f8 4 000 + spaceheat.unit.000__Fahrenheit + + + recY6HHhAS5y7TB48 + 2023-06-26T15:43:55Z + VersantA20HeatTariff + rec4S3L3NZiPihbLi + 54aec3a7 + Versant is a utility serving customers in Maine, and in particular serves much of the area behind the Keene Rd Constraint in the [GridWorks Millinocket Demo](https://gridworks.readthedocs.io/en/latest/millinocket-demo.html#background). This is an alternative tariff available for electric heat. + 3 + distribution.tariff.000__VersantA20HeatTariff recYLv2x2lR5rftCy 2022-06-14T10:26:48Z - sh.node.role.000__CirculatorPump CirculatorPump recomGYBJ9ldSsiNU b0eaf2ba Circulator pump for one or more of the hydronic pipe loops 17 000 + sh.node.role.000__CirculatorPump recYQdLs0j1JI1fHH @@ -3878,39 +4154,50 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recYZ4i0CenNHSN68 2022-08-30T18:05:14Z - registry.g.node.role.000__GNodeRegistry GNodeRegistry rechRk6DjahLATrOI 63a78529 2 000 + registry.g.node.role.000__GNodeRegistry recYbBeH9CQoRciJA 2022-06-22T20:57:19Z - spaceheat.make.model.000__SchneiderElectric__Iem3455 SchneiderElectric__Iem3455 recLQWqTvGwSz2GcN d300635e Schneider Electric IEM 344 utility meter 7 000 + spaceheat.make.model.001__SchneiderElectric__Iem3455 + + + recYch7I4D20ee78G + 2023-09-22T12:54:02Z + spaceheat.make.model.001__Fibaro__Analog_Temp_Sensor + recLQWqTvGwSz2GcN + 14 + 001 + Fibaro__Analog_Temp_Sensor + https://drive.google.com/drive/u/0/folders/1Muhsvw00goppHIfGSEmreX4hM6V78b-m + This enum refers to a Fibaro home automation device that has been configured in a specific way. This includes (1) being attached to two 10K NTC thermistors and a specific voltage divider circuit that specifies its temperature as a function of voltage and (2) one of its potential free outputs being in-line with the power of a partner Fibaro, so that it can power cycle its partner (because there are reports of Fibaros no longer reporting temp change after weeks or months until power cylced). The Fibaro itself is a tiny (29 X 18 X 13 mm) Z-Wave device powered on 9-30V DC that can read up to 6 1-wire DS18B20 temp sensors, 2 0-10V analog inputs and also has 2 potential free outputs. + 1f19839d recYoDcnOm6YgiRz2 2022-06-14T10:31:46Z - sh.node.role.000__TankWaterTempSensor TankWaterTempSensor recomGYBJ9ldSsiNU 73308a1f A temperature sensor used for measuring temperature inside or on the immediate outside of a water tank. 8 000 + sh.node.role.000__TankWaterTempSensor recZ63BUBooCLKXku 2022-07-20T21:02:24Z - sh.actor.class.001__SimpleSensor SimpleSensor recQeMNisJZjsYXTl dae4b2f0 @@ -3918,11 +4205,32 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 6 000 https://gridworks-protocol.readthedocs.io/en/latest/simple-sensor.html + sh.actor.class.000__SimpleSensor + + + recZKpSeaBMKswWfh + 2023-05-10T11:11:10Z + AtnBrickStorageHeater + recyOOpe9zHor9FIY + b2a125d6 + Publicly available Dijkstra-based AtomicTNode strategy for a brick storage + heater. These heaters are rooom units that store heat in a brick core, are + heated with resistive elements, and typically have a fan to blow air over the + brick core. They are sometimes called Electric Thermal Storage (ETS) heaters, + and in the UK are often called Economy 7 heaters or Night Storage Heaters. + A strategy very similar to this was used by VCharge to manage an ETS fleet + of several thousand heaters in Pennsylvania. + This strategy is meant to serve as a template for other private strategies, + and also allows for an end-to-end simulation of a realistic aggregated + transactive load capable of generating a highly elastic bid curve + [More Info](https://gridworks-atn.readthedocs.io/en/latest/brick-storage-heater.html) + 5 + 001 + strategy.name.001__AtnBrickStorageHeater recZR3u3WuSGv96su 2022-10-25T12:11:23Z - spaceheat.telemetry.name.000__Unknown Unknown rec2HyLffy6QK9QId 00000000 @@ -3930,64 +4238,64 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 0 rec2HyLffy6QK9QId 000 + spaceheat.telemetry.name.000__Unknown recZtUxi5Vm8mqODR 2022-06-14T10:33:00Z - sh.node.role.000__RoomTempSensor RoomTempSensor recomGYBJ9ldSsiNU fec74958 A temperature sensor used for measuring room temperature, or temp in a heated space more generally. 10 000 + sh.node.role.000__RoomTempSensor recZthcBSla9DrcCf 2022-11-08T22:27:22Z - message.category.symbol.000__post post reclaO4DqpDmwPOIC 94329f30 REST API post 5 000 + message.category.symbol.000__post recaKzt7d2RW12fso 2022-11-08T22:27:21Z - message.category.symbol.000__gw gw reclaO4DqpDmwPOIC f36a8e69 Serialized Json message following MQTT topic format, sent on the world rabbit broker 4 000 + message.category.symbol.000__gw recaStmQ39S4Zsbza 2022-06-23T17:56:07Z - local.comm.interface.000__Wifi Wifi rec7Ck8y72m0NytYa 46ac6589 6 000 + local.comm.interface.000__Wifi recaYTfkpFUTDvJQd 2022-12-02T23:45:40Z - atn.spaceheat.strategy.name.000__SupervisorA SupervisorA recgq98LIAwVwgALk 28246f18 1 000 + atn.spaceheat.strategy.name.000__SupervisorA recaZld1o7mqNRDS9 2022-07-20T21:02:30Z - sh.actor.class.001__NoActor NoActor recQeMNisJZjsYXTl 00000000 @@ -3995,80 +4303,81 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 0 recQeMNisJZjsYXTl 000 + sh.actor.class.000__NoActor recawk0tnuNgj0Vn2 2023-01-30T20:50:36Z - sh.node.role.000__MultiChannelAnalogTempSensor MultiChannelAnalogTempSensor recomGYBJ9ldSsiNU 661d7e73 An analog multi channel temperature sensor 18 000 + sh.node.role.000__MultiChannelAnalogTempSensor recbUxpxV3qnYpYEA 2022-11-08T22:27:24Z - message.category.symbol.000__get get reclaO4DqpDmwPOIC 8c36344a REST API GET 7 000 + message.category.symbol.000__get recc1TC8wyNJUO4Vq 2022-07-20T21:02:34Z - sh.actor.class.001__HomeAlone HomeAlone recQeMNisJZjsYXTl 32d3d19f HomeAlone is an abstract Spaceheat Actor responsible for dispatching the SCADA when it is not talking with the AtomicTNode. 2 000 + sh.actor.class.000__HomeAlone reccY0eF2JadrVovu 2023-02-19T20:25:27Z - spaceheat.unit.000__Gallons Gallons recc1W1unmzowrKX9 8e123a26 9 000 + spaceheat.unit.000__Gallons reccbyMtvH1trII7S 2022-08-02T13:49:35Z - g.node.status.100__Active Active recqx4EqT3OFtnxTG a2cfc2f7 The GNode can be used. 2 100 + g.node.status.100__Active recchYovfZl6dZtje 2022-12-02T17:35:55Z - atn.spaceheat.strategy.name.000__HeatPumpWithBoostStore HeatPumpWithBoostStore recgq98LIAwVwgALk 68957d0c 2 000 + atn.spaceheat.strategy.name.000__HeatPumpWithBoostStore recdMV7TkDw8zFcf9 2022-11-08T03:47:37Z - market.quantity.unit.000__AvgMW AvgMW recounhEj97w5SfDm 00000000 0 recounhEj97w5SfDm + market.quantity.unit.000__AvgMW recdOoocJBLhxafev @@ -4078,131 +4387,134 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recdWX5ZrS6f3KjcR 2022-06-14T10:26:50Z - sh.node.role.000__DedicatedThermalStore DedicatedThermalStore recomGYBJ9ldSsiNU 3ecfe9b8 A dedicated thermal store within a thermal storage heating system - could be one or more water tanks, phase change material, etc. 7 000 + sh.node.role.000__DedicatedThermalStore recdZoU45YlNxDBUe 2022-11-07T22:57:50Z - recognized.currency.unit.000__Unknown Unknown recA15Ak50x6bNMx1 00000000 0 recA15Ak50x6bNMx1 + recognized.currency.unit.000__Unknown rece6HBVLBiCaAQgw 2022-11-06T20:13:11Z - g.node.role.000__InterconnectionComponent InterconnectionComponent recZB6uJDEaCzvTZX fec0c127 An avatar for a cable or wire on the electric grid 6 000 + g.node.role.000__InterconnectionComponent rece9uqvosClHWLDu 2022-11-08T00:11:21Z - energy.supply.type.000__RealtimeLocalLmp RealtimeLocalLmp recf9ZTshqRu81HZo e9dc99a6 2 + energy.supply.type.000__RealtimeLocalLmp receKVsL3pT6iHkAW 2022-11-08T07:29:28Z - g.node.role.000__TimeCoordinator TimeCoordinator recZB6uJDEaCzvTZX c499943c Responsible for managing time in simulations 8 000 + g.node.role.000__TimeCoordinator receT6Fp8JXN2GXQY 2022-11-08T05:20:38Z - market.type.name.000__rt60gate30b rt60gate30b recZmZP13YV9Rmbnw 618f9c0a Real-time energy, 30 minute MarketSlots, gate closing 5 minutes prior to start, QuantityUnit AvgkW 8 + market.type.name.000__rt60gate30b receYYuzekeRIuXHN 2022-06-14T10:33:09Z - sh.node.role.000__OutdoorTempSensor OutdoorTempSensor recomGYBJ9ldSsiNU 5938bf1f A temperature sensor used for measuring outdoor temperature. 11 000 + sh.node.role.000__OutdoorTempSensor recfW76lkiFHpOg3N 2022-11-07T22:56:55Z - recognized.currency.unit.000__USD USD recA15Ak50x6bNMx1 e57c5143 US Dollar 1 + recognized.currency.unit.000__USD recgLuWiIpBnWvI8T 2022-06-03T18:27:35Z - spaceheat.make.model.000__GridWorks__SimBool30AmpRelay GridWorks__SimBool30AmpRelay recLQWqTvGwSz2GcN e81d74a8 Simulated relay 8 000 + spaceheat.make.model.001__GridWorks__SimBool30AmpRelay recgTxLB3WCMDRLJM 2022-11-07T22:56:58Z - recognized.currency.unit.000__GBP GBP recA15Ak50x6bNMx1 f7b38fc5 Pounds sterling 2 + recognized.currency.unit.000__GBP recgphsceOlnshETa 2022-11-29T13:50:18Z - supervisor.container.status.000__Running Running recdH9n0oS3nRRWON cfde1b40 GNode actors in the container are active 4 0 + supervisor.container.status.000__Running rechQD0Jf8c5xaUzc 2022-11-08T00:17:08Z - distribution.tariff.000__VersantATariff VersantATariff rec4S3L3NZiPihbLi ea5c675a + Versant is a utility serving customers in Maine, and in particular serves much of the area behind the Keene Rd Constraint in the [GridWorks Millinocket Demo](https://gridworks.readthedocs.io/en/latest/millinocket-demo.html#background). + +The A Tariff is their standard residential tariff. Look for rate A in Versant +[rate schedules](https://www.versantpower.com/residential/rates/rates-schedules/) 2 + distribution.tariff.000__VersantATariff rechaotHblmyukrn1 2022-11-08T22:27:16Z - message.category.symbol.000__unknown unknown reclaO4DqpDmwPOIC 00000000 @@ -4210,27 +4522,29 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 0 reclaO4DqpDmwPOIC 000 + message.category.symbol.000__unknown rechjwPVSGfZctKi2 2022-12-02T23:47:08Z - strategy.name.000__TcGlobalA TcGlobalA recyOOpe9zHor9FIY 73fbe6ab - Basic GridWorks TimeCoordinator strategy, in [gridworks-timecoordinator repo](https://github.com/thegridelectric/gridworks-timecoordinator) + Used to manage the global time of the Gridworks system when run with\n in a fully simulated universe. \n +[More on TimeCoordinators](https://gridworks.readthedocs.io/en/latest/time-coordinator.html) 3 000 + strategy.name.001__TcGlobalA rechyjciVYC2Y6FWo 2022-06-23T17:56:20Z - local.comm.interface.000__SimRabbit SimRabbit rec7Ck8y72m0NytYa efc144cd 5 000 + local.comm.interface.000__SimRabbit reciHv7JZpJJnIxuE @@ -4240,20 +4554,32 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come reciyc2Iq5RQOs8kr 2022-08-02T20:13:18Z - schema.status.000__Active Active recv25tG4mBjyVeMY c88a914d The Schema is active + schema.status.000__Active recj7R1VzYtkQ3rX5 2023-01-12T15:34:36Z - core.g.node.role.000__Scada Scada rec5HXPeyp3jic6FV 7a8e4046 7 + core.g.node.role.000__Scada + + + recjCvwGoMdYArjAn + 2023-09-19T14:51:57Z + Hubitat__C7__LAN1 + recLQWqTvGwSz2GcN + 12 + spaceheat.make.model.001__Hubitat__C7__LAN1 + 001 + This refers to a Hubitat C7 that has been configured in a specific way with respect to the APIs it presents on the Local Area Network. The Hubitat C7 is a home automation hub that supports building ZigBee and ZWave meshes, plugs into Ethernet, has a reasonable user interface and has an active community of open-source developers who create drivers and package managers for devices, and supports the creation of various types of APIs on the Local Area Network. + 4d649420 + https://drive.google.com/drive/folders/1AqAU_lC2phzuI9XRYvogiIYA7GXNtlr6 recjNfJcxYnUKiUDD @@ -4263,7 +4589,6 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recjYW279ZYaQS7lV 2022-07-20T17:31:33Z - spaceheat.make.model.000__Egauge__4030 Egauge__4030 recLQWqTvGwSz2GcN beb6d3fb @@ -4271,11 +4596,11 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 1 000 https://store.egauge.net/meters + spaceheat.make.model.001__Egauge__4030 recjlLyMGMXYaff8w 2022-11-08T21:53:23Z - message.category.000__Unknown Unknown rec7pzii3dy9m3jCe 00000000 @@ -4283,43 +4608,43 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 0 rec7pzii3dy9m3jCe 000 + message.category.000__Unknown reclMrRIA4ISmRw6t 2022-08-02T17:21:40Z - core.g.node.role.000__Other Other rec5HXPeyp3jic6FV 00000000 0 rec5HXPeyp3jic6FV 0 + core.g.node.role.000__Other reclNE5ipPSnw0kaZ 2022-11-06T20:14:12Z - g.node.role.000__WeatherService WeatherService recZB6uJDEaCzvTZX 1dce1efd Provides weather forecasts 12 000 + g.node.role.000__WeatherService reclSgYLAFa1ll8vp 2022-11-08T00:11:14Z - energy.supply.type.000__Unknown Unknown recf9ZTshqRu81HZo 00000000 0 recf9ZTshqRu81HZo + energy.supply.type.000__Unknown reclVQqsN9eKLnIFs 2022-06-14T10:26:43Z - sh.node.role.000__BooleanActuator BooleanActuator recomGYBJ9ldSsiNU 57b788ee @@ -4327,21 +4652,21 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 6 000 + sh.node.role.000__BooleanActuator reclgi3dCrOboE4Dn 2022-11-09T19:38:44Z - universe.type.000__Hybrid Hybrid recPvHsXzCenxLa7v 8281a0fa Anything goes. 1 + universe.type.000__Hybrid recljcVVnRh9ne2dH 2022-06-03T18:27:38Z - spaceheat.make.model.000__Adafruit__642 Adafruit__642 recLQWqTvGwSz2GcN acd93fb3 @@ -4349,22 +4674,22 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 3 000 https://www.adafruit.com/product/642 + spaceheat.make.model.001__Adafruit__642 reclpWTi7clJae05G 2023-01-28T13:55:32Z - spaceheat.make.model.000__GridWorks__TSnap1 GridWorks__TSnap1 recLQWqTvGwSz2GcN d0178dc3 Actual GridWorks TSnap 1.0 SCADA Box 4 000 + spaceheat.make.model.001__GridWorks__TSnap1 recm2rIwNRJUR8CCY 2023-01-06T03:08:20Z - algo.cert.type.000__ASA ASA recCQyaQ1Oq0MlT20 00000000 @@ -4372,54 +4697,54 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 0 recCQyaQ1Oq0MlT20 000 + algo.cert.type.000__ASA recmK3fpzdj9xCe10 2022-06-14T10:26:45Z - sh.node.role.000__Atn Atn recomGYBJ9ldSsiNU 6ddff83b AtomicTNode 3 000 + sh.node.role.000__Atn recmRfADiN3nxZR8U 2022-11-08T04:21:43Z - market.type.name.000__da60 da60 recZmZP13YV9Rmbnw 94a3fe9b Day-ahead energy, 60 minute MarketSlots 3 + market.type.name.000__da60 recmVztwGfJf1x2ba 2022-11-08T21:53:53Z - message.category.000__MqttJsonBroadcast MqttJsonBroadcast rec7pzii3dy9m3jCe 16594e91 Serialized Json message following MQTT topic format, sent on the world rabbit broker 4 000 + message.category.000__MqttJsonBroadcast recmcoCNDhq8Dknn5 2022-12-02T17:36:00Z - atn.spaceheat.strategy.name.000__NoActor NoActor recgq98LIAwVwgALk 00000000 0 recgq98LIAwVwgALk 000 + atn.spaceheat.strategy.name.000__NoActor recmkdghA4yolcvkz 2022-10-30T22:58:32Z - g.node.status.100__Unknown Unknown recqx4EqT3OFtnxTG 00000000 @@ -4427,92 +4752,93 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 0 recqx4EqT3OFtnxTG 100 + g.node.status.100__Unknown recmlXyeV4QRYx0Vp 2022-11-08T00:18:23Z - emitter.pump.feedback.model.000__ConstantGpm ConstantGpm rec57bh9xoIxLUHjY f6bde4fa 1 + sh.dist.pump.feedback.model.000__ConstantGpm recmvMaXSyZBYlpNZ 2022-11-08T00:17:00Z - distribution.tariff.000__Unknown Unknown rec4S3L3NZiPihbLi 00000000 0 rec4S3L3NZiPihbLi + distribution.tariff.000__Unknown recn6a7ywzaeer0hr 2022-06-14T11:15:37Z - sh.node.role.000__HomeAlone HomeAlone recomGYBJ9ldSsiNU 863e50d1 HomeAlone GNode 2 000 + sh.node.role.000__HomeAlone recnC6OKNs1p2giG9 2023-02-16T22:43:16Z - spaceheat.make.model.000__Atlas__EzFlo Atlas__EzFlo recLQWqTvGwSz2GcN d0b0e375 Atlas Scientific EZO Embedded Flow Meter Totalizer, pulse to I2C - 13 + 11 000 https://drive.google.com/drive/u/0/folders/142bBV1pQIbMpyIR_0iRUr5gnzWgknOJp + spaceheat.make.model.001__Atlas__EzFlo recnn8MUgeat2N88w 2022-11-29T13:50:26Z - supervisor.container.status.000__Stopped Stopped recdH9n0oS3nRRWON 4e28b6ae Stopped 5 0 + supervisor.container.status.000__Stopped recnnxKBRYfc7uy2Q 2022-11-29T13:46:36Z - gni.status.000__Done Done recWX07Mlzf8djb6q 8222421f No longer represents the GNode. 3 0 + gni.status.000__Done reco5WtUl0pdbMf5Z 2022-11-08T04:21:30Z - market.type.name.000__unknown unknown recZmZP13YV9Rmbnw 00000000 Default unknown 0 recZmZP13YV9Rmbnw + market.type.name.000__unknown reco9UaGyf9bBkYcs 2022-06-23T16:28:15Z - local.comm.interface.000__Unknown Unknown rec7Ck8y72m0NytYa 00000000 0 rec7Ck8y72m0NytYa 000 + local.comm.interface.000__Unknown recoKzrtmctoaOq0s @@ -4522,82 +4848,94 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recoNR7leouxWteyP 2022-06-20T11:27:43Z - __SimpleSensor SimpleSensor dae4b2f0 5 + __SimpleSensor recoQaLaEtnGeQcwe 2022-06-16T10:09:48Z - spaceheat.unit.000__W W recc1W1unmzowrKX9 f459a9c3 2 000 + spaceheat.unit.000__W recoY9rsnB3AThC5M 2022-08-02T17:20:22Z - core.g.node.role.000__MarketMaker MarketMaker rec5HXPeyp3jic6FV 86f21dd2 3 0 + core.g.node.role.000__MarketMaker recob3YuE614ND3hl 2022-06-03T21:55:39Z - __Actuator Actuator 9f13e13e + __Actuator reconXBspv9L7OQqS 2022-08-01T12:19:26Z - component.category.000__Battery Battery rec7qsokBmd2hN5vT f8b0cb6d + component.category.000__Battery + + + recpHGTkKtzs36Fvw + 2023-09-07T20:00:07Z + GridWorks__Tank_Module_1 + recLQWqTvGwSz2GcN + This refers to a small module designed and assembled by GridWorks that is meant to be mounted to the side of a hot water tank. It requires 24V DC and has 4 temperature sensors coming out of it labeled 1, 2, 3 and 4. It is meant to provide temperature readings (taken within a half a second of each other) of all 4 of its sensors once a minute. + 13 + 001 + spaceheat.make.model.001__GridWorks__Tank_Module_1 + bd759051 + https://drive.google.com/drive/folders/1GSxDd8Naf1GKK_fSOgQU933M1UcJ4r8q recpYjsB7MUcXP7TS 2022-06-23T17:55:57Z - local.comm.interface.000__Ethernet Ethernet rec7Ck8y72m0NytYa c1e7a955 2 000 + local.comm.interface.000__Ethernet recq3XELpgNTZptBh 2022-06-03T22:00:28Z - __DedicatedThermalStore DedicatedThermalStore 0ed56a13 + __DedicatedThermalStore recqLabDaSMQ5uIPL 2022-06-03T22:00:36Z - __HydronicPipe HydronicPipe d9d8f7e1 + __HydronicPipe + itrrXEIStZn65gqTP/recqLabDaSMQ5uIPL recqZ8LSzlPWUPcKF 2022-08-01T12:19:44Z - component.category.000__Interconnector Interconnector rec7qsokBmd2hN5vT b9e298b7 + component.category.000__Interconnector recqfo3DV2CZigvn5 2022-06-03T18:27:23Z - spaceheat.make.model.000__NCD__PR8-14-SPST NCD__PR8-14-SPST recLQWqTvGwSz2GcN fabfa505 @@ -4605,17 +4943,18 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 2 000 https://store.ncd.io/product/4-channel-high-power-relay-controller-4-gpio-with-i2c-interface/?attribute_pa_choose-a-relay=20-amp-spdt + spaceheat.make.model.001__NCD__PR8-14-SPST recqfsKuobhERLH1d 2022-06-03T18:27:48Z - spaceheat.make.model.000__UnknownMake__UnknownModel UnknownMake__UnknownModel recLQWqTvGwSz2GcN 00000000 0 recLQWqTvGwSz2GcN 000 + spaceheat.make.model.001__UnknownMake__UnknownModel recqprhPirKuBPI9O @@ -4625,162 +4964,150 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recriuBbhyDgwz6U3 2022-06-03T22:01:12Z - __Sensor Sensor aec254fd + __Sensor recrqYsXVPagMEhO3 2022-11-09T19:38:42Z - universe.type.000__Dev Dev recPvHsXzCenxLa7v 00000000 Simulation running on a single computer. 0 recPvHsXzCenxLa7v + universe.type.000__Dev recsRZi1bpgYSIj81 2023-01-08T12:44:45Z - universe.type.000__Production Production recPvHsXzCenxLa7v b0168bda Money at stake. 2 + universe.type.000__Production recsXsCs2syjI8IBg 2022-06-20T11:31:37Z - __NoActor NoActor 99a5f20d 6 + __NoActor - itrXUA84T0mWm2ABX/recsXsCs2syjI8IBg recseefFsB6BWwTQj 2022-06-23T16:27:43Z - local.comm.interface.000__OneWire OneWire rec7Ck8y72m0NytYa ae2d4cd8 3 000 - - - recsgSJKZIgLynrjL - 2023-04-10T11:14:08Z - sh.actor.class.001__Relay - Relay - recQeMNisJZjsYXTl - 311835f6 - A SpaceheatNode representing an electric relay - 9 - 001 + local.comm.interface.000__OneWire rectV4strhNnQayZ6 2022-11-29T13:50:51Z - supervisor.container.status.000__Deleted Deleted recdH9n0oS3nRRWON da2dafe0 Deleted 6 0 + supervisor.container.status.000__Deleted rectW0RYQ9V3zy3cY 2022-08-30T18:05:16Z - registry.g.node.role.000__GridWorks GridWorks rechRk6DjahLATrOI f0f14c88 5 000 + registry.g.node.role.000__GridWorks rectpVbb3vrmCp4X9 2022-08-02T20:13:15Z - schema.status.000__Pending Pending recv25tG4mBjyVeMY 3661506b The Schema is under construction and not yet stabilized. Should not be sent or recognized in non-dev scenarios. + schema.status.000__Pending rectuuZ31wlxmkduh 2022-06-03T22:00:17Z - __CirculatorPump CirculatorPump 5247fc8e + __CirculatorPump rectyLwNNQRCXsJnR 2022-11-08T00:18:19Z - emitter.pump.feedback.model.000__ConstantDeltaT ConstantDeltaT rec57bh9xoIxLUHjY 00000000 0 rec57bh9xoIxLUHjY + sh.dist.pump.feedback.model.000__ConstantDeltaT recuDHqYzSnUGgaOA 2022-09-26T23:46:46Z - g.node.status.100__Suspended Suspended recqx4EqT3OFtnxTG f5831e1d The GNode cannot be used, but may become active in the future. 4 100 + g.node.status.100__Suspended recuFrnfEo5wsUKx9 2023-02-27T11:04:45Z - g.node.role.000__Persister Persister recZB6uJDEaCzvTZX 07f28817 Responsible for acking events with delivery guarantees 14 001 + g.node.role.000__Persister recuFvwowZiXB8M1w 2022-06-14T10:27:00Z - sh.node.role.000__Outdoors Outdoors recomGYBJ9ldSsiNU dd975b31 The outdoors 19 000 + sh.node.role.000__Outdoors recuWBQ06IQsYr0or 2022-11-08T22:27:23Z - message.category.symbol.000__postack postack reclaO4DqpDmwPOIC 9fc1b9d4 REST API post response 6 000 + message.category.symbol.000__postack recue7CvgzoOvpWSK 2022-11-06T20:13:06Z - g.node.role.000__AtomicMeteringNode AtomicMeteringNode recZB6uJDEaCzvTZX 8eb5b9e1 Role of a GNode that will become an AtomicTNode, prior to it owning TaTradingRights 4 000 + g.node.role.000__AtomicMeteringNode recuqtE7oCqQ18OKh @@ -4790,34 +5117,34 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recuzlYpywiv3imR3 2022-11-08T00:15:42Z - mixing.valve.feedback.model.000__ConstantSwt ConstantSwt recX0A9nSriRUvl9n 00000000 Constant Source Water Temp 0 recX0A9nSriRUvl9n + sh.mixing.valve.feedback.model.000__ConstantSwt recvNW0XMWSQSZEGn 2022-09-20T23:06:23Z - core.g.node.role.000__AtomicMeteringNode AtomicMeteringNode rec5HXPeyp3jic6FV 9521af06 4 0 + core.g.node.role.000__AtomicMeteringNode recvW004kIKJFfD0A 2022-06-22T22:00:59Z - spaceheat.telemetry.name.000__CurrentRmsMicroAmps CurrentRmsMicroAmps rec2HyLffy6QK9QId ad19e79c Current measurement in Root Mean Square MicroAmps 6 000 + spaceheat.telemetry.name.000__CurrentRmsMicroAmps recxJWgFKGYJ6tUYk @@ -4827,18 +5154,17 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recy5LK2PQpxG2nBl 2022-07-20T21:02:22Z - sh.actor.class.001__Scada Scada recQeMNisJZjsYXTl 6d37aa41 The SCADA actor is the prime piece of code running and supervising other ProActors within the SCADA code. It is also responsible for managing the state of TalkingWith the AtomicTNode, as well maintaining and reporting a boolean state variable that indicates whether it is following dispatch commands from the AtomicTNode XOR following dispatch commands from its own HomeAlone actor. 1 000 + sh.actor.class.000__Scada recyHL0VJtn5jmtIW 2022-07-20T21:02:18Z - sh.actor.class.001__PowerMeter PowerMeter recQeMNisJZjsYXTl 2ea112b9 @@ -4846,53 +5172,53 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 4 000 https://gridworks.readthedocs.io/en/latest/terminal-asset.html + sh.actor.class.000__PowerMeter recyNnqxvxbEGLzhG 2022-11-08T22:21:38Z - message.category.000__RestApiGet RestApiGet rec7pzii3dy9m3jCe 167236a6 REST API GET 7 000 + message.category.000__RestApiGet recyO1LPQqlZeZX7v 2022-11-08T21:53:54Z - message.category.000__RestApiPost RestApiPost rec7pzii3dy9m3jCe 5b2c69cb REST API post 5 000 + message.category.000__RestApiPost recyOP19Dh8Ldz3q1 2022-06-23T16:10:54Z - local.comm.interface.000__RS485 RS485 rec7Ck8y72m0NytYa a6a4ac9f 4 000 + local.comm.interface.000__RS485 recyROVELbss084Dl 2022-06-16T10:09:53Z - spaceheat.unit.000__Unitless Unitless recc1W1unmzowrKX9 ec972387 1 000 + spaceheat.unit.000__Unitless recyZNh6DHD8cSQJs 2022-11-06T20:13:04Z - g.node.role.000__GNode GNode recZB6uJDEaCzvTZX 00000000 @@ -4900,228 +5226,298 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come 0 recZB6uJDEaCzvTZX 000 + g.node.role.000__GNode reczQc8UjfHLBjqBM 2022-11-08T03:49:14Z - market.price.unit.000__USDPerMWh USDPerMWh rec75xMuw0SMkzjVc 00000000 0 rec75xMuw0SMkzjVc + market.price.unit.000__USDPerMWh recXGRmBBB6Pch163 2022-11-08T16:35:22Z - recXoGg7l3r7ZG6Em recjpCj1MoKBvlAbR + recXoGg7l3r7ZG6Em + atomictnode + ready + timecoordinator atomictnode sends ready to timecoordinator AtomicTNode - atomictnode TimeCoordinator - timecoordinator - ready rec0ASFtYgDm4fTf8 2022-07-05T11:32:40Z - 100 + gt.dispatch.boolean.local.100 + Active + Json recnqelpRWYmV8MJR recWSgdPQdB9dVyux recDMDjJ0WR1xxx1F recNpHoc7bhC32M0w - recb9fI4kRkTYXDzA - recqSXVzLo8RtEjlH - recoAsAg06Qp7jYp3 - Pending - gt.dispatch.boolean.local.100 - Active - Json + 100 1 By Locally, this means sent without access to Internet. The HomeAlone actor must reside within the Local Area Network of the SCADA - typically it should reside on the same hardware. + recoAsAg06Qp7jYp3 gt.dispatch.boolean.local 110 0 Deprecated true + Pending Dispatch message sent locally by SCADA HomeAlone actor + recb9fI4kRkTYXDzA + recqSXVzLo8RtEjlH + rec1SFXYQUXElpeJ9 2022-09-19T15:06:51Z - 000 - recBje3quNXHrsP6j - recbR8wOIppFVic94 - recopFBsq4TmG87Op - recvbnpa4cX2nNp9p - rec0dMwyxvm5Cx9Hu - Active - recxtr4LhX2Ixojmg - rec49oZw87DHVaGGI - recnvClBEU4WU5lOe - recDXr4RoTH1jDsXd - recKmoKIL8lpLdK2U - rech3zpojTnscbsH1 tavalidatorcert.algo.transfer.000 Active Json + recBje3quNXHrsP6j + recbR8wOIppFVic94 + 000 1 Meant to be sent from a pending TaValidator to the GNodeFactory (Gnf), so the Gnf will transfer its ValidatorCert to the pending TaValidator's Algorand address. + rec0dMwyxvm5Cx9Hu tavalidatorcert.algo.transfer 000 1 Active + rec49oZw87DHVaGGI + recHLWHk24N98yrP7 + Active Used for Step 2 of TaValidator certification + recopFBsq4TmG87Op + recvbnpa4cX2nNp9p + recDXr4RoTH1jDsXd + recKmoKIL8lpLdK2U + rech3zpojTnscbsH1 https://gridworks.readthedocs.io/en/latest/ta-validator.html gnf - gridworks gwatn + + + + rec2EA0TG0Xexi6wg + 2023-06-25T20:39:19Z + flo.params.simpleresistivehydronic.000 + Active + Json + recIi1kb6LxzOzv0b + recaSQiyOGuk96R75 + recWqq69qS32BdECG + recKxC93PtWwHMzJH + recXHPMn2CQMzlXo9 + recx6o26hYbiat65H + recSCjwZxVDm5pFH3 + rec1cSvPeCnzzPlFy + recHWv6Qz6hTlMPqx + recSeEWijLqaBvnqw + recYiAHa33V7Jj2dv + recOlYQO9t0ZKGfmx + recSmAhe1VTBToaSK + rechmXzZK0wqTOIni + receQEqkX185ZTnZn + reczdvUXsC5uzxqIB + recvYmJjkD1Dzzbqk + recTLZwyC5fS4xZs4 + recq5rPWC2xxTWzj7 + recAaVjjsT4dYXHxM + rec2FA57487tkIrdH + recwxuYDEnWFeLJKI + recjTlFd94m2QsbZy + reccuXB02dnW4Wl6y + recBsPcptVebBzkn2 + recVS4wdbtDR3UsJO + recR3pGEgjTTT914k + recWw9MgX8ZXkyRii + recYYjWL9c3xnsGSk + recgPfLVLuHQ0esKS + rec6J08ESPo5dbR8t + recDgwmeLksJ4L46f + recOaBXisU25ozsU1 + recEzoM8c1xB0qzmp + recnvahTKBIHt4BTW + recA15Ak50x6bNMx1 + rec4S3L3NZiPihbLi + recf9ZTshqRu81HZo + 000 + + + + 1 + recJEHz9XprAIplqG + flo.params.simpleresistivehydronic + 000 + 1 + Pending + + recjmLBzSO8k29I9e + Pending + rec24qjC90m0f4Kvl + recb9fI4kRkTYXDzA + gwatn + rec2V7vc3NDSaRb1D 2022-05-11T18:08:26Z - 100 - recx4EL5mDebUhtzp gt.telemetry.100 Active Json + 100 1 + recx4EL5mDebUhtzp gt.telemetry 110 0 Deprecated true + rec2m06PsjtFd0cfu 2022-07-10T12:48:52Z - 000 + resistive.heater.cac.gt.000 + Active + Json recl7m0jNXQLR5SZu rec1nhmaOdYNQmXTy recKdVPFQyTt95V3Y recRjhyzbBd693UU7 recHZBCEFTBrFubo9 - rec24qjC90m0f4Kvl - recqmA1Cu9GIg4hpp - Active recLQWqTvGwSz2GcN - recuqYXBpW9rcXrKC - recCuch3XtEssNGuu - recRONwOhclu8u3Ef - ComponentAttributeClassId - resistive.heater.cac.gt.000 - Active - Json + 000 true ResistiveHeaterCac true 1 GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Cac, or ComponentAttributeClass, is part of this structure. + recqmA1Cu9GIg4hpp resistive.heater.cac.gt 000 1 Active + recuqYXBpW9rcXrKC + recCuch3XtEssNGuu + recRONwOhclu8u3Ef + ComponentAttributeClassId + Active Type for tracking Resistive Heater ComponentAttributeClasses + rec24qjC90m0f4Kvl https://g-node-registry.readthedocs.io/en/latest/component-attribute-class.html newatn scada gwproto + rec2qJdOZXwT9U5UP 2022-09-30T19:08:40Z - 000 + signandsubmit.mtx.algo.000 + Deprecated + Json recSsJxTMJFhAidWC recXgOcojFyG3Ftr6 recpwKIE1g7BN8jGg recCMCD6fLQzuN9RA - recEoebL6fHn6xzXL - Pending - signandsubmit.mtx.algo.000 - Deprecated - Json + 000 1 + recEoebL6fHn6xzXL signandsubmit.mtx.algo 000 1 Deprecated + Pending + rec3EIGuvfybwwFOK 2023-03-25T23:00:03Z - 000 - recuSkupIk5cS8BGw - recjFoqZkvOjg0VXc - Active - recnQycM6WlPw1K0f power.watts.000 Active Json - + recuSkupIk5cS8BGw + 000 + 1 Used by a SCADA -> Atn or Atn -> AggregatedTNode to report real-time power of their TerminalAsset. Positive number means WITHDRAWAL from the grid - so generating electricity creates a negative number. This message is considered worse than useless to send after the first attempt, and does not require an ack. Shares the same purpose as gs.pwr, but is not designed to minimize bytes so comes in JSON format. + recjFoqZkvOjg0VXc power.watts 000 1 Active + recnQycM6WlPw1K0f + Active Real-time power of TerminalAsset in Watts. gwproto + rec3H5b04RB2vmYrk 2022-11-17T06:07:58Z - 000 - recbWq8Ueg7KgQie0 - recRwEFucyvVZaXY2 - rec3iTEohsap8GRP8 - Pending - rec75xMuw0SMkzjVc - recPkFr8lDBRTXq08 market.price.000 Active Json + recbWq8Ueg7KgQie0 + recRwEFucyvVZaXY2 + rec75xMuw0SMkzjVc + 000 1 + rec3iTEohsap8GRP8 market.price 000 1 Pending + recPkFr8lDBRTXq08 + Pending gwmm + rec3Noy3m1X4Vdly9 2022-06-04T19:21:25Z - 000 + simple.temp.sensor.cac.gt.000 + Active + Json recUgsnOcEMiKpYMF recRTTglTWqlyAaQW rec83s8fct15feQXU @@ -5130,85 +5526,78 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recL9BeJniQtSOgyV recqGEAWc6ioKwYCv rec1TiEjRVAsU1G6T - rec24qjC90m0f4Kvl - recrNYtQoRa7YhqI4 - Active recLQWqTvGwSz2GcN recc1W1unmzowrKX9 rec2HyLffy6QK9QId - rec1WZNSLK8X3RGoh - recx6S4XffM5RzxKe - ComponentAttributeClassId - simple.temp.sensor.cac.gt.000 - Active - Json + 000 true SimpleTempSensorCac true 1 GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Cac, or ComponentAttributeClass, is part of this structure. + recrNYtQoRa7YhqI4 simple.temp.sensor.cac.gt 000 1 Active + rec1WZNSLK8X3RGoh + recx6S4XffM5RzxKe + ComponentAttributeClassId + Active Type for tracking Simple Temp Sensor ComponentAttributeClasses + rec24qjC90m0f4Kvl https://g-node-registry.readthedocs.io/en/latest/component-attribute-class.html scada gwproto + rec3fLb6b0gIeuCTO 2022-11-11T00:45:45Z - 000 + atn.params.report.000 + Active + Json recWvVApidAuVFsAP recwWl6qWsyeh76o4 receaI7kIGQr97TD5 recNujglYpalkIIRN reciDBLc8MRRJUFnC - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - rec13dujLuXXSf5L3 - recNgGDYcengufuFe - Pending - recfsDYNRW0af16Ol - recOoCg1T2rOplTJT - atn.params.report.heatpumpwithbooststore.000 - Active - Json + recFFrCFMIAqvoz8H + 000 1 Parameters like the size of the thermal store. - atn.params.report.heatpumpwithbooststore + recNgGDYcengufuFe + atn.params.report 000 1 - Pending + Active + recOoCg1T2rOplTJT + Active AtomicTNode reporting its AtnParams + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + rec13dujLuXXSf5L3 gwatn - satn + rec3kcgktiHCBYpA4 2023-01-16T17:34:18Z - 000 + dispatch.contract.confirmed.000 + Active + Json reciX75GU6FOPxifV recSy6tRXV5XRsb7i rec5xtm1Bu9kG4GaK recAw8J1ipB7Ef1SZ - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recvbnpa4cX2nNp9p - reczIxfEiJFKQYsNw - Pending - recurndoUQt30tVFv - recDIPWhldlUQVNYr - dispatch.contract.confirmed.heatpumpwithbooststore.000 - Active - Json + recLnHXHBgC0FTXR0 + 000 @@ -5219,19 +5608,58 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come to collect audit information about heartbeats, dispatch, energy and power. https://gridworks.readthedocs.io/en/latest/dispatch-contract.html - dispatch.contract.confirmed.heatpumpwithbooststore + reczIxfEiJFKQYsNw + dispatch.contract.confirmed 000 1 - Pending + Active + recDIPWhldlUQVNYr + Active Message sent from AtomicTNode back to SCADA via Rabbit + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + recvbnpa4cX2nNp9p + recy2Ozo32rIJuZcl gwatn - satn + + + + rec4yUxGiLZpqWQqb + 2023-04-30T18:10:15Z + atn.params.000 + Active + Json + recqDBnMUrFKhR7xh + rec7YRRBTA86B1MVU + recwlNYE7g30gSHqZ + recAw8J1ipB7Ef1SZ + recNujglYpalkIIRN + 000 + + + + 1 + This is a partial type, which is expected to be satisfied by all types starting with atn.params (like atn.params.heatpumpwithbooststore). It is used to describe the generic info required for configuring an AtomicTNode. + recGoMNEoqUIuEXwz + atn.params + 000 + 1 + Active + + recQZBqdNBFdbHYdk + Active + Generic AtnParams + recb9fI4kRkTYXDzA + gwatn + true rec5bEVzI1k5qcXYg 2022-09-21T16:38:24Z - 000 + discoverycert.algo.create.000 + Active + Json rec4BpH0P9FNwZJqs recPrU0RlBfIouTuN recWtBipbdRHF9uJs @@ -5239,164 +5667,179 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recoyYXXZBRG1ipPM recVUltfFpgKkEKR0 recGSAil9ULCQw1S1 - recb9fI4kRkTYXDzA - recopFBsq4TmG87Op - recEfMvX9DPwXpcJ3 - Pending rec5HXPeyp3jic6FV - recAJ6AYNLdBZ7XfK - recs6Jf8auLqC5z1T - discoverycert.algo.create.000 - Active - Json + 000 1 + recEfMvX9DPwXpcJ3 discoverycert.algo.create 000 1 - Pending + Active + recAJ6AYNLdBZ7XfK + recs6Jf8auLqC5z1T + Active + recb9fI4kRkTYXDzA + recopFBsq4TmG87Op gnf gwatn + rec70ndc2atifo8Ri 2022-09-21T11:36:19Z - 000 - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recmRa74R0GAk0PKx - Pending - reccfgO8fAUzT3J2W - recD9RSdxZFlCh0nV basegnode.marketmaker.create.000 Active Json + 000 1 + recmRa74R0GAk0PKx basegnode.marketmaker.create 000 1 Pending + reccfgO8fAUzT3J2W + recD9RSdxZFlCh0nV + Pending + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl gnf gnr + rec7aaxWBgMiALe49 2023-02-20T13:59:13Z - 000 - recXYWcQiauWoeify - recTkA12JINIgGcXq - rec15cMarXKQ9TAEw - Pending gridworks.event.gt.sh.status.000 Active Json + recXYWcQiauWoeify + recTkA12JINIgGcXq + 000 1 + rec15cMarXKQ9TAEw gridworks.event.gt.sh.status 000 1 Pending true + Pending + rec7peRuDqMNa0vlW 2022-11-07T20:20:45Z - 000 + sim.timestep.000 + Active + Json recbSsyPYfoVza9CX recmqSV7XbS4h2ys6 recKC523HTZfmLKCA recvEZ0oKpVYcIXNN recU7a6o1lmKrFeWj + 000 + + + + 1 + For simulated actors, time progresses discretely on receipt of these time steps. + rec1gy4a9zTVXe420 + sim.timestep + 000 + 1 + Active + + recrPfgjVyVAXVJ3k + Active + rec5d0mwIHTTqYjC8 + Sent by TimeCoordinators to coordinate time recb9fI4kRkTYXDzA rec24qjC90m0f4Kvl rec13dujLuXXSf5L3 recqSXVzLo8RtEjlH - rec1gy4a9zTVXe420 - Pending - rec5d0mwIHTTqYjC8 - recuetPMCxsDyU0R4 - reccuFJPlMliv6yW8 - recOVsu1AQ1nyhMTN - recrPfgjVyVAXVJ3k - reciXeCa9g1WrIc02 - sim.timestep.000 + gridworks + + + + rec8IDXjSvdhHGds4 + 2023-05-01T22:02:02Z + simplesim.driver.data.000 Active Json + recWfVfIe5SaVyrD2 + recCTlz2ZI9XsPdtX + 000 1 - For simulated actors, time progresses discretely on receipt of these time steps. - sim.timestep + recedgBdJvQBnspbO + simplesim.driver.data 000 1 - Pending + Active - Sent by TimeCoordinators to coordinate time + recCWJPidn8ABRVgU + Active + Generic driver report for a simple Scada Simulation + recb9fI4kRkTYXDzA gwatn - gwtime - gwmm - gridworks - gworld + true rec8ILTteHhn4MpGd 2022-11-02T12:51:38Z - 000 + basegnodes.get.000 + Active + Json rec4j6ntpGttspb5O recZVxZMDqON9vDkN recdbLbodkd8hei4G rec6erTuD9iej4cpC - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - reccsb7VI48EdWlGk - Pending - rec2QIaMX8gSssv7M - recs8N9wVyonAKE8y - basegnodes.get.000 - Active - Json + 000 1 + reccsb7VI48EdWlGk basegnodes.get 000 1 Pending + rec2QIaMX8gSssv7M + recs8N9wVyonAKE8y + Pending + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl gnf gnr + rec8c4KjhwNmfrRYP 2022-07-03T22:15:16Z - 100 + gt.sh.simple.telemetry.status.100 + Active + Json recpnxWC9ATaBFzMB recjuJ8RaGljvo9ZZ rec0SCL5wm4k2QtCO recgVLpaOczJX5BCi - recqSXVzLo8RtEjlH - recb9fI4kRkTYXDzA - recwcEF6jm0pivW8K recOWeL6PoLldCrop recBtrSRyxjOXp8aA - Active rec2HyLffy6QK9QId - recU7kqqWFDEW9g7n - recXMf6hlVg265ccL - gt.sh.simple.telemetry.status.100 - Active - Json + 100 @@ -5405,19 +5848,28 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come message sent from the SCADA to its AtomicTNode typically once every 5 minutes. The nth element of each of its two lists refer to the same reading (i.e. what the value is, when it was read). + recwcEF6jm0pivW8K gt.sh.simple.telemetry.status 100 1 Active true + recU7kqqWFDEW9g7n + Active Data read from a SimpleSensor run by a SpaceHeat SCADA + recqSXVzLo8RtEjlH + recb9fI4kRkTYXDzA + recXMf6hlVg265ccL https://gridworks-protocol.readthedocs.io/en/latest/simple-sensor.html gwproto + rec8uTC7GK5qgXzg9 2022-11-06T20:02:04Z - 002 + g.node.gt.002 + Active + Json recQnH1rlTK3K4DZz recQJigqO8DLTKCqH recVtNsE7nmGPy31j @@ -5434,35 +5886,12 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recstfJ6XtUvbv3Vc recYFsJii0BGiCmAH recIhSSpqIviBUW64 - rec24qjC90m0f4Kvl - recb9fI4kRkTYXDzA - recopFBsq4TmG87Op - recDnKXIasoP8ODSd reci06VasVLO4ZMyk recYGgvDIbffdBWZO recMLU2TAAxgQCJoD - { - "GNodeId": "575f374f-8533-4733-baf7-91146c607445", - "Alias": "d1.isone.ver.keene", - "StatusGtEnumSymbol": "a2cfc2f7", - "RoleGtEnumSymbol": "234cfaa2", - "GNodeRegistryAddr": "MONSDN5MXG4VMIOHJNCJJBVASG7HEZQSCEIKJAPEPVI5ZJUMQGXQKSOAYU", - "TypeName": "g.node.gt", - "Version": "000" - } - - Pending recqx4EqT3OFtnxTG recZB6uJDEaCzvTZX - recmXImdzdJvIhwRj - recrWS8cReivzRx92 - recfdC5aUpHXgXtON - recnwesXAnDk54IJt - rect3RqANsPtjXr8a - GNodeId - g.node.gt.002 - Active - Json + 002 true GNode @@ -5473,37 +5902,45 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come a global registry to act as Single Source of Truth (SSoT). This class is used for that SSoT to share information with actors about their GNodes, and the GNodes that they will observe and communicate with. + recDnKXIasoP8ODSd g.node.gt 002 1 - Pending + Active - Used to send and receive updates about GNodes - https://gridworks.readthedocs.io/en/latest/g-node.html - gwatn - gwmm - gnr - gworld + rect3RqANsPtjXr8a + GNodeId + Active + Used to send and receive updates about GNodes + rec24qjC90m0f4Kvl + recb9fI4kRkTYXDzA + recopFBsq4TmG87Op + { + "GNodeId": "575f374f-8533-4733-baf7-91146c607445", + "Alias": "d1.isone.ver.keene", + "StatusGtEnumSymbol": "a2cfc2f7", + "RoleGtEnumSymbol": "234cfaa2", + "GNodeRegistryAddr": "MONSDN5MXG4VMIOHJNCJJBVASG7HEZQSCEIKJAPEPVI5ZJUMQGXQKSOAYU", + "TypeName": "g.node.gt", + "Version": "000" + } + + https://gridworks.readthedocs.io/en/latest/g-node.html gridworks + rec93KBYcwiqJ6OQy 2022-06-24T20:28:53Z - 100 + gt.sh.telemetry.from.multipurpose.sensor.100 + Active + Json rec0EFbgjuaALp5xv recydLuwKpW0ptMyj recGRNEh1iK0tu10N recP42BiKvu4xhepH - recb9fI4kRkTYXDzA - recqSXVzLo8RtEjlH - recx3kwLemvtMaT0t - Active rec2HyLffy6QK9QId - recFJlNwyiBE5mu93 - recEnG4y5Q19QVq6H - gt.sh.telemetry.from.multipurpose.sensor.100 - Active - Json + 100 @@ -5511,183 +5948,192 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come A set of readings made at the same time by a multipurpose sensor, sent by the MultipurposeSensor SpaceheatNode actor to its SCADA. The nth element of each of its three readings (what is getting read, what the value is, what the TelemetryNames are). + recx3kwLemvtMaT0t gt.sh.telemetry.from.multipurpose.sensor 100 1 Active true + recFJlNwyiBE5mu93 + Active Data sent from a MultipurposeSensor to a Spaceheat SCADA + recb9fI4kRkTYXDzA + recqSXVzLo8RtEjlH + recEnG4y5Q19QVq6H https://gridworks-protocol.readthedocs.io/en/latest/multipurpose-sensor.html gwproto + rec944QikN18Rdopu 2022-06-09T15:17:43Z - 110 + gt.telemetry.110 + Active + Json recyNip0u0FiM066j rec0yzwyCWxtaJQJF recKwPBxJr8R55KlB recfMyBibCC1lqTy1 - recqSXVzLo8RtEjlH - recx4EL5mDebUhtzp - Active rec2HyLffy6QK9QId - recojG3YXcclEwrnX - gt.telemetry.110 - Active - Json + 110 1 + recx4EL5mDebUhtzp gt.telemetry 110 1 Active true + recojG3YXcclEwrnX + Active + recqSXVzLo8RtEjlH gwproto + rec9dL2CYkm5s4OXX 2023-02-14T13:13:25Z - 000 + egauge.register.config.000 + Active + Json rechFmb5stcc7uIXs recQlA6ZTLxJPzvCG rec6nWq42TdJuV1oR recrM0seVr3IoDloF recmScnEAEGlamF9G reccWS9zkRp01leDv - recxXnNUXYPwJi4ns recjsV3JWXQNje4mp - Active - recstn9IrZMpRLKja - recJWEoBrffJ7gSMB - egauge.register.config.000 - Active - Json + 000 1 This type captures the information provided by eGauge in its modbus csv map, when reading current, power, energy, voltage, frequency etc from an eGauge 4030. + recxXnNUXYPwJi4ns egauge.register.config 000 1 Active + recstn9IrZMpRLKja + recJWEoBrffJ7gSMB + Active Used to translate eGauge's Modbus Map scada gwproto + rec9kYNek59Vqps4S 2023-01-16T08:00:58Z - 000 + simplesim.driver.data.hpwb.000 + Active + Json recCZdtLIakEf3fWh - recXfOCZByFlChQxR rec1CtEN5Aheg8zzR recQduwtmVeYjXuQV rec5AtelLyWoElhSp recyprhpuu5W0nemB recnpE4pnmald9iTU - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recRob19Mg7TFO5bB - Pending - rec2ZUAEXRfDLAKh8 - sim.scada.driver.report.000 - Active - Json + 000 1 - sim.scada.driver.report + recRob19Mg7TFO5bB + simplesim.driver.data.hpwb 000 1 - Pending + Active - gwatn + rec2ZUAEXRfDLAKh8 + Active + recb9fI4kRkTYXDzA + satn + rec9udDZT7JDuAbjl 2022-10-03T04:45:41Z - 000 + optin.tadeed.algo.000 + Deprecated + Json recEfJPESYeun1WwU recbhlzRRZJ3080ot recJIkl9dZLq01OeF recDzW9fuX9MvVvla - recxnrRBEZg5cPVPt - Active - optin.tadeed.algo.000 - Deprecated - Json + 000 1 Sent by Gnf to Daemon to opt into a new tadeed. + recxnrRBEZg5cPVPt optin.tadeed.algo 100 0 Deprecated + Active + recAWKkS0hcyws7O6 2022-11-04T13:41:29Z - 002 + initial.tadeed.algo.optin.002 + Active + Json recuEy4lhhe7MqUUN rec3ez7rNTNCnqsst recRMYT3frXP98k2q recMpoAkDFT027Lro - recopFBsq4TmG87Op - recvbnpa4cX2nNp9p - recb9fI4kRkTYXDzA - recERKCcoJa8mkC8L - Active - recYSfcJBIVxFIWCZ - recCqC0KKS00693kw - recyzaIpCoUsKpVbL - recHWe9Q4itm5lWv2 - recQUUMz6KxDUEjWi - initial.tadeed.algo.optin.002 - Active - Json + 002 1 The TaDaemon must opt into the TaDeed before receiving it. This message prompts that action. + recERKCcoJa8mkC8L initial.tadeed.algo.optin 002 1 Active + recyzaIpCoUsKpVbL + rec8Ix2UVLnq7xycF + Active Received by TaDaemon so that it can opt into intial TaDeed + recopFBsq4TmG87Op + recvbnpa4cX2nNp9p + recb9fI4kRkTYXDzA + recHWe9Q4itm5lWv2 + recQUUMz6KxDUEjWi gnf gwatn - gridworks + + + + recAYQXrpksoHikrI + 2023-05-01T22:01:58Z + . + 1 + 1 + Pending + Pending recBEBBA0ctnOYQnC 2023-01-16T17:19:07Z - 000 + join.dispatch.contract.000 + Active + Json recxO0tKJ0Wp8B3pW rec88fKL08R9C0d0I recaYqACGpgpO40W8 recqZpHzORTrCpcjl - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recvbnpa4cX2nNp9p - recbm5aHNmuHvaYKJ - Active - recIX7Ev6QVM4jtwT - recg5ScMmCJuinnKL - rec2zpio7xkxnKeuv - join.dispatch.contract.000 - Active - Json + 000 @@ -5702,19 +6148,63 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come then responding to the SCADA via RabbitMQ with a dispatch.contract.confirmed payload. https://gridworks.readthedocs.io/en/latest/dispatch-contract.html + recbm5aHNmuHvaYKJ join.dispatch.contract 000 1 Active + recIX7Ev6QVM4jtwT + Active Sent from a Scada to its paired AtomicTNode on RabbitMQ + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + recvbnpa4cX2nNp9p + rec2zpio7xkxnKeuv gwatn - satn + + + + recBqSlQdF17CgMPY + 2023-05-10T14:21:22Z + flo.params.report.000 + Active + Json + recNMgiBoWjcpx9qS + rect2ta2gIzYqWAyr + recJcYgKuh54ltqk5 + recDvDUWKt6hxy1l9 + recNy04v6VC70hH8c + recHRWGtm51BPqgFb + recg6mf4mCKi2Fwa8 + 000 + + + + 1 + Type used for a message provided by an AtomicTNode or SCADA actor re the flo parameters just used to run a FLO. + rechWdY7ztMafROYr + flo.params.report + 000 + 1 + Active + + recGCj1HgHQww3p80 + Active + Flo Params Report + recb9fI4kRkTYXDzA + rec13dujLuXXSf5L3 + rec24qjC90m0f4Kvl + https://gridworks-atn.readthedocs.io/en/latest/flo.html#flo-params + gwatn + recDEr7ob2KLqM4gU 2022-06-23T18:39:41Z - 000 + telemetry.reporting.config.000 + Active + Json recjhPIPtr6UXppHQ recJW4Tmdi1HStfwy rec4adVbIULyfOhu4 @@ -5723,37 +6213,38 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recEwx1N4X1KFrH7d recJ3u86m6sh2vNWk recusFjl07hlf1NxY - recb9fI4kRkTYXDzA - rec1E12bdSXOtQ9qP recbw5AyGqRuPCnlj rec5TsqaPhBNGB6On recuTyHJfuZVMXRQ4 recNBlEnmGPTuNEva - Active recc1W1unmzowrKX9 rec2HyLffy6QK9QId - reci2IGqh2kbuZxSa - rec11OYyEPT4FV8al - rec8j6bhXPOYce5Rq - telemetry.reporting.config.000 - Active - Json + 000 1 + rec1E12bdSXOtQ9qP telemetry.reporting.config 000 1 Active + reci2IGqh2kbuZxSa + rec11OYyEPT4FV8al + Active + recb9fI4kRkTYXDzA + rec8j6bhXPOYce5Rq scada gwproto + recDYjXYf8RbWmUFe 2022-11-08T04:31:35Z - 000 + market.type.gt.000 + Active + Json recOxmICij5REVdXj recBbPnDHgnSutafc recW6RdAsZlS8B8xV @@ -5761,20 +6252,13 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come recOhTtiANrJcVKgf recV7ixIyYTmrGAbL recc5A1JaRXNBZe9g - rec6PDgvHMkqnbyOQ recwDJqmDK7sTdTTC recDaxDt8J5MZRx8y - Pending recZmZP13YV9Rmbnw rec75xMuw0SMkzjVc recounhEj97w5SfDm recA15Ak50x6bNMx1 - rectD1KxAzqJILPfu - recMvuzDPwhs257Bs - Name - market.type.gt.000 - Active - Json + 000 true MarketType @@ -5783,15 +6267,21 @@ Shares the same purpose as gs.pwr, but is not designed to minimize bytes so come A [MarketMaker](https://gridworks.readthedocs.io/en/latest/market-maker.html) GNode can run several types of Markets. For example, it can run an hourly real-time market and also an ancillary services market for Regulation. This is captured by the concept of MarketType. + rec6PDgvHMkqnbyOQ market.type.gt 000 1 - Pending + Active + rectD1KxAzqJILPfu + recMvuzDPwhs257Bs + Name + Active Used by MarketMakers to simultaneously run several different types of Markets https://gridworks.readthedocs.io/en/latest/market-type.html gwatn gwmm + recDhp6cvXPgXpOgi @@ -5803,44 +6293,47 @@ by the concept of MarketType. recDjO3rdq76LMOoL 2022-07-10T12:49:03Z - 000 + resistive.heater.component.gt.000 + Active + Json rechtGIFRjENiH3Cv recLnMCNd00yOpeVw recSjtsFt8YhLc4wA recThSsC8YgHG8vd0 recRn71YtHKdHpcAZ recvDYPGmlUWE3yzH - rec24qjC90m0f4Kvl - rec1joYefgk9OQTyG - Active - rec9jyOwhibLuECVH - recswpHqNcpEEPH2G - rec1TqtyFK3VxPiEv - ComponentId - resistive.heater.component.gt.000 - Active - Json + 000 true ResistiveHeaterComponent true 1 GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Component associated to a SpaceheatNode is part of this structure. + rec1joYefgk9OQTyG resistive.heater.component.gt 000 1 Active + rec9jyOwhibLuECVH + recswpHqNcpEEPH2G + rec1TqtyFK3VxPiEv + ComponentId + Active Type for tracking Resistive Heater Components + rec24qjC90m0f4Kvl https://g-node-registry.readthedocs.io/en/latest/component.html newatn scada gwproto + recDp8U1jLA9zeEx2 2022-10-02T23:32:44Z - 002 + base.g.node.gt.002 + Active + Json recbP43UORyJcMOyK recSyaqv9CQCvmg7I rec3Ip25a5UdscQKD @@ -5855,22 +6348,29 @@ by the concept of MarketType. recKtxHw3srimaENr recKVh2K6tmazsz4r recHPzXnfcnuA7lLS - rec24qjC90m0f4Kvl - recb9fI4kRkTYXDzA - recopFBsq4TmG87Op - recZhfzRnHkE804iR recoe5Oa6CzAAMH80 recCuVGEIt5PtitBs - Pending rec5HXPeyp3jic6FV recqx4EqT3OFtnxTG - recBJRHgd3WPVUvQw - rectEwF6ZLLRopleW - recUb6ezx8SD26ynT - rec3dplhqy7h95uAR - rec1osS0C34lxMFkC - recAZ1Zsq5mzNmXks - recIah41uCqR2IDJk + 002 + true + BaseGNode + + + 1 + BaseGNode. Authority is GNodeFactory. + recZhfzRnHkE804iR + base.g.node.gt + 002 + 1 + Active + recBJRHgd3WPVUvQw + rectEwF6ZLLRopleW + recUb6ezx8SD26ynT + rec3dplhqy7h95uAR + rec1osS0C34lxMFkC + recAZ1Zsq5mzNmXks + recIah41uCqR2IDJk recKkK9eMIcEKx0ye rec2tMERYL2Mdnty3 rechF4eml8urlVmxU @@ -5881,35 +6381,25 @@ by the concept of MarketType. recueNLsroZPIyXPm recloTCbAMeQzOIzq recehciOce1BjWYzY - reccq15mpDgpXGekn - recHxMHk1Q13AGxQT - recGg8u1kDk0dEwT0 - GNodeId New attributes: PrevAlias, OwnerAddr, DaemonAddr, TradingRightsNftId. CHANGE to TOPOLOGY Axiom (Joint Axiom 1) - base.g.node.gt.002 - Active - Json - true - BaseGNode - - - 1 - BaseGNode. Authority is GNodeFactory. - base.g.node.gt - 002 - 1 - Pending - gnf - gnr - gwatn + reccq15mpDgpXGekn + GNodeId + Active + rec24qjC90m0f4Kvl + recb9fI4kRkTYXDzA + recopFBsq4TmG87Op + gridworks + recDq5Oo6baJLVS5s 2023-03-02T10:35:29Z - 001 + heartbeat.b.001 + Active + Json recu9WOouWCxxqJsw rec34OIYCFo5w9hkm recu06qV62QnggRW0 @@ -5917,89 +6407,88 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) reciMffYqbquDDMwr recsbmamjY68wXvzD recbm3rb6c3wtCzWR - recWwoTHJMScsOvnF - rec24qjC90m0f4Kvl - recqSXVzLo8RtEjlH - recb9fI4kRkTYXDzA - recCPb9SbFhFCSw5m - Active - recgroRYrhO8lRT9B - recLbNfmaoYeiI8A9 - rec9hyu5DGf4HWX7A - heartbeat.b.001 - Active - Json + 001 1 Heartbeat for Scada-AtomicTNode DispatchContract, to send via RabbitMQ + recCPb9SbFhFCSw5m heartbeat.b 001 1 Active - gwatn + recLbNfmaoYeiI8A9 + Active + recWwoTHJMScsOvnF + rec24qjC90m0f4Kvl + recqSXVzLo8RtEjlH + recb9fI4kRkTYXDzA gwproto - scada + recE32bnkaJFE5q4Y 2022-06-15T22:55:39Z - 100 + gt.sh.simple.status.100 + Deprecated + Json recYD7KpGFv86yleu recoPn9xJOxqb6ifT recmUBXrUigX4SFIe recqTlmb22FCbFzaQ - rec23C6am0WIH9veT - gt.sh.simple.status.100 - Deprecated - Json + 100 1 + rec23C6am0WIH9veT gt.sh.simple.status 100 1 Deprecated + recE3bIWWFpMPqyS1 2023-01-08T10:20:16Z - 000 + heartbeat.b.000 + Active + Json recekkQZ2hCpBzryE recoduUdKygrSq0T5 reczMHDNg6FcTdh41 rec1nNl4mM8w486VP recOBfgFL5HGn9j1B recee7OczpcTACTcR - recWwoTHJMScsOvnF - rec24qjC90m0f4Kvl - recqSXVzLo8RtEjlH - recb9fI4kRkTYXDzA - recCPb9SbFhFCSw5m rechs1D8dytBH2C5s - Pending - heartbeat.b.000 - Active - Json + 000 1 Heartbeat for Scada-AtomicTNode DispatchContract, to send via RabbitMQ + recCPb9SbFhFCSw5m heartbeat.b 001 0 Deprecated + Pending + recWwoTHJMScsOvnF + rec24qjC90m0f4Kvl + recqSXVzLo8RtEjlH + recb9fI4kRkTYXDzA + recECSz5o4Z7NFjhG 2023-01-15T12:53:53Z - 001 + atn.bid.001 + Active + Json rec8t56gTGBi3AXBr recHNfUgwXIvrBwWK rec4tCsBpIaZUGllT @@ -6008,71 +6497,73 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recREgyk5HQKEtSMJ recfzsWHMU0fhZE47 recqXdxf3WK0BhhJo - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recdsSDIz6EmZCvr9 - recopFBsq4TmG87Op - recvbnpa4cX2nNp9p - recLF7qGdmXsqb9M2 - Pending rec75xMuw0SMkzjVc recounhEj97w5SfDm recZmZP13YV9Rmbnw - recSIwq3BdNSAxp2e - recSNej4i6EwucKbV - rec4x9sbCR3Q6Bwm8 - recQEk0lDO3sQJDyc - BidList changed to PqPairs - atn.bid.001 - Active - Json + 001 1 + recLF7qGdmXsqb9M2 atn.bid 001 1 - Pending + Active + BidList changed to PqPairs + recSIwq3BdNSAxp2e + recSNej4i6EwucKbV + Active AtomicTNode bid sent to a MarketMaker + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + recdsSDIz6EmZCvr9 + recopFBsq4TmG87Op + recvbnpa4cX2nNp9p + rec4x9sbCR3Q6Bwm8 + recQEk0lDO3sQJDyc https://gridworks.readthedocs.io/en/latest/market-bid.html gwmm gwatn + recEGOX7VX0bQ3Lvf 2023-02-14T14:27:15Z - 000 - recjsV3JWXQNje4mp - rec5TsqaPhBNGB6On - rec77AahxpNNz6eNx - recnrbGd4QYB1NxjM - Active - recfHuF6SpeyhwE56 - recJJyBjjBHOe3FnE egauge.io.000 Active Json + recjsV3JWXQNje4mp + rec5TsqaPhBNGB6On + recnrbGd4QYB1NxjM + 000 1 When the component associated to a PowerMeter ShNode has MakeModel EGAUGE__4030, there is a significant amount of configuration required to specify both what is read from the eGauge (input) and what is then sent up to the SCADA (output). This type handles that information. + rec77AahxpNNz6eNx egauge.io 000 1 Active + recfHuF6SpeyhwE56 + recJJyBjjBHOe3FnE + Active Used for an eGauge meter's component information in a hardware layout https://gridworks-protocol.readthedocs.io/en/latest/egauge-io.html scada gwproto + recEhzcpob8H7VuEF 2023-02-14T20:38:46Z - 100 + spaceheat.node.gt.100 + Active + Json recI6AdAg9Dz3yaLq rec0WVcC4M6yKdKuR recXk1RFSZEvWMYii @@ -6083,79 +6574,76 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) reczpo22mAIYZkTRF recKf4zpfW8Q9hzkW recgWYB1V2NZmucst - rec24qjC90m0f4Kvl - recb9fI4kRkTYXDzA - recijDUCMCF0drLi3 - Active recQeMNisJZjsYXTl recomGYBJ9ldSsiNU - recHdlXqyTBvi9zRZ - recuJQxG7uIZ98O1y - ShNodeId - spaceheat.node.gt.100 - Active - Json + 100 true ShNode 1 Type for tracking information about a Spaceheat Node. + recijDUCMCF0drLi3 spaceheat.node.gt 100 1 Active + recHdlXqyTBvi9zRZ + recuJQxG7uIZ98O1y + ShNodeId + Active Spaceheat Node + rec24qjC90m0f4Kvl + recb9fI4kRkTYXDzA https://gridworks-protocol.readthedocs.io/en/latest/spaceheat-node.html scada gwproto + recF9KonH58AltK0K 2023-01-19T14:30:26Z - 000 + basegnode.scada.create.000 + Active + Json rec9PJA13l3jM7pJm recZQKyBftNOGc46Z recQOONbTZMocKXeg recfm7YlkXDX6XQEU recEG7l0wT1KjHSFs - recb9fI4kRkTYXDzA - recopFBsq4TmG87Op - recvbnpa4cX2nNp9p - recWnYsIlIcwBPwZY - Pending - recaBlt54tM7DPjwR - recl7u8ZInYMFV7EC - reczUIUpS1LU0Aw6d - recw40tHmgYZ9Jjrx - basegnode.scada.create.000 - Active - Json + 000 1 This is a payload designed to be sent from a TaOwner to the GNodeFactory. The TaOwner creates a private Algorand key and puts it on the Scada Device that will sense and control their TerminalAsset. The public address is associated with the Scada GNode by the GNodeFactory. + recWnYsIlIcwBPwZY basegnode.scada.create 000 1 - Pending + Active + recaBlt54tM7DPjwR + recl7u8ZInYMFV7EC + Active Scada BaseGNode Creation + recb9fI4kRkTYXDzA + recopFBsq4TmG87Op + recvbnpa4cX2nNp9p + reczUIUpS1LU0Aw6d + recw40tHmgYZ9Jjrx gwatn gnf + recFrR35Q6mQhx1KM 2023-01-05T16:58:29Z - 001 - recWwoTHJMScsOvnF - recVNiapT0HIufahj - Pending heartbeat.a.001 Active Json + 001 @@ -6163,18 +6651,24 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Payload for direct messages sent back and forth between actors, for example a Supervisor and one of its subordinates. + recVNiapT0HIufahj heartbeat.a 100 0 Deprecated + Pending Used to check that an actor can both send and receive messages + recWwoTHJMScsOvnF https://gridworks.readthedocs.io/en/latest/g-node-instance.html + recGuvhjDYO65d5rP 2022-06-07T09:29:22Z - 000 + pipe.flow.sensor.component.gt.000 + Active + Json recVs9H70Rxs6FuHL recdFwlVqkCgZfGIS recibIy1C38bRpg0P @@ -6182,37 +6676,38 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rectkPcgczE3uuPgd recY8qpylt2Ez8GeH rec1juFm5ISKu1HWQ - rec24qjC90m0f4Kvl - rec4u5c6FO198haBK - Active - rece0jNAI2D1qrYj7 - recuRXwHhLfdx259p - recYDKruJx6uhqxLp - ComponentId - pipe.flow.sensor.component.gt.000 - Active - Json + 000 true PipeFlowSensorComponent true 1 GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Component associated to a SpaceheatNode is part of this structure. + rec4u5c6FO198haBK pipe.flow.sensor.component.gt 000 1 Active + rece0jNAI2D1qrYj7 + recuRXwHhLfdx259p + recYDKruJx6uhqxLp + ComponentId + Active Type for tracking Pipe Flow Sensor Components + rec24qjC90m0f4Kvl https://g-node-registry.readthedocs.io/en/latest/component.html newatn scada gwproto + recH9GUDdSB7SiwNG 2022-11-08T04:11:14Z - 000 + atn.bid.000 + Active + Json recIKbu4rYF1nXhPD recxZawnFBV5tyTsV recT1nhwCuJiHkC52 @@ -6221,35 +6716,36 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recQJb1dVOhb9b4gc rec5yCVNnWVXBDdMc recOeaCOt6KQeMuNX - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recdsSDIz6EmZCvr9 - recvbnpa4cX2nNp9p - recLF7qGdmXsqb9M2 - recg6kZdbgxDUXAAh - Pending rec75xMuw0SMkzjVc recounhEj97w5SfDm recZmZP13YV9Rmbnw - atn.bid.000 - Active - Json + 000 1 + recLF7qGdmXsqb9M2 atn.bid 001 0 Deprecated + Pending + recg6kZdbgxDUXAAh AtomicTNode bid sent to a MarketMaker + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + recdsSDIz6EmZCvr9 + recvbnpa4cX2nNp9p https://gridworks.readthedocs.io/en/latest/market-bid.html + recJH4tbXOqVJkMVW 2022-09-19T20:21:15Z - 000 + basegnode.ctn.create.000 + Active + Json recHw5JOwPznxEWve recsEvybSpl9WN6Ny recfAClSUjZOHVHgw @@ -6257,118 +6753,122 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recKr9eJbHAgZPAJr rec2EuDcLlLMuM7C5 recdtoFwqku5okZTc - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recopFBsq4TmG87Op - rect6WA80mNWDt7v0 - Pending - recY5s5LoUEwNBowT - recVyJz6EmMdwDjYy - basegnode.ctn.create.000 - Active - Json + 000 1 + rect6WA80mNWDt7v0 basegnode.ctn.create 000 1 Pending + recY5s5LoUEwNBowT + recVyJz6EmMdwDjYy + Pending + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + recopFBsq4TmG87Op gnf gnr + recLufl9jSdsMGsFR 2022-11-17T06:03:24Z - 000 + market.slot.000 + Active + Json recDaxDt8J5MZRx8y rec1hFSN0SKmeE8CV recC2OJXewZyxgy8T - recb9fI4kRkTYXDzA - rec13dujLuXXSf5L3 - recwEHKPPTKLK8OFz recbnSBQbnHs5KuDy - Pending - recleupDcbcVTVRQ9 - recLBYNcGvIrpb1nX - market.slot.000 - Active - Json + 000 1 + recwEHKPPTKLK8OFz market.slot 000 1 - Pending + Active + recleupDcbcVTVRQ9 + recLBYNcGvIrpb1nX + Active MarketSlot + recb9fI4kRkTYXDzA + rec13dujLuXXSf5L3 https://gridworks.readthedocs.io/en/latest/market-slot.html gwmm gwatn + recMyDdiQjtfTMAP1 2022-11-04T15:04:29Z - 000 + old.tadeed.algo.return.000 + Active + Json recQegsyGIGw5mDwR recGTF9QvbMMCTiQu recb1KEicJAMiVXJV recElgddLa2jgifep - recopFBsq4TmG87Op - recvbnpa4cX2nNp9p - recde7ZQpg5BRpHxm - Active - recPRrjd1GyqOVHIZ - recbN7L6MH925xDby - old.tadeed.algo.return.000 - Active - Json + 000 1 + recde7ZQpg5BRpHxm old.tadeed.algo.return 000 1 Active + recPRrjd1GyqOVHIZ + recbN7L6MH925xDby + Active + recopFBsq4TmG87Op + recvbnpa4cX2nNp9p gnf gwatn + recNIlQetbTDVNam8 2022-11-29T13:24:33Z - 000 + g.nodes.broadcast.000 + Active + Json recigdE3vSs3HSd66 recrKX7TavoFqODYc recdSCNKICUvxsgAo reci06VasVLO4ZMyk recYGgvDIbffdBWZO - recMDHEwaShpGskfS - Pending - rec0CVyxlO3cPJGWD - g.nodes.broadcast.000 - Active - Json + 000 1 + recMDHEwaShpGskfS g.nodes.broadcast 000 1 Pending + rec0CVyxlO3cPJGWD + Pending gnr + recNbXbJE9rcnLXAs 2022-07-05T12:48:52Z - 110 + gt.sh.status.110 + Active + Json recJsAmOvRrHuzY0o recVgR5ZOHi7dvBav recEnND4VVh74Ayni @@ -6378,95 +6878,86 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recK2zOa4WxMEeSn9 recdwjoLr6DQUc20I recJSFsEahEgbS5C2 - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - rec13dujLuXXSf5L3 - recbbx6wGZEfqP2Kn recTkA12JINIgGcXq - Active - rec0X5JpHPTyqYdrx - gt.sh.status.110 - Active - Json + 110 1 Status message sent by a Spaceheat SCADA every 5 minutes + recbbx6wGZEfqP2Kn gt.sh.status 110 1 Active true + rec0X5JpHPTyqYdrx + Active + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + rec13dujLuXXSf5L3 gwproto + recNe1NhrgRzyRlSA 2022-07-03T22:09:49Z - 100 + gt.sh.status.100 + Active + Json recfnCI6bJWG4n4xR recl1CjNX7CBI77Cf reccl6zfh9EN32iFD recOWeL6PoLldCrop recZOVb1cq9Dq3Oi5 recE2H3ffos4Ujqq7 - recbbx6wGZEfqP2Kn - gt.sh.status.100 - Active - Json + 100 1 Status message sent by a Spaceheat SCADA every 5 minutes + recbbx6wGZEfqP2Kn gt.sh.status 110 0 Deprecated true + recO5QLpXXDMjgo1j 2022-05-11T18:08:26Z - 100 - recw4w4kyKb5qsTUd - p - recc5qGcZNQPmktbe - Pending gs.pwr.100 Active GridworksSerial + recw4w4kyKb5qsTUd + 100 + p 1 Used by a SCADA -> Atn or Atn -> AggregatedTNode to report real-time power of their TerminalAsset. Positive number means WITHDRAWAL from the grid - so generating electricity creates a negative number. This message is considered worse than useless to send after the first attempt, and does not require an ack. Shares the same purpose as power.watts, but designed to be small in size (thus using the GridWorks Serial protocol instead of JSON). The idea is this message, instantaneous reporting of power, is the highest priority message in the system and thus gets to have its metadata made explicit in the structure of the code instead of parameterized. One result is the size of the sent data is very small. Sometimes bandwidth can be an issue, and smaller messages are very useful. + recc5qGcZNQPmktbe gs.pwr 100 1 Pending true + Pending Real-time power of TerminalAsset in Watts + recO8OdobcISYms0B 2022-09-21T18:02:02Z - 000 - recFgsax2FGGg4UTE - recG3uKKhjsdprmUN - recopFBsq4TmG87Op - recvbnpa4cX2nNp9p - recyuQKkp5CFejv2j - Active - rect61DlS8mCPHnUL - recaT1SF8nRebYo7G - recWaQL9LKI0BTilC - rec41IGqMHOcsZEXl - recCHkLILWYGN7rjn - reccpDU01eDwuMvrf initial.tadeed.algo.create.000 Active Json + recFgsax2FGGg4UTE + recG3uKKhjsdprmUN + 000 @@ -6475,130 +6966,133 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) GnodeFactory creates a TerminalAsset with GNodeStatus pending. For more information: [TaDeed](https://gridworks.readthedocs.io/en/latest/ta-deed.html) [TaValidator](https://gridworks.readthedocs.io/en/latest/ta-validator.html) + recyuQKkp5CFejv2j initial.tadeed.algo.create 000 1 Active + recaT1SF8nRebYo7G + recJRYtEf5HsSuZBM + Active TaValidator sends to GNodeFactory to complete creation of an initial TaDeed + recopFBsq4TmG87Op + recvbnpa4cX2nNp9p + rec41IGqMHOcsZEXl + recCHkLILWYGN7rjn + reccpDU01eDwuMvrf gnf - gridworks gwatn + recObejFqCYx5kpak 2023-02-20T14:22:59Z - 000 + gridworks.header.000 + Active + Json recAPFghl03E7vx46 rec5OmOMeHTBF0VGa recIdseIWBPHqqxO6 recmJAntc8jP45C1K recfVWGSQN5M3rRDv rectU5zx1C8kMXD5O - recu7baM2BVbAYQAH recXYWcQiauWoeify - Pending - gridworks.header.000 - Active - Json + 000 1 + recu7baM2BVbAYQAH gridworks.header 000 1 Pending true + Pending + recPPTLAWZu08mD7s 2022-11-14T15:43:18Z - 000 + terminalasset.certify.hack.000 + Active + Json recsXoFOxudbW1SiS recBClfoIYbmVTcvi recjn4JQDiHTxb8zW recRbzzZK0pCTehDf - recb9fI4kRkTYXDzA - recopFBsq4TmG87Op - recl00nd7rYLyLDUL - Pending - rec5K84S2MN0iMNlE - reccEMLYgCyyYLPr2 - terminalasset.certify.hack.000 - Active - Json + 000 1 + recl00nd7rYLyLDUL terminalasset.certify.hack 000 1 - Pending + Active + rec5K84S2MN0iMNlE + reccEMLYgCyyYLPr2 + Active + recb9fI4kRkTYXDzA + recopFBsq4TmG87Op gwatn gnf + recPbLemXyDnvKcIc 2022-06-06T18:44:52Z - 000 + relay.component.gt.000 + Active + Json recNiGLIdTxOhujx3 rec1tjyG2fxEVpUYW recEXU8tEG6X0jUnU recPuhtbcBHZR6Qai reci7Ga0o0Ubtlk5g recUc59QIjyPi1Xpl - rec24qjC90m0f4Kvl - recdbl99ZoQqyOhS7 - Active - recxelQn6OCbkk5A5 - recZBrVC3qx5dJ9B0 - recxgiw8kmcghenPd - ComponentId - relay.component.gt.000 - Active - Json + 000 true RelayComponent true 1 GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Component associated to a SpaceheatNode is part of this structure. + recdbl99ZoQqyOhS7 relay.component.gt 000 1 Active + recxelQn6OCbkk5A5 + recZBrVC3qx5dJ9B0 + recxgiw8kmcghenPd + ComponentId + Active Type for tracking Relay Components + rec24qjC90m0f4Kvl https://g-node-registry.readthedocs.io/en/latest/component.html scada newatn gwproto + recPf7eAhpge7kvO7 2022-11-04T15:33:25Z - 000 + initial.tadeed.algo.transfer.000 + Active + Json reclVHMPGkM3r0cf2 recqbPC3JOFtb5oXx rec1kx74Elyh0gRye reci8yG7lmDsa51uV recTGNe2hCg0CwUye rech65PHs37XIxKeb - recopFBsq4TmG87Op - recvbnpa4cX2nNp9p - reccq04oqFsHHPTlN - Active - recsRFfTXSym7gX54 - recBZVJVqK4DOb2JX - recD3lLZaCPt9ehVW - recLRRgeFOdFakOzR - reconX1DBndnGFRBZ - initial.tadeed.algo.transfer.000 - Active - Json + 000 @@ -6621,101 +7115,114 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) [Transactive Device](https://gridworks.readthedocs.io/en/latest/transactive-device.html) + reccq04oqFsHHPTlN initial.tadeed.algo.transfer 000 1 Active + recBZVJVqK4DOb2JX + recdAy68epnKcXjLL + Active TaValidator sends to GNodeFactory after validating Transactive Device + recopFBsq4TmG87Op + recvbnpa4cX2nNp9p + recLRRgeFOdFakOzR + reconX1DBndnGFRBZ gnf - gridworks gwatn + recPmpuzBMWnnZRpa 2022-07-03T21:26:12Z - 100 - recjdjO1e7eWo3j8T - rech7EAFuj56GsPDR - recsyCaWjc5Ii5DrU - recb9fI4kRkTYXDzA - recqSXVzLo8RtEjlH - recdmZpmDC9qq3Wz5 - Active - recRsVv1nAv6EFkrJ gt.driver.booleanactuator.cmd.100 Active Json + recjdjO1e7eWo3j8T + rech7EAFuj56GsPDR + recsyCaWjc5Ii5DrU + 100 1 + recdmZpmDC9qq3Wz5 gt.driver.booleanactuator.cmd 100 1 Active true + recRsVv1nAv6EFkrJ + Active + recb9fI4kRkTYXDzA + recqSXVzLo8RtEjlH gwproto + recPxYqZlRvCFlD8p 2022-11-23T14:01:41Z - 000 - rec57uhIFk7eVwvKQ - recb9fI4kRkTYXDzA - rec0Od5vGZi8EDj7g - Pending - recCLW1iXAhVHGoUm - recZZqjz8vL6Dj548 sla.enter.000 Active Json + rec57uhIFk7eVwvKQ + 000 1 + rec0Od5vGZi8EDj7g sla.enter 000 1 - Pending + Active + recCLW1iXAhVHGoUm + recZZqjz8vL6Dj548 + Active + recb9fI4kRkTYXDzA gnf gwatn + recPy6SuizSerb3JG 2022-11-04T17:59:45Z - 000 + new.tadeed.send.000 + Active + Json recR5j1j3DAzKovaR recv0jEuP3xygb0bP rec6n5D0n75iRarhL rec0PurqCSDSSL9gV recOdulFCYJbIktv4 - recopFBsq4TmG87Op - recvbnpa4cX2nNp9p - recTSdWeNPEKAZuAP - Active - recQItJExa3ZiV3Jh - reckwTitpkjc24FAx - new.tadeed.send.000 - Active - Json + 000 1 + recTSdWeNPEKAZuAP new.tadeed.send 000 1 Active + recQItJExa3ZiV3Jh + reckwTitpkjc24FAx + Active + recopFBsq4TmG87Op + recvbnpa4cX2nNp9p gnf gwatn + recQ1SzB1rQPnbRUR 2022-06-09T21:31:30Z - 100 + gt.sensor.reporting.config.100 + Active + Json recAy1MJ6WTkJC2Bt recmVpjjvpSG6SioS rec8XxSaRb8m7Wd5D @@ -6723,129 +7230,131 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) reczOogxDbgX7j8pi recMNoEhsIjpp7oXK recF5JRJR6AVkfQsK - rece1suo3h3SqfW4M - Active rec2HyLffy6QK9QId recc1W1unmzowrKX9 - recOq6H5IW6gkmww6 - gt.sensor.reporting.config.100 - Active - Json + 100 SensorReportingConfig 0 + rece1suo3h3SqfW4M gt.sensor.reporting.config 100 1 Active + recOq6H5IW6gkmww6 + Active scada + recQVDSRdSrYEHimS 2022-07-05T12:55:18Z - 110 - recO5REMzzyrc2uHT - recFUjvwvmvvkA01e - reci0niurz5s0wuXJ - rec24qjC90m0f4Kvl - recb9fI4kRkTYXDzA - receVdNEfIE1HLnwN - Active - recuxGhKEXF5Edw2W - recOD1KrMbyUpliyI gt.sh.cli.atn.cmd.110 Active Json + recO5REMzzyrc2uHT + recFUjvwvmvvkA01e + reci0niurz5s0wuXJ + 110 1 + receVdNEfIE1HLnwN gt.sh.cli.atn.cmd 110 1 Active true + recuxGhKEXF5Edw2W + recOD1KrMbyUpliyI + Active + rec24qjC90m0f4Kvl + recb9fI4kRkTYXDzA newatn gwproto + recRzt4GyUgwjJy3l 2023-04-09T21:06:47Z - 001 - rec24qjC90m0f4Kvl .001 + 001 1 0 Deprecated + rec24qjC90m0f4Kvl recT4SSkJ18pz5YoZ 2022-09-20T12:15:57Z - 000 + basegnodes.broadcast.000 + Active + Json recZoRtISP4HaNWda recoDIFE4bNJi9OJW recCaA8vu505G0NGF recoe5Oa6CzAAMH80 recCuVGEIt5PtitBs - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - reczYInsSYetUcVpZ - Pending - rec1Kr8gSWyIe4lG2 - recRLpRImAACQhmSj - basegnodes.broadcast.000 - Active - Json + 000 1 + reczYInsSYetUcVpZ basegnodes.broadcast 000 1 Pending + rec1Kr8gSWyIe4lG2 + recRLpRImAACQhmSj + Pending + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl gnf gnr + recTZ13dEbwrKazkL 2022-07-05T11:32:23Z - 100 + gt.dispatch.boolean.100 + Active + Json reczfNmiB9hWAkSsY recjPLNQVJ2uCOYfC recc61I5CYPBiSoz2 reccHAZq7xruWVLSo recUyndqnwyKAWe93 recSNRAurDrIeUgqg - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recqSXVzLo8RtEjlH - rechZBY0G1JuNeEuG - Pending - recGk4c4hm4Ng97pB - gt.dispatch.boolean.100 - Active - Json + 100 1 Boolean dispatch command sent over the cloud broker from one GNode (FromGNodeAlias/ FromGNodeId) to another (ToGNodeAlias). AboutNodeAlias is the node getting dispatched. It may be a GNode, but it can also be a SpaceHeatNode. + rechZBY0G1JuNeEuG gt.dispatch.boolean 110 0 Deprecated true - newatn + Pending + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + recqSXVzLo8RtEjlH + recTZzT6nQkrQ4sMq 2022-05-11T18:08:26Z - 100 + gt.power.sync.100 + Pending + Json recSUuF57hzqwp3RB recVdAiysaXLvmg8u rec1lT7lfuqohFuY2 @@ -6854,23 +7363,24 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recgGXDzQHPSfoIYU reccTfzFazDviUeXp recn2CJw74mLLQ8tr - rechZ9OTpGxuT8xWl - gt.power.sync.100 - Pending - Json + 100 1 + rechZ9OTpGxuT8xWl gt.power.sync 100 1 + recULIwPg69M69185 2023-01-28T00:16:46Z - 000 + multipurpose.sensor.cac.gt.000 + Active + Json recFitcFUJsJBih3G recZJ9AJ4rOoBcDpv recwkvcQFhhOMDyO4 @@ -6880,38 +7390,39 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recDSzwJ1nc31pFT2 rec0oIFJ2LAVcoLeV recrrejIS50R0B0wv - rec24qjC90m0f4Kvl - recpqtAlI1M19QR9b - Active recLQWqTvGwSz2GcN rec2HyLffy6QK9QId recc1W1unmzowrKX9 - recRlWqdLmqPKyUME - recFZKk2qxmOmDKdD - ComponentAttributeClassId - multipurpose.sensor.cac.gt.000 - Active - Json + 000 true MultipurposeSensorCac true 1 GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Cac, or ComponentAttributeClass, is part of this structure. + recpqtAlI1M19QR9b multipurpose.sensor.cac.gt 000 1 Active + recRlWqdLmqPKyUME + recFZKk2qxmOmDKdD + ComponentAttributeClassId + Active Type for tracking Multipuprose Sensor ComponentAttributeClasses + rec24qjC90m0f4Kvl https://g-node-registry.readthedocs.io/en/latest/component-attribute-class.html scada gwproto + recUj3ZPKMsXanG88 2022-07-10T14:13:06Z - 000 + spaceheat.node.gt.000 + Active + Json recda7k1BL8wixO1c recL0U9e64jcs9Ftk recN8NS2KiZw0Wzbp @@ -6921,63 +7432,65 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recbXWZXIxr7MOnUv recTIuInqPiemsf9b reclgcZrxIoZfiovl - recijDUCMCF0drLi3 - Deprecated recQeMNisJZjsYXTl recomGYBJ9ldSsiNU - recN1T4RyJw2VMsOW - ShNodeId - spaceheat.node.gt.000 - Active - Json + 000 true ShNode 1 Type for tracking information about a Spaceheat Node. + recijDUCMCF0drLi3 spaceheat.node.gt 100 0 Deprecated + recN1T4RyJw2VMsOW + ShNodeId + Deprecated Spaceheat Node https://gridworks-protocol.readthedocs.io/en/latest/spaceheat-node.html + recUtSmERYdWUVAPm 2023-01-06T03:11:49Z - 003 + initial.tadeed.algo.optin.003 + Active + Json rec2E2PuhJhkdGWTk recxTNjUuhKa3Xw8F recpGkpFxO7Fj1xFv reccbS1SXnmZ0Rvrd recI9U053gkcDYRVB - recopFBsq4TmG87Op - recb9fI4kRkTYXDzA - recvbnpa4cX2nNp9p - recERKCcoJa8mkC8L - Pending recCQyaQ1Oq0MlT20 - initial.tadeed.algo.optin.003 - Active - Json + 003 1 The TaDaemon must opt into the TaDeed before receiving it. This message prompts that action. + recERKCcoJa8mkC8L initial.tadeed.algo.optin 002 0 Deprecated + Pending Received by TaDaemon so that it can opt into intial TaDeed + recopFBsq4TmG87Op + recb9fI4kRkTYXDzA + recvbnpa4cX2nNp9p + recV0KuDFayH4qGIl 2022-11-21T22:36:08Z - 000 + g.node.instance.gt.000 + Active + Json recliyex6uoxm791o recMLU2TAAxgQCJoD reccsr0glHYFUIca3 @@ -6986,21 +7499,10 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recUWwce377A33dZw recbTS3DEJI76HDZU recm3UvhmUuqF5FAk - rec24qjC90m0f4Kvl - rec13dujLuXXSf5L3 - recopFBsq4TmG87Op - recfTTPpGH16HQ9aY rec8qVA40s9X5Pcma - Pending recWX07Mlzf8djb6q recyOOpe9zHor9FIY - recGSPzbsyt0nPa5B - rec9y2OWDqjR6vSAp - recc24iKFupSXBEgQ - GNodeInstanceId - g.node.instance.gt.000 - Active - Json + 000 true GNodeInstance @@ -7009,266 +7511,283 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) One of the layers of abstraction connecting a GNode with a running app in a Docker container. + recfTTPpGH16HQ9aY g.node.instance.gt 000 1 - Pending + Active + recc24iKFupSXBEgQ + GNodeInstanceId + Active Used to send and receive updates about GNodeInstances + rec24qjC90m0f4Kvl + rec13dujLuXXSf5L3 + recopFBsq4TmG87Op https://gridworks.readthedocs.io/en/latest/g-node-instance.html - gwatn - gworld gridworks + recVIr500A203gkcH 2022-07-05T12:55:36Z - 110 - rec2NckVsy3wDPK6Q - recCyeOy0hRRYAvoc - recjXMbjBpdJFTXBi - recjI10N2qf36kpmC gt.sh.cli.scada.response.110 Deprecated Json + rec2NckVsy3wDPK6Q + recCyeOy0hRRYAvoc + recjXMbjBpdJFTXBi + 110 1 snapshot.spaceheat + recjI10N2qf36kpmC gt.sh.cli.scada.response 110 1 Deprecated + recX2g8OLICXZHuHr 2022-11-21T05:21:49Z - 000 - recPw5jcOzArg9D84 - recM33kM7FUIUQYie - rec4XKd6lO34y5XKU - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recblgO1LGjgyHR2Y - Pending - rec1nKwt8hPeDIqrE - recTvm4cpEzdavk6J - recY4ZPVnAi4v6y0i resume.time.000 Active Json + recPw5jcOzArg9D84 + recM33kM7FUIUQYie + rec4XKd6lO34y5XKU + 000 1 + recblgO1LGjgyHR2Y resume.time 000 1 Pending + rec1nKwt8hPeDIqrE + recTvm4cpEzdavk6J + recY4ZPVnAi4v6y0i + Pending + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl gwtime gworld gnf + recXCK8GTrT3hnfKX 2022-09-19T18:21:09Z - 000 + tadeed.algo.exchange.000 + Deprecated + Json recTRNtq7f7hryTGh reco2I4nYIwrUGv3C recvtYAI3ds1gFdaM recGtzDdtOf3vahBe rec9ELFVpaqjO7myp - rec430tANcSG2ZavF - Deprecated - rec4oleeZwPh0Ng0M - reckfbX3EePBsFCIV - recH512a7g6p8cLQM - recwsWtIgu909pJm1 - recYBKWxHw8Q6obsQ - recdfhrc7m3cOTO3V - tadeed.algo.exchange.000 - Deprecated - Json + 000 1 + rec430tANcSG2ZavF tadeed.algo.exchange 001 0 Deprecated + rec4oleeZwPh0Ng0M + reckfbX3EePBsFCIV + recH512a7g6p8cLQM + recwsWtIgu909pJm1 + recYBKWxHw8Q6obsQ + recdfhrc7m3cOTO3V + Deprecated + recXrOxZu3uUqL6pH 2022-09-21T11:38:59Z - 000 - recuocYj9OaOIsmtn - Active - recg3ZHFD17mRWVDL tatradingrights.algo.create.000 Active Json + 000 1 + recuocYj9OaOIsmtn tatradingrights.algo.create 000 1 Active + recg3ZHFD17mRWVDL + Active gnf + recZOEsjIoauhsLjG 2022-06-14T10:41:17Z - 100 - recHyghQ3390tN8LF - recnVh3bX9GSsAkr3 - recnOen6KenxkwQtB gt.thermal.edge.100 Pending Json + recHyghQ3390tN8LF + recnVh3bX9GSsAkr3 + 100 ThermalEdge 0 + recnOen6KenxkwQtB gt.thermal.edge 100 1 + reca1A5UXpnpmZdiH 2022-09-21T11:37:43Z + basegnode.other.create.000 + Active + Json 000 - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recNShQmJ0F04UlrH - Pending - recA4Y7Iy3elTbyCB - rec0Uk7vhJUpp68kq - basegnode.other.create.000 - Active - Json 1 + recNShQmJ0F04UlrH basegnode.other.create 000 1 Pending + recA4Y7Iy3elTbyCB + rec0Uk7vhJUpp68kq + Pending + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl gnf gnr + reca2LF7P05qQmFJW 2022-06-03T18:20:11Z - 000 + relay.cac.gt.000 + Active + Json recD4VpikwJAaTf0c rec9E6HTIAJLoh9wW reciCl45E5pQe7ans recEmEL3LueXj4YbW reckgfkjeNGk0Rqx0 - rec24qjC90m0f4Kvl - recy2lAURQitTqKTR - Active recLQWqTvGwSz2GcN - recB57YfEtBGpfH71 - recMWNrvkQjOIdOjQ - reco01YhMk6anEqXo - ComponentAttributeClassId - relay.cac.gt.000 - Active - Json + 000 true RelayCac true 1 GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Cac, or ComponentAttributeClass, is part of this structure. + recy2lAURQitTqKTR relay.cac.gt 000 1 Active + recB57YfEtBGpfH71 + recMWNrvkQjOIdOjQ + reco01YhMk6anEqXo + ComponentAttributeClassId + Active Type for tracking Relay ComponentAttributeClasses + rec24qjC90m0f4Kvl https://g-node-registry.readthedocs.io/en/latest/component-attribute-class.html newatn scada gwproto + recacY2b5R2bByiAQ 2022-11-17T06:13:46Z - 000 + accepted.bid.000 + Active + Json rec3akDIjr7e9Pb0u rec68T9cqrrclsIpW recO6984PoYsGyotG recTov3rcOqhTWWcf - recdsSDIz6EmZCvr9 - recb9fI4kRkTYXDzA - recF3FhhkKiMKyjJZ recdUSog9bonuORLH - Pending - recbV3eBvST23mHgN - recKs7BOeqelLodrB - accepted.bid.000 - Active - Json + 000 1 This is a legally binding contract for the bidder to consume or produce the quantity in its Bid consistent with the actual price. + recF3FhhkKiMKyjJZ accepted.bid 000 1 - Pending + Active + recbV3eBvST23mHgN + recKs7BOeqelLodrB + Active Bid acceptance sent from MarketMaker to a market partipant + recdsSDIz6EmZCvr9 + recb9fI4kRkTYXDzA https://gridworks.readthedocs.io/en/latest/market-bid.html gwmm gwatn + recauOuVBqhRdNWcN 2022-06-20T13:16:05Z - 110 + gt.sh.status.snapshot.110 + Deprecated + Json recsZD75bQDFRNQt2 rechYoiSzlYAU1ZWD rec367deUgDqEaq89 recysUCe9haFiLkWl - recyuopIDguUgR1mI recbRDhEoGNs9jYEB recjXMbjBpdJFTXBi - recsymqeqSBbr9R9o - gt.sh.status.snapshot.110 - Deprecated - Json + 110 1 telemetry.snapshot.spaceheat + recyuopIDguUgR1mI gt.sh.status.snapshot 110 1 Deprecated + recsymqeqSBbr9R9o + recazQb2vEXgbroHd 2022-09-19T18:25:38Z - 000 + basegnode.terminalasset.create.000 + Active + Json recJdGNNBjXxo81cJ recrcCzcDvZBxpI2C recrICREghk3LscaD @@ -7277,32 +7796,33 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recKXxHn9gIiKvkXm rec8yK9gvhY44u86S rec3XrurBTlbCXBfL - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recopFBsq4TmG87Op - recb8a2JTfYBmC6v7 - Pending - recZiKOMXJ8UCneY9 - recM8DeGDMOPo9ezd - basegnode.terminalasset.create.000 - Active - Json + 000 1 + recb8a2JTfYBmC6v7 basegnode.terminalasset.create 000 1 Pending + recZiKOMXJ8UCneY9 + recM8DeGDMOPo9ezd + Pending + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + recopFBsq4TmG87Op gnf gnr + recbAMyCyUX2bLKfz 2022-11-07T18:57:50Z - 000 + simplesim.snapshot.heatpumpwithbooststore.000 + Active + Json recKFwLpMfoUPjFYI recrInCQkfqVOaAJp recZwSFwN4qnwJdmE @@ -7311,166 +7831,159 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recVDfwQzayL572Ip rec7Kmzb0rNhgYfq6 recFVS00yEVtm2sYI - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recNgwEZ9cfcNmeTI - Pending - recVOa2DYOtTyarDA - recM6At5qFrk4dsir - recJnQIpCbM1mDUV6 - snapshot.heatpumpwithbooststore.000 - Active - Json + 000 1 - snapshot.heatpumpwithbooststore + recNgwEZ9cfcNmeTI + simplesim.snapshot.heatpumpwithbooststore 000 1 Pending - gwatn + recJnQIpCbM1mDUV6 + Pending + recVOa2DYOtTyarDA + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl satn + recbGrdqqYGiwVYVK 2022-11-12T08:15:09Z - 000 + tadeed.specs.hack.000 + Active + Json recJZMdMai2LWeadg rec1k8ewouaBtPAoB recfU5SZEVJA9EYB3 rec1sA97XqAvz5PmW - recb9fI4kRkTYXDzA - recuGgxcKPz76mhQc - Pending - recFreOp8J4dIjXkD - reciUjZq6Ym3P59mT - tadeed.specs.hack.000 - Active - Json + 000 1 + recuGgxcKPz76mhQc tadeed.specs.hack 000 1 - Pending + Active + recFreOp8J4dIjXkD + reciUjZq6Ym3P59mT + Active + recb9fI4kRkTYXDzA gwatn gnf + recbMWz8PxqJUI41L 2023-01-28T00:17:00Z - 000 - true + multipurpose.sensor.component.gt.000 + Active + Json recMlJWemMArI2Qrj recqk08O9ID51tC31 recqBM04MFQCAkFfy recuTyHJfuZVMXRQ4 rec9fsScoo91bMhGw recDmQ95OLj1UhZsU - rec24qjC90m0f4Kvl - recb9fI4kRkTYXDzA - recKA0g4F2FAH28QX - Active rec2HyLffy6QK9QId - rec0BOEFEF3Tvn5vW - recly1p2PV8V88LXc - ComponentId - multipurpose.sensor.component.gt.000 - Active - Json + 000 true MultipurposeSensorComponent true 1 GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Component associated to a SpaceheatNode is part of this structure. + recKA0g4F2FAH28QX multipurpose.sensor.component.gt 000 1 Active + rec0BOEFEF3Tvn5vW + recly1p2PV8V88LXc + ComponentId + Active Type for tracking Multupurpose Sensor Components + rec24qjC90m0f4Kvl + recb9fI4kRkTYXDzA https://g-node-registry.readthedocs.io/en/latest/component.html + true scada gwproto + recbZXiheXqQdc7b6 2022-11-17T06:20:43Z - 000 - recbnSBQbnHs5KuDy - recdUSog9bonuORLH - recdjt7dskJqDJASY - Pending - recvpIR8rXsHiuLTP market.book.000 Active Json + recbnSBQbnHs5KuDy + recdUSog9bonuORLH + 000 1 + recdjt7dskJqDJASY market.book 000 1 Pending + recvpIR8rXsHiuLTP + Pending MarketMaker's list of bids for a MarketSlot gwmm + recbrp6V9qD6J1NHb 2023-01-19T23:59:55Z - 000 - recmmOlM4okW6SVMc - recYFjgEXfTizyRiv - recvbnpa4cX2nNp9p - recb9fI4kRkTYXDzA - rectwW4fAko33gT7a - Pending - recjvYtEfvMLsZJtV - recrpoQF951bAlwS5 - recWK98fj1fTua1k9 scada.cert.transfer.000 Active Json + recmmOlM4okW6SVMc + recYFjgEXfTizyRiv + 000 1 This is a payload designed to be sent from a SCADA device to the GNodeFactory after the SCADA has opted into its certificate. + rectwW4fAko33gT7a scada.cert.transfer 000 1 - Pending + Active + recjvYtEfvMLsZJtV + recrpoQF951bAlwS5 + Active Scada Certificate Transfer + recvbnpa4cX2nNp9p + recb9fI4kRkTYXDzA + recWK98fj1fTua1k9 gwatn gnf + recc2Km1jUViJqVeK 2022-11-08T03:22:46Z - 001 - recWNBlJHWBH2q9kg - recf4ivPE7VmMFolZ - recUGf1IY6nFFb5Gw - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recjpCj1MoKBvlAbR - Pending - recB2fok3eH3LnZmw - rec2Gvd8Nt7DvqTpf - recx5JlRHk2l9zzQK - recFnEf8eIe2zVWOY ready.001 Active Json + recWNBlJHWBH2q9kg + recf4ivPE7VmMFolZ + recUGf1IY6nFFb5Gw + 001 @@ -7478,62 +7991,66 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Only intended for simulations that do not have sub-second TimeSteps. TimeCoordinators based on ```gridworks-timecoordinator``` have a notion of actors whose `Ready` must be received before issuing the next TimeStep. + recjpCj1MoKBvlAbR ready 001 1 - Pending + Active + recFnEf8eIe2zVWOY + Active Used in simulations by TimeCoordinator GNodes + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl https://gridworks.readthedocs.io/en/latest/time-coordinator.html - gwatn - gwtime - gwmm gridworks + reccFZLsGTVhuzGsn 2022-09-14T16:27:37Z - 000 - recrD0Mo96XS8itFz - reclWEqctUrS5WXwG - recopFBsq4TmG87Op - recvbnpa4cX2nNp9p - rechCPLYrkc1asuPJ - { -"ValidatorAddr":"7QQT4GN3ZPAQEFCNWF5BMF7NULVK3CWICZVT4GM3BQRISD52YEDLWJ4MII", - "HalfSignedCertCreationMtx":"gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxECeARrO2EeYKIqsObwggXge02aA+Lf5D/lXB23O98qsyuf7f9jqDu+WT2U/KB53CPR+XSUWGh5nonEUdp63TDIEo3RocgKhdgGjdHhuiaRhcGFyhKJhbq9Nb2xseSBNZXRlcm1haWShbcQgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmhdAGidW6lVkxEVFKjZmVlzQPoomZ2A6NnZW6qc2FuZG5ldC12MaJnaMQgZGDSySH2HEYnRD3oWlUn77Xl6iBj3QBYmURoHXJQSRCibHbNA+ukbm90ZcQrTW9sbHkgSW5jIFRlbGVtZXRyeSBTdXJ2ZXlvcnMgYW5kIFB1cnZleW9yc6NzbmTEIMdnGF0JPZPHHFmVn8fmYiS7Wzi6UObcSZTp1gpcJYQHpHR5cGWkYWNmZw==", - "TypeName":"tavalidatorcert.algo.create", - "Version":"000" -} - Active - rec3V5oWa4cyRtWNc - rec50dqlnp2l3PH7B - rec5LcnUo5uGaILj6 - recSkcGAjBCP4uFPX tavalidatorcert.algo.create.000 Active Json + recrD0Mo96XS8itFz + reclWEqctUrS5WXwG + 000 1 Meant to be sent from a pending TaValidator to the GNodeFactory (Gnf), to initiate the process of certifying the pending TaValidator. + rechCPLYrkc1asuPJ tavalidatorcert.algo.create 000 1 Active + rec50dqlnp2l3PH7B + rec0I8YsmUHlc5F67 + Active Used for Step 1 of TaValidator certification + recopFBsq4TmG87Op + recvbnpa4cX2nNp9p + { +"ValidatorAddr":"7QQT4GN3ZPAQEFCNWF5BMF7NULVK3CWICZVT4GM3BQRISD52YEDLWJ4MII", + "HalfSignedCertCreationMtx":"gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxECeARrO2EeYKIqsObwggXge02aA+Lf5D/lXB23O98qsyuf7f9jqDu+WT2U/KB53CPR+XSUWGh5nonEUdp63TDIEo3RocgKhdgGjdHhuiaRhcGFyhKJhbq9Nb2xseSBNZXRlcm1haWShbcQgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmhdAGidW6lVkxEVFKjZmVlzQPoomZ2A6NnZW6qc2FuZG5ldC12MaJnaMQgZGDSySH2HEYnRD3oWlUn77Xl6iBj3QBYmURoHXJQSRCibHbNA+ukbm90ZcQrTW9sbHkgSW5jIFRlbGVtZXRyeSBTdXJ2ZXlvcnMgYW5kIFB1cnZleW9yc6NzbmTEIMdnGF0JPZPHHFmVn8fmYiS7Wzi6UObcSZTp1gpcJYQHpHR5cGWkYWNmZw==", + "TypeName":"tavalidatorcert.algo.create", + "Version":"000" +} + recSkcGAjBCP4uFPX https://gridworks.readthedocs.io/en/latest/ta-validator.html gnf - gridworks gwatn + reccsu6ZeZHKoDqDy 2023-03-13T18:11:53Z - 101 + spaceheat.node.gt.101 + Active + Json receX5lrBDRQOfwtV recwBj4KUuccY6gSN rechbn6z9nVyxod0R @@ -7545,54 +8062,56 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec3JoWyUlqUfiTLp rec59ZiBmdpSMTFx6 recE7gfNAh0QZrQT6 - rec24qjC90m0f4Kvl - recb9fI4kRkTYXDzA - recijDUCMCF0drLi3 - Pending recQeMNisJZjsYXTl recomGYBJ9ldSsiNU - recAW5oPrc0QXbD9C - spaceheat.node.gt.101 - Active - Json + 101 true ShNode 1 Type for tracking information about a Spaceheat Node. + recijDUCMCF0drLi3 spaceheat.node.gt 100 0 Deprecated + Pending Spaceheat Node + rec24qjC90m0f4Kvl + recb9fI4kRkTYXDzA + recAW5oPrc0QXbD9C https://gridworks-protocol.readthedocs.io/en/latest/spaceheat-node.html + reccy0CAc6XAa6fGb 2022-06-20T13:14:15Z - 100 - recbRDhEoGNs9jYEB - recjI10N2qf36kpmC gt.sh.cli.scada.response.100 Deprecated Json + recbRDhEoGNs9jYEB + 100 1 snapshot.spaceheat + recjI10N2qf36kpmC gt.sh.cli.scada.response 110 0 Deprecated + recd5K0XiAzHsj2Pw 2022-11-08T08:14:42Z - 000 + latest.price.000 + Active + Json rec9XARl8tvdTDGbm recNJVhjAFGvStAch recUCVyvcUuDXgUdj @@ -7600,57 +8119,47 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recSWBVF41HakpB18 recFAv8cdbxLhK5Wh recpS2nfI9nrA1Mco - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recdsSDIz6EmZCvr9 - recZS8rV9vLS5kFN1 - rec9aKp2kx0NQDDc6 - recU3mtc9M0U3uM3q - Pending - recnCUFtuRaM9imRG rec75xMuw0SMkzjVc - recanqppJwatq7fmU - rec8cREVO03dOhbWy - latest.price.000 - Active - Json + 000 1 The price of the current MarketSlot + rec9aKp2kx0NQDDc6 latest.price 000 1 - Pending + Active + recanqppJwatq7fmU + rec8cREVO03dOhbWy + Active + recU3mtc9M0U3uM3q + recnCUFtuRaM9imRG Latest Price for a MarketType, sent by a MarketMaker + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + recdsSDIz6EmZCvr9 + recZS8rV9vLS5kFN1 https://gridworks.readthedocs.io/en/latest/market-slot.html gwatn gwmm + recdNEAMkZeOLS8Vo 2022-08-11T17:27:11Z - 000 + telemetry.snapshot.spaceheat.000 + Active + Json recHYSlx2bkFlTrmH recuI66lGgVCVPoNn recl3xwMzRxkadUBM recOpsZkD5RkikKq4 - recb9fI4kRkTYXDzA - recqSXVzLo8RtEjlH - recBNevzmPrROWd5j recz0QGMX8yGwdpdl - Active rec2HyLffy6QK9QId - recSENoEtLHiKubGR - recMiJmpBdJWV7BmB - recytzNgmiqkWb2di - rec2Sl2RMNjKXgu98 - recj0W1AWU40FitTy - telemetry.snapshot.spaceheat.000 - Active - Json + 000 @@ -7658,98 +8167,100 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) A snapshot of all current sensed states, sent from a spaceheat SCADA to its AtomicTNode. The nth element of each of the three lists refer to the same reading (i.e., what is getting read, what the value is, what the TelemetryNames are.) + recBNevzmPrROWd5j telemetry.snapshot.spaceheat 000 1 Active true + rec2Sl2RMNjKXgu98 + Active Snapshot of Telemetry Data from a SpaceHeat SCADA + recb9fI4kRkTYXDzA + recqSXVzLo8RtEjlH + recj0W1AWU40FitTy https://gridworks-protocol.readthedocs.io/en/latest/spaceheat-node.html - newatn gwproto + recdXzxjKArjU2z9Z 2022-07-12T18:11:34Z - 000 + current.transformer.cac.gt.000 + Active + Json recLfb3AjS6LNracR recP17DkWzTZm2SdF recOQgTyTBu9JnU1b recgIQb2yDNArvM73 - recBX9s6MqEmX6EjU reciGUKC09U7flB6M - Pending - current.transformer.cac.gt.100.100 recLQWqTvGwSz2GcN - ComponentAttributeClassId - current.transformer.cac.gt.000 - Active - Json + 000 true CurrentTransformerCac true 1 GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Cac, or ComponentAttributeClass, is part of this structure. + current.transformer.cac.gt.100.100 + recBX9s6MqEmX6EjU current.transformer.cac.gt 000 1 Pending + ComponentAttributeClassId + Pending Type for trackingCurrent Transformer ComponentAttributeClasses https://g-node-registry.readthedocs.io/en/latest/component-attribute-class.html + rece2rn8uFKupSOZM 2022-11-30T19:44:29Z - 000 - reckRoTaa3PYdQ7Bi - recd6tt9JGZJKMtox - recOSHv3NhU02KeIl - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recn81szg83l6vw2o - Pending - recVQ3e3vgtZiDbe0 - recI3qMEZNOVje6qG - recmM5fq13YDWN7oc debug.tc.reinitialize.time.000 Active Json + reckRoTaa3PYdQ7Bi + recd6tt9JGZJKMtox + recOSHv3NhU02KeIl + 000 1 + recn81szg83l6vw2o debug.tc.reinitialize.time 000 1 Pending + recVQ3e3vgtZiDbe0 + recI3qMEZNOVje6qG + recmM5fq13YDWN7oc + Pending + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl gwtime gworld gnf + receGKnJ8CfemQLdQ 2022-07-03T22:18:03Z - 100 + gt.sh.multipurpose.telemetry.status.100 + Active + Json rec2l6jE1FMj92czA rec6fCUex0HlMSbTR recE3gvDLm8Zvz5AD recqQXSGmEMh3lnTf rectMt3G7nhz2ujs5 - recb9fI4kRkTYXDzA - recqSXVzLo8RtEjlH - recCGkiwasshpUQnL recZOVb1cq9Dq3Oi5 recK2zOa4WxMEeSn9 - Active rec2HyLffy6QK9QId - recoogxM5OZ1mFRCc - recSLBrC1olag5pK9 - gt.sh.multipurpose.telemetry.status.100 - Active - Json + 100 @@ -7758,350 +8269,502 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) for a Spaceheat SCADA. Designed as part of a status message sent from the SCADA to its AtomicTNode typically once every 5 minutes. The nth element of each of its two lists refer to the same reading (i.e. what the value is, when it was read). + recCGkiwasshpUQnL gt.sh.multipurpose.telemetry.status 100 1 Active true + recoogxM5OZ1mFRCc + Active Data read from a MultipurposeSensor run by a Spaceheat SCADA + recb9fI4kRkTYXDzA + recqSXVzLo8RtEjlH + recSLBrC1olag5pK9 https://gridworks-protocol.readthedocs.io/en/latest/multipurpose-sensor.html gwproto + recepkVk3vOelGIUa 2022-07-09T23:03:52Z - 100 - recCpUQ75l1hoKN45 - rec2kI3cJzijFOyV4 - recDqvo81744FkpWd spaceheat.status.100 Pending Json + 100 1 + recCpUQ75l1hoKN45 spaceheat.status 100 1 + rec2kI3cJzijFOyV4 + recDqvo81744FkpWd + recf5K0BP9qLabpdS 2022-11-21T05:21:40Z - 000 + pause.time.000 + Active + Json recU5B4V3aPnvMPZf rec6tXwpa0rqEikXW recscJlOCJSX2ckU5 - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl + 000 + + + + 1 reckliobnY6Igi5Fa - Pending + pause.time + 000 + 1 + Pending + recOEHxBFFDNPACx1 recl5eLv36HJnILWJ recZCRfLe9nDmrRAU - pause.time.000 + Pending + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + gwtime + gworld + gnf + + + + recfDQscmquO0odpo + 2023-05-10T14:21:07Z + flo.params.brickstorageheater.000 Active Json + recwqncn6q1JvTx8C + recJL7h0Cdb45oTNh + recEkW3h7HrQ6uigy + reckc7GfMfrl08GTz + recHUqMGWS2zqNV6H + reca2V0hCWFV463bf + recVyMdsBkXQRulvG + recuCxturGwYam9W0 + recuKvC5D4tUOKCIH + rec8ybKjyg4p5PQBZ + rec30du75CvosnjIj + recbjZkDY0xosm28b + recuK1w199LQQCRjs + recfyyQ1OXYTVJeGV + recnTZqJLAXkC0udQ + recZ0rfW1Kha3I1H4 + recrlszZe4JuLa5ZU + recbIZmTs1RacVBoR + recEmOauAesrLmBV2 + rec8UGujigt7hxKDU + rec2Q5gra7JT1hP5z + rec8yYiDwp5tkxoeR + receLZhjMOO95MTfS + recS3mPyncJofH01H + recrUmUhuBYrY146C + recq321QPv8igpWPT + recEMwQrGJ53FQep1 + rec9LV9kNuSH5H6fq + recCMMvdApuru0zxY + recvKQH8VYCXnFhS9 + rec72ld1OI4hNGzPB + rec9g3ackYYzyweKE + recA15Ak50x6bNMx1 + recEyU9EKDtM3bD18 + 000 1 - pause.time + FloParams for the BrickStorageHeater AtomicTNode strategy. + recuoD0qsOivs7xOo + flo.params.brickstorageheater 000 1 - Pending + Active - gwtime - gworld - gnf + recRis6YmxjqUGg0c + Active + rec24qjC90m0f4Kvl + recb9fI4kRkTYXDzA + https://gridworks-atn.readthedocs.io/en/latest/brick-storage-heater.html + gwatn + recgdLh7RL2N6DtWI 2022-06-14T10:57:42Z - 000 + component.gt.000 + Active + Json recm6RNmsDWsa2sSy recxu6lhNMYHCoQey recLO20AZmUda0yof recsW0wQZK8S5BU8o - rec24qjC90m0f4Kvl - recEdlcUTBfQ9Hy6D recN8NS2KiZw0Wzbp - Active - recnode9jR9HdGfcE - recg17XBd52YMSt1Q - recnQKx1KrJs2FsGa - ComponentId - component.gt.000 - Active - Json + 000 true Component 1 + recEdlcUTBfQ9Hy6D component.gt 000 1 Active + recnode9jR9HdGfcE + recg17XBd52YMSt1Q + recnQKx1KrJs2FsGa + ComponentId + Active + rec24qjC90m0f4Kvl scada gwproto + rech8RtBLsLVe51DN 2022-09-20T13:30:10Z - 000 + tadeed.algo.transfer.000 + Deprecated + Json recFkS7P6k45TTQjT reckEe9774XgeDvIL recnK1jOCabM7QHvd recobizeq1ZYGN5A2 recXr4oGZuc4Rse9N recuCJM4TchlCmVVj - recdi7BezBflZlH45 - Active - recAV3jdy4xK2e6V4 - recgkttJLsyUmqLlp - rec5VDuzpUgfcEkJx - recP9v8cvgHgbDnpZ - recgr767PF8P1X06i - rectREWSiFBVSQoOq - recOyMaXAxwASJw4J - tadeed.algo.transfer.000 - Deprecated - Json + 000 1 + recdi7BezBflZlH45 tadeed.algo.transfer 001 0 Deprecated + recAV3jdy4xK2e6V4 + recgkttJLsyUmqLlp + rec5VDuzpUgfcEkJx + recP9v8cvgHgbDnpZ + recgr767PF8P1X06i + rectREWSiFBVSQoOq + recOyMaXAxwASJw4J + Active + rechKgkXf88R5dkGD 2023-01-08T10:20:08Z - 000 - rechs1D8dytBH2C5s - recqsyHUDPXWxf39U - recvbnpa4cX2nNp9p - recb9fI4kRkTYXDzA - recu1iYKh47xRDEt9 - Pending - rec48h8N51cFfC0Y2 heartbeat.algo.audit.000 Active Json + rechs1D8dytBH2C5s + recqsyHUDPXWxf39U + 000 1 Algo payload with report of last HeartbeatB sent to partner via Rabbit, to be sent to DispatchContract on Algo blockchain + recu1iYKh47xRDEt9 heartbeat.algo.audit 000 1 Pending - gwatn + Pending + recvbnpa4cX2nNp9p + recb9fI4kRkTYXDzA + rechVGhiKUuIgoWYy 2022-11-17T01:54:41Z - 000 + market.maker.info.000 + Active + Json recvq0MygOUulKFdl recwDJqmDK7sTdTTC recBw1TvOwQk1gM0K recTV2IpdZjy1gFiQ - recb9fI4kRkTYXDzA - recdsSDIz6EmZCvr9 - recGf44plaa1jjiWQ - Pending - recYts9GI3HDasco4 - market.maker.info.000 - Active - Json + 000 1 + recGf44plaa1jjiWQ market.maker.info 000 1 Pending + recYts9GI3HDasco4 + Pending + recb9fI4kRkTYXDzA + recdsSDIz6EmZCvr9 gwmm + + itroMRR1cxM9sjTs7/rechVGhiKUuIgoWYy rechXkF4uGNAulje7 2022-11-08T03:38:33Z - 000 + price.quantity.000 + Active + Json recVoo4kfTnzJtjJR recajodVScBvapTcg recEPPqtrPd0FeUOQ recehDezdvO5nKJJQ recHl3HcnTyMN0bF2 - recGQ4lX5HOPJraGN - Pending recounhEj97w5SfDm rec75xMuw0SMkzjVc - rec0yahRyau7Mzmzk - recwv4Bsb1NA1uZxn - price.quantity.000 + 000 + + + + 1 + recGQ4lX5HOPJraGN + price.quantity + 000 + 1 + Active + + rec0yahRyau7Mzmzk + recwv4Bsb1NA1uZxn + Active + gwatn + gwmm + + + + rechp89wabr5kkqti + 2023-06-25T20:43:32Z + atn.params.simpleresistivehydronic.000 Active Json + recaMsFqtaJuXv5AD + recANnuMlvL9PGtYv + recQRsIq3xTiLWopK + rec1UsBj2W4QOsHy3 + recTMm4lhEWh9m2It + recPuuEJJrwfAgwcn + recCRcF7T7qTSMD37 + recm85TehRT6oXtTP + recQVmUtZgyRJS0Fw + reclVOYJSKp7L4SON + recOd8utfibXflWak + recyaa7Sje4vX7qsj + recDXgR1mkWGl8FlL + recmgWy6guY7V2or8 + recufHL4WVjMqEiI8 + recw8d5Trh6AeoLYJ + recmQaQas8xe2JRvv + recGljnJKcjLcwmVu + recZ4cjPPBxvCcE1F + recAu0OzbjWTSSUJq + reclneIsw2C57Nn40 + recC9UVPsqE9cHYQS + recG7vJbQ7FW4DDT4 + rec4S3L3NZiPihbLi + recf9ZTshqRu81HZo + recA15Ak50x6bNMx1 + 000 1 - price.quantity + recXUDaPBBDl9wqBu + atn.params.simpleresistivehydronic 000 1 Pending + recZsOKTlEbZPh3rD + Pending + recb9fI4kRkTYXDzA gwatn - gwmm + reciGkEyh61sro7R0 2023-03-25T18:44:02Z - 110 + gt.dispatch.boolean.local.110 + Active + Json recKo7g23Yhkvozc9 recy22SSV0XnqMR9U reci7qQs2JCeyRbV7 recMWNMncekPOwSmK - recb9fI4kRkTYXDzA - recqSXVzLo8RtEjlH - recoAsAg06Qp7jYp3 - Active - recktn7mVOjp0WCql - gt.dispatch.boolean.local.110 - Active - Json + 110 1 By Locally, this means sent without access to Internet. The HomeAlone actor must reside within the Local Area Network of the SCADA - typically it should reside on the same hardware. + recoAsAg06Qp7jYp3 gt.dispatch.boolean.local 110 1 Active true + recktn7mVOjp0WCql + Active Dispatch message sent locally by SCADA HomeAlone actor + recb9fI4kRkTYXDzA + recqSXVzLo8RtEjlH gwproto + reciPWPv22Y3pt5oD 2022-08-11T15:25:06Z - 100 + ear.g.node.alias.list.toss.100 + Active + Json rec0W9aExBJ7Kueom rec0AFxprybFFfPgz rec1SyaI5uoDhNW1f recTVpMk0yoQ95CTi - recGPwKi4Sb6sxayy - ear.g.node.alias.list.toss.100 - Active - Json + 100 1 + recGPwKi4Sb6sxayy ear.g.node.alias.list.toss 100 1 + recjrd0YFmqQQm5sv 2022-06-07T09:29:41Z - 000 + simple.temp.sensor.component.gt.000 + Active + Json recIu6hGiK3PDyJrn recIoMtP3BgfOzQ9C rece76qbENBm5shvn recojCBLEKvcVMiLq recvDPtsFQBsY8Kln - rec24qjC90m0f4Kvl - recHrNVLHcDTTqaCq - Active - reciQYtVczpDGsA1n - reckTKf3fzOuHTt7p - ComponentId - simple.temp.sensor.component.gt.000 - Active - Json + 000 true SimpleTempSensorComponent true 1 GridWorks Spaceheat SCADA uses the GridWorks GNodeRegistry structures and abstractions for managing relational device data. The Component associated to a SpaceheatNode is part of this structure. + recHrNVLHcDTTqaCq simple.temp.sensor.component.gt 000 1 Active + reciQYtVczpDGsA1n + reckTKf3fzOuHTt7p + ComponentId + Active Type for tracking Simple Temp Sensor Components + rec24qjC90m0f4Kvl https://g-node-registry.readthedocs.io/en/latest/component.html scada gwproto + + + + reckQg9yTsSw2dxbh + 2023-05-01T22:06:40Z + simplesim.driver.report.000 + Active + Json + recoEOdUEOJ4NE1i8 + reczco2IoqBeaLSg9 + recCQfmUkI2by85NK + recCTlz2ZI9XsPdtX + 000 + + + + 1 + recxwsQKMLrM6UR5g + simplesim.driver.report + 000 + 1 + Active + + recDqWAGc9wH8TzcX + Active + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + gwatn + reckTci9LVdsEt2WQ 2023-01-13T21:24:49Z - 110 + gt.dispatch.boolean.110 + Active + Json recZIrtKh1EyjFqAi recKRNkuHxdnCTbXe recdyA1ugrK3wpjRN recnbtuaL96kZW7Sn recsgnh5t5it39M5o recvGseMiH5N85Am3 - recb9fI4kRkTYXDzA - rec24qjC90m0f4Kvl - recqSXVzLo8RtEjlH - rechZBY0G1JuNeEuG - Active - recYXSUnBW9DHXJWw - recwZgp7HvS1QX41E - GNodeId from gt.dispatch.boolean.100 changed to GNodeInstanceId - gt.dispatch.boolean.110 - Active - Json + 110 1 Boolean dispatch command sent over the cloud broker from one GNode (FromGNodeAlias/ FromGNodeId) to another (ToGNodeAlias). AboutNodeAlias is the node getting dispatched. It may be a GNode, but it can also be a SpaceHeatNode. + rechZBY0G1JuNeEuG gt.dispatch.boolean 110 1 Active + GNodeId from gt.dispatch.boolean.100 changed to GNodeInstanceId true - gwatn + recwZgp7HvS1QX41E + Active + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + recqSXVzLo8RtEjlH gwproto + recm2rM5o9GxgCqbL 2022-06-20T12:58:57Z - 100 - recZ6Qnf2ivCfWkSG - receVdNEfIE1HLnwN gt.sh.cli.atn.cmd.100 Active Json + recZ6Qnf2ivCfWkSG + 100 1 + receVdNEfIE1HLnwN gt.sh.cli.atn.cmd 110 0 Deprecated true + - itrmsOsvlYd4gnFzo/recm2rM5o9GxgCqbL recm57e2rjMmC2c6n 2022-06-14T10:58:01Z @@ -8130,6 +8793,37 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec24qjC90m0f4Kvl scada gwproto + + + + recm5UcVaAPAtrrFS + 2023-05-01T17:50:49Z + simplesim.snapshot.brickstorageheater.000 + Active + Json + recfeWhbkmYYdayn3 + recA6xaBWKtDeVbZs + recTtF957kyOejDRh + rec786yhFCPsLdPgd + recESvZItoy9uRIyI + recSZuXgqgnSQCBOa + 000 + + + + 1 + recioXjg9Rh1AaoBV + simplesim.snapshot.brickstorageheater + 000 + 1 + Active + + recntdJAXDry45FT5 + Active + recb9fI4kRkTYXDzA + rec24qjC90m0f4Kvl + gwatn + recmVKHF3ugtUOYrz @@ -8166,6 +8860,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) newatn scada gwproto + recn0YpsBzBOA9yvq @@ -8191,6 +8886,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recb9fI4kRkTYXDzA recopFBsq4TmG87Op gnf + recncxVAzn76fL8xN @@ -8214,6 +8910,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 Deprecated + recpHvfV5mSI7pgRP @@ -8242,6 +8939,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recb9fI4kRkTYXDzA recqSXVzLo8RtEjlH gwproto + recpZ6JqSrTi4xaOu @@ -8273,6 +8971,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Type for tracking Current Transformer Components rec24qjC90m0f4Kvl https://g-node-registry.readthedocs.io/en/latest/component.html + recqhQADHovWX1hOl @@ -8312,11 +9011,12 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) https://g-node-registry.readthedocs.io/en/latest/component-attribute-class.html scada gwproto + recrZz3gmzl97POA1 2022-11-09T22:59:39Z - atn.params.heatpumpwithbooststore.000 + atn.params.heatpumpwithbooststore.001 Active Json rec6sw1bj1xU6alKt @@ -8357,31 +9057,30 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recE1J9oSFyTE5lkp recTmaH9Ix1tx009O rec4VyYOa9NyxUjui - recBYlRmPwCbVbTMn - recNujglYpalkIIRN - recAw8J1ipB7Ef1SZ rec4S3L3NZiPihbLi recf9ZTshqRu81HZo rec57bh9xoIxLUHjY recX0A9nSriRUvl9n recA15Ak50x6bNMx1 recEyU9EKDtM3bD18 - 000 + 001 1 recNkT1cGWR3vqFMM atn.params.heatpumpwithbooststore - 000 + 001 1 - Active + Pending + Remove GNodeInstanceId from atn.params - recGRKTWPhlGhVZqf recl5OGEwbCR9w3O7 - Active - gwatn + Pending + Params for HeatpumpWIthBoostStore Atn strategy + recb9fI4kRkTYXDzA satn + recrnRklRws6Txbqr @@ -8403,15 +9102,12 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 Active true - rec86XZBf9WnCg5bX - rec2a1O4X0TlMmhsW - recLjbg3qWweCJCqx rec9wSDE2snnCJmLi Active recb9fI4kRkTYXDzA rec24qjC90m0f4Kvl - newatn gwproto + recsHXkpUxoOF9vYp @@ -8433,13 +9129,14 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) price.quantity.unitless 000 1 - Pending + Active recDST3lwGBFXqsz1 rec5dH5f6YcOKD0RU - Pending + Active gwatn gwmm + rectayh08KEGGGcZc @@ -8462,9 +9159,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 Active - recWbhB62TTgTQUtI recJqKGuHpco4ynvW - recKCYKKIRjtnFzdh Active Clarifies whether cert id is an Algorand Standard Asset or SmartSig recopFBsq4TmG87Op @@ -8475,9 +9170,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) "Version":"000" } recMYPnr592PEzOi7 - gwatn gridworks - gnf + recvGFiTtzXNrhLBm @@ -8505,6 +9199,44 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Bid ack rec24qjC90m0f4Kvl recdsSDIz6EmZCvr9 + + + + recvJ9OVpqVVP895H + 2023-05-10T14:21:14Z + flo.params.000 + Active + Json + rec5tlsMd4hrJm4Yi + recqEqS1dMXLaWYRD + reczyYbX7MCDw4qpM + recPixDGsGJ5nEHUv + recCXUZRdtGc2hQIx + recMcmv8GCUtIZ3Tx + rec9AehNwuheAEZCw + rec08KVslwkqJBLtV + recsBD9IGwQ7NAy0K + recHRWGtm51BPqgFb + 000 + + + + 1 + Derived classes are expected to have TypeNames enforced as literals that start with flo.params. E.g. flo.params.brickstorageheater. This container is used for sending messages that include flo.params (i.e, flo.params.report + recGMHAv9IvCjusuS + flo.params + 000 + 1 + Active + + reccIKvkAunTQR3uO + Active + Base class for Forward Looking Optimizer params + rec24qjC90m0f4Kvl + recb9fI4kRkTYXDzA + https://gridworks-atn.readthedocs.io/en/latest/flo.html#flo-params + gwatn + true recvWBuo1Ws1SIL4b @@ -8539,6 +9271,86 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recvbnpa4cX2nNp9p gnf gwatn + + + + recw5evm1WetKAzZG + 2023-05-01T17:33:35Z + atn.params.brickstorageheater.000 + Active + Json + recB7NDDe5xXWHh9M + recOSbtwvb9Jepzxm + reci3R8YqMvMYlLuI + recO44dCWgk26aPoL + recvo0jJIrIDDr23i + recAoJrWkdqNbZwLx + recIClynqMSTgczNz + recUcTdqja2lseqny + recRS18rB7QWfITKv + rec9TfxvkRChizDvB + recUisNTiM4JQSM8s + recwO34MxjMi4xVbh + recBoiuVaUD2AUett + recOB8YIQSx4CkN54 + recc3KsHCvd6Pp9rs + recDcyZwTzNJhJTSW + rechO4iVyXL7dtIKk + recsWscZyAT8lUvQG + recpAPAOQxog3tu7c + reckE8i5FbwL5N8Vr + recGuqNNHJZ2Zrcu8 + recRcY8WNqknxX5sV + rec4S3L3NZiPihbLi + recf9ZTshqRu81HZo + recA15Ak50x6bNMx1 + recEyU9EKDtM3bD18 + 000 + + + + 1 + Parameters for a model of a ceramic brick thermal storage room unit, using a two-dimensional Dijstra graph parameterized by 'fullness of the thermal battery' and time. + rech3pl8AhjCA01Q1 + atn.params.brickstorageheater + 000 + 1 + Active + + recvUI21ZPLimt9Tt + Active + Params for a BrickStorageHeater Atn Strategy + recb9fI4kRkTYXDzA + https://gridworks-atn.readthedocs.io/en/latest/brick-storage-heater.html + gwatn + + + + recwXD4ryogKVwsnE + 2023-05-01T21:53:17Z + simplesim.driver.data.bsh.000 + Active + Json + recbAjM31sjr5mRF3 + recTfGFS2AGUc58Ig + reckfEeZNa1zs6pP1 + rec93EBTpAUbcsD5E + 000 + + + + 1 + recWWeMXxAoiOeWwx + simplesim.driver.data.bsh + 000 + 1 + Active + + recF0p8e8Vmazeyd9 + Active + recb9fI4kRkTYXDzA + gwatn + recwp0F6Gdrg8qLwb @@ -8559,17 +9371,14 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) super.starter 000 1 - Pending + Active - recx1ZcM9hO3GKRkp - recSxY4F5Ewetp9tW reckr1EbtWVGkY1KM - Pending + Active Used by world to seed a docker container with data needed to spawn and superviser GNodeInstances recb9fI4kRkTYXDzA - gworld - gwatn gridworks + recwr8WwMjrVGNL7L @@ -8596,6 +9405,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) reczkxumP7vIqoFkM Active scada + recxNIfCRauFrb57o @@ -8617,28 +9427,16 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) heartbeat.a 100 1 - Pending + Active Update: MyHex and YourLatestHex must have format HexChar - recAKcZ5BDHN6JKil - recASxd0yY7a1nWR4 - recnBbGAlK4U8sngT - rec1qAnTlin7a194M - recianedmKDqWVh0O - recyENjaG4Mi1n27B recsqbuLwrgitVmoY - recQDvrJAF4lWWp1l - Pending + Active Used to check that an actor can both send and receive messages recWwoTHJMScsOvnF https://gridworks.readthedocs.io/en/latest/g-node-instance.html - gnf - gwatn - gwtime - gwmm - gworld - gnr gridworks + recxdlQ6gCN8mD39r @@ -8679,6 +9477,38 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) true scada gwproto + + + + recy7fqBm5Cl94dnF + 2023-06-28T14:33:35Z + atn.outside.temp.regr.coeffs.000 + Active + Json + recHnLyayIHQ166SI + recodlPgpP4zsi9bk + 000 + + + + 1 + Coefficients for a linear regression of avg power leaving a building as a function of weather: + +PowerOut = Alpha + Beta * OutsideTempF + + These are an example of Slowly Varying State variables maintained for a thermal storage heating Terminal Asset by + its AtomicTNode and Scada. + recuzRX6RAVYBuYO4 + atn.outside.temp.regr.coeffs + 000 + 1 + Pending + + recCgP2Dw5SfDjpp2 + Pending + https://gridworks-atn.readthedocs.io/en/latest/data-categories.html#slowly-varying-state-variables + gwatn + recyD0ycgUiT7TiH2 @@ -8717,6 +9547,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 0 Deprecated + recyETDKMGTbGb0zf @@ -8748,6 +9579,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Data Channel recb9fI4kRkTYXDzA gwproto + reczVqlxJInFWonml @@ -8773,25 +9605,22 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) supervisor.container.gt 000 1 - Pending + Active - recbuSNZg3DwAGxys - recfLzamGrtSF52cT recJbB2aEPqgo0e6D - Pending + Active Used to send and receive updates about SupervisorContainers rec1S1Qh6ReE9UJxT rec24qjC90m0f4Kvl recb9fI4kRkTYXDzA https://gridworks.readthedocs.io/en/latest/supervisor.html - gworld - gwatn gridworks + reczzIn3wGYrEKtbr 2022-11-10T13:22:42Z - flo.params.heatpumpwithbooststore.000 + flo.params.heatpumpwithbooststore.001 Active Json reckPchT9nFs24QdF @@ -8845,235 +9674,255 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec8xg10A3XVqZhG0 rec1HqF8uSZx4V5Qg rec1OE8jCG5qkI4oK + recxJmpDJWx6LnEzW + rec12ghZsHZYMDdQG rec4S3L3NZiPihbLi recf9ZTshqRu81HZo rec57bh9xoIxLUHjY recX0A9nSriRUvl9n recA15Ak50x6bNMx1 recEyU9EKDtM3bD18 - 000 + 001 1 + Flo params for the (private) HeatPumpWithBoostStore AtomicTNode strategy. reci4VO3iee2LGfcG flo.params.heatpumpwithbooststore - 000 + 001 1 - Active + Pending - recGpv7lXS5nQj5jR recvFLJdLpTh7dGh1 - Active - gwatn + Pending + rec24qjC90m0f4Kvl + recb9fI4kRkTYXDzA + https://gridworks.readthedocs.io/en/latest/enums.html#gridworks.enums.StrategyName satn + rec03iozTi9uddDyU 2022-11-10T14:18:50Z + K true - -1.1 true - reczzIn3wGYrEKtbr Number - K - 33 + false + false -1.1 + reczzIn3wGYrEKtbr Rate at which temperature falls in the pipes, when divided by gpm + 33 + -1.1 + Number + + + rec08KVslwkqJBLtV + 2023-05-10T14:38:18Z + StartHourUtc + true + true + Integer false false - Number + 0 + recvJ9OVpqVVP895H + 7 + 0 + Integer rec0AFxprybFFfPgz 2022-08-11T15:26:36Z + ScadaAliasList true - true true - reciPWPv22Y3pt5oD + true String - ScadaAliasList recb9fI4kRkTYXDzA - ["dwtest.isone.ct.newhaven.orange1.ta.scada"] LeftRightDot false false + ["dwtest.isone.ct.newhaven.orange1.ta.scada"] "a.b-h" + reciPWPv22Y3pt5oD String LeftRightDot rec0BWB4bW4ISm6cZ 2022-11-09T23:00:25Z + EmitterMaxSafeSwtF true - 170 true - recrZz3gmzl97POA1 Integer - EmitterMaxSafeSwtF - 8 - 170 false false + 170 + recrZz3gmzl97POA1 + 14 + 170 Integer rec0CcV18jeIt4AII 2022-09-22T18:51:47Z + OldChildAliasList true - true true - rec5bEVzI1k5qcXYg + true String - OldChildAliasList - 2 recb9fI4kRkTYXDzA - ["d1.isone.ver.keene.holly"] LeftRightDot false false + ["d1.isone.ver.keene.holly"] "a.b-h" + rec5bEVzI1k5qcXYg + 2 String LeftRightDot rec0DytUWYZc8xqSl 2022-11-10T13:23:47Z + DistPumpFeedbackModel true - ConstantDeltaT - reczzIn3wGYrEKtbr - EmitterPumpFeedbackModel - 21 rec57bh9xoIxLUHjY - "00000000" - emitter.pump.feedback.model + sh.dist.pump.feedback.model true false - emitter.pump.feedback.model.000 + "00000000" + reczzIn3wGYrEKtbr + sh.dist.pump.feedback.model.000 ConstantDeltaT + 21 + ConstantDeltaT UpperPython String - EmitterPumpFeedbackModel000 - EmitterPumpFeedbackModel000 + ShDistPumpFeedbackModel000 + ShDistPumpFeedbackModel000 rec0EFbgjuaALp5xv 2022-06-24T20:28:37Z + AboutNodeAliasList true - true true - rec93KBYcwiqJ6OQy + true String - AboutNodeAliasList - 1 - AboutNodeAliasList recb9fI4kRkTYXDzA - ["a.elt1"] - List of aliases of the SpaceHeat Nodes getting measured LeftRightDot false false + ["a.elt1"] "a.b-h" + rec93KBYcwiqJ6OQy + List of aliases of the SpaceHeat Nodes getting measured + 1 + AboutNodeAliasList String LeftRightDot rec0PurqCSDSSL9gV 2022-11-04T18:36:22Z + OldTaDeedIdx true true - recPy6SuizSerb3JG Integer - OldTaDeedIdx - 1 - 10 false false + 10 + recPy6SuizSerb3JG + 1 Integer rec0SCL5wm4k2QtCO 2022-07-03T22:29:19Z + ValueList true - true true - rec8c4KjhwNmfrRYP + true Integer - ValueList - 2 - List of Values - [0] - The values of the readings. false false + [0] + rec8c4KjhwNmfrRYP + The values of the readings. + 2 + List of Values Integer rec0W9aExBJ7Kueom 2022-08-11T15:26:21Z + AtomicTNodeAliasList true - true true - reciPWPv22Y3pt5oD + true String - AtomicTNodeAliasList recb9fI4kRkTYXDzA - ["dwtest.isone.ct.newhaven.orange1"] LeftRightDot false false + ["dwtest.isone.ct.newhaven.orange1"] "a.b-h" + reciPWPv22Y3pt5oD String LeftRightDot rec0WVcC4M6yKdKuR 2023-02-14T20:39:17Z + Alias true true - recEhzcpob8H7VuEF String - Alias - 1 recb9fI4kRkTYXDzA - "a.elt1" LeftRightDot false false + "a.elt1" "a.b-h" + recEhzcpob8H7VuEF + 1 String LeftRightDot rec0juF70Cw37hFpe 2023-02-14T20:39:29Z + DisplayName true - recEhzcpob8H7VuEF String - DisplayName - 4 - "First boost element" false false + "First boost element" + recEhzcpob8H7VuEF + 4 String rec0oIFJ2LAVcoLeV 2023-01-28T00:17:58Z + TelemetryNameList true true - recULIwPg69M69185 - TelemetryNameList - 5 rec2HyLffy6QK9QId - ["22641963"] telemetry.name true false + ["22641963"] + recULIwPg69M69185 spaceheat.telemetry.name.000 Unknown + 5 UpperPython String SpaceheatTelemetryName000 @@ -9082,396 +9931,459 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec0pPcBLkF054gpN 2022-11-09T23:30:34Z + Cop1TempF true - -20 true - recrZz3gmzl97POA1 Integer - Cop1TempF - 24 - -20 false false + -20 + recrZz3gmzl97POA1 + 30 + -20 Integer rec0yzwyCWxtaJQJF 2022-05-11T18:50:00Z + ScadaReadTimeUnixMs true true - rec944QikN18Rdopu Integer - ScadaReadTimeUnixMs recqSXVzLo8RtEjlH - 1656513094288 ReasonableUnixTimeMs false false + 1656513094288 1656245000 + rec944QikN18Rdopu Integer ReasonableUnixTimeMs + + rec12ghZsHZYMDdQG + 2023-05-10T14:32:26Z + FloParamsUid + true + true + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual + false + false + "97eba574-bd20-45b5-bf82-9ba2f492d8f6" + "d4be12d5-33ba-4f1f-b9e5" + reczzIn3wGYrEKtbr + 52 + String + UuidCanonicalTextual + rec1CtEN5Aheg8zzR 2023-01-16T08:02:01Z + BoostPowerWatts true true - rec9kYNek59Vqps4S Integer - BoostPowerKwTimes1000 - 2 - 12000 false false + 12000 + rec9kYNek59Vqps4S + 2 Integer rec1HqF8uSZx4V5Qg 2022-11-10T14:29:06Z + ZeroPotentialEnergyWaterTempF true - 100 true - reczzIn3wGYrEKtbr Integer - ZeroPotentialEnergyWaterTempF - 20 - 100 false false + 100 + reczzIn3wGYrEKtbr + 20 + 100 Integer rec1OE8jCG5qkI4oK 2022-11-10T15:16:07Z + HouseWorstCaseTempF true - -7 true - reczzIn3wGYrEKtbr Integer - HouseWorstCaseTempF - 31 - -7 false false + -7 + reczzIn3wGYrEKtbr + 31 + -7 Integer rec1SyaI5uoDhNW1f 2022-08-11T15:28:28Z + EarGNodeAlias true true - reciPWPv22Y3pt5oD String - EarGNodeAlias recb9fI4kRkTYXDzA - dwtest.ear1 LeftRightDot false false + dwtest.ear1 "a.b-h" + reciPWPv22Y3pt5oD String LeftRightDot rec1TiEjRVAsU1G6T 2022-06-17T12:46:48Z - true - rec3Noy3m1X4Vdly9 TelemetryName - 5 + true rec2HyLffy6QK9QId - "c89d0ba1" telemetry.name true false + "c89d0ba1" + rec3Noy3m1X4Vdly9 spaceheat.telemetry.name.000 Unknown + 5 UpperPython String SpaceheatTelemetryName000 SpaceheatTelemetryName000 + + rec1UsBj2W4QOsHy3 + 2023-06-25T20:49:28Z + StorageSteps + true + true + Integer + false + false + 100 + rechp89wabr5kkqti + 3 + 100 + Integer + rec1X9YAxHaCnkpkS 2022-11-09T23:00:24Z + SystemMaxHeatOutputSwtF true - 160 true - recrZz3gmzl97POA1 Integer - SystemMaxHeatOutputSwtF - 5 + false + false 160 + recrZz3gmzl97POA1 + 11 + 160 + Integer + + + rec1cSvPeCnzzPlFy + 2023-06-25T21:26:17Z + StartHourUtc + true + true + Integer false false + 0 + rec2EA0TG0Xexi6wg + 7 + 0 Integer rec1hFSN0SKmeE8CV 2022-11-17T06:04:05Z + MarketMakerAlias true true - recLufl9jSdsMGsFR String - MarketMakerAlias - 1 recb9fI4kRkTYXDzA - 'd1.isone.ver.keene' LeftRightDot false false + 'd1.isone.ver.keene' "a.b-h" + recLufl9jSdsMGsFR + 1 String LeftRightDot rec1juFm5ISKu1HWQ 2023-04-05T12:18:17Z + ExpectedMaxGpmTimes100 true - recGuvhjDYO65d5rP Integer - ExpectedMaxGpmTimes100 - 7 - Expected Max Flow in Gallons per Minute, times 100 false false + recGuvhjDYO65d5rP + 7 + Expected Max Flow in Gallons per Minute, times 100 Integer rec1k8ewouaBtPAoB 2022-11-12T08:16:50Z + MicroLat true true - recbGrdqqYGiwVYVK Integer - MicroLat - 1 - 45666353 false false + 45666353 + recbGrdqqYGiwVYVK + 1 Integer rec1kx74Elyh0gRye 2022-11-04T15:35:12Z + ValidatorAddr true - https://gridworks.readthedocs.io/en/latest/ta-validator.html true - recPf7eAhpge7kvO7 String - ValidatorAddr - 2 recopFBsq4TmG87Op - '7QQT4GN3ZPAQEFCNWF5BMF7NULVK3CWICZVT4GM3BQRISD52YEDLWJ4MII' - The Algoand address for the TaValidator who validated the location, - metering and type of the Transactive Device. AlgoAddressStringFormat false false + '7QQT4GN3ZPAQEFCNWF5BMF7NULVK3CWICZVT4GM3BQRISD52YEDLWJ4MII' + recPf7eAhpge7kvO7 + The Algoand address for the TaValidator who validated the location, + metering and type of the Transactive Device. + 2 String AlgoAddressStringFormat + https://gridworks.readthedocs.io/en/latest/ta-validator.html rec1lT7lfuqohFuY2 2022-05-12T01:45:00Z + PowerWList true - true true - recTZzT6nQkrQ4sMq + true Integer - PowerWList false false + recTZzT6nQkrQ4sMq Integer rec1nNl4mM8w486VP 2023-01-13T18:39:44Z + SendTimeUnixMs true true - recE3bIWWFpMPqyS1 Integer - SendTimeUnixMs - 5 - Time this message is made and sent on my clock recqSXVzLo8RtEjlH - 1673635765317 ReasonableUnixTimeMs false false + 1673635765317 1656245000 + recE3bIWWFpMPqyS1 + 5 + Time this message is made and sent on my clock Integer ReasonableUnixTimeMs rec1nhmaOdYNQmXTy 2022-07-10T12:49:40Z - true - true - rec2m06PsjtFd0cfu MakeModel - 1 + true recLQWqTvGwSz2GcN - "00000000" make.model + true true false - spaceheat.make.model.000 + "00000000" + rec2m06PsjtFd0cfu + spaceheat.make.model.001 UnknownMake__UnknownModel + 1 Upper String - SpaceheatMakeModel000 - SpaceheatMakeModel000 + SpaceheatMakeModel001 + SpaceheatMakeModel001 rec1rqOoUC58tSWgF 2022-07-25T21:44:50Z - recyD0ycgUiT7TiH2 MyAtomicTNodeGNode false false + recyD0ycgUiT7TiH2 rec1sA97XqAvz5PmW 2022-11-14T23:44:57Z + DaemonPort true true - recbGrdqqYGiwVYVK Integer - DaemonPort - 3 - 8002 false false + 8002 + recbGrdqqYGiwVYVK + 3 Integer rec1tjyG2fxEVpUYW 2022-06-06T18:45:39Z + DisplayName true - recPbLemXyDnvKcIc String - DisplayName - 2 - "relay for first elt in tank" false false + "relay for first elt in tank" + recPbLemXyDnvKcIc + 2 String rec24rwap57yNPkVI 2022-11-10T15:17:10Z + HouseWorstCaseTempF true - -7 true - recrZz3gmzl97POA1 Integer - HouseWorstCaseTempF - 33 - -7 false false + -7 + recrZz3gmzl97POA1 + 34 + -7 Integer rec2E2PuhJhkdGWTk 2023-01-06T03:12:30Z + TerminalAssetAlias true true - recUtSmERYdWUVAPm String - TerminalAssetAlias - 0 recb9fI4kRkTYXDzA - "d1.isone.ver.keene.holly.ta" - The GNodeAlias of the TerminalAsset owned by the TaOwner. LeftRightDot false false + "d1.isone.ver.keene.holly.ta" "a.b-h" + recUtSmERYdWUVAPm + The GNodeAlias of the TerminalAsset owned by the TaOwner. + 0 String LeftRightDot rec2ERXNwEH6jyyHv 2022-06-15T23:03:41Z + ReadTimeUnixMsList true - true true - recncxVAzn76fL8xN + true Integer - ReadTimeUnixMsList recqSXVzLo8RtEjlH - [1656443705023] ReasonableUnixTimeMs false false + [1656443705023] 1656245000 + recncxVAzn76fL8xN Integer ReasonableUnixTimeMs rec2EuDcLlLMuM7C5 2022-09-19T20:24:11Z + ChildAliasList true - true true - recJH4tbXOqVJkMVW + true String - ChildAliasList - 5 recb9fI4kRkTYXDzA - ['d1.iso.me.orange', 'd1.iso.me.almond'] LeftRightDot false false + ['d1.iso.me.orange', 'd1.iso.me.almond'] "a.b-h" + recJH4tbXOqVJkMVW + 5 String LeftRightDot + + rec2FA57487tkIrdH + 2023-06-25T21:33:37Z + RequiredSourceWaterTempF + true + true + Integer + false + false + 120 + rec2EA0TG0Xexi6wg + 13 + 120 + Integer + rec2IBoFUqHWK1J8L 2022-08-11T17:32:14Z + FromGNodeAlias true true - recrnRklRws6Txbqr String - FromGNodeAlias - 0 recb9fI4kRkTYXDzA - "dwtest.isone.ct.newhaven.orange1.ta.scada" LeftRightDot false false + "dwtest.isone.ct.newhaven.orange1.ta.scada" "a.b-h" + recrnRklRws6Txbqr + 0 String LeftRightDot rec2JW8GAoEQQX6ev 2022-07-25T21:47:17Z - recyD0ycgUiT7TiH2 BoolenActuatorCacList false false + recyD0ycgUiT7TiH2 rec2Mwqc5DnE715Ck 2023-04-02T14:10:11Z + TelemetryNameList true true - recqhQADHovWX1hOl - TelemetryNameList - 3 - TelenetryNames read by this power meter rec2HyLffy6QK9QId - ["af39eec9"] telemetry.name true false + ["af39eec9"] + recqhQADHovWX1hOl spaceheat.telemetry.name.000 Unknown + 3 UpperPython + TelenetryNames read by this power meter String SpaceheatTelemetryName000 SpaceheatTelemetryName000 @@ -9479,89 +10391,104 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec2NckVsy3wDPK6Q 2022-07-05T12:56:22Z + FromGNodeAlias true true - recVIr500A203gkcH String - FromGNodeAlias recb9fI4kRkTYXDzA - "dwtest.isone.ct.newhaven.orange1.ta.scada" LeftRightDot false false + "dwtest.isone.ct.newhaven.orange1.ta.scada" "a.b-h" + recVIr500A203gkcH String LeftRightDot + + rec2Q5gra7JT1hP5z + 2023-05-10T14:24:36Z + HomeCity + true + true + String + false + false + "MILLINOCKET_ME" + recfDQscmquO0odpo + 8 + "MILLINOCKET_ME" + String + rec2WTDVr3IZq1B7j 2022-07-13T00:21:59Z + MeterCtIdx true - recpZ6JqSrTi4xaOu Integer - MeterCtIdx - 3 reciNckyKjqNQDByG - 0 NonNegativeInteger false false + 0 + recpZ6JqSrTi4xaOu + 3 Integer NonNegativeInteger rec2YrBsmiG8OdWkv 2022-11-10T14:18:12Z + SystemMaxHeatOutputKwAvg true - 11.68 true - reczzIn3wGYrEKtbr Number - SystemMaxHeatOutputKwAvg - 32 - 11.68 false false + 11.68 + reczzIn3wGYrEKtbr + 32 + 11.68 Number rec2l6jE1FMj92czA 2022-07-03T22:30:52Z + AboutNodeAlias true - https://gridworks-protocol.readthedocs.io/en/latest/spaceheat-node.html true - receGKnJ8CfemQLdQ String - AboutNodeAlias - 0 - AboutNodeAlias recb9fI4kRkTYXDzA + LeftRightDot + false + false "a.elt1" + "a.b-h" + receGKnJ8CfemQLdQ The SpaceheatNode representing the physical object that the sensor reading is collecting data about. For example, a multipurpose temp sensor that reads 12 temperatures would have data for 12 different AboutNodeAliases, including say `a.tank1.temp1` for a temp sensor at the top of a water tank. - LeftRightDot - false - false - "a.b-h" + 0 + AboutNodeAlias String LeftRightDot + https://gridworks-protocol.readthedocs.io/en/latest/spaceheat-node.html rec2pvNC90x1j8fhm 2023-01-08T10:21:22Z - true - rectayh08KEGGGcZc Type - 0 + true recCQyaQ1Oq0MlT20 - '086b5165' algo.cert.type true false + '086b5165' + rectayh08KEGGGcZc algo.cert.type.000 ASA + 0 UpperPython String AlgoCertType000 @@ -9570,51 +10497,68 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec2tXUsfrvhm3P6s 2022-11-06T20:03:54Z + OwnerAddr true - rec8uTC7GK5qgXzg9 String - OwnerAddr - 9 - Algorand address of the deed owner recopFBsq4TmG87Op - '7QQT4GN3ZPAQEFCNWF5BMF7NULVK3CWICZVT4GM3BQRISD52YEDLWJ4MII' AlgoAddressStringFormat false false + '7QQT4GN3ZPAQEFCNWF5BMF7NULVK3CWICZVT4GM3BQRISD52YEDLWJ4MII' + rec8uTC7GK5qgXzg9 + 9 + Algorand address of the deed owner String AlgoAddressStringFormat + + rec30du75CvosnjIj + 2023-05-10T14:20:07Z + RegPriceUid + true + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual + false + false + "0499a20e-7b81-47af-a2b4-8f4df0cd1284" + "d4be12d5-33ba-4f1f-b9e5" + recfDQscmquO0odpo + 22 + String + UuidCanonicalTextual + rec34OIYCFo5w9hkm 2023-03-02T10:36:18Z + FromGNodeInstanceId true true - recDq5Oo6baJLVS5s String - FromGNodeInstanceId - 1 - My GNodeInstanceId rec24qjC90m0f4Kvl - "97eba574-bd20-45b5-bf82-9ba2f492d8f6" UuidCanonicalTextual false false + "97eba574-bd20-45b5-bf82-9ba2f492d8f6" "d4be12d5-33ba-4f1f-b9e5" + recDq5Oo6baJLVS5s + 1 + My GNodeInstanceId String UuidCanonicalTextual rec367deUgDqEaq89 2022-06-20T13:18:30Z + TelemetryNameList true true - recauOuVBqhRdNWcN - TelemetryNameList rec2HyLffy6QK9QId - ["5a71d4b3", "c89d0ba1"] telemetry.name true false + ["5a71d4b3", "c89d0ba1"] + recauOuVBqhRdNWcN spaceheat.telemetry.name.000 Unknown UpperPython @@ -9631,17 +10575,17 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec3Ip25a5UdscQKD 2022-10-02T23:33:36Z - true - recDp8U1jLA9zeEx2 Status - 2 + true recqx4EqT3OFtnxTG - '3661506b' g.node.status true false + '3661506b' + recDp8U1jLA9zeEx2 g.node.status.100 Unknown + 2 UpperPython String GNodeStatus100 @@ -9650,37 +10594,37 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec3JoWyUlqUfiTLp 2023-03-13T18:13:35Z - true - reccsu6ZeZHKoDqDy ActorClass - 2 + true recQeMNisJZjsYXTl - "638bf97b" actor.class true false - sh.actor.class.001 + "638bf97b" + reccsu6ZeZHKoDqDy + sh.actor.class.000 NoActor + 2 UpperPython String - SpaceheatActorClass001 - SpaceheatActorClass001 + SpaceheatActorClass000 + SpaceheatActorClass000 rec3MAw2y2MewO5VK 2022-11-10T13:23:38Z - true - VersantStorageHeatTariff - reczzIn3wGYrEKtbr BoostTariff - 12 + true rec4S3L3NZiPihbLi - "2127aba6" distribution.tariff true false + "2127aba6" + reczzIn3wGYrEKtbr distribution.tariff.000 Unknown + 12 + VersantA1StorageHeatTariff UpperPython String DistributionTariff000 @@ -9689,18 +10633,18 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec3NEaYaETLIXR9Z 2023-01-24T17:49:27Z - true - true - recqhQADHovWX1hOl Interface - 5 + true rec7Ck8y72m0NytYa - "a6a4ac9f" local.comm.interface + true true false + "a6a4ac9f" + recqhQADHovWX1hOl local.comm.interface.000 Unknown + 5 Upper String LocalCommInterface000 @@ -9709,254 +10653,253 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec3XrurBTlbCXBfL 2022-09-19T20:25:10Z + TaGNodeAlias true true - recazQb2vEXgbroHd String - TaGNodeAlias recb9fI4kRkTYXDzA - 'd1.iso.me.orange.ta' LeftRightDot false false + 'd1.iso.me.orange.ta' "a.b-h" + recazQb2vEXgbroHd String LeftRightDot rec3akDIjr7e9Pb0u 2022-11-17T06:14:49Z + BidderAlias true true - recacY2b5R2bByiAQ String - BidderAlias - 1 recb9fI4kRkTYXDzA LeftRightDot false false "a.b-h" + recacY2b5R2bByiAQ + 1 String LeftRightDot rec3ez7rNTNCnqsst 2022-11-04T13:44:02Z + TaOwnerAddr true true - recAWKkS0hcyws7O6 String - TaOwnerAddr - 1 - The Algorand address of the owner for the TerminalAsset recopFBsq4TmG87Op - "KXGT6JIRJQR4GCSS647KL2OSSKBZ3FSYJDIXJEGAF7TZLN4JF4DGDDX4BI" AlgoAddressStringFormat false false + "KXGT6JIRJQR4GCSS647KL2OSSKBZ3FSYJDIXJEGAF7TZLN4JF4DGDDX4BI" + recAWKkS0hcyws7O6 + 1 + The Algorand address of the owner for the TerminalAsset String AlgoAddressStringFormat rec4BpH0P9FNwZJqs 2022-09-22T18:50:53Z + GNodeAlias true true - rec5bEVzI1k5qcXYg String - GNodeAlias - 0 recb9fI4kRkTYXDzA - 'd1.isone.ver.keene' LeftRightDot false false + 'd1.isone.ver.keene' "a.b-h" + rec5bEVzI1k5qcXYg + 0 String LeftRightDot rec4VyYOa9NyxUjui 2022-11-18T17:55:37Z + GNodeAlias true true - recrZz3gmzl97POA1 String - GNodeAlias - 37 recb9fI4kRkTYXDzA - 'd1.isone.ver.keene.holly' LeftRightDot false false + 'd1.isone.ver.keene.holly' "a.b-h" + recrZz3gmzl97POA1 + 0 String LeftRightDot rec4XKd6lO34y5XKU 2022-11-21T05:26:08Z + ToGNodeAlias true true - recX2g8OLICXZHuHr String - ToGNodeAlias - 2 recb9fI4kRkTYXDzA - "d1.time" LeftRightDot false false + "d1.time" "a.b-h" + recX2g8OLICXZHuHr + 2 String LeftRightDot rec4adVbIULyfOhu4 2022-06-23T18:40:39Z + ReportOnChange true true - recDEr7ob2KLqM4gU Boolean - ReportOnChange - 2 - True false false + True + recDEr7ob2KLqM4gU + 2 Boolean rec4j6ntpGttspb5O 2022-11-02T23:16:57Z + TopGNodeAlias true true - rec8ILTteHhn4MpGd String - TopGNodeAlias - 0 recb9fI4kRkTYXDzA - 'd1' LeftRightDot false false + 'd1' "a.b-h" + rec8ILTteHhn4MpGd + 0 String LeftRightDot rec4tCsBpIaZUGllT 2023-01-15T12:55:21Z + MarketSlotName true true - recECSz5o4Z7NFjhG String - MarketSlotName - 2 recdsSDIz6EmZCvr9 - "rt60gate5.d1.isone.ver.keene.1667880000" MarketSlotNameLrdFormat false false + "rt60gate5.d1.isone.ver.keene.1667880000" + recECSz5o4Z7NFjhG + 2 String MarketSlotNameLrdFormat rec57uhIFk7eVwvKQ 2022-11-23T14:02:10Z + TerminalAssetAlias true true - recPxYqZlRvCFlD8p String - TerminalAssetAlias - 0 recb9fI4kRkTYXDzA - 'd1.isone.ver.keene.holly.ta' LeftRightDot false false + 'd1.isone.ver.keene.holly.ta' "a.b-h" + recPxYqZlRvCFlD8p + 0 String LeftRightDot rec59ZiBmdpSMTFx6 2023-03-13T18:13:32Z + Alias true true - reccsu6ZeZHKoDqDy String - Alias - 1 recb9fI4kRkTYXDzA - "a.elt1" LeftRightDot false false + "a.elt1" "a.b-h" + reccsu6ZeZHKoDqDy + 1 String LeftRightDot rec5AtelLyWoElhSp 2023-01-16T08:02:28Z + StoreKwh true true - rec9kYNek59Vqps4S Integer - StoreKwh - 4 - 40000 false false + 40000 + rec9kYNek59Vqps4S + 4 Integer rec5N3oYOvCWemw2p 2022-11-10T13:23:48Z - true - NaiveVariableSwt - reczzIn3wGYrEKtbr MixingValveFeedbackModel - 22 + true recX0A9nSriRUvl9n - "0397c1df" - mixing.valve.feedback.model + sh.mixing.valve.feedback.model true false - mixing.valve.feedback.model.000 + "0397c1df" + reczzIn3wGYrEKtbr + sh.mixing.valve.feedback.model.000 ConstantSwt + 22 + NaiveVariableSwt UpperPython String - MixingValveFeedbackModel000 - MixingValveFeedbackModel000 + ShMixingValveFeedbackModel000 + ShMixingValveFeedbackModel000 rec5OmOMeHTBF0VGa 2023-02-20T14:12:47Z + MessageId true true - recObejFqCYx5kpak String - MessageId - 6 rec24qjC90m0f4Kvl UuidCanonicalTextual false false "d4be12d5-33ba-4f1f-b9e5" + recObejFqCYx5kpak + 6 String UuidCanonicalTextual rec5TsqaPhBNGB6On 2023-02-14T14:42:38Z - true - recEGOX7VX0bQ3Lvf - recDEr7ob2KLqM4gU OutputConfig - 1 - Output config for the same channel + true + telemetry.reporting.config.000 + false + true {'AboutNodeName': 'a.tank1.elts', 'ReportOnChange': True, 'SamplePeriodS': 60, @@ -9967,62 +10910,87 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 'Version': '000', 'TelemetryNameGtEnumSymbol': 'af39eec9', 'UnitGtEnumSymbol': 'f459a9c3'} + recEGOX7VX0bQ3Lvf + recDEr7ob2KLqM4gU This is the data as the Scada proactor expects to consume it from the power meter driver proactor. - telemetry.reporting.config.000 - false - true telemetry.reporting.config + 1 + Output config for the same channel telemetry.reporting.config.000 rec5Yab4cmmMu4DWm 2022-10-02T23:33:45Z + GNodeRegistryAddr true true - recDp8U1jLA9zeEx2 String - GNodeRegistryAddr - 4 recopFBsq4TmG87Op - 'MONSDN5MXG4VMIOHJNCJJBVASG7HEZQSCEIKJAPEPVI5ZJUMQGXQKSOAYU' AlgoAddressStringFormat false false + 'MONSDN5MXG4VMIOHJNCJJBVASG7HEZQSCEIKJAPEPVI5ZJUMQGXQKSOAYU' + recDp8U1jLA9zeEx2 + 4 String AlgoAddressStringFormat + + rec5hCBMJ1u2liO0o + 2023-05-10T14:28:37Z + false + false + + + rec5tlsMd4hrJm4Yi + 2023-05-10T14:34:19Z + GNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + "d1.isone.ver.keene.holly" + "a.b-h" + recvJ9OVpqVVP895H + 0 + String + LeftRightDot + rec5xtm1Bu9kG4GaK 2023-01-16T17:35:07Z + SignedProof true true - rec3kcgktiHCBYpA4 String - SignedProof - 2 recvbnpa4cX2nNp9p - 'gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc=' AlgoMsgPackEncoded false false + 'gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc=' + rec3kcgktiHCBYpA4 + 3 String AlgoMsgPackEncoded rec5yCVNnWVXBDdMc 2022-11-08T04:13:22Z - true - AvgMW - recH9GUDdSB7SiwNG QuantityUnit - 6 + true recounhEj97w5SfDm - "c272f3b3" market.quantity.unit true false + "c272f3b3" + recH9GUDdSB7SiwNG market.quantity.unit.000 AvgMW + 6 + AvgMW UpperPython String MarketQuantityUnit000 @@ -10031,16 +10999,16 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec68T9cqrrclsIpW 2022-11-17T06:15:00Z + PqPairs true true - recacY2b5R2bByiAQ - recsHXkpUxoOF9vYp - PqPairs - 2 price.quantity.unitless.000 false true + recacY2b5R2bByiAQ + recsHXkpUxoOF9vYp price.quantity.unitless + 2 price.quantity.unitless.000 @@ -10049,254 +11017,314 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false false + + rec6J08ESPo5dbR8t + 2023-06-28T18:49:50Z + StorePassiveLossRatio + true + true + Number + false + false + 0.005 + rec2EA0TG0Xexi6wg + 19 + 0.005 + Number + rec6MQ1HJUBz9pC5d 2022-11-06T20:03:56Z + TradingRightsId true - rec8uTC7GK5qgXzg9 Integer - TradingRightsId + false + false + 1 + rec8uTC7GK5qgXzg9 + The Id of the TradingRights Algorand Standard Asset. 11 Algorand Id of ASA TradingRights recKcuGOfjTIPqtXk - 1 - The Id of the TradingRights Algorand Standard Asset. - false - false PositiveInteger Integer rec6bDjiEVzfKTxUI 2023-02-14T20:39:34Z + ReportingSamplePeriodS true - recEhzcpob8H7VuEF Integer - ReportingSamplePeriodS - 6 - 300 false false + 300 + recEhzcpob8H7VuEF + 6 Integer rec6erTuD9iej4cpC 2022-11-02T23:21:22Z + FromGNodeInstanceId true true - rec8ILTteHhn4MpGd String - FromGNodeInstanceId - 3 rec24qjC90m0f4Kvl - '1a952a89-e471-46ac-b563-f33f260ec819' UuidCanonicalTextual false false + '1a952a89-e471-46ac-b563-f33f260ec819' "d4be12d5-33ba-4f1f-b9e5" + rec8ILTteHhn4MpGd + 3 String UuidCanonicalTextual rec6fCUex0HlMSbTR 2022-07-03T22:31:08Z - true - https://gridworks-protocol.readthedocs.io/en/latest/telemetry-name.html - receGKnJ8CfemQLdQ TelemetryName - 2 - TelemetryName + true rec2HyLffy6QK9QId + telemetry.name + true + false "af39eec9" + receGKnJ8CfemQLdQ The TelemetryName of the readings. This is used to interpet the meaning of the reading values. For example, WaterTempCTimes1000 means the reading is measuring the temperature of water, in Celsius multiplied by 1000. So a value of 37000 would be a reading of 37 deg C. - telemetry.name - true - false spaceheat.telemetry.name.000 Unknown + 2 UpperPython + TelemetryName String SpaceheatTelemetryName000 SpaceheatTelemetryName000 + https://gridworks-protocol.readthedocs.io/en/latest/telemetry-name.html rec6geR7twzmoj4vD 2022-11-10T13:23:48Z + CautiousMixingValveTempDeltaF true - 5 true - reczzIn3wGYrEKtbr Integer - CautiousMixingValveTempDeltaF - 23 - 5 false false + 5 + reczzIn3wGYrEKtbr + 23 + 5 Integer rec6n5D0n75iRarhL 2022-11-04T18:01:02Z + SignedTadeedOptinTxn true true - recPy6SuizSerb3JG String - SignedTadeedOptinTxn - 4 recvbnpa4cX2nNp9p - 'gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc=' AlgoMsgPackEncoded false false + 'gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc=' + recPy6SuizSerb3JG + 4 String AlgoMsgPackEncoded rec6nWq42TdJuV1oR 2023-02-14T13:14:26Z + Description true true - rec9dL2CYkm5s4OXX String - Description - 2 - '' false false + '' + rec9dL2CYkm5s4OXX + 2 String rec6sw1bj1xU6alKt 2022-11-09T23:00:09Z + AnnualHvacKwhTh true - 28125 true - recrZz3gmzl97POA1 Integer - AnnualHvacKwhTh - 34 - 28125 false false + 28125 + recrZz3gmzl97POA1 + 35 + 28125 Integer rec6tXwpa0rqEikXW 2022-11-21T05:24:58Z + FromGNodeInstanceId true true - recf5K0BP9qLabpdS String - FromGNodeInstanceId - 1 rec24qjC90m0f4Kvl - "2858afb7-4ffd-4a10-b3b5-c52ad1f61697" UuidCanonicalTextual false false + "2858afb7-4ffd-4a10-b3b5-c52ad1f61697" "d4be12d5-33ba-4f1f-b9e5" + recf5K0BP9qLabpdS + 1 String UuidCanonicalTextual + + rec72ld1OI4hNGzPB + 2023-05-10T15:41:29Z + AmbientPowerInKw + true + true + Number + false + false + 1.25 + recfDQscmquO0odpo + 29 + 1.25 + Number + + + rec786yhFCPsLdPgd + 2023-05-01T17:53:08Z + StoreKwh + true + true + Integer + false + false + 50 + recm5UcVaAPAtrrFS + 3 + Integer + rec7Kmzb0rNhgYfq6 2022-11-08T15:38:31Z + AboutTerminalAssetAlias true true - recbAMyCyUX2bLKfz String - AboutTerminalAssetAlias - 7 recb9fI4kRkTYXDzA - "d1.isone.ver.keene.holly.ta" LeftRightDot false false + "d1.isone.ver.keene.holly.ta" "a.b-h" + recbAMyCyUX2bLKfz + 7 String LeftRightDot + + rec7YRRBTA86B1MVU + 2023-04-30T19:15:22Z + HomeCity + true + true + String + false + false + "MILLINOCKET_ME" + rec4yUxGiLZpqWQqb + 1 + "MILLINOCKET_ME" + Home City + String + rec7lUlbNs9m5sYDf 2022-07-13T00:22:10Z + MeteredShNodeAlias true - recpZ6JqSrTi4xaOu String - MeteredShNodeAlias - 4 recb9fI4kRkTYXDzA - "a.elt1" LeftRightDot false false + "a.elt1" "a.b-h" + recpZ6JqSrTi4xaOu + 4 String LeftRightDot rec82deD90t24PRHB 2023-03-09T19:31:23Z + ComponentAttributeClassId true true - true - recxdlQ6gCN8mD39r String - ComponentAttributeClassId - 1 rec24qjC90m0f4Kvl - 'c1856e62-d8c0-4352-b79e-6ae05a5294c2' UuidCanonicalTextual + true false false + 'c1856e62-d8c0-4352-b79e-6ae05a5294c2' "d4be12d5-33ba-4f1f-b9e5" + recxdlQ6gCN8mD39r + 1 String UuidCanonicalTextual rec83NurYrYX8rTtT 2022-11-03T14:39:18Z + NewTaDeedIdx true true - recvWBuo1Ws1SIL4b Integer - NewTaDeedIdx - 0 - 14 false false + 14 + recvWBuo1Ws1SIL4b + 0 Integer rec83s8fct15feQXU 2022-06-04T19:22:05Z + DisplayName true - rec3Noy3m1X4Vdly9 String - DisplayName - 6 - "Simulated GridWorks high precision water temp sensor" false false + "Simulated GridWorks high precision water temp sensor" + rec3Noy3m1X4Vdly9 + 6 String rec85nrhXQw9tRODn 2022-11-10T13:23:37Z - true - RealtimeLocalLmp - reczzIn3wGYrEKtbr HeatpumpEnergySupplyType - 11 + true recf9ZTshqRu81HZo - "e9dc99a6" energy.supply.type true false + "e9dc99a6" + reczzIn3wGYrEKtbr energy.supply.type.000 Unknown + 11 + RealtimeLocalLmp UpperPython String EnergySupplyType000 @@ -10305,124 +11333,193 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec88fKL08R9C0d0I 2023-01-16T17:19:32Z + FromGNodeInstanceId true true - recBEBBA0ctnOYQnC String - FromGNodeInstanceId - 1 rec24qjC90m0f4Kvl - '60e5c73a-77e1-4c01-8b78-02c92d20f18a' UuidCanonicalTextual false false + '60e5c73a-77e1-4c01-8b78-02c92d20f18a' "d4be12d5-33ba-4f1f-b9e5" + recBEBBA0ctnOYQnC + 1 String UuidCanonicalTextual + + rec8M66OJ7TvRaPP0 + 2023-05-10T14:34:03Z + false + false + + itrH5pB2a6NdIiiLf/rec8M66OJ7TvRaPP0 + + rec8UGujigt7hxKDU + 2023-05-10T14:24:34Z + TimezoneString + true + true + String + false + false + "US/Eastern" + recfDQscmquO0odpo + 7 + "US/Eastern" + String + rec8XxSaRb8m7Wd5D 2022-06-09T21:32:31Z + ReportOnChange true true - recQ1SzB1rQPnbRUR Boolean - ReportOnChange - 3 - True false false + True + recQ1SzB1rQPnbRUR + 3 Boolean rec8i1VAK2sgrnBWW 2022-06-29T11:05:08Z + HwUid true - recwr8WwMjrVGNL7L String - HwUid - 3 - "1001ab" false false + "1001ab" + recwr8WwMjrVGNL7L + 3 String rec8qVA40s9X5Pcma 2022-12-04T14:20:45Z + GniList true true - recwp0F6Gdrg8qLwb - recV0KuDFayH4qGIl - GniList - 1 - List of GNodeInstances (Gnis) run in the container - [] g.node.instance.gt.000 false true GNodeInstance + [] + recwp0F6Gdrg8qLwb + recV0KuDFayH4qGIl g.node.instance.gt + 1 + List of GNodeInstances (Gnis) run in the container g.node.instance.gt.000 rec8t56gTGBi3AXBr 2023-01-15T12:55:17Z + BidderAlias true true - recECSz5o4Z7NFjhG String - BidderAlias - 0 recb9fI4kRkTYXDzA - "d1.isone.ver.keene.holly.ta" LeftRightDot false false + "d1.isone.ver.keene.holly.ta" "a.b-h" + recECSz5o4Z7NFjhG + 0 String LeftRightDot rec8xg10A3XVqZhG0 2022-11-10T14:26:46Z + StartingStoreIdx true - 50 true - reczzIn3wGYrEKtbr Integer - StartingStoreIdx - 50 - 50 false false + 50 + reczzIn3wGYrEKtbr + 50 + 50 Integer rec8yK9gvhY44u86S 2022-09-19T18:33:07Z + MicroLon true true - recazQb2vEXgbroHd Integer - MicroLon + false + false -68691705 + recazQb2vEXgbroHd + Integer + + + rec8yYiDwp5tkxoeR + 2023-05-10T14:24:39Z + StorageSteps + true + true + Integer + false + false + 100 + recfDQscmquO0odpo + 11 + 100 + Integer + + + rec8ybKjyg4p5PQBZ + 2023-05-10T14:20:04Z + DistPriceUid + true + true + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual + false + false + "b91ef8e7-50d7-4587-bf13-a3af7ecdb83a" + "d4be12d5-33ba-4f1f-b9e5" + recfDQscmquO0odpo + 21 + String + UuidCanonicalTextual + + + rec93EBTpAUbcsD5E + 2023-05-01T21:53:59Z + MaxStoreKwh + true + true + Integer false false + 12 + recwXD4ryogKVwsnE + 4 Integer rec96i0QHA47Ra3SD 2022-07-03T17:29:17Z + ShNodeAlias true true String - ShNodeAlias recb9fI4kRkTYXDzA - "a.elt1.relay" LeftRightDot false false + "a.elt1.relay" "a.b-h" String LeftRightDot @@ -10430,123 +11527,170 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec99DQbyArZzSwTC 2023-03-09T19:31:25Z + DisplayName true - recxdlQ6gCN8mD39r String - DisplayName + false + false + "Main power meter for Little orange house garage space heat" + recxdlQ6gCN8mD39r 2 Display Name for the Power Meter - "Main power meter for Little orange house garage space heat" + String + + + rec9AehNwuheAEZCw + 2023-05-10T14:38:15Z + StartDayUtc + true + true + Integer false false - String + 1 + recvJ9OVpqVVP895H + 6 + 1 + Integer rec9E6HTIAJLoh9wW 2022-06-03T21:41:59Z - true - true - reca2LF7P05qQmFJW MakeModel - 1 + true recLQWqTvGwSz2GcN - "9cc57878" make.model + true true false - spaceheat.make.model.000 - UnknownMake__UnknownModel + "9cc57878" + reca2LF7P05qQmFJW + spaceheat.make.model.001 + UnknownMake__UnknownModel + 1 Upper String - SpaceheatMakeModel000 - SpaceheatMakeModel000 + SpaceheatMakeModel001 + SpaceheatMakeModel001 rec9ELFVpaqjO7myp 2022-09-22T19:38:53Z + ValidatorAddr true true - recXCK8GTrT3hnfKX String - ValidatorAddr - 2 recopFBsq4TmG87Op - '7QQT4GN3ZPAQEFCNWF5BMF7NULVK3CWICZVT4GM3BQRISD52YEDLWJ4MII' - The public Algorand address of the Validator of the TaDaemon's TerminalAsset. AlgoAddressStringFormat false false + '7QQT4GN3ZPAQEFCNWF5BMF7NULVK3CWICZVT4GM3BQRISD52YEDLWJ4MII' + recXCK8GTrT3hnfKX + The public Algorand address of the Validator of the TaDaemon's TerminalAsset. + 2 String AlgoAddressStringFormat + + rec9LV9kNuSH5H6fq + 2023-05-10T14:34:39Z + GNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + "d1.isone.ver.keene.holly" + "a.b-h" + recfDQscmquO0odpo + 31 + String + LeftRightDot + rec9OvxSYyzTJ3J46 2023-03-13T18:13:39Z + DisplayName true - reccsu6ZeZHKoDqDy String - DisplayName - 4 - "First boost element" false false + "First boost element" + reccsu6ZeZHKoDqDy + 4 String rec9PJA13l3jM7pJm 2023-01-19T15:38:46Z + TaAlias true true - recF9KonH58AltK0K String - TaAlias - 0 - TerminalAsset Alias recb9fI4kRkTYXDzA - 'd1.iso.me.ghm.orange.ta' - GNodeAlias of the TerminalAsset that will be controlled by the new SCADA GNode. The SCADA GNodeAlias will have '.scada' appended to this. LeftRightDot false false + 'd1.iso.me.ghm.orange.ta' "a.b-h" + recF9KonH58AltK0K + GNodeAlias of the TerminalAsset that will be controlled by the new SCADA GNode. The SCADA GNodeAlias will have '.scada' appended to this. + 0 + TerminalAsset Alias String LeftRightDot + + rec9TfxvkRChizDvB + 2023-05-01T17:37:50Z + RoomTempF + true + true + Integer + false + false + 70 + recw5evm1WetKAzZG + 16 + 70 + Integer + rec9XARl8tvdTDGbm 2022-11-08T08:16:57Z + FromGNodeAlias true true - recd5K0XiAzHsj2Pw String - FromGNodeAlias - 0 recb9fI4kRkTYXDzA - 'd1.isone.ver.keene' LeftRightDot false false + 'd1.isone.ver.keene' "a.b-h" + recd5K0XiAzHsj2Pw + 0 String LeftRightDot rec9XvWitA9d8vD2l 2022-11-10T14:20:22Z + RealtimeElectricityPrice true - [10.35] - true true - reczzIn3wGYrEKtbr + true Number - RealtimeElectricityPrice - 38 - [10.35] false false + [10.35] + reczzIn3wGYrEKtbr + 38 + [10.35] Number - itrl5NjSxG6LGJS6d/rec9XvWitA9d8vD2l rec9fsScoo91bMhGw 2023-01-28T16:43:58Z @@ -10560,6 +11704,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 7 String + + rec9g3ackYYzyweKE + 2023-05-10T15:41:31Z + HouseWorstCaseTempF + true + true + Integer + false + false + -7 + recfDQscmquO0odpo + 30 + -7 + Integer + rec9m6WYnkhS8o9uJ 2023-03-02T10:36:25Z @@ -10579,6 +11738,24 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Integer ReasonableUnixTimeMs + + recA6xaBWKtDeVbZs + 2023-05-01T17:52:33Z + FromGNodeInstanceId + true + true + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual + false + false + "d4057686-c199-4274-b595-f7e39ce863e2" + "d4be12d5-33ba-4f1f-b9e5" + recm5UcVaAPAtrrFS + 1 + String + UuidCanonicalTextual + recAAAHCxBerQLxks 2022-06-23T18:38:36Z @@ -10649,6 +11826,20 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String AlgoAddressStringFormat + + recANnuMlvL9PGtYv + 2023-06-25T20:49:21Z + HomeCity + true + true + String + false + false + "MILLINOCKET_ME" + rechp89wabr5kkqti + 1 + String + recAPFghl03E7vx46 2023-02-20T14:11:31Z @@ -10665,6 +11856,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String LeftRightDot + + recAaVjjsT4dYXHxM + 2023-06-25T21:33:34Z + RatedPowerKw + true + true + Number + false + false + 9.5 + rec2EA0TG0Xexi6wg + 12 + 9.5 + Number + recAdxq0F1HX95zBg 2022-11-09T23:00:58Z @@ -10676,23 +11882,58 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 100 recrZz3gmzl97POA1 - 30 + 3 100 Integer + + recAoJrWkdqNbZwLx + 2023-05-01T17:36:43Z + Tariff + true + rec4S3L3NZiPihbLi + distribution.tariff + true + false + "2127aba6" + recw5evm1WetKAzZG + distribution.tariff.000 + Unknown + 7 + VersantA1StorageHeatTariff + UpperPython + String + DistributionTariff000 + DistributionTariff000 + + + recAu0OzbjWTSSUJq + 2023-06-27T18:03:49Z + AmbientPowerInKw + true + true + Number + false + false + 1.2 + rechp89wabr5kkqti + 18 + 1.2 + Number + recAw8J1ipB7Ef1SZ 2023-01-16T19:16:33Z - AtnParams + Params true - atn.params.heatpumpwithbooststore.000 + atn.params.000 false true rec3kcgktiHCBYpA4 - recrZz3gmzl97POA1 - atn.params.heatpumpwithbooststore - 3 - atn.params.heatpumpwithbooststore.000 + rec4yUxGiLZpqWQqb + atn.params + 4 + atn.params.000 recAwWmnjxxgkF6fn @@ -10749,6 +11990,25 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String HexChar + + recB7NDDe5xXWHh9M + 2023-05-01T17:31:24Z + GNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + 'd1.isone.ver.keene.holly' + "a.b-h" + recw5evm1WetKAzZG + 0 + GNode Alias + String + LeftRightDot + recBClfoIYbmVTcvi 2022-11-14T20:05:45Z @@ -10774,28 +12034,10 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 0.001 recrZz3gmzl97POA1 - 17 + 23 0.001 Number - - recBYlRmPwCbVbTMn - 2022-11-19T16:43:43Z - GNodeInstanceId - true - true - String - rec24qjC90m0f4Kvl - UuidCanonicalTextual - false - false - 'c8bb41eb-dad3-4e1d-8069-482f1a464225' - "d4be12d5-33ba-4f1f-b9e5" - recrZz3gmzl97POA1 - 38 - String - UuidCanonicalTextual - recBbPnDHgnSutafc 2022-11-08T05:03:26Z @@ -10830,6 +12072,41 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) AlgoAddressStringFormat recj13iYXBkX5UZr3 + + recBoiuVaUD2AUett + 2023-05-01T17:39:11Z + TempUnit + true + recEyU9EKDtM3bD18 + recognized.temperature.unit + true + false + "6f16ee63" + recw5evm1WetKAzZG + recognized.temperature.unit.000 + C + 19 + F + UpperPython + String + RecognizedTemperatureUnit000 + RecognizedTemperatureUnit000 + + + recBsPcptVebBzkn2 + 2023-06-27T20:28:33Z + StorageSteps + true + true + Integer + false + false + 100 + rec2EA0TG0Xexi6wg + 9 + 100 + Integer + recBtrSRyxjOXp8aA 2022-07-05T12:50:17Z @@ -10897,10 +12174,25 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 70 recrZz3gmzl97POA1 - 18 + 24 70 Integer + + recC9UVPsqE9cHYQS + 2023-06-28T18:48:39Z + StorePassiveLossRatio + true + true + Number + false + false + 0.005 + rechp89wabr5kkqti + 21 + 0.005 + Number + recCMCD6fLQzuN9RA 2022-09-30T19:16:20Z @@ -10919,24 +12211,27 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) AlgoAddressStringFormat - recCXJmyHxqTJaaFs - 2022-11-10T14:25:10Z - StartMonthUtc + recCMMvdApuru0zxY + 2023-05-10T14:34:49Z + FloParamsUid true true - Integer + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual false false - 1 - reczzIn3wGYrEKtbr - 46 - 1 - Integer + "97eba574-bd20-45b5-bf82-9ba2f492d8f6" + "d4be12d5-33ba-4f1f-b9e5" + recfDQscmquO0odpo + 32 + String + UuidCanonicalTextual - recCZdtLIakEf3fWh - 2023-01-16T08:01:29Z - FromGNodeAlias + recCQfmUkI2by85NK + 2023-05-01T22:08:46Z + DriverDataTypeName true true String @@ -10944,16 +12239,106 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) LeftRightDot false false - 'd1.isone.ver.keene.holly' + 'simplesim.driver.data.bsh' "a.b-h" - rec9kYNek59Vqps4S - 0 + reckQg9yTsSw2dxbh + 2 String LeftRightDot - recCaA8vu505G0NGF - 2022-09-20T12:16:45Z + recCRcF7T7qTSMD37 + 2023-06-25T20:49:41Z + CurrencyUnit + true + recA15Ak50x6bNMx1 + recognized.currency.unit + true + false + "e57c5143" + rechp89wabr5kkqti + recognized.currency.unit.000 + Unknown + 6 + USD + Upper + String + RecognizedCurrencyUnit000 + RecognizedCurrencyUnit000 + + + recCTlz2ZI9XsPdtX + 2023-05-01T22:09:37Z + DriverData + true + simplesim.driver.data.000 + false + true + { + "FromGNodeAlias": "d1.isone.ver.keene.holly", + "PowerWatts": 3000, + "StoreKwh": 5, + "MaxStoreKwh": 12, + "TypeName": "simplesim.driver.data.bsh", + "Version": "000", + } + reckQg9yTsSw2dxbh + rec8IDXjSvdhHGds4 + simplesim.driver.data + 3 + simplesim.driver.data.000 + + + recCXJmyHxqTJaaFs + 2022-11-10T14:25:10Z + StartMonthUtc + true + true + Integer + false + false + 1 + reczzIn3wGYrEKtbr + 46 + 1 + Integer + + + recCXUZRdtGc2hQIx + 2023-05-10T14:38:11Z + StartYearUtc + true + true + Integer + false + false + 2020 + recvJ9OVpqVVP895H + 4 + 2020 + Integer + + + recCZdtLIakEf3fWh + 2023-01-16T08:01:29Z + FromGNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + 'd1.isone.ver.keene.holly' + "a.b-h" + rec9kYNek59Vqps4S + 0 + String + LeftRightDot + + + recCaA8vu505G0NGF + 2022-09-20T12:16:45Z IncludeAllDescendants true true @@ -11113,6 +12498,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) [-5.1] Number + + recDXgR1mkWGl8FlL + 2023-06-25T20:50:08Z + RoomTempF + true + true + Integer + false + false + 68 + rechp89wabr5kkqti + 20 + 68 + Integer + recDaxDt8J5MZRx8y 2022-11-17T06:03:58Z @@ -11128,6 +12528,41 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 0 market.type.gt.000 + + recDcyZwTzNJhJTSW + 2023-05-01T17:42:14Z + C + true + true + Number + false + false + 200 + recw5evm1WetKAzZG + 13 + 200 + Number + + + recDgwmeLksJ4L46f + 2023-06-28T21:45:31Z + Tariff + true + rec4S3L3NZiPihbLi + distribution.tariff + true + false + "2127aba6" + rec2EA0TG0Xexi6wg + distribution.tariff.000 + Unknown + 28 + VersantA1StorageHeatTariff + UpperPython + String + DistributionTariff000 + DistributionTariff000 + recDmQ95OLj1UhZsU 2023-01-28T16:44:04Z @@ -11141,6 +12576,24 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 6 String + + recDvDUWKt6hxy1l9 + 2023-05-10T14:40:39Z + ReportGeneratedTimeUnixS + true + true + Integer + rec13dujLuXXSf5L3 + ReasonableUnixTimeS + false + false + 1577836800 + 32503683600 + recBqSlQdF17CgMPY + 4 + Integer + ReasonableUnixTimeS + recDzW9fuX9MvVvla 2022-10-03T04:46:52Z @@ -11169,7 +12622,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 48 recrZz3gmzl97POA1 - 31 + 4 Integer @@ -11273,6 +12726,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String AlgoMsgPackEncoded + + recEMwQrGJ53FQep1 + 2023-05-10T14:26:21Z + RoomTempF + true + true + Integer + false + false + 70 + recfDQscmquO0odpo + 4 + 70 + Integer + recEPPqtrPd0FeUOQ 2022-11-08T03:39:06Z @@ -11292,6 +12760,20 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) MarketPriceUnit000 MarketPriceUnit000 + + recESvZItoy9uRIyI + 2023-05-01T17:53:12Z + MaxStoreKwh + true + true + Integer + false + false + 80 + recm5UcVaAPAtrrFS + 4 + Integer + recEXU8tEG6X0jUnU 2022-06-06T18:45:50Z @@ -11343,6 +12825,22 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) -20 Integer + + recEkW3h7HrQ6uigy + 2023-05-10T14:19:44Z + PowerRequiredByHouseFromSystemAvgKwList + true + true + true + Number + false + false + [3.42] + recfDQscmquO0odpo + 13 + [3.42] + Number + recElgddLa2jgifep 2022-11-04T15:05:54Z @@ -11374,6 +12872,26 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 3 Integer + + recEmOauAesrLmBV2 + 2023-05-10T14:24:31Z + TempUnit + true + recEyU9EKDtM3bD18 + recognized.temperature.unit + true + false + "6f16ee63" + recfDQscmquO0odpo + recognized.temperature.unit.000 + C + 6 + F + UpperPython + String + RecognizedTemperatureUnit000 + RecognizedTemperatureUnit000 + recEnND4VVh74Ayni 2022-07-05T12:50:08Z @@ -11422,7 +12940,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 13.5 recrZz3gmzl97POA1 - 2 + 8 13.5 Number @@ -11445,6 +12963,27 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) SpaceheatUnit000 SpaceheatUnit000 + + recEzoM8c1xB0qzmp + 2023-06-28T21:45:35Z + StandardOfferPriceDollarsPerMwh + true + true + Integer + false + false + 110 + rec2EA0TG0Xexi6wg + 30 + 110 + Integer + + + recF3pwEs2yeSr5xM + 2023-06-25T21:26:06Z + false + false + recF4YcltowEZgCBx 2022-07-22T12:14:41Z @@ -11472,6 +13011,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) SpaceheatUnit000 SpaceheatUnit000 + itrH5pB2a6NdIiiLf/recF5JRJR6AVkfQsK recF8QiEbhrOARMRK 2022-11-06T20:03:47Z @@ -11531,6 +13071,24 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false recyD0ycgUiT7TiH2 + + recFFrCFMIAqvoz8H + 2023-05-01T17:44:57Z + AtnParamsTypeName + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + "atn.params.brickstorageheater" + "a.b-h" + rec3fLb6b0gIeuCTO + 2 + String + LeftRightDot + recFH2jCEHoYihgGG 2022-11-12T08:16:16Z @@ -11740,6 +13298,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String AlgoMsgPackEncoded + + recG7vJbQ7FW4DDT4 + 2023-06-28T18:50:55Z + AmbientTempStoreF + true + true + Integer + false + false + 65 + rechp89wabr5kkqti + 22 + 65 + Integer + recGCsIHBzXWFK7fH 2022-11-10T14:22:46Z @@ -11855,6 +13428,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + + recGljnJKcjLcwmVu + 2023-06-25T20:56:57Z + RequiredSourceWaterTempF + true + true + Integer + false + false + 120 + rechp89wabr5kkqti + 14 + 120 + Integer + recGnm88Ygos6In9e 2022-11-10T14:26:21Z @@ -11888,6 +13476,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String AlgoAddressStringFormat + + recGuqNNHJZ2Zrcu8 + 2023-05-10T15:10:40Z + HouseWorstCaseTempF + true + true + Integer + false + false + -7 + recw5evm1WetKAzZG + 21 + -7 + Integer + recGzFhE65zhdlVJK 2022-09-19T18:31:41Z @@ -11915,7 +13518,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 1.25 recrZz3gmzl97POA1 - 19 + 25 1.25 Number @@ -11953,15 +13556,60 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Integer - recHYSlx2bkFlTrmH - 2022-08-11T17:28:05Z - AboutNodeAliasList + recHRWGtm51BPqgFb + 2023-05-10T14:41:00Z + Params + true + flo.params.000 + false + true + recBqSlQdF17CgMPY + recvJ9OVpqVVP895H + flo.params + 7 + flo.params.000 + + + recHUqMGWS2zqNV6H + 2023-05-10T14:19:51Z + RealtimeElectricityPrice true true true - String - recb9fI4kRkTYXDzA - LeftRightDot + Number + false + false + [10.35] + recfDQscmquO0odpo + 15 + [10.35] + Number + + + recHWv6Qz6hTlMPqx + 2023-06-25T21:26:22Z + StartMinuteUtc + true + true + Integer + false + false + 0 + rec2EA0TG0Xexi6wg + 8 + 0 + Integer + + + recHYSlx2bkFlTrmH + 2022-08-11T17:28:05Z + AboutNodeAliasList + true + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot false false ["a.elt1.relay", "a.tank.temp0"] @@ -12002,6 +13650,22 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 4 Boolean + + recHnLyayIHQ166SI + 2023-06-28T14:34:15Z + Alpha + true + true + Integer + false + false + 200 + recy7fqBm5Cl94dnF + 0 + 200 + Alpha (units: W) + Integer + recHoBx1WtYMvXJC1 2022-11-10T13:23:40Z @@ -12055,7 +13719,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 158 recrZz3gmzl97POA1 - 35 + 36 158 Integer @@ -12097,6 +13761,26 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) AlgoCertType000 AlgoCertType000 + + recIClynqMSTgczNz + 2023-05-01T17:37:04Z + EnergyType + true + recf9ZTshqRu81HZo + energy.supply.type + true + false + "e9dc99a6" + recw5evm1WetKAzZG + energy.supply.type.000 + Unknown + 8 + RealtimeLocalLmp + UpperPython + String + EnergySupplyType000 + EnergySupplyType000 + recIKbu4rYF1nXhPD 2022-11-08T04:12:57Z @@ -12161,7 +13845,24 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) PositiveInteger Integer - itrl5NjSxG6LGJS6d/recIhSSpqIviBUW64 + + recIi1kb6LxzOzv0b + 2023-06-25T21:25:47Z + GNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + "d1.isone.ver.keene.holly" + "a.b-h" + rec2EA0TG0Xexi6wg + 0 + String + LeftRightDot + recIkJy1G5tzWXqbs 2022-11-09T23:00:57Z @@ -12173,7 +13874,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 100 recrZz3gmzl97POA1 - 20 + 26 100 Integer @@ -12284,6 +13985,22 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 2 String + + recJL7h0Cdb45oTNh + 2023-05-10T14:19:35Z + SliceDurationMinutes + true + true + true + Integer + false + false + [60] + recfDQscmquO0odpo + 12 + [60] + Integer + recJLwpN7DqR3rSu3 2022-11-10T14:20:26Z @@ -12355,6 +14072,24 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String LeftRightDot + + recJcYgKuh54ltqk5 + 2023-05-10T14:40:33Z + FloParamsTypeName + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + "flo.params.brickstorageheater" + "a.b-h" + recBqSlQdF17CgMPY + 2 + String + LeftRightDot + recJdGNNBjXxo81cJ 2022-09-19T18:25:58Z @@ -12555,7 +14290,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 113 recrZz3gmzl97POA1 - 15 + 21 113 Integer @@ -12730,6 +14465,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec944QikN18Rdopu Integer + + recKxC93PtWwHMzJH + 2023-06-25T21:25:55Z + TimezoneString + true + true + String + false + false + "US/Eastern" + rec2EA0TG0Xexi6wg + 3 + "US/Eastern" + String + recL0U9e64jcs9Ftk 2022-07-10T14:13:32Z @@ -12820,6 +14570,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + itrH5pB2a6NdIiiLf/recLO20AZmUda0yof recLe5LwcwfZdUoyG 2022-11-10T14:20:13Z @@ -12848,13 +14599,13 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false "d5cb9217" recdXzxjKArjU2z9Z - spaceheat.make.model.000 + spaceheat.make.model.001 UnknownMake__UnknownModel 1 Upper String - SpaceheatMakeModel000 - SpaceheatMakeModel000 + SpaceheatMakeModel001 + SpaceheatMakeModel001 recLl3tp0CYubBgaU @@ -12875,6 +14626,23 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String LeftRightDot + + recLnHXHBgC0FTXR0 + 2023-04-29T21:08:24Z + AtnParamsTypeName + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + "a.b-h" + rec3kcgktiHCBYpA4 + 2 + String + LeftRightDot + recLnMCNd00yOpeVw 2022-07-10T12:50:15Z @@ -12936,7 +14704,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false "US/Eastern" recrZz3gmzl97POA1 - 28 + 2 "US/Eastern" String @@ -12995,6 +14763,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String LeftRightDot + + recMcmv8GCUtIZ3Tx + 2023-05-10T14:38:13Z + StartMonthUtc + true + true + Integer + false + false + 1 + recvJ9OVpqVVP895H + 5 + 1 + Integer + recMdMhh2RYFbx0qt 2022-07-10T14:13:45Z @@ -13156,6 +14939,24 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + + recNMgiBoWjcpx9qS + 2023-05-10T14:39:49Z + GNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + "d1.isone.ver.keene.holly" + "a.b-h" + recBqSlQdF17CgMPY + 0 + String + LeftRightDot + recNP8HpFppqe53m3 2022-10-02T23:33:54Z @@ -13246,16 +15047,69 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recNujglYpalkIIRN 2022-11-11T00:46:45Z - AtnParams + Params true - atn.params.heatpumpwithbooststore.000 + atn.params.000 false true + { + "GNodeAlias": "d1.isone.ver.keene.holly", + "HomeCity": "MILLINOCKET_ME", + "TimezoneString": "US/Eastern", + "CurrencyUnitGtEnumSymbol": "e57c5143", + "TariffGtEnumSymbol": "2127aba6", + "EnergyTypeGtEnumSymbol": "e9dc99a6", + "StandardOfferPriceDollarsPerMwh": 110, + "DistributionTariffDollarsPerMwh": 113, + "MaxBrickTempC": 190, + "RatedMaxPowerKw": 13.5, + "C": 200, + "ROff": 0.09, + "ROn": 0.15, + "RoomTempF": 70, + "Alpha": 158, + "BetaOt": 158, + "TempUnitGtEnumSymbol": "6f16ee63", + "TypeName": "atn.params.brickstorageheater", + "Version": "000", + } rec3fLb6b0gIeuCTO - recrZz3gmzl97POA1 - atn.params.heatpumpwithbooststore - 4 - atn.params.heatpumpwithbooststore.000 + rec4yUxGiLZpqWQqb + atn.params + 5 + atn.params.000 + + + recNy04v6VC70hH8c + 2023-05-10T14:40:43Z + IrlTimeUnixS + true + Integer + rec13dujLuXXSf5L3 + ReasonableUnixTimeS + false + false + 1668127823 + 32503683600 + recBqSlQdF17CgMPY + 5 + Integer + ReasonableUnixTimeS + + + recO44dCWgk26aPoL + 2023-05-01T17:35:42Z + MaxBrickTempC + true + true + Integer + false + false + 190 + recw5evm1WetKAzZG + 11 + 190 + Integer recO5REMzzyrc2uHT @@ -13283,6 +15137,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 3 Integer + + recOB8YIQSx4CkN54 + 2023-05-01T17:39:42Z + BetaOt + true + true + Integer + false + false + 158 + recw5evm1WetKAzZG + 18 + 158 + Integer + recOBfgFL5HGn9j1B 2023-01-13T18:40:23Z @@ -13332,6 +15201,22 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String LeftRightDot + + recOSbtwvb9Jepzxm + 2023-05-01T17:31:26Z + HomeCity + true + true + String + false + false + "MILLINOCKET_ME" + recw5evm1WetKAzZG + 1 + "MILLINOCKET_ME" + Home City + String + recOWeL6PoLldCrop 2022-07-03T22:10:56Z @@ -13347,6 +15232,41 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) gt.sh.simple.telemetry.status gt.sh.simple.telemetry.status.100 + + recOaBXisU25ozsU1 + 2023-06-28T21:45:18Z + EnergyType + true + recf9ZTshqRu81HZo + energy.supply.type + true + false + "e9dc99a6" + rec2EA0TG0Xexi6wg + energy.supply.type.000 + Unknown + 29 + RealtimeLocalLmp + UpperPython + String + EnergySupplyType000 + EnergySupplyType000 + + + recOd8utfibXflWak + 2023-06-25T20:49:59Z + FlatDistributionTariffDollarsPerMwh + true + true + Integer + false + false + 113 + rechp89wabr5kkqti + 10 + 113 + Integer + recOdulFCYJbIktv4 2022-11-04T18:36:27Z @@ -13407,6 +15327,22 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false false + + recOlYQO9t0ZKGfmx + 2023-06-25T21:31:23Z + OutsideTempF + true + true + true + Number + false + false + [-5.1] + rec2EA0TG0Xexi6wg + 23 + [-5.1] + Number + recOpsZkD5RkikKq4 2022-08-11T17:28:11Z @@ -13517,19 +15453,48 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) ReasonableUnixTimeMs - recPYQXqDtcsSMm7n - 2022-11-08T17:24:38Z - BidIdx + recPHwkUPJ576xwf4 + 2023-06-28T16:05:48Z + StorePassiveLossRatio true true - Integer + Number false false - 23 + 0.005 + 19 + 0.005 + Number + + + recPYQXqDtcsSMm7n + 2022-11-08T17:24:38Z + BidIdx + true + true + Integer + false + false + 23 recvGFiTtzXNrhLBm 0 Integer + + recPixDGsGJ5nEHUv + 2023-05-10T14:37:32Z + HomeCity + true + true + String + false + false + "MILLINOCKET_ME" + recvJ9OVpqVVP895H + 2 + "MILLINOCKET_ME" + String + recPrU0RlBfIouTuN 2022-09-22T18:51:34Z @@ -13560,6 +15525,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 3 Integer + + recPuuEJJrwfAgwcn + 2023-06-25T20:49:37Z + SliceDurationMinutes + true + true + Integer + false + false + 60 + rechp89wabr5kkqti + 5 + 60 + Integer + recPw5jcOzArg9D84 2022-11-21T05:26:04Z @@ -13589,14 +15569,14 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 4 recrZz3gmzl97POA1 - 36 + 37 4 Number recQBfaODIoTeMbbQ 2022-11-07T19:00:01Z - HeatpumpPowerKwTimes1000 + HeatpumpPowerWatts true true Integer @@ -13667,6 +15647,40 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String AlgoAddressStringFormat + + recQRsIq3xTiLWopK + 2023-06-25T20:49:25Z + TimezoneString + true + true + String + false + false + "US/Eastern" + rechp89wabr5kkqti + 2 + String + + + recQVmUtZgyRJS0Fw + 2023-06-25T20:49:49Z + EnergyType + true + recf9ZTshqRu81HZo + energy.supply.type + true + false + "e9dc99a6" + rechp89wabr5kkqti + energy.supply.type.000 + Unknown + 8 + RealtimeLocalLmp + UpperPython + String + EnergySupplyType000 + EnergySupplyType000 + recQduwtmVeYjXuQV 2023-01-16T08:02:15Z @@ -13728,6 +15742,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + + recR3pGEgjTTT914k + 2023-06-27T20:32:16Z + RoomTempF + true + true + Integer + false + false + 70 + rec2EA0TG0Xexi6wg + 16 + 70 + Integer + recR5j1j3DAzKovaR 2022-11-04T18:00:50Z @@ -13762,7 +15791,6 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) MarketQuantityUnit000 MarketQuantityUnit000 - itrl5NjSxG6LGJS6d/recREgyk5HQKEtSMJ recRMYT3frXP98k2q 2022-11-04T13:44:57Z @@ -13782,6 +15810,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String AlgoAddressStringFormat + + recRS18rB7QWfITKv + 2023-05-01T17:37:37Z + DistributionTariffDollarsPerMwh + true + true + Integer + false + false + 113 + recw5evm1WetKAzZG + 10 + 113 + Integer + recRTTglTWqlyAaQW 2022-06-04T19:22:03Z @@ -13794,13 +15837,13 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false "acd93fb3" rec3Noy3m1X4Vdly9 - spaceheat.make.model.000 + spaceheat.make.model.001 UnknownMake__UnknownModel 1 Upper String - SpaceheatMakeModel000 - SpaceheatMakeModel000 + SpaceheatMakeModel001 + SpaceheatMakeModel001 recRU6cvY6FKUwxbv @@ -13855,6 +15898,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 String + + recRcY8WNqknxX5sV + 2023-05-10T15:11:04Z + AnnualHvacKwhTh + true + true + Integer + false + false + 28125 + recw5evm1WetKAzZG + 17 + 28125 + Integer + recRjhyzbBd693UU7 2022-07-10T12:50:59Z @@ -13917,6 +15975,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) MarketPriceUnit000 MarketPriceUnit000 + + recS3mPyncJofH01H + 2023-05-10T14:26:13Z + RatedMaxPowerKw + true + true + Number + false + false + 13.5 + recfDQscmquO0odpo + 1 + 13.5 + Number + recS9QjJmxGy17MnI 2022-11-06T20:03:48Z @@ -13948,10 +16021,25 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 5 recrZz3gmzl97POA1 - 23 + 29 5 Integer + + recSCjwZxVDm5pFH3 + 2023-06-25T21:26:15Z + StartDayUtc + true + true + Integer + false + false + 1 + rec2EA0TG0Xexi6wg + 6 + 1 + Integer + recSH9Gcj0yME4EIk 2023-01-15T12:55:23Z @@ -14027,6 +16115,40 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false recyD0ycgUiT7TiH2 + + recSZuXgqgnSQCBOa + 2023-05-01T17:53:14Z + AboutTerminalAssetAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + "d1.isone.ver.keene.holly.ta" + "a.b-h" + recm5UcVaAPAtrrFS + 5 + String + LeftRightDot + + + recSeEWijLqaBvnqw + 2023-06-25T21:30:25Z + SliceDurationMinutes + true + true + true + Integer + false + false + [60] + rec2EA0TG0Xexi6wg + 20 + [60] + Integer + recSjtsFt8YhLc4wA 2022-07-10T12:50:18Z @@ -14046,6 +16168,22 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + + recSmAhe1VTBToaSK + 2023-06-25T21:31:42Z + RealtimeElectricityPrice + true + true + true + Number + false + false + [10.35] + rec2EA0TG0Xexi6wg + 21 + [10.35] + Number + recSsJxTMJFhAidWC 2022-09-30T19:09:12Z @@ -14081,6 +16219,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + itrH5pB2a6NdIiiLf/recSy6tRXV5XRsb7i recSyaqv9CQCvmg7I 2022-10-02T23:33:33Z @@ -14185,6 +16324,36 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Integer PositiveInteger + + recTLZwyC5fS4xZs4 + 2023-06-25T21:33:20Z + StoreSizeGallons + true + true + Integer + false + false + 240 + rec2EA0TG0Xexi6wg + 10 + 240 + Integer + + + recTMm4lhEWh9m2It + 2023-06-25T20:49:32Z + FloSlices + true + true + Integer + false + false + 48 + rechp89wabr5kkqti + 4 + 48 + Integer + recTRNtq7f7hryTGh 2022-09-19T18:22:06Z @@ -14200,6 +16369,13 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 3 Integer + + recTSBOT0mlRq0zN0 + 2023-06-25T20:54:37Z + RoomTemp + false + false + recTV2IpdZjy1gFiQ 2022-11-17T02:19:53Z @@ -14269,6 +16445,20 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Key data about the docker container supervisor.container.gt.000 + + recTfGFS2AGUc58Ig + 2023-05-01T21:53:51Z + PowerWatts + true + true + Integer + false + false + 3000 + recwXD4ryogKVwsnE + 2 + Integer + recThSsC8YgHG8vd0 2022-07-10T12:50:20Z @@ -14308,7 +16498,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 60 recrZz3gmzl97POA1 - 32 + 5 Integer @@ -14327,6 +16517,20 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String MarketSlotNameLrdFormat + + recTtF957kyOejDRh + 2023-05-01T17:52:36Z + PowerWatts + true + true + Integer + false + false + 933 + recm5UcVaAPAtrrFS + 2 + Integer + recU5B4V3aPnvMPZf 2022-11-21T05:24:55Z @@ -14445,6 +16649,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Normally Open Boolean + + recUcTdqja2lseqny + 2023-05-01T17:37:18Z + StandardOfferPriceDollarsPerMwh + true + true + Integer + false + false + 110 + recw5evm1WetKAzZG + 9 + 110 + Integer + recUgM344FS0QIgRe 2022-11-10T13:23:34Z @@ -14479,6 +16698,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + + recUisNTiM4JQSM8s + 2023-05-01T17:38:04Z + ROff + true + true + Number + false + false + 0.08 + recw5evm1WetKAzZG + 14 + 0.08 + Number + recUyndqnwyKAWe93 2022-07-05T12:45:01Z @@ -14554,6 +16788,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) AlgoAddressStringFormat https://gridworks.readthedocs.io/en/latest/ta-validator.html + + recVS4wdbtDR3UsJO + 2023-06-27T20:30:28Z + StartingStoreIdx + true + true + Integer + false + false + 50 + rec2EA0TG0Xexi6wg + 32 + 50 + Integer + recVUltfFpgKkEKR0 2022-09-22T18:55:00Z @@ -14712,12 +16961,28 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) RecognizedTemperatureUnit000 - recW0NRRevzaIKzIT - 2022-11-10T14:17:59Z - StorageSteps + recVyMdsBkXQRulvG + 2023-05-10T14:19:56Z + RegulationPrice true true - Integer + true + Number + false + false + [25.3] + recfDQscmquO0odpo + 19 + [25.3] + Number + + + recW0NRRevzaIKzIT + 2022-11-10T14:17:59Z + StorageSteps + true + true + Integer false false 100 @@ -14853,6 +17118,24 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 0 Integer + + recWfVfIe5SaVyrD2 + 2023-05-01T22:02:30Z + FromGNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + 'd1.isone.ver.keene.holly' + "a.b-h" + rec8IDXjSvdhHGds4 + 0 + String + LeftRightDot + recWpU6k2DSQfofVc 2022-11-09T23:00:49Z @@ -14866,13 +17149,28 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recrZz3gmzl97POA1 distribution.tariff.000 Unknown - 12 - VersantStorageHeatTariff + 18 + VersantA1StorageHeatTariff UpperPython String DistributionTariff000 DistributionTariff000 + + recWqq69qS32BdECG + 2023-06-25T21:25:51Z + HomeCity + true + true + String + false + false + "MILLINOCKET_ME" + rec2EA0TG0Xexi6wg + 2 + "MILLINOCKET_ME" + String + recWtBipbdRHF9uJs 2022-09-22T18:51:44Z @@ -14905,12 +17203,42 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + + recWw9MgX8ZXkyRii + 2023-06-27T21:02:54Z + AmbientPowerInKw + true + true + Number + false + false + 1.2 + rec2EA0TG0Xexi6wg + 17 + 1.2 + Number + recX7FTlZBNwckfGT 2023-01-13T18:59:15Z false false + + recXHPMn2CQMzlXo9 + 2023-06-25T21:26:03Z + StartYearUtc + true + true + Integer + false + false + 2020 + rec2EA0TG0Xexi6wg + 4 + 2020 + Integer + recXVUzIp49WFOFdH 2022-11-10T13:23:44Z @@ -14954,24 +17282,6 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Host on LAN when power meter is modbus over Ethernet String - - recXfOCZByFlChQxR - 2023-01-16T08:01:34Z - FromGNodeInstanceId - true - true - String - rec24qjC90m0f4Kvl - UuidCanonicalTextual - false - false - '60e5c73a-77e1-4c01-8b78-02c92d20f18a' - "d4be12d5-33ba-4f1f-b9e5" - rec9kYNek59Vqps4S - 1 - String - UuidCanonicalTextual - recXgOcojFyG3Ftr6 2022-09-30T19:09:15Z @@ -15001,13 +17311,13 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false "638bf97b" recEhzcpob8H7VuEF - sh.actor.class.001 + sh.actor.class.000 NoActor 2 UpperPython String - SpaceheatActorClass001 - SpaceheatActorClass001 + SpaceheatActorClass000 + SpaceheatActorClass000 recXr4oGZuc4Rse9N @@ -15158,6 +17468,37 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 Integer + + recYYjWL9c3xnsGSk + 2023-06-27T21:03:04Z + HouseWorstCaseTempF + true + true + Number + false + false + -7 + rec2EA0TG0Xexi6wg + 18 + -7 + Number + + + recYiAHa33V7Jj2dv + 2023-06-25T21:31:01Z + PowerLostFromHouseKwList + true + true + true + Number + false + false + [3.42] + rec2EA0TG0Xexi6wg + 19 + [3.42] + Number + recYtyZl3uBr6N9Ey 2022-07-10T14:13:40Z @@ -15169,13 +17510,43 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false "638bf97b" recUj3ZPKMsXanG88 - sh.actor.class.001 + sh.actor.class.000 NoActor 2 UpperPython String - SpaceheatActorClass001 - SpaceheatActorClass001 + SpaceheatActorClass000 + SpaceheatActorClass000 + + + recZ0rfW1Kha3I1H4 + 2023-05-10T14:20:27Z + StartMinuteUtc + true + true + Integer + false + false + 0 + recfDQscmquO0odpo + 27 + 0 + Integer + + + recZ4cjPPBxvCcE1F + 2023-06-25T20:57:17Z + CirculatorPumpGpm + true + true + Number + false + false + 5.5 + rechp89wabr5kkqti + 15 + 5.5 + Number recZ6Qnf2ivCfWkSG @@ -15190,6 +17561,14 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recm2rM5o9GxgCqbL Boolean + + recZ9x2VJeJHEQIDa + 2023-06-28T14:34:11Z + 0 + false + false + 0 + recZCWfsmo9zR1EgF 2022-07-12T18:23:04Z @@ -15234,13 +17613,13 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false "09185ae3" recULIwPg69M69185 - spaceheat.make.model.000 + spaceheat.make.model.001 UnknownMake__UnknownModel 1 Upper String - SpaceheatMakeModel000 - SpaceheatMakeModel000 + SpaceheatMakeModel001 + SpaceheatMakeModel001 recZOVb1cq9Dq3Oi5 @@ -15334,7 +17713,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 4 recrZz3gmzl97POA1 - 7 + 13 4 Number @@ -15349,14 +17728,14 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 12 recrZz3gmzl97POA1 - 9 + 15 12 Number recZwSFwN4qnwJdmE 2022-11-07T18:59:56Z - BoostPowerKwTimes1000 + BoostPowerWatts true true Integer @@ -15367,6 +17746,22 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 2 Integer + + reca2V0hCWFV463bf + 2023-05-10T14:19:53Z + DistributionPrice + true + true + true + Number + false + false + [40.0] + recfDQscmquO0odpo + 17 + [40.0] + Number + reca6fj3KeJFrWBbK 2022-11-09T23:00:18Z @@ -15378,11 +17773,47 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 240 recrZz3gmzl97POA1 - 0 + 6 240 Integer - itrl5NjSxG6LGJS6d/reca6fj3KeJFrWBbK + + recaMsFqtaJuXv5AD + 2023-06-25T20:49:13Z + GNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + "d1.isone.ver.keene.holly" + "a.b-h" + rechp89wabr5kkqti + 0 + String + LeftRightDot + + itrH5pB2a6NdIiiLf/recaMsFqtaJuXv5AD + + recaSQiyOGuk96R75 + 2023-06-25T21:25:49Z + FloParamsUid + true + true + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual + false + false + "97eba574-bd20-45b5-bf82-9ba2f492d8f6" + "d4be12d5-33ba-4f1f-b9e5" + rec2EA0TG0Xexi6wg + 1 + String + UuidCanonicalTextual + recaYqACGpgpO40W8 2023-01-16T17:19:44Z @@ -15534,6 +17965,44 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Price Quantity Pairs price.quantity.unitless.000 + + recbAjM31sjr5mRF3 + 2023-05-01T21:53:47Z + FromGNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + 'd1.isone.ver.keene.holly' + "a.b-h" + recwXD4ryogKVwsnE + 0 + String + LeftRightDot + + + recbIZmTs1RacVBoR + 2023-05-10T14:24:28Z + CurrencyUnit + true + recA15Ak50x6bNMx1 + recognized.currency.unit + true + false + "e57c5143" + recfDQscmquO0odpo + recognized.currency.unit.000 + Unknown + 5 + USD + Upper + String + RecognizedCurrencyUnit000 + RecognizedCurrencyUnit000 + recbP43UORyJcMOyK 2022-10-02T23:33:30Z @@ -15697,6 +18166,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String AlgoAddressStringFormat + + recbjZkDY0xosm28b + 2023-05-10T14:20:12Z + StartYearUtc + true + true + Integer + false + false + 2020 + recfDQscmquO0odpo + 23 + 2020 + Integer + recbm3rb6c3wtCzWR 2023-03-02T20:55:56Z @@ -15761,6 +18245,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false false + + recc3KsHCvd6Pp9rs + 2023-05-01T17:40:20Z + ROn + true + true + Number + false + false + 0.15 + recw5evm1WetKAzZG + 15 + 0.15 + Number + recc5A1JaRXNBZe9g 2023-01-15T12:15:03Z @@ -15789,7 +18288,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recrZz3gmzl97POA1 energy.supply.type.000 Unknown - 11 + 17 RealtimeLocalLmp UpperPython String @@ -15942,14 +18441,34 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false '00000000' recV0KuDFayH4qGIl - strategy.name.000 + strategy.name.001 NoActor 2 UpperPython Used to determine the code running in a GNode actor application String - StrategyName000 - StrategyName000 + StrategyName001 + StrategyName001 + + + reccuXB02dnW4Wl6y + 2023-06-27T18:55:43Z + CurrencyUnit + true + recA15Ak50x6bNMx1 + recognized.currency.unit + true + false + "e57c5143" + rec2EA0TG0Xexi6wg + recognized.currency.unit.000 + Unknown + 27 + USD + Upper + String + RecognizedCurrencyUnit000 + RecognizedCurrencyUnit000 recczPPN1cOAeZJz7 @@ -16177,9 +18696,42 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) LeftRightDot - receX5lrBDRQOfwtV - 2023-03-13T18:13:55Z - NameplatePowerW + receLZhjMOO95MTfS + 2023-05-10T14:26:11Z + MaxBrickTempC + true + true + Integer + false + false + 190 + recfDQscmquO0odpo + 0 + 190 + Integer + + + receQEqkX185ZTnZn + 2023-06-25T21:32:02Z + RtElecPriceUid + true + true + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual + false + false + "bd2ec5c5-40b9-4b61-ad1b-4613370246d6" + "d4be12d5-33ba-4f1f-b9e5" + rec2EA0TG0Xexi6wg + 24 + String + UuidCanonicalTextual + + + receX5lrBDRQOfwtV + 2023-03-13T18:13:55Z + NameplatePowerW true Integer false @@ -16202,7 +18754,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1668127823 32503683600 rec3fLb6b0gIeuCTO - 3 + 4 Integer ReasonableUnixTimeS @@ -16317,7 +18869,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false "MILLINOCKET_ME" recrZz3gmzl97POA1 - 29 + 1 "MILLINOCKET_ME" String @@ -16453,6 +19005,24 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) "US/Eastern" String + + recfeWhbkmYYdayn3 + 2023-05-01T17:52:31Z + FromGNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + "d1.isone.ver.keene.holly" + "a.b-h" + recm5UcVaAPAtrrFS + 0 + String + LeftRightDot + recfeynTSBzTXnyUK 2022-11-09T23:00:51Z @@ -16464,7 +19034,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 110 recrZz3gmzl97POA1 - 14 + 20 110 Integer @@ -16504,6 +19074,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String LeftRightDot + + recfyyQ1OXYTVJeGV + 2023-05-10T14:20:22Z + StartDayUtc + true + true + Integer + false + false + 1 + recfDQscmquO0odpo + 25 + 1 + Integer + recfzsWHMU0fhZE47 2023-01-15T12:55:29Z @@ -16524,6 +19109,20 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) MarketPriceUnit000 MarketPriceUnit000 + + recg6mf4mCKi2Fwa8 + 2023-05-10T14:43:43Z + FloParamsTypeVersion + true + true + String + false + false + "000" + recBqSlQdF17CgMPY + 3 + String + recg8JNR1e1aZk41L 2022-06-15T22:52:46Z @@ -16567,6 +19166,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Integer PositiveInteger + + recgPfLVLuHQ0esKS + 2023-06-28T16:53:47Z + AmbientTempStoreF + true + true + Integer + false + false + 65 + rec2EA0TG0Xexi6wg + 19 + 65 + Integer + recgU2lvslyTiaIao 2023-03-09T19:31:21Z @@ -16631,7 +19245,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 65 recrZz3gmzl97POA1 - 16 + 22 65 Integer @@ -16746,6 +19360,23 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 0 Integer + itrH5pB2a6NdIiiLf/rechFmb5stcc7uIXs + + rechO4iVyXL7dtIKk + 2023-05-01T17:34:52Z + SliceDurationMinutes + true + true + Integer + false + false + 60 + recw5evm1WetKAzZG + The length of + 5 + 60 + Integer + rechYoiSzlYAU1ZWD 2022-06-20T13:16:57Z @@ -16785,6 +19416,22 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false recyD0ycgUiT7TiH2 + + rechmXzZK0wqTOIni + 2023-06-25T21:31:50Z + DistributionPrice + true + true + true + Number + false + false + [40.0] + rec2EA0TG0Xexi6wg + 22 + [40.0] + Number + rechs1D8dytBH2C5s 2023-01-13T18:58:50Z @@ -16931,6 +19578,22 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + + reci3R8YqMvMYlLuI + 2023-05-01T17:31:28Z + TimezoneString + true + true + String + false + false + "US/Eastern" + recw5evm1WetKAzZG + 2 + "US/Eastern" + Timezone String + String + reci7Ga0o0Ubtlk5g 2022-06-06T18:45:58Z @@ -16945,7 +19608,6 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 4 String - itrl5NjSxG6LGJS6d/reci7Ga0o0Ubtlk5g reci7qQs2JCeyRbV7 2023-03-25T18:46:49Z @@ -17201,6 +19863,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Bit Integer + + recjTlFd94m2QsbZy + 2023-06-27T18:45:18Z + ReturnWaterDeltaTempF + true + true + Integer + false + false + 20 + rec2EA0TG0Xexi6wg + 15 + 20 + Integer + recjXMbjBpdJFTXBi 2022-07-05T12:57:11Z @@ -17324,6 +20001,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false false + + reckE8i5FbwL5N8Vr + 2023-05-10T15:10:20Z + AmbientPowerInKw + true + true + Number + false + false + 1.25 + recw5evm1WetKAzZG + 20 + 1.25 + Number + reckEe9774XgeDvIL 2022-09-22T02:53:54Z @@ -17355,6 +20047,12 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 240 Integer + + reckRZnUovNEITIs2 + 2023-05-10T14:30:24Z + false + false + reckRoTaa3PYdQ7Bi 2022-11-30T19:45:04Z @@ -17383,7 +20081,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 135 recrZz3gmzl97POA1 - 4 + 10 135 Integer @@ -17403,6 +20101,36 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Integer Bit + + reckc7GfMfrl08GTz + 2023-05-10T14:19:48Z + OutsideTempF + true + true + true + Number + false + false + [-5.1] + recfDQscmquO0odpo + 16 + [-5.1] + Number + + + reckfEeZNa1zs6pP1 + 2023-05-01T21:53:55Z + StoreKwh + true + true + Integer + false + false + 5 + recwXD4ryogKVwsnE + 3 + Integer + reckgfkjeNGk0Rqx0 2023-04-09T21:09:24Z @@ -17516,6 +20244,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 0 Integer + + reclVOYJSKp7L4SON + 2023-06-25T20:49:55Z + StandardOfferPriceDollarsPerMwh + true + true + Integer + false + false + 110 + rechp89wabr5kkqti + 9 + 110 + Integer + reclWEqctUrS5WXwG 2022-09-14T16:28:40Z @@ -17602,6 +20345,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + + reclneIsw2C57Nn40 + 2023-06-27T18:05:25Z + ReturnWaterDeltaTempF + true + true + Integer + false + false + 20 + rechp89wabr5kkqti + 16 + 20 + Integer + reclsQog4UhrdIbyr 2022-11-09T23:29:29Z @@ -17615,7 +20373,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recrZz3gmzl97POA1 recognized.currency.unit.000 Unknown - 26 + 32 USD Upper String @@ -17652,6 +20410,26 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 2 String + + recm85TehRT6oXtTP + 2023-06-25T20:49:45Z + Tariff + true + rec4S3L3NZiPihbLi + distribution.tariff + true + false + "2127aba6" + rechp89wabr5kkqti + distribution.tariff.000 + Unknown + 7 + VersantA1StorageHeatTariff + UpperPython + String + DistributionTariff000 + DistributionTariff000 + recmJAntc8jP45C1K 2023-02-20T14:09:46Z @@ -17701,6 +20479,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 135 Integer + + recmQaQas8xe2JRvv + 2023-06-25T20:56:54Z + ElementMaxPowerKw + true + true + Number + false + false + 9.5 + rechp89wabr5kkqti + 13 + 9.5 + Number + recmSQdvXU121Kb5s 2022-07-25T22:45:35Z @@ -17769,6 +20562,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + + recmgWy6guY7V2or8 + 2023-06-25T20:50:13Z + HouseWorstCaseTempF + true + true + Integer + false + false + -7 + rechp89wabr5kkqti + 19 + -7 + Integer + recmmOlM4okW6SVMc 2023-01-20T00:00:51Z @@ -17821,7 +20629,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recrZz3gmzl97POA1 recognized.temperature.unit.000 C - 27 + 33 F UpperPython String @@ -17873,6 +20681,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 5 String + + recnTZqJLAXkC0udQ + 2023-05-10T14:20:24Z + StartHourUtc + true + true + Integer + false + false + 0 + recfDQscmquO0odpo + 26 + 0 + Integer + recnTfzYOvNX100On 2022-07-25T21:47:03Z @@ -17923,7 +20746,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) distribution.tariff.000 Unknown 10 - VersantStorageHeatTariff + VersantA1StorageHeatTariff UpperPython String DistributionTariff000 @@ -17959,14 +20782,14 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 70 recrZz3gmzl97POA1 - 25 + 31 70 Integer recnpE4pnmald9iTU 2023-01-16T18:56:50Z - HeatpumpPowerKwTimes1000 + HeatpumpPowerWatts true true Integer @@ -18013,11 +20836,26 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) egauge.io.000 - reco2D59kEGzC9zN3 - 2022-06-04T19:18:34Z - CommsMethod + recnvahTKBIHt4BTW + 2023-06-28T21:45:38Z + FlatDistributionTariffDollarsPerMwh + true true - String + Integer + false + false + 113 + rec2EA0TG0Xexi6wg + 31 + 113 + Integer + + + reco2D59kEGzC9zN3 + 2022-06-04T19:18:34Z + CommsMethod + true + String false false "I2C" @@ -18061,6 +20899,24 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + + recoEOdUEOJ4NE1i8 + 2023-05-01T22:07:30Z + FromGNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + 'd1.isone.ver.keene.holly' + "a.b-h" + reckQg9yTsSw2dxbh + 0 + String + LeftRightDot + recoEvfq9uUKvxpmn 2022-11-09T23:00:19Z @@ -18072,7 +20928,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 5.5 recrZz3gmzl97POA1 - 3 + 9 5.5 Number @@ -18095,6 +20951,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String LeftRightDot + itrH5pB2a6NdIiiLf/recoF6VnyUxuQ4baG recoPn9xJOxqb6ifT 2022-06-15T22:56:28Z @@ -18124,6 +20981,22 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String AlgoAddressStringFormat + + recodlPgpP4zsi9bk + 2023-06-28T14:34:47Z + Beta + true + true + Number + false + false + -1.5 + recy7fqBm5Cl94dnF + 1 + -1.5 + Beta (units: W / deg F) + Number + recoduUdKygrSq0T5 2023-01-13T18:39:08Z @@ -18190,6 +21063,12 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false recyD0ycgUiT7TiH2 + + recolYEYLubIlMTeX + 2023-05-10T14:40:38Z + false + false + recoyYXXZBRG1ipPM 2022-09-22T18:54:46Z @@ -18218,6 +21097,22 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 70 Integer + + recpAPAOQxog3tu7c + 2023-05-01T17:34:50Z + FloSlices + true + true + Integer + false + false + 48 + recw5evm1WetKAzZG + The number of nodes for each storage level in the Dijstra graph. + 4 + 48 + Integer + recpCkNXWjHazXV05 2023-04-03T20:32:12Z @@ -18283,13 +21178,13 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false "53129448" recqhQADHovWX1hOl - spaceheat.make.model.000 + spaceheat.make.model.001 UnknownMake__UnknownModel 1 Upper String - SpaceheatMakeModel000 - SpaceheatMakeModel000 + SpaceheatMakeModel001 + SpaceheatMakeModel001 recpWqCT1ckZYKduk @@ -18391,6 +21286,36 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 2 Integer + + recq321QPv8igpWPT + 2023-05-10T14:26:19Z + ROn + true + true + Number + false + false + 0.15 + recfDQscmquO0odpo + 3 + 0.15 + Number + + + recq5rPWC2xxTWzj7 + 2023-06-25T21:33:32Z + MaxStoreTempF + true + true + Integer + false + false + 210 + rec2EA0TG0Xexi6wg + 11 + 210 + Integer + recqBM04MFQCAkFfy 2023-01-28T16:43:41Z @@ -18420,6 +21345,43 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 2 Integer + + recqDBnMUrFKhR7xh + 2023-04-30T19:15:08Z + GNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + 'd1.isone.ver.keene.holly' + "a.b-h" + rec4yUxGiLZpqWQqb + 0 + GNode Alias + String + LeftRightDot + + + recqEqS1dMXLaWYRD + 2023-05-10T14:34:31Z + FloParamsUid + true + true + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual + false + false + "97eba574-bd20-45b5-bf82-9ba2f492d8f6" + "d4be12d5-33ba-4f1f-b9e5" + recvJ9OVpqVVP895H + 1 + String + UuidCanonicalTextual + recqGEAWc6ioKwYCv 2022-06-16T12:06:21Z @@ -18533,7 +21495,6 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 Integer - itrl5NjSxG6LGJS6d/recqbPC3JOFtb5oXx recqk08O9ID51tC31 2023-01-28T16:43:01Z @@ -18583,8 +21544,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recrZz3gmzl97POA1 distribution.tariff.000 Unknown - 10 - VersantStorageHeatTariff + 16 + VersantA1StorageHeatTariff UpperPython String DistributionTariff000 @@ -18688,6 +21649,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 3 String + + recrUmUhuBYrY146C + 2023-05-10T14:26:17Z + ROff + true + true + Number + false + false + 0.08 + recfDQscmquO0odpo + 2 + 0.08 + Number + recrX6PgQEW9ggu8q 2022-06-04T19:17:42Z @@ -18700,13 +21676,13 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false "d0b0e375" recmVKHF3ugtUOYrz - spaceheat.make.model.000 + spaceheat.make.model.001 UnknownMake__UnknownModel 1 Upper String - SpaceheatMakeModel000 - SpaceheatMakeModel000 + SpaceheatMakeModel001 + SpaceheatMakeModel001 recrcCzcDvZBxpI2C @@ -18740,6 +21716,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Display Name String + + recrlszZe4JuLa5ZU + 2023-05-10T14:20:41Z + StartingStoreIdx + true + true + Integer + false + false + 50 + recfDQscmquO0odpo + 28 + 50 + Integer + recrrGZ3RvMBzGjrP 2022-11-09T23:00:49Z @@ -18753,7 +21744,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recrZz3gmzl97POA1 energy.supply.type.000 Unknown - 13 + 19 RealtimeLocalLmp UpperPython String @@ -18790,10 +21781,25 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 20 recrZz3gmzl97POA1 - 6 + 12 20 Integer + + recsBD9IGwQ7NAy0K + 2023-05-10T14:38:20Z + StartMinuteUtc + true + true + Integer + false + false + 0 + recvJ9OVpqVVP895H + 8 + 0 + Integer + recsEvybSpl9WN6Ny 2022-09-19T20:22:40Z @@ -18830,6 +21836,23 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + + recsWscZyAT8lUvQG + 2023-05-01T17:34:47Z + StorageSteps + true + true + Integer + false + false + 100 + recw5evm1WetKAzZG + The number of nodes in each TimeSlice for the Dijkstra graph. + 3 + 100 + Storage Steps + Integer + recsXoFOxudbW1SiS 2022-11-14T15:46:41Z @@ -18951,6 +21974,24 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Integer ReasonableUnixTimeMs + + rect2ta2gIzYqWAyr + 2023-05-10T14:39:55Z + GNodeInstanceId + true + true + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual + false + false + "97eba574-bd20-45b5-bf82-9ba2f492d8f6" + "d4be12d5-33ba-4f1f-b9e5" + recBqSlQdF17CgMPY + 1 + String + UuidCanonicalTextual + rectEKipbDI8n6DBF 2023-01-16T17:18:25Z @@ -19084,6 +22125,24 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rech8RtBLsLVe51DN Integer + + recuCxturGwYam9W0 + 2023-05-10T14:19:59Z + RtElecPriceUid + true + true + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual + false + false + "bd2ec5c5-40b9-4b61-ad1b-4613370246d6" + "d4be12d5-33ba-4f1f-b9e5" + recfDQscmquO0odpo + 18 + String + UuidCanonicalTextual + recuEy4lhhe7MqUUN 2022-11-04T13:43:52Z @@ -19114,7 +22173,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) false 190 recrZz3gmzl97POA1 - 1 + 7 190 Integer @@ -19138,6 +22197,39 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Integer ReasonableUnixTimeMs + + recuK1w199LQQCRjs + 2023-05-10T14:20:19Z + StartMonthUtc + true + true + Integer + false + false + 1 + recfDQscmquO0odpo + 24 + 1 + Integer + + + recuKvC5D4tUOKCIH + 2023-05-10T14:20:02Z + WeatherUid + true + true + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual + false + false + "3bbcb552-52e3-4b86-84e0-084959f9fc0f" + "d4be12d5-33ba-4f1f-b9e5" + recfDQscmquO0odpo + 20 + String + UuidCanonicalTextual + recuSkupIk5cS8BGw 2023-03-25T23:00:36Z @@ -19194,6 +22286,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 5 Integer + + recufHL4WVjMqEiI8 + 2023-06-25T20:54:58Z + StoreSizeGallons + true + true + Integer + false + false + 240 + rechp89wabr5kkqti + 11 + 240 + Integer + recunD4ijwQh302Oo 2022-11-29T13:57:42Z @@ -19310,12 +22417,45 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) LeftRightDot https://gridworks.readthedocs.io/en/latest/atomic-t-node.html + + recvKQH8VYCXnFhS9 + 2023-05-10T14:26:15Z + C + true + true + Number + false + false + 200 + recfDQscmquO0odpo + 14 + 200 + Number + recvYOPJ5xN3hequZ 2022-09-19T18:26:44Z false false + + recvYmJjkD1Dzzbqk + 2023-06-25T21:32:32Z + DistPriceUid + true + true + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual + false + false + "b91ef8e7-50d7-4587-bf13-a3af7ecdb83a" + "d4be12d5-33ba-4f1f-b9e5" + rec2EA0TG0Xexi6wg + 25 + String + UuidCanonicalTextual + recvaw2vy5mebzESQ 2023-01-08T10:21:14Z @@ -19333,14 +22473,29 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Integer - recvq0MygOUulKFdl - 2022-11-17T01:55:36Z - GNodeAlias + recvo0jJIrIDDr23i + 2023-05-01T17:36:11Z + RatedMaxPowerKw true true - String - recb9fI4kRkTYXDzA - LeftRightDot + Number + false + false + 13.5 + recw5evm1WetKAzZG + 12 + 13.5 + Number + + + recvq0MygOUulKFdl + 2022-11-17T01:55:36Z + GNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot false false "d1.isone.ver.keene" @@ -19384,6 +22539,22 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Integer ShortInteger + + recw8d5Trh6AeoLYJ + 2023-06-25T20:56:50Z + MaxStoreTempF + true + true + Integer + false + false + 210 + rechp89wabr5kkqti + 12 + 210 + Integer + + itrH5pB2a6NdIiiLf/recw8d5Trh6AeoLYJ recwBj4KUuccY6gSN 2023-03-13T18:13:53Z @@ -19414,6 +22585,26 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 market.type.gt.000 + + recwO34MxjMi4xVbh + 2023-05-01T17:38:53Z + CurrencyUnit + true + recA15Ak50x6bNMx1 + recognized.currency.unit + true + false + "e57c5143" + recw5evm1WetKAzZG + recognized.currency.unit.000 + Unknown + 6 + USD + Upper + String + RecognizedCurrencyUnit000 + RecognizedCurrencyUnit000 + recwP7nYNSdWeR3vj 2022-07-25T22:45:11Z @@ -19436,7 +22627,7 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1577836800 32503683600 rec3fLb6b0gIeuCTO - 2 + 3 Integer ReasonableUnixTimeS @@ -19455,6 +22646,12 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 160 Integer + + recwhLk9ftqihZPiS + 2023-06-25T21:02:44Z + false + false + recwkvcQFhhOMDyO4 2023-01-28T00:17:46Z @@ -19468,6 +22665,52 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 7 String + + recwlNYE7g30gSHqZ + 2023-04-30T19:15:34Z + TimezoneString + true + true + String + false + false + "US/Eastern" + rec4yUxGiLZpqWQqb + 2 + "US/Eastern" + Timezone String + String + + + recwqncn6q1JvTx8C + 2023-05-10T14:19:32Z + IsRegulating + true + true + Boolean + false + false + False + recfDQscmquO0odpo + 10 + False + Boolean + + + recwxuYDEnWFeLJKI + 2023-06-25T21:33:40Z + CirculatorPumpGpm + true + true + Number + false + false + 4.5 + rec2EA0TG0Xexi6wg + 14 + 4.5 + Number + recx4xJLSgpMi1EVN 2022-11-06T20:03:58Z @@ -19487,12 +22730,45 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String UuidCanonicalTextual + + recx6o26hYbiat65H + 2023-06-25T21:26:12Z + StartMonthUtc + true + true + Integer + false + false + 1 + rec2EA0TG0Xexi6wg + 5 + 1 + Integer + recxFMsRV9Rt4zgqr 2023-01-27T19:41:27Z false false + + recxJmpDJWx6LnEzW + 2023-05-10T14:32:00Z + GNodeAlias + true + true + String + recb9fI4kRkTYXDzA + LeftRightDot + false + false + "d1.isone.ver.keene.holly" + "a.b-h" + reczzIn3wGYrEKtbr + 51 + String + LeftRightDot + recxO0tKJ0Wp8B3pW 2023-01-16T17:19:18Z @@ -19581,23 +22857,23 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recy6wm0IgQI90zHG 2022-11-09T23:00:59Z - EmitterPumpFeedbackModel + DistPumpFeedbackModel true rec57bh9xoIxLUHjY - emitter.pump.feedback.model + sh.dist.pump.feedback.model true false "00000000" recrZz3gmzl97POA1 - emitter.pump.feedback.model.000 + sh.dist.pump.feedback.model.000 ConstantDeltaT - 21 + 27 ConstantDeltaT UpperPython pump.model String - EmitterPumpFeedbackModel000 - EmitterPumpFeedbackModel000 + ShDistPumpFeedbackModel000 + ShDistPumpFeedbackModel000 recyJ0doKEDyZtmpE @@ -19627,6 +22903,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec944QikN18Rdopu Integer + + recyaa7Sje4vX7qsj + 2023-06-25T20:50:04Z + AnnualHvacKwhTh + true + true + Integer + false + false + 25000 + rechp89wabr5kkqti + 17 + 25000 + Integer + recydLuwKpW0ptMyj 2022-06-24T20:28:45Z @@ -19656,20 +22947,20 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) MixingValveFeedbackModel true recX0A9nSriRUvl9n - mixing.valve.feedback.model + sh.mixing.valve.feedback.model true false "0397c1df" recrZz3gmzl97POA1 - mixing.valve.feedback.model.000 + sh.mixing.valve.feedback.model.000 ConstantSwt - 22 + 28 NaiveVariableSwt UpperPython mixing.valve.model String - MixingValveFeedbackModel000 - MixingValveFeedbackModel000 + ShMixingValveFeedbackModel000 + ShMixingValveFeedbackModel000 recyprhpuu5W0nemB @@ -19699,6 +22990,12 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recauOuVBqhRdNWcN Integer + + recyuhzWSiYjj8t1x + 2023-05-01T17:45:08Z + false + false + recyvC2QcCmnStivi 2022-10-02T23:38:37Z @@ -19814,6 +23111,42 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) String LeftRightDot + + reczco2IoqBeaLSg9 + 2023-05-01T22:08:28Z + FromGNodeInstanceId + true + true + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual + false + false + 'c0cd37c4-d4ae-46d7-baff-af705ea6871a' + "d4be12d5-33ba-4f1f-b9e5" + reckQg9yTsSw2dxbh + 1 + String + UuidCanonicalTextual + + + reczdvUXsC5uzxqIB + 2023-06-25T21:32:16Z + WeatherUid + true + true + String + rec24qjC90m0f4Kvl + UuidCanonicalTextual + false + false + "3bbcb552-52e3-4b86-84e0-084959f9fc0f" + "d4be12d5-33ba-4f1f-b9e5" + rec2EA0TG0Xexi6wg + 26 + String + UuidCanonicalTextual + reczfNmiB9hWAkSsY 2022-07-05T11:33:06Z @@ -19859,6 +23192,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 String + + reczyYbX7MCDw4qpM + 2023-05-10T14:37:35Z + TimezoneString + true + true + String + false + false + "US/Eastern" + recvJ9OVpqVVP895H + 3 + "US/Eastern" + String + @@ -19868,18 +23216,18 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 2 Egauge4030 consistency recxdlQ6gCN8mD39r - electric.meter.component.gt.000 Type Axiom 2 electric.meter.component.gt.000 + electric.meter.component.gt.000 Type Axiom 2 rec1osS0C34lxMFkC 2022-10-02T23:42:28Z If GpsPointId is not None, then there is a GpsPoint in the GNodeFactory with that GpsPointId - true - recDp8U1jLA9zeEx2 2 - true + recDp8U1jLA9zeEx2 true + true + true Joint Axiom 2 true @@ -19903,8 +23251,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec2tMERYL2Mdnty3 2022-10-02T23:42:37Z Assume role is TerminalAsset and status is Active. Then the OwnershipDeedNftId must exist, and must be owned by the 2-sig [GnfAdmin, smart_daemon_addr, owner_addr] multi - recDp8U1jLA9zeEx2 4 + recDp8U1jLA9zeEx2 Type Axiom 4 true @@ -19915,8 +23263,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 0 ScadaCert matches FromGNodeAlias recBEBBA0ctnOYQnC - join.dispatch.contract.000 Type Axiom 0 join.dispatch.contract.000 + join.dispatch.contract.000 Type Axiom 0 rec3XryMcqFFAbgHY @@ -19926,9 +23274,9 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) - Active can only change to Suspended or PermanentlyDeactivated - Suspended can only change to Active or PermanentlyDeactivated - PermanentlyDeactivated cannot change. - true - recDp8U1jLA9zeEx2 3 + recDp8U1jLA9zeEx2 + true true base.g.node.gt.002 Update Axiom 3 true @@ -19937,11 +23285,11 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec3dplhqy7h95uAR 2022-10-02T23:42:26Z There is at most one root GNode. - true - recDp8U1jLA9zeEx2 1 - true + recDp8U1jLA9zeEx2 true + true + true Joint Axiom 1 true @@ -19957,32 +23305,32 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) - If role is Ctn or MarketMaker, the parent must be a root, or have either role Ctn or MarketMaker. - If the role is AtomicMeausurementNode or AtomicTNode, the parent must be either Ctn or MarketMaker. - If the role is TerminalAsset, the parent must be either AtomicMeasurementNode or AtomicTNode - recDp8U1jLA9zeEx2 5 - true + recDp8U1jLA9zeEx2 true + true Creation Axiom 5 true rec41IGqMHOcsZEXl 2022-09-22T04:46:38Z - true - https://gridworks.readthedocs.io/en/latest/g-node-factory.html#gnfadminaddr Decoded HalfSignedDeedCreationMtx must have type MultisigTransaction from the 2-sig MultiAccount [GnfAdminAddr, ValidatorAddr]. 1 Is correct Multisig recO8OdobcISYms0B - initial.tadeed.algo.create.000 Type Axiom 1 + https://gridworks.readthedocs.io/en/latest/g-node-factory.html#gnfadminaddr + true initial.tadeed.algo.create.000 + initial.tadeed.algo.create.000 Type Axiom 1 rec4oleeZwPh0Ng0M 2022-09-22T01:27:45Z Decoded OldDeedTransferMtx must have type transaction.MultisigTransaction - recXCK8GTrT3hnfKX 1 + recXCK8GTrT3hnfKX Type Axiom 1 @@ -19993,8 +23341,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 PqPairs PriceMax matches MarketType recECSz5o4Z7NFjhG - atn.bid.001 Type Axiom 1 atn.bid.001 + atn.bid.001 Type Axiom 1 rec52F9XVqpe5t6Cp @@ -20005,8 +23353,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec5VDuzpUgfcEkJx 2022-09-22T14:04:02Z The MultiSig must belong to the 2-sig Multi [Gnf Admin, payload.DeedValidatorAddr] - rech8RtBLsLVe51DN 3 + rech8RtBLsLVe51DN Type Axiom 3 @@ -20014,10 +23362,10 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rec7CRy4NcfIww7pH 2022-09-27T15:48:08Z If GpsPointId is not None, then there is a GpsPoint in the GNodeFactory with that GpsPointId - true 3 - true true + true + true Joint Axiom 3 @@ -20025,8 +23373,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 2022-09-27T14:43:19Z Alias cannot be used, now or previously, by this or other BaseGNodes 1 - true true + true Creation Axiom 1 @@ -20035,8 +23383,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 If AsyncReportThreshold exists, so does NameplateMaxValue recDEr7ob2KLqM4gU - telemetry.reporting.config.000 Type Axiom 1 telemetry.reporting.config.000 + telemetry.reporting.config.000 Type Axiom 1 rec9JAVtjVuxToq7k @@ -20063,8 +23411,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recAV3jdy4xK2e6V4 2022-09-22T02:46:27Z Decoded FirstDeedTransferMtx must have type MultisigTransaction - rech8RtBLsLVe51DN 1 + rech8RtBLsLVe51DN Type Axiom 1 @@ -20075,16 +23423,16 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 InPowerMetering requirements reccsu6ZeZHKoDqDy - spaceheat.node.gt.101 Type Axiom 1 spaceheat.node.gt.101 + spaceheat.node.gt.101 Type Axiom 1 recAZ1Zsq5mzNmXks 2022-10-02T23:42:31Z The following attributes must exist: GNodeId, Alias, StatusValue, RoleValue, GNodeRegistryAddr - recDp8U1jLA9zeEx2 1 + recDp8U1jLA9zeEx2 Type Axiom 1 true @@ -20092,10 +23440,10 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recBJRHgd3WPVUvQw 2022-10-02T23:42:14Z Alias cannot be used, now or previously, by this or other BaseGNodes - recDp8U1jLA9zeEx2 1 - true + recDp8U1jLA9zeEx2 true + true Creation Axiom 1 true @@ -20103,8 +23451,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recBWcnuqdt9wzynI 2022-11-03T19:00:14Z Decoded SignedTaDeedCreationTxn must have type AssetConfigTransaction - recvWBuo1Ws1SIL4b 1 + recvWBuo1Ws1SIL4b AssetConfigTransaction Type Axiom 1 @@ -20112,7 +23460,6 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recCHkLILWYGN7rjn 2022-09-22T04:46:35Z - https://gridworks.readthedocs.io/en/latest/ta-deed.html#asa-tadeed-specs The transaction must create an Algorand Standard Asset - Total is 1 - UnitName is TADEED @@ -20124,13 +23471,13 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 2 Creates Initial ASA TaDeed recO8OdobcISYms0B - initial.tadeed.algo.create.000 Type Axiom 2 + https://gridworks.readthedocs.io/en/latest/ta-deed.html#asa-tadeed-specs initial.tadeed.algo.create.000 + initial.tadeed.algo.create.000 Type Axiom 2 recDXr4RoTH1jDsXd 2022-09-22T03:48:48Z - https://gridworks.readthedocs.io/en/latest/ta-validator.html#tavalidator-certificate - The transaction must be the transfer of an Algorand Standard Asset -The sender must be the 2-sig Multi [GnfAdminAddr, TaValidatorAddr], which also created and owns the ASA - It must be getting sent to the ValidatorAddr @@ -20143,8 +23490,9 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 2 Transfers correct certificate rec1SFXYQUXElpeJ9 - tavalidatorcert.algo.transfer.000 Type Axiom 2 + https://gridworks.readthedocs.io/en/latest/ta-validator.html#tavalidator-certificate tavalidatorcert.algo.transfer.000 + tavalidatorcert.algo.transfer.000 Type Axiom 2 recDox3OhEiNyIdlK @@ -20163,26 +23511,26 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recEDIu6H6gEbyn4v 2022-09-22T06:13:13Z - recrD0Mo96XS8itFz There must not already be a TaValidatorCert belonging to the 2-sig [GnfAdminAddr, ValidatorAddr] address. 5 Uniqueness - tavalidatorcert.algo.create.000 Type Axiom 5 + recrD0Mo96XS8itFz reccFZLsGTVhuzGsn tavalidatorcert.algo.create.000 + tavalidatorcert.algo.create.000 Type Axiom 5 recEXGRVitjMKiPmR 2022-09-22T03:05:04Z - reclWEqctUrS5WXwG - https://gridworks.readthedocs.io/en/latest/ta-validator.html#tavalidator-certificate For the asset getting created: Total is 1, Decimals is 0, UnitName is VLDTR, Manager is GnfAdminAddr, AssetName is not blank. 3 Is ValidatorCert - tavalidatorcert.algo.create.000 Type Axiom 3 + reclWEqctUrS5WXwG + https://gridworks.readthedocs.io/en/latest/ta-validator.html#tavalidator-certificate reccFZLsGTVhuzGsn tavalidatorcert.algo.create.000 + tavalidatorcert.algo.create.000 Type Axiom 3 recEnG4y5Q19QVq6H @@ -20191,8 +23539,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 ListLengthConsistency rec93KBYcwiqJ6OQy - gt.sh.telemetry.from.multipurpose.sensor.100 Type Axiom 1 gt.sh.telemetry.from.multipurpose.sensor.100 + gt.sh.telemetry.from.multipurpose.sensor.100 Type Axiom 1 recFW8IwNBix7ZGw5 @@ -20201,28 +23549,28 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 Modbus consistency recxdlQ6gCN8mD39r - electric.meter.component.gt.000 Type Axiom 1 electric.meter.component.gt.000 + electric.meter.component.gt.000 Type Axiom 1 recH512a7g6p8cLQM 2022-09-22T01:30:26Z total must be 1, unit name must be TADEED, manager must be Gnf Admin or Gnf Graveyard - recXCK8GTrT3hnfKX 3 + recXCK8GTrT3hnfKX Type Axiom 3 recHWe9Q4itm5lWv2 2023-01-11T20:31:19Z - true Decoded SignedInitialDaemonFundingTxn must be a SignedTransaction signed by TaOwnerAddr. 1 Is correct Multisig recAWKkS0hcyws7O6 - initial.tadeed.algo.optin.002 Type Axiom 1 + true initial.tadeed.algo.optin.002 + initial.tadeed.algo.optin.002 Type Axiom 1 recISoW81cXDnqgJt @@ -20248,8 +23596,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) - OwnerAddr must be a string of format AlgoAddressStringFormat - DaemonAddr must be a string of format AlgoAddressStringFormat - TradingRightsNftId must be an integer - recDp8U1jLA9zeEx2 2 + recDp8U1jLA9zeEx2 Type Axiom 2 true @@ -20258,8 +23606,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 2022-09-27T15:47:53Z GNodeId must be a unique string of UUID format 2 - true true + true Creation Axiom 2 @@ -20268,30 +23616,30 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Assume OwnershipDeedNftId exists and role is TerminalAsset. The Nft must be for a Valid TaDeed created by the 2-sig [GnfAdmin, ownership_deed_validator_addr] multi whose asset_name is this GNodeAlias. - recDp8U1jLA9zeEx2 3 + recDp8U1jLA9zeEx2 Type Axiom 3 true recKmoKIL8lpLdK2U 2022-09-22T03:48:56Z - true - https://gridworks.readthedocs.io/en/latest/g-node-factory.html#gnfadminaddr Decoded HalfSignedCertTransferMtx must have type MultisigTransaction from the 2-sig MultiAccount [GnfAdminAddr, ValidatorAddr], signed by the ValidatorAddr 1 Is correct Multisig rec1SFXYQUXElpeJ9 - tavalidatorcert.algo.transfer.000 Type Axiom 1 + https://gridworks.readthedocs.io/en/latest/g-node-factory.html#gnfadminaddr + true tavalidatorcert.algo.transfer.000 + tavalidatorcert.algo.transfer.000 Type Axiom 1 recLImSRvyPbLliuE 2022-11-03T18:37:06Z NewDeedIdx is an active TaDeed created and owned by GnfAdminAccount - recvWBuo1Ws1SIL4b 2 + recvWBuo1Ws1SIL4b Valid TaDeed Type Axiom 2 @@ -20299,15 +23647,15 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recLRRgeFOdFakOzR 2023-01-11T22:03:21Z - true - https://gridworks.readthedocs.io/en/latest/g-node-factory.html#gnfadminaddr Decoded FirstDeedTransferMtx must have type MultisigTransaction from the 2-sig MultiAccount [GnfAdminAddr, ValidatorAddr]. 1 Is correct Multisig recPf7eAhpge7kvO7 - initial.tadeed.algo.transfer.000 Type Axiom 1 + https://gridworks.readthedocs.io/en/latest/g-node-factory.html#gnfadminaddr + true initial.tadeed.algo.transfer.000 + initial.tadeed.algo.transfer.000 Type Axiom 1 recMYPnr592PEzOi7 @@ -20317,8 +23665,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 Cert type consistency rectayh08KEGGGcZc - gw.cert.id.000 Type Axiom 1 gw.cert.id.000 + gw.cert.id.000 Type Axiom 1 recN1T4RyJw2VMsOW @@ -20332,10 +23680,10 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recNXTuKhV6lGeDjv 2022-10-03T01:59:48Z On creation, PrevAlias is None - recDp8U1jLA9zeEx2 4 - true + recDp8U1jLA9zeEx2 true + true Creation Axiom 4 true @@ -20348,8 +23696,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recOyMaXAxwASJw4J 2022-09-22T02:51:31Z The Mtx must be signed by the DeedValidatorAddr - rech8RtBLsLVe51DN 7 + rech8RtBLsLVe51DN Type Axiom 7 @@ -20357,8 +23705,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recP9v8cvgHgbDnpZ 2022-09-22T02:54:38Z The asset must be created and owned by the 2-sig [Gnf Admin, payload.DeedValidator] multi account - rech8RtBLsLVe51DN 4 + rech8RtBLsLVe51DN Type Axiom 4 @@ -20367,8 +23715,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 2023-01-15T13:05:45Z 2 recECSz5o4Z7NFjhG - atn.bid.001 Type Axiom 2 atn.bid.001 + atn.bid.001 Type Axiom 2 recQUUMz6KxDUEjWi @@ -20378,15 +23726,15 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 2 TaDeed consistency recAWKkS0hcyws7O6 - initial.tadeed.algo.optin.002 Type Axiom 2 initial.tadeed.algo.optin.002 + initial.tadeed.algo.optin.002 Type Axiom 2 recQn6ib10Nqp94i8 2022-11-03T18:59:36Z TaDaemonAddr owns exactly 1 TaDeed. The creator of this old TaDeed is either the GnfAdminAccount or the ValidatorMulti 2-sig [GnfAdminAccount, ValidatorAddr]. The asset index of the old TaDeed is less than the asset index of the new TaDeed. Finally, if the creator of the old TaDeed is the GnfAdminAccount, then the TaDaemonAddr is opted into (but does not own) exactly one TaDeed created by the ValidatorMulti account and owned by the GnfAdminAccount. - recvWBuo1Ws1SIL4b 3 + recvWBuo1Ws1SIL4b Old TaDeed check Type Axiom 3 @@ -20398,21 +23746,21 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 ListLengthConsistency receGKnJ8CfemQLdQ - gt.sh.multipurpose.telemetry.status.100 Type Axiom 1 gt.sh.multipurpose.telemetry.status.100 + gt.sh.multipurpose.telemetry.status.100 Type Axiom 1 recSkcGAjBCP4uFPX 2022-09-22T03:04:49Z - true - https://gridworks.readthedocs.io/en/latest/g-node-factory.html#gnfadminaddr Decoded HalfSignedCertCreationMtx must have type MultisigTransaction from the 2-sig MultiAccount [GnfAdminAddr, ValidatorAddr], signed by ValidatorAddr. 1 Is correct Multisig reccFZLsGTVhuzGsn - tavalidatorcert.algo.create.000 Type Axiom 1 + https://gridworks.readthedocs.io/en/latest/g-node-factory.html#gnfadminaddr + true tavalidatorcert.algo.create.000 + tavalidatorcert.algo.create.000 Type Axiom 1 recTQN80nxhBGq1of @@ -20422,8 +23770,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) - Active can only change to Suspended or PermanentlyDeactivated - Suspended can only change to Active or PermanentlyDeactivated - PermanentlyDeactivated cannot change. - true 2 + true true Update Axiom 2 @@ -20439,9 +23787,9 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) - If role is Ctn or MarketMaker, the parent must be a root, or have either role Ctn or MarketMaker. - If the role is AtomicMeausurementNode or AtomicTNode, the parent must be either Ctn or MarketMaker. - If the role is TerminalAsset, the parent must be either AtomicMeasurementNode or AtomicTNode - true - recDp8U1jLA9zeEx2 4 + recDp8U1jLA9zeEx2 + true true base.g.node.gt.002 Update Axiom 4 true @@ -20454,8 +23802,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 Scada is SignedProof signer recbrp6V9qD6J1NHb - scada.cert.transfer.000 Type Axiom 1 scada.cert.transfer.000 + scada.cert.transfer.000 Type Axiom 1 recXMf6hlVg265ccL @@ -20464,8 +23812,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 ListLengthConsistency rec8c4KjhwNmfrRYP - gt.sh.simple.telemetry.status.100 Type Axiom 1 gt.sh.simple.telemetry.status.100 + gt.sh.simple.telemetry.status.100 Type Axiom 1 recY7qq8BPIydsNm8 @@ -20477,8 +23825,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recYBKWxHw8Q6obsQ 2022-09-22T01:57:54Z The asset name must have valid GNodeAlias format, with the world_alias (first - recXCK8GTrT3hnfKX 5 + recXCK8GTrT3hnfKX Type Axiom 5 @@ -20486,10 +23834,10 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recYBcjALeSkC3DmL 2022-10-03T01:58:39Z On creation, Status is Pending - recDp8U1jLA9zeEx2 3 - true + recDp8U1jLA9zeEx2 true + true Creation Axiom 3 true @@ -20510,10 +23858,10 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) reca1Y8LeKit4sVLu 2022-09-27T15:48:05Z There is at most one root GNode. - true 2 - true true + true + true Joint Axiom 2 @@ -20528,15 +23876,15 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 3 Mtx signed by TaValidator recO8OdobcISYms0B - initial.tadeed.algo.create.000 Type Axiom 3 initial.tadeed.algo.create.000 + initial.tadeed.algo.create.000 Type Axiom 3 recdfhrc7m3cOTO3V 2022-09-22T01:41:16Z word of asset name matching the universe (e.g. dev universe -> world starts with `d - recXCK8GTrT3hnfKX 6 + recXCK8GTrT3hnfKX Type Axiom 6 @@ -20549,9 +23897,9 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recehciOce1BjWYzY 2022-10-03T03:53:49Z If alias has changed, then new prev_alias must equal original alias prior to the change. If alias has NOT changed then new prev_alias must equal original prev_alias. - true - recDp8U1jLA9zeEx2 6 + recDp8U1jLA9zeEx2 + true true base.g.node.gt.002 Update Axiom 6 true @@ -20565,8 +23913,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recgkttJLsyUmqLlp 2022-09-22T02:46:32Z The FirstDeedTransferMtx.txn must have type AssetTransferTxn - rech8RtBLsLVe51DN 2 + rech8RtBLsLVe51DN Type Axiom 2 @@ -20574,8 +23922,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) recgr767PF8P1X06i 2022-09-22T05:33:48Z The 2-sig [Gnf Admin, TaDaemonAddr, TaOwnerAddr] account has opted in to the Deed and has enough funding (TaDeed Consideration Algos, publicly set by the Gnf) - rech8RtBLsLVe51DN 5 + rech8RtBLsLVe51DN Type Axiom 5 @@ -20586,16 +23934,16 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 3 TaValidator has opted in rec1SFXYQUXElpeJ9 - tavalidatorcert.algo.transfer.000 Type Axiom 3 tavalidatorcert.algo.transfer.000 + tavalidatorcert.algo.transfer.000 Type Axiom 3 rechF4eml8urlVmxU 2022-10-02T23:42:40Z Alias cannot be used, now or previously, by this or other BaseGNodes - true - recDp8U1jLA9zeEx2 1 + recDp8U1jLA9zeEx2 + true true base.g.node.gt.002 Update Axiom 1 true @@ -20604,8 +23952,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) rechGHjDdnbThfv1R 2022-11-03T18:59:50Z SignedTaDeedCreationTxn must be signed by Gnf Admin, and the signature must match the txn. - recvWBuo1Ws1SIL4b 4 + recvWBuo1Ws1SIL4b Correctly Signed Type Axiom 4 @@ -20617,20 +23965,20 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) 1 ListLengthConsistency recdNEAMkZeOLS8Vo - telemetry.snapshot.spaceheat.000 Type Axiom 1 telemetry.snapshot.spaceheat.000 + telemetry.snapshot.spaceheat.000 Type Axiom 1 recj13iYXBkX5UZr3 2022-09-22T03:48:19Z - recBje3quNXHrsP6j MultiAccount [GnfAdminAddr, ValidatorAddr] must have enough Algos to meet the GNodeFactory criterion. 4 TaValidator has sufficient Algos - tavalidatorcert.algo.transfer.000 Type Axiom 4 + recBje3quNXHrsP6j rec1SFXYQUXElpeJ9 tavalidatorcert.algo.transfer.000 + tavalidatorcert.algo.transfer.000 Type Axiom 4 recjrbpPTEVatFS5z @@ -20653,8 +24001,8 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) reckfbX3EePBsFCIV 2022-09-22T02:04:28Z The OldDeedTransferMtx.txn must have type transaction.AssetTransferTxn - recXCK8GTrT3hnfKX 2 + recXCK8GTrT3hnfKX Type Axiom 2 @@ -20664,9 +24012,9 @@ CHANGE to TOPOLOGY Axiom (Joint Axiom 1) Role update rules. TerminalAsset, InterconnectionComponent, and Other cannot change roles. ConductorTopologyNode can turn into MarketMaker and vice versa. AtomicMeteringNode can turn into AtomicTNode and vice versa - true - recDp8U1jLA9zeEx2 5 + recDp8U1jLA9zeEx2 + true true base.g.node.gt.002 Update Axiom 5 true @@ -20681,8 +24029,8 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recmQsc2HRItZ3oL1 2022-09-27T15:48:31Z Alias cannot be used, now or previously, by this or other BaseGNodes - true 1 + true true Update Axiom 1 @@ -20699,8 +24047,8 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa 2 TaDaemon funded by TaOwner recPf7eAhpge7kvO7 - initial.tadeed.algo.transfer.000 Type Axiom 2 initial.tadeed.algo.transfer.000 + initial.tadeed.algo.transfer.000 Type Axiom 2 recstTBCe9nhA6pgn @@ -20723,10 +24071,10 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa rectEwF6ZLLRopleW 2022-10-02T23:42:17Z GNodeId must be a unique string of UUID format - recDp8U1jLA9zeEx2 2 - true + recDp8U1jLA9zeEx2 true + true Creation Axiom 2 true @@ -20734,8 +24082,8 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa rectREWSiFBVSQoOq 2022-09-22T05:33:39Z The 2-sig [Gnf Admin, TaDaemonAddr, TaOwnerAddr] must not own any assets (specifically because this is the FIRST tadeed and should initialize the multi. - rech8RtBLsLVe51DN 6 + rech8RtBLsLVe51DN Type Axiom 6 @@ -20753,19 +24101,19 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa - If role is Ctn or MarketMaker, the parent must be a root, or have either role Ctn or MarketMaker. - If the role is AtomicMeausurementNode or AtomicTNode, the parent must be either Ctn or MarketMaker. - If the role is TerminalAsset, the parent must be either AtomicMeasurementNode or AtomicTNode - true 1 - true true + true + true Joint Axiom 1 recueNLsroZPIyXPm 2022-10-03T02:44:45Z g_node_id is Immutable - true - recDp8U1jLA9zeEx2 2 + recDp8U1jLA9zeEx2 + true true base.g.node.gt.002 Update Axiom 2 true @@ -20777,28 +24125,38 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa 2 TaAlias matches TaDeed recF9KonH58AltK0K - basegnode.scada.create.000 Type Axiom 2 basegnode.scada.create.000 + basegnode.scada.create.000 Type Axiom 2 recwsWtIgu909pJm1 2022-09-22T01:27:09Z The asset-index of the new deed must be greater than the asset-index of the old deed - recXCK8GTrT3hnfKX 4 + recXCK8GTrT3hnfKX Type Axiom 4 + + recy2Ozo32rIJuZcl + 2023-04-29T21:18:59Z + AtnParams must have + 1 + AtnParamsTypeName matches AtnParams + rec3kcgktiHCBYpA4 + dispatch.contract.confirmed.000 + dispatch.contract.confirmed.000 Type Axiom 1 + recyO8wUTKZpFsCtt 2022-09-22T03:04:54Z - reclWEqctUrS5WXwG The transaction must have type AssetConfigTxn. 2 Is AssetConfigTxn - tavalidatorcert.algo.create.000 Type Axiom 2 + reclWEqctUrS5WXwG reccFZLsGTVhuzGsn tavalidatorcert.algo.create.000 + tavalidatorcert.algo.create.000 Type Axiom 2 recytsVdwKmDj3uOJ @@ -20818,15 +24176,15 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa 1 TaOwner is SignedProof signer recF9KonH58AltK0K - basegnode.scada.create.000 Type Axiom 1 basegnode.scada.create.000 + basegnode.scada.create.000 Type Axiom 1 rec13dujLuXXSf5L3 2022-06-20T13:19:41Z - 32503683600 + ReasonableUnixTimeS Integer reflecting unix time seconds between 1970 and 3000 reccl6zfh9EN32iFD recABBs8u89Tj3Iu2 @@ -20835,26 +24193,29 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa receaI7kIGQr97TD5 recC2OJXewZyxgy8T recUWwce377A33dZw + recDvDUWKt6hxy1l9 + recNy04v6VC70hH8c + 32503683600 recV0KuDFayH4qGIl rec7peRuDqMNa0vlW rec3fLb6b0gIeuCTO recLufl9jSdsMGsFR recNbXbJE9rcnLXAs - ReasonableUnixTimeS + recBqSlQdF17CgMPY rec1S1Qh6ReE9UJxT 2022-08-18T16:26:50Z + WorldInstanceNameFormat AlphanumericString + '__' + Integer recTVpMk0yoQ95CTi recN8W5RcjCrg3Z3Y reczVqlxJInFWonml - WorldInstanceNameFormat rec24qjC90m0f4Kvl 2022-05-12T01:55:33Z - "d4be12d5-33ba-4f1f-b9e5" + UuidCanonicalTextual A string of hex words separated by hyphens of length 8-4-4-4-12. recn2CJw74mLLQ8tr recD4VpikwJAaTf0c @@ -20895,7 +24256,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa rechDjfq6buysCo5K recDK3v8t65JbIgGo recWvVApidAuVFsAP - recBYlRmPwCbVbTMn rec6tXwpa0rqEikXW recM33kM7FUIUQYie recrKX7TavoFqODYc @@ -20910,7 +24270,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recee7OczpcTACTcR recnbtuaL96kZW7Sn recHNfUgwXIvrBwWK - recXfOCZByFlChQxR rec88fKL08R9C0d0I recSy6tRXV5XRsb7i rechuNHy6Cnk00Ynu @@ -20928,6 +24287,22 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa rec82deD90t24PRHB recLO20AZmUda0yof recE7gfNAh0QZrQT6 + recA6xaBWKtDeVbZs + reczco2IoqBeaLSg9 + recuCxturGwYam9W0 + recuKvC5D4tUOKCIH + rec8ybKjyg4p5PQBZ + rec30du75CvosnjIj + rec12ghZsHZYMDdQG + recqEqS1dMXLaWYRD + recCMMvdApuru0zxY + rect2ta2gIzYqWAyr + recaSQiyOGuk96R75 + receQEqkX185ZTnZn + reczdvUXsC5uzxqIB + recvYmJjkD1Dzzbqk + "d4be12d5-33ba-4f1f-b9e5" + 652ba6b0-c3bf-4f06-8a80-6b9832d60a25 recc2Km1jUViJqVeK rec8uTC7GK5qgXzg9 reczVqlxJInFWonml @@ -20952,7 +24327,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recTZ13dEbwrKazkL reckTci9LVdsEt2WQ recECSz5o4Z7NFjhG - rec9kYNek59Vqps4S recBEBBA0ctnOYQnC rec3kcgktiHCBYpA4 recNbXbJE9rcnLXAs @@ -20977,17 +24351,22 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recxdlQ6gCN8mD39r reccsu6ZeZHKoDqDy recRzt4GyUgwjJy3l - 652ba6b0-c3bf-4f06-8a80-6b9832d60a25 - UuidCanonicalTextual + recm5UcVaAPAtrrFS + reckQg9yTsSw2dxbh + reczzIn3wGYrEKtbr + recfDQscmquO0odpo + recvJ9OVpqVVP895H + recBqSlQdF17CgMPY + rec2EA0TG0Xexi6wg recKcuGOfjTIPqtXk 2022-07-10T12:52:01Z + PositiveInteger recTIuInqPiemsf9b reclgcZrxIoZfiovl recgIQb2yDNArvM73 OwnershipDeedNftId - PositiveInteger recIN7LQdlrUw9oNP rec6MQ1HJUBz9pC5d recvaw2vy5mebzESQ @@ -21001,11 +24380,11 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recLyqFB0L7XFIp6C 2022-06-18T17:01:13Z - 2 + Bit 0 or 1 reckbdPijd806F8LT reciVyeMslNHUJKN8 - Bit + 2 recnqelpRWYmV8MJR recjPLNQVJ2uCOYfC recsgnh5t5it39M5o @@ -21015,13 +24394,13 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recSvRBEpOcZWQMmY 2022-11-02T23:17:45Z - Lowercase alphanumeric strings separated by hypens, with most significant word to the left. I.e. `dw1.ne` is the child of `dw1`. Both the first and last word must start with a alphabet character. LeftRightHyphen + Lowercase alphanumeric strings separated by hypens, with most significant word to the left. I.e. `dw1.ne` is the child of `dw1`. Both the first and last word must start with a alphabet character. recWwoTHJMScsOvnF 2023-01-05T16:22:42Z - "g" + HexChar single-char string in '0123456789abcdefABCDEF' recB038FARPSVfhZS reclQHYGJz7sxMibH @@ -21029,24 +24408,24 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recoduUdKygrSq0T5 recsbmamjY68wXvzD recu06qV62QnggRW0 + "g" + d recxNIfCRauFrb57o recFrR35Q6mQhx1KM recE3bIWWFpMPqyS1 recDq5Oo6baJLVS5s - d - HexChar recZS8rV9vLS5kFN1 2022-11-08T08:21:47Z + IsoFormat recFAv8cdbxLhK5Wh recd5K0XiAzHsj2Pw - IsoFormat recb9fI4kRkTYXDzA 2022-06-10T12:25:16Z - "a.b-h" + LeftRightDot Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character. recK1YHQ9c8LbBJ0q recYD7KpGFv86yleu @@ -21136,6 +24515,25 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa reci7qQs2JCeyRbV7 recpCkNXWjHazXV05 rece8mt4smna93obx + recLnHXHBgC0FTXR0 + recqDBnMUrFKhR7xh + recB7NDDe5xXWHh9M + recFFrCFMIAqvoz8H + recfeWhbkmYYdayn3 + recSZuXgqgnSQCBOa + recbAjM31sjr5mRF3 + recoEOdUEOJ4NE1i8 + recCQfmUkI2by85NK + recWfVfIe5SaVyrD2 + recxJmpDJWx6LnEzW + rec5tlsMd4hrJm4Yi + rec9LV9kNuSH5H6fq + recNMgiBoWjcpx9qS + recJcYgKuh54ltqk5 + recIi1kb6LxzOzv0b + recaMsFqtaJuXv5AD + "a.b-h" + dw1.isone.me.freedom.apple recc2Km1jUViJqVeK rec8uTC7GK5qgXzg9 reczVqlxJInFWonml @@ -21192,19 +24590,31 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa reccsu6ZeZHKoDqDy reciGkEyh61sro7R0 recyETDKMGTbGb0zf - dw1.isone.me.freedom.apple - LeftRightDot + rec4yUxGiLZpqWQqb + recm5UcVaAPAtrrFS + recw5evm1WetKAzZG + recwXD4ryogKVwsnE + rec8IDXjSvdhHGds4 + reckQg9yTsSw2dxbh + reczzIn3wGYrEKtbr + recfDQscmquO0odpo + recvJ9OVpqVVP895H + recBqSlQdF17CgMPY + recrZz3gmzl97POA1 + rec2EA0TG0Xexi6wg + rechp89wabr5kkqti recc5MBUv09sg8D4i 2022-05-11T18:29:33Z - 65536 - Integer X, 0<= X <= 65535 UnsignedShort + Integer X, 0<= X <= 65535 + 65536 recdsSDIz6EmZCvr9 2022-11-08T04:38:45Z + MarketSlotNameLrdFormat recT1nhwCuJiHkC52 recW7xrCzv88NSkzD rechysRxaDzIfMVDw @@ -21217,18 +24627,18 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recd5K0XiAzHsj2Pw recECSz5o4Z7NFjhG rechVGhiKUuIgoWYy - MarketSlotNameLrdFormat reciNckyKjqNQDByG 2022-07-13T00:24:04Z - rec2WTDVr3IZq1B7j NonNegativeInteger + rec2WTDVr3IZq1B7j recWQfeI479YJ5lvR recopFBsq4TmG87Op 2022-09-14T17:59:16Z + AlgoAddressStringFormat String of length 32, characters are all base32 digits. recrD0Mo96XS8itFz recBje3quNXHrsP6j @@ -21279,6 +24689,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recZQKyBftNOGc46Z recQOONbTZMocKXeg recfm7YlkXDX6XQEU + RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI rec8uTC7GK5qgXzg9 rectayh08KEGGGcZc recV0KuDFayH4qGIl @@ -21299,13 +24710,11 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recazQb2vEXgbroHd recECSz5o4Z7NFjhG recF9KonH58AltK0K - RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI - AlgoAddressStringFormat recqSXVzLo8RtEjlH 2022-05-11T18:29:33Z - 1656245000 + ReasonableUnixTimeMs An integer reflecting unix time in ms between midnight Jan 1 2000 and midnight Jan 1 3000 UTC rec0yzwyCWxtaJQJF recicAZCWCo8hSu2t @@ -21327,6 +24736,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa rec9m6WYnkhS8o9uJ reciMffYqbquDDMwr recy22SSV0XnqMR9U + 1656245000 rec7peRuDqMNa0vlW recE3bIWWFpMPqyS1 recTZ13dEbwrKazkL @@ -21341,11 +24751,11 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recdNEAMkZeOLS8Vo recDq5Oo6baJLVS5s reciGkEyh61sro7R0 - ReasonableUnixTimeMs recvbnpa4cX2nNp9p 2022-09-15T23:45:35Z + AlgoMsgPackEncoded Error is not thrown with algosdk.encoding.future_msg_decode(candidate) reclWEqctUrS5WXwG recbR8wOIppFVic94 @@ -21367,6 +24777,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa rec5xtm1Bu9kG4GaK recEG7l0wT1KjHSFs recYFjgEXfTizyRiv + gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc= reccFZLsGTVhuzGsn rec1SFXYQUXElpeJ9 recO8OdobcISYms0B @@ -21383,144 +24794,96 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recF9KonH58AltK0K recbrp6V9qD6J1NHb recECSz5o4Z7NFjhG - gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc= - AlgoMsgPackEncoded recx8kL4InkksReIF 2022-05-11T18:29:33Z - -32769 + ShortInteger short format requires (-32767 -1) <= number <= 32767 recw4w4kyKb5qsTUd - ShortInteger + -32769 rec2J6tKssVJwVmFd 2022-11-21T14:51:34Z + gnr recVyJz6EmMdwDjYy - recHxMHk1Q13AGxQT recD9RSdxZFlCh0nV rec0Uk7vhJUpp68kq recM8DeGDMOPo9ezd recRLpRImAACQhmSj recs8N9wVyonAKE8y - recyENjaG4Mi1n27B - recfdC5aUpHXgXtON rec0CVyxlO3cPJGWD - gnr - recCEQgAR8tPu4mgu - recUiiAdTTH4zmBfJ recmacM072NkqkOW1 - recT6IKeUqmmI7L84 - recsRpVdgR7q3fCML - recZKMG3hALXcWQuc - recA0Q62wqmXkzSse rec3E1mvlkD3mlc6K 2022-11-16T19:07:38Z + gwmm + Gridworks MarketMaker recwv4Bsb1NA1uZxn recSIwq3BdNSAxp2e - recrWS8cReivzRx92 - rec1qAnTlin7a194M rec8cREVO03dOhbWy recMvuzDPwhs257Bs rec5dH5f6YcOKD0RU - recx5JlRHk2l9zzQK - recOVsu1AQ1nyhMTN recYts9GI3HDasco4 recleupDcbcVTVRQ9 recPkFr8lDBRTXq08 recbV3eBvST23mHgN recvpIR8rXsHiuLTP - Gridworks MarketMaker - gwmm - rect0T4CM09fP7g2t - recTt38mXlQtJdywQ - reck0WsxFdPOoe5ZM - recGhJkY0Egp6jCRt - recmNuAp0alwhubds - rec9HtmIiTasYUNy0 - recISSyBDybwCsc9S - recihvUJVR6oEfEap - rec8YFBXCvMbO7Fnc rec3nJaxOMLIKJoNY 2022-10-24T23:07:49Z - recmXImdzdJvIhwRj - recASxd0yY7a1nWR4 - recM6At5qFrk4dsir - recuetPMCxsDyU0R4 - recB2fok3eH3LnZmw + gwatn rec0yahRyau7Mzmzk recDST3lwGBFXqsz1 recSNej4i6EwucKbV rectD1KxAzqJILPfu recanqppJwatq7fmU - recGRKTWPhlGhVZqf - recGpv7lXS5nQj5jR - recfsDYNRW0af16Ol recFreOp8J4dIjXkD rec5K84S2MN0iMNlE recLBYNcGvIrpb1nX recKs7BOeqelLodrB - recfLzamGrtSF52cT - recGSPzbsyt0nPa5B - recSxY4F5Ewetp9tW - recCqC0KKS00693kw recAO8C6pnLKe00p1 reckwTitpkjc24FAx recbN7L6MH925xDby recZZqjz8vL6Dj548 - recWbhB62TTgTQUtI - recWaQL9LKI0BTilC - recD3lLZaCPt9ehVW - rec5LcnUo5uGaILj6 - recnvClBEU4WU5lOe - recGg8u1kDk0dEwT0 - recgroRYrhO8lRT9B - rec48h8N51cFfC0Y2 - recYXSUnBW9DHXJWw recs6Jf8auLqC5z1T - rec2ZUAEXRfDLAKh8 - recurndoUQt30tVFv recIX7Ev6QVM4jtwT recaBlt54tM7DPjwR recjvYtEfvMLsZJtV - gwatn - recLjDrJSnNnwWD54 - recRncRvdA6tysnAt - recDa8t2QVwfTLzpo - reczplFItDku5AaRa - recOCu54C8gBud4Rp - rechPYPk940Fi7Uud - recLromkpguogn9x9 - recUKBtypJxJFHldg + recQZBqdNBFdbHYdk + recDIPWhldlUQVNYr + recOoCg1T2rOplTJT + reccIKvkAunTQR3uO + recntdJAXDry45FT5 + recvUI21ZPLimt9Tt + recF0p8e8Vmazeyd9 + recDqWAGc9wH8TzcX + recCWJPidn8ABRVgU + recJRYtEf5HsSuZBM + rec8Ix2UVLnq7xycF + recdAy68epnKcXjLL + rec0I8YsmUHlc5F67 + recHLWHk24N98yrP7 + recGCj1HgHQww3p80 + recRis6YmxjqUGg0c + recZsOKTlEbZPh3rD + recjmLBzSO8k29I9e + recCgP2Dw5SfDjpp2 reclDWkXtj41G28wW rec1AjUKBV2cKU0zq rec9izwc0IQmbp6gf - rec8B7NqLQHwAZjcw - recJX40Wt0rcWDFET - recaWGhVScY6KXA44 - recf2bjSGV3D1Ml5i - recGcb0eH9z0Np8jd - recy37qKrW01vTt7S - reckI8CRWIPcmOTrC - rec3tGkwCYPLdVaio - rec6kz3pyxVALoFsu - recpwlwbrp4FbfXbU - recyDSPjw1NYVGiOH - recqMWuADrFZz8VgP - recaR5EUku9iF2rKc - recsHlBETSCTId6TE - rec6qUrXNHuchMTRb + recg48Xi06BYdm33C rec5aZ8ud9lQDmlBu 2022-10-24T23:07:49Z + gwproto + Protocol used by the SCADA repository recwZgp7HvS1QX41E recktn7mVOjp0WCql recRsVv1nAv6EFkrJ @@ -21554,8 +24917,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recuJQxG7uIZ98O1y rec11OYyEPT4FV8al recDbV0swsrf9r4Im - Protocol used by the SCADA repository - gwproto recqt9zKlCbThWViA recTsc0Fiab7VGVWX recE24bIOzJ4vCtXl @@ -21566,64 +24927,46 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recHY8DLO7gBfWjtC 2023-01-14T15:00:31Z - recg5ScMmCJuinnKL - recDIPWhldlUQVNYr + satn + Spaceheat Atn recl5OGEwbCR9w3O7 - recOoCg1T2rOplTJT - recJnQIpCbM1mDUV6 recvFLJdLpTh7dGh1 - Spaceheat Atn - satn - recKJi6uA9s9Sp8XM - recg4YcVJnk1bG3PL - recVpliEuu2jtKKUj - recEIu8DZMwf0J7za - recfpS2uOHAcfWGdN - recV83OsyQx8GqHV8 + recJnQIpCbM1mDUV6 + rec2ZUAEXRfDLAKh8 + recLromkpguogn9x9 + recUKBtypJxJFHldg recN6489A2iI0CRXz 2022-11-21T05:23:07Z + gworld recTvm4cpEzdavk6J recl5eLv36HJnILWJ - recianedmKDqWVh0O - recbuSNZg3DwAGxys recI3qMEZNOVje6qG - rec9y2OWDqjR6vSAp - recnwesXAnDk54IJt - reciXeCa9g1WrIc02 - recx1ZcM9hO3GKRkp - gworld - recxchS4k09ivH7vN - recWkTXMymydxR5UX - recV9jP0nFcRCDphV - recLgjTEHK9NGb3nq - recfChwtbhGYGwQAx - rec3lKyK0qukOmAfT - rec3aEohPrsl8Z6M3 - recf9z2cLhcr9up3s + + + recVsPBZNyq2U6Fmz + 2023-06-27T15:19:58Z + gwprice + GridWorks Price Service - that is, a service for providing forecasts for various electricity markets + recUJdyAtLmKAZB4S + recSXyujnroySodqB recXaQaXNNDyxIlT7 2022-10-24T23:07:49Z - reccq15mpDgpXGekn + gnf recA4Y7Iy3elTbyCB recY5s5LoUEwNBowT recAJ6AYNLdBZ7XfK reccfgO8fAUzT3J2W - rect61DlS8mCPHnUL recg3ZHFD17mRWVDL - rec3V5oWa4cyRtWNc recZiKOMXJ8UCneY9 recPRrjd1GyqOVHIZ - recAKcZ5BDHN6JKil rec9HUzZ3tgJOalLk rec1Kr8gSWyIe4lG2 rectUrkJtiUPjNn5q - recsRFfTXSym7gX54 - recxtr4LhX2Ixojmg rec2QIaMX8gSssv7M - recYSfcJBIVxFIWCZ recQItJExa3ZiV3Jh reciUjZq6Ym3P59mT reccEMLYgCyyYLPr2 @@ -21631,22 +24974,19 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recZCRfLe9nDmrRAU recCLW1iXAhVHGoUm recmM5fq13YDWN7oc - recKCYKKIRjtnFzdh recl7u8ZInYMFV7EC recrpoQF951bAlwS5 - gnf - recX5VXrxWR81za5J + recaT1SF8nRebYo7G + recyzaIpCoUsKpVbL + recBZVJVqK4DOb2JX + rec50dqlnp2l3PH7B + rec49oZw87DHVaGGI recr9TyWTi2Ct7iKH - rec8Ahq8RdNkgPzQN - recjOCdfp4V6Ugqfs - rec7riMLKDhllLHJF - recesY3Van2qeFjV0 - reczs2uW5OOP1dIaw - recvmdMYmWLhBwujD recdu3DxzzmNH2eNq 2022-12-23T02:32:53Z + scada recxelQn6OCbkk5A5 recMWNrvkQjOIdOjQ recCuch3XtEssNGuu @@ -21665,35 +25005,23 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recRlWqdLmqPKyUME recfHuF6SpeyhwE56 recstn9IrZMpRLKja - rec9hyu5DGf4HWX7A recg17XBd52YMSt1Q recgeWd2XE4WEhaqC - scada recu25eXE4ralXooT - recfXjHuQMUL0RQ7H - rec1OdnzZiXinfwfj - recWrjAGRucT1hiRq recM4mFl7a9iTxdrm recre1axpcL8VVuaQ 2022-11-08T18:53:05Z - recnBbGAlK4U8sngT - reccuFJPlMliv6yW8 - rec2Gvd8Nt7DvqTpf + gwtime rec1nKwt8hPeDIqrE recOEHxBFFDNPACx1 recVQ3e3vgtZiDbe0 - gwtime - recpKd5HOmAf37QY5 - recZKMmBxWot2RY5F - recaaXWI5JSINnLOx - rec9bDgohSOum1o1F - rec4dIrr33GsfXGEi rect1hCTZjieEGxgr 2022-12-03T16:07:56Z + gridworks rect3RqANsPtjXr8a recc24iKFupSXBEgQ recsqbuLwrgitVmoY @@ -21701,13 +25029,8 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recFnEf8eIe2zVWOY recJbB2aEPqgo0e6D reckr1EbtWVGkY1KM - rec50dqlnp2l3PH7B - rec49oZw87DHVaGGI recJqKGuHpco4ynvW - recaT1SF8nRebYo7G - recyzaIpCoUsKpVbL - recBZVJVqK4DOb2JX - gridworks + reccq15mpDgpXGekn recFcFz3hJ9GJbVDh recIyZCjcgxuH7wbv recdOkYhGUBlj7FBT @@ -21726,214 +25049,178 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recvaW2RuHMh5mwwR 2022-12-31T12:58:01Z + newatn recB57YfEtBGpfH71 recZBrVC3qx5dJ9B0 rec2D8QrI2Tps74Ce recWQ4qoe36jdvDDu recuxGhKEXF5Edw2W - recGk4c4hm4Ng97pB recjg4AvSyxIiItff rece0jNAI2D1qrYj7 recuqYXBpW9rcXrKC rec9jyOwhibLuECVH - rec86XZBf9WnCg5bX - recSENoEtLHiKubGR - newatn rec0BOEFEF3Tvn5vW 2023-02-28T00:40:59Z - recdu3DxzzmNH2eNq - recbMWz8PxqJUI41L scada multipurpose.sensor.component.gt.000 + recdu3DxzzmNH2eNq scada + recbMWz8PxqJUI41L multipurpose.sensor.component.gt.000 Active rec0CVyxlO3cPJGWD 2022-11-29T13:31:33Z - rec2J6tKssVJwVmFd - recNIlQetbTDVNam8 gnr g.nodes.broadcast.000 + rec2J6tKssVJwVmFd gnr + recNIlQetbTDVNam8 g.nodes.broadcast.000 Pending - rec0Uk7vhJUpp68kq - 2022-11-21T14:53:22Z - rec2J6tKssVJwVmFd - reca1A5UXpnpmZdiH - gnr basegnode.other.create.000 - gnr - basegnode.other.create.000 + rec0I8YsmUHlc5F67 + 2023-05-09T12:46:57Z + gwatn tavalidatorcert.algo.create.000 + rec3nJaxOMLIKJoNY + gwatn + reccFZLsGTVhuzGsn + tavalidatorcert.algo.create.000 + Active + + + rec0Uk7vhJUpp68kq + 2022-11-21T14:53:22Z + gnr basegnode.other.create.000 + rec2J6tKssVJwVmFd + gnr + reca1A5UXpnpmZdiH + basegnode.other.create.000 Pending rec0X5JpHPTyqYdrx 2023-02-20T18:57:22Z - rec5aZ8ud9lQDmlBu - recNbXbJE9rcnLXAs gwproto gt.sh.status.110 + rec5aZ8ud9lQDmlBu gwproto + recNbXbJE9rcnLXAs gt.sh.status.110 Active rec0yahRyau7Mzmzk 2022-11-08T04:00:15Z - rec3nJaxOMLIKJoNY - rechXkF4uGNAulje7 gwatn price.quantity.000 + rec3nJaxOMLIKJoNY gwatn + rechXkF4uGNAulje7 price.quantity.000 - Pending + Active rec11OYyEPT4FV8al 2023-04-03T20:40:32Z - rec5aZ8ud9lQDmlBu - recDEr7ob2KLqM4gU gwproto telemetry.reporting.config.000 + rec5aZ8ud9lQDmlBu gwproto + recDEr7ob2KLqM4gU telemetry.reporting.config.000 Active rec1Kr8gSWyIe4lG2 2022-10-31T20:32:30Z - recXaQaXNNDyxIlT7 - recT4SSkJ18pz5YoZ gnf basegnodes.broadcast.000 + recXaQaXNNDyxIlT7 gnf + recT4SSkJ18pz5YoZ basegnodes.broadcast.000 Pending rec1TqtyFK3VxPiEv 2023-04-03T20:40:09Z - rec5aZ8ud9lQDmlBu - recDjO3rdq76LMOoL gwproto resistive.heater.component.gt.000 + rec5aZ8ud9lQDmlBu gwproto + recDjO3rdq76LMOoL resistive.heater.component.gt.000 Active rec1WZNSLK8X3RGoh 2022-12-27T16:09:33Z - recdu3DxzzmNH2eNq - rec3Noy3m1X4Vdly9 scada simple.temp.sensor.cac.gt.000 + recdu3DxzzmNH2eNq scada + rec3Noy3m1X4Vdly9 simple.temp.sensor.cac.gt.000 Active rec1nKwt8hPeDIqrE 2022-11-21T05:22:31Z - recre1axpcL8VVuaQ - recX2g8OLICXZHuHr gwtime resume.time.000 + recre1axpcL8VVuaQ gwtime + recX2g8OLICXZHuHr resume.time.000 Pending - - rec1qAnTlin7a194M - 2022-11-16T19:17:23Z - rec3E1mvlkD3mlc6K - recxNIfCRauFrb57o - gwmm heartbeat.a.100 - gwmm - heartbeat.a.100 - Pending - rec2D8QrI2Tps74Ce 2022-12-27T16:00:31Z - recvaW2RuHMh5mwwR newatn + recvaW2RuHMh5mwwR newatn - - rec2Gvd8Nt7DvqTpf - 2022-11-08T18:54:54Z - recre1axpcL8VVuaQ - recc2Km1jUViJqVeK - gwtime ready.001 - gwtime - ready.001 - Pending - rec2QIaMX8gSssv7M 2022-11-02T12:51:33Z - recXaQaXNNDyxIlT7 - rec8ILTteHhn4MpGd gnf basegnodes.get.000 + recXaQaXNNDyxIlT7 gnf + rec8ILTteHhn4MpGd basegnodes.get.000 Pending rec2Sl2RMNjKXgu98 2023-02-20T19:18:10Z - rec5aZ8ud9lQDmlBu - recdNEAMkZeOLS8Vo gwproto telemetry.snapshot.spaceheat.000 + rec5aZ8ud9lQDmlBu gwproto + recdNEAMkZeOLS8Vo telemetry.snapshot.spaceheat.000 Active rec2ZUAEXRfDLAKh8 2023-01-16T08:04:33Z - rec3nJaxOMLIKJoNY + satn simplesim.driver.data.hpwb.000 + recHY8DLO7gBfWjtC + satn rec9kYNek59Vqps4S - gwatn sim.scada.driver.report.000 - gwatn - sim.scada.driver.report.000 - Pending - - - rec2a1O4X0TlMmhsW - 2022-12-28T13:16:54Z - recrnRklRws6Txbqr - snapshot.spaceheat.000 - snapshot.spaceheat.000 - Active - - - rec3V5oWa4cyRtWNc - 2022-10-31T20:32:12Z - recXaQaXNNDyxIlT7 - reccFZLsGTVhuzGsn - gnf tavalidatorcert.algo.create.000 - gnf - tavalidatorcert.algo.create.000 + simplesim.driver.data.hpwb.000 Active - rec48h8N51cFfC0Y2 - 2023-01-13T19:04:08Z - rec3nJaxOMLIKJoNY - rechKgkXf88R5dkGD - gwatn heartbeat.algo.audit.000 - gwatn - heartbeat.algo.audit.000 - Pending + rec48bCFT2Hu6WLAT + 2023-05-02T17:57:50Z + rec49oZw87DHVaGGI 2023-01-01T01:01:15Z - rect1hCTZjieEGxgr + gnf tavalidatorcert.algo.transfer.000 + recXaQaXNNDyxIlT7 + gnf rec1SFXYQUXElpeJ9 - gridworks tavalidatorcert.algo.transfer.000 - gridworks tavalidatorcert.algo.transfer.000 Active @@ -21945,78 +25232,68 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa rec50dqlnp2l3PH7B 2023-01-01T01:00:40Z - rect1hCTZjieEGxgr + gnf tavalidatorcert.algo.create.000 + recXaQaXNNDyxIlT7 + gnf reccFZLsGTVhuzGsn - gridworks tavalidatorcert.algo.create.000 - gridworks tavalidatorcert.algo.create.000 Active rec5K84S2MN0iMNlE 2022-11-14T15:42:52Z - rec3nJaxOMLIKJoNY - recPPTLAWZu08mD7s gwatn terminalasset.certify.hack.000 - gwatn - terminalasset.certify.hack.000 - Pending - - - rec5LcnUo5uGaILj6 - 2023-01-12T15:40:03Z rec3nJaxOMLIKJoNY - reccFZLsGTVhuzGsn - gwatn tavalidatorcert.algo.create.000 gwatn - tavalidatorcert.algo.create.000 + recPPTLAWZu08mD7s + terminalasset.certify.hack.000 Active rec5dH5f6YcOKD0RU 2022-11-16T19:17:53Z - rec3E1mvlkD3mlc6K - recsHXkpUxoOF9vYp gwmm price.quantity.unitless.000 + rec3E1mvlkD3mlc6K gwmm + recsHXkpUxoOF9vYp price.quantity.unitless.000 - Pending + Active rec5uG0IulOeg3qcr 2022-12-27T19:28:39Z - recm57e2rjMmC2c6n component.attribute.class.gt.000 + recm57e2rjMmC2c6n component.attribute.class.gt.000 Active - rec86XZBf9WnCg5bX - 2022-12-27T16:04:50Z - recvaW2RuHMh5mwwR - recrnRklRws6Txbqr - newatn snapshot.spaceheat.000 - newatn - snapshot.spaceheat.000 + rec8Ix2UVLnq7xycF + 2023-05-09T12:45:46Z + gwatn initial.tadeed.algo.optin.002 + rec3nJaxOMLIKJoNY + gwatn + recAWKkS0hcyws7O6 + initial.tadeed.algo.optin.002 Active rec8cREVO03dOhbWy 2022-11-16T19:17:31Z - rec3E1mvlkD3mlc6K - recd5K0XiAzHsj2Pw gwmm latest.price.000 + rec3E1mvlkD3mlc6K gwmm + recd5K0XiAzHsj2Pw latest.price.000 - Pending + Active rec9HUzZ3tgJOalLk 2022-10-31T20:32:30Z - recXaQaXNNDyxIlT7 - recvWBuo1Ws1SIL4b gnf new.tadeed.algo.optin.000 + recXaQaXNNDyxIlT7 gnf + recvWBuo1Ws1SIL4b new.tadeed.algo.optin.000 Active @@ -22025,166 +25302,116 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa 2022-12-27T16:04:33Z - - rec9hyu5DGf4HWX7A - 2023-03-09T18:47:33Z - recdu3DxzzmNH2eNq - recDq5Oo6baJLVS5s - scada heartbeat.b.001 - scada - heartbeat.b.001 - Active - rec9jyOwhibLuECVH 2022-12-27T15:58:16Z - recvaW2RuHMh5mwwR - recDjO3rdq76LMOoL newatn resistive.heater.component.gt.000 + recvaW2RuHMh5mwwR newatn + recDjO3rdq76LMOoL resistive.heater.component.gt.000 Active rec9wSDE2snnCJmLi 2023-02-20T19:19:50Z - rec5aZ8ud9lQDmlBu - recrnRklRws6Txbqr gwproto snapshot.spaceheat.000 + rec5aZ8ud9lQDmlBu gwproto + recrnRklRws6Txbqr snapshot.spaceheat.000 Active - - rec9y2OWDqjR6vSAp - 2022-12-03T16:06:38Z - recN6489A2iI0CRXz - recV0KuDFayH4qGIl - gworld g.node.instance.gt.000 - gworld - g.node.instance.gt.000 - Pending - recA4Y7Iy3elTbyCB 2022-10-31T20:31:13Z - recXaQaXNNDyxIlT7 - reca1A5UXpnpmZdiH gnf basegnode.other.create.000 + recXaQaXNNDyxIlT7 gnf + reca1A5UXpnpmZdiH basegnode.other.create.000 Pending recAJ6AYNLdBZ7XfK 2022-10-31T20:31:19Z - recXaQaXNNDyxIlT7 - rec5bEVzI1k5qcXYg gnf discoverycert.algo.create.000 - gnf - discoverycert.algo.create.000 - Pending - - - recAKcZ5BDHN6JKil - 2022-10-31T20:32:28Z recXaQaXNNDyxIlT7 - recxNIfCRauFrb57o - gnf heartbeat.a.100 gnf - heartbeat.a.100 - Pending + rec5bEVzI1k5qcXYg + discoverycert.algo.create.000 + Active recAO8C6pnLKe00p1 2022-12-31T23:50:23Z - rec3nJaxOMLIKJoNY - recvWBuo1Ws1SIL4b gwatn new.tadeed.algo.optin.000 + rec3nJaxOMLIKJoNY gwatn + recvWBuo1Ws1SIL4b new.tadeed.algo.optin.000 Active - - recASxd0yY7a1nWR4 - 2022-11-06T20:36:28Z - rec3nJaxOMLIKJoNY - recxNIfCRauFrb57o - gwatn heartbeat.a.100 - gwatn - heartbeat.a.100 - Pending - - - recB2fok3eH3LnZmw - 2022-11-08T03:23:53Z - rec3nJaxOMLIKJoNY - recc2Km1jUViJqVeK - gwatn ready.001 - gwatn - ready.001 - Pending - recB57YfEtBGpfH71 2022-12-27T15:56:38Z - recvaW2RuHMh5mwwR - reca2LF7P05qQmFJW newatn relay.cac.gt.000 + recvaW2RuHMh5mwwR newatn + reca2LF7P05qQmFJW relay.cac.gt.000 Active recBZVJVqK4DOb2JX 2023-01-10T21:24:35Z - rect1hCTZjieEGxgr + gnf initial.tadeed.algo.transfer.000 + recXaQaXNNDyxIlT7 + gnf recPf7eAhpge7kvO7 - gridworks initial.tadeed.algo.transfer.000 - gridworks initial.tadeed.algo.transfer.000 Active recCLW1iXAhVHGoUm 2022-11-23T14:03:08Z - recXaQaXNNDyxIlT7 - recPxYqZlRvCFlD8p gnf sla.enter.000 + recXaQaXNNDyxIlT7 gnf + recPxYqZlRvCFlD8p sla.enter.000 - Pending + Active - recCqC0KKS00693kw - 2022-12-31T23:49:59Z + recCWJPidn8ABRVgU + 2023-05-02T17:58:12Z + gwatn simplesim.driver.data.000 rec3nJaxOMLIKJoNY - recAWKkS0hcyws7O6 - gwatn initial.tadeed.algo.optin.002 gwatn - initial.tadeed.algo.optin.002 + rec8IDXjSvdhHGds4 + simplesim.driver.data.000 Active + + recCgP2Dw5SfDjpp2 + 2023-06-28T14:36:03Z + gwatn atn.outside.temp.regr.coeffs.000 + rec3nJaxOMLIKJoNY + gwatn + recy7fqBm5Cl94dnF + atn.outside.temp.regr.coeffs.000 + Pending + recCuch3XtEssNGuu 2022-12-27T15:58:07Z - recdu3DxzzmNH2eNq - rec2m06PsjtFd0cfu scada resistive.heater.cac.gt.000 + recdu3DxzzmNH2eNq scada + rec2m06PsjtFd0cfu resistive.heater.cac.gt.000 Active - - recD3lLZaCPt9ehVW - 2023-01-12T15:39:41Z - rec3nJaxOMLIKJoNY - recPf7eAhpge7kvO7 - gwatn initial.tadeed.algo.transfer.000 - gwatn - initial.tadeed.algo.transfer.000 - Active - recD3ljiQIeTgIh7G 2022-11-14T23:07:02Z @@ -22193,32 +25420,32 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recD9RSdxZFlCh0nV 2022-11-21T14:53:19Z - rec2J6tKssVJwVmFd - rec70ndc2atifo8Ri gnr basegnode.marketmaker.create.000 + rec2J6tKssVJwVmFd gnr + rec70ndc2atifo8Ri basegnode.marketmaker.create.000 Pending recDIPWhldlUQVNYr 2023-01-23T13:46:41Z - recHY8DLO7gBfWjtC + gwatn dispatch.contract.confirmed.000 + rec3nJaxOMLIKJoNY + gwatn rec3kcgktiHCBYpA4 - satn dispatch.contract.confirmed.heatpumpwithbooststore.000 - satn - dispatch.contract.confirmed.heatpumpwithbooststore.000 - Pending + dispatch.contract.confirmed.000 + Active recDST3lwGBFXqsz1 2022-11-08T04:09:15Z - rec3nJaxOMLIKJoNY - recsHXkpUxoOF9vYp gwatn price.quantity.unitless.000 + rec3nJaxOMLIKJoNY gwatn + recsHXkpUxoOF9vYp price.quantity.unitless.000 - Pending + Active recDTEBFiotrU2qvu @@ -22228,62 +25455,82 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recDbV0swsrf9r4Im 2023-04-06T14:21:30Z - rec5aZ8ud9lQDmlBu - recyETDKMGTbGb0zf gwproto data.channel.000 + rec5aZ8ud9lQDmlBu gwproto + recyETDKMGTbGb0zf data.channel.000 Active - recEPIMe5vF9Dqd9e - 2023-04-03T20:38:02Z - rec5aZ8ud9lQDmlBu - recm57e2rjMmC2c6n + recDqWAGc9wH8TzcX + 2023-05-02T17:57:52Z + gwatn simplesim.driver.report.000 + rec3nJaxOMLIKJoNY + gwatn + reckQg9yTsSw2dxbh + simplesim.driver.report.000 + Active + + + recEPIMe5vF9Dqd9e + 2023-04-03T20:38:02Z gwproto component.attribute.class.gt.000 + rec5aZ8ud9lQDmlBu gwproto + recm57e2rjMmC2c6n component.attribute.class.gt.000 Active + + recF0p8e8Vmazeyd9 + 2023-05-01T21:55:43Z + gwatn simplesim.driver.data.bsh.000 + rec3nJaxOMLIKJoNY + gwatn + recwXD4ryogKVwsnE + simplesim.driver.data.bsh.000 + Active + recFJlNwyiBE5mu93 2023-02-20T18:59:15Z - rec5aZ8ud9lQDmlBu - rec93KBYcwiqJ6OQy gwproto gt.sh.telemetry.from.multipurpose.sensor.100 + rec5aZ8ud9lQDmlBu gwproto + rec93KBYcwiqJ6OQy gt.sh.telemetry.from.multipurpose.sensor.100 Active recFZKk2qxmOmDKdD 2023-04-03T20:39:23Z - rec5aZ8ud9lQDmlBu - recULIwPg69M69185 gwproto multipurpose.sensor.cac.gt.000 + rec5aZ8ud9lQDmlBu gwproto + recULIwPg69M69185 multipurpose.sensor.cac.gt.000 Active recFnEf8eIe2zVWOY 2022-12-03T16:11:40Z - rect1hCTZjieEGxgr - recc2Km1jUViJqVeK gridworks ready.001 + rect1hCTZjieEGxgr gridworks + recc2Km1jUViJqVeK ready.001 - Pending + Active recFreOp8J4dIjXkD 2022-11-12T08:15:45Z - rec3nJaxOMLIKJoNY - recbGrdqqYGiwVYVK gwatn tadeed.specs.hack.000 + rec3nJaxOMLIKJoNY gwatn + recbGrdqqYGiwVYVK tadeed.specs.hack.000 - Pending + Active recFxZw9Lrr4wrO5U @@ -22291,147 +25538,117 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa - recGRKTWPhlGhVZqf - 2022-11-09T23:48:19Z + recGCj1HgHQww3p80 + 2023-05-10T14:46:33Z + gwatn flo.params.report.000 rec3nJaxOMLIKJoNY - recrZz3gmzl97POA1 - gwatn atn.params.heatpumpwithbooststore.000 gwatn - atn.params.heatpumpwithbooststore.000 + recBqSlQdF17CgMPY + flo.params.report.000 Active - recGSPzbsyt0nPa5B - 2022-12-02T17:58:10Z - rec3nJaxOMLIKJoNY - recV0KuDFayH4qGIl - gwatn g.node.instance.gt.000 - gwatn - g.node.instance.gt.000 - Pending - - - recGg8u1kDk0dEwT0 - 2023-01-12T18:24:04Z - rec3nJaxOMLIKJoNY - recDp8U1jLA9zeEx2 - gwatn base.g.node.gt.002 - gwatn - base.g.node.gt.002 - Pending - - - recGk4c4hm4Ng97pB - 2022-12-27T15:43:20Z - recvaW2RuHMh5mwwR - recTZ13dEbwrKazkL - newatn gt.dispatch.boolean.100 - newatn - gt.dispatch.boolean.100 - Deprecated + recH5hDrPlIftrGaC + 2023-02-28T00:38:23Z + - recGpv7lXS5nQj5jR - 2022-11-10T13:22:56Z + recHLWHk24N98yrP7 + 2023-05-09T12:46:59Z + gwatn tavalidatorcert.algo.transfer.000 rec3nJaxOMLIKJoNY - reczzIn3wGYrEKtbr - gwatn flo.params.heatpumpwithbooststore.000 gwatn - flo.params.heatpumpwithbooststore.000 + rec1SFXYQUXElpeJ9 + tavalidatorcert.algo.transfer.000 Active - - recH5hDrPlIftrGaC - 2023-02-28T00:38:23Z - - recHdlXqyTBvi9zRZ 2023-02-28T00:42:53Z - recdu3DxzzmNH2eNq - recEhzcpob8H7VuEF scada spaceheat.node.gt.100 + recdu3DxzzmNH2eNq scada + recEhzcpob8H7VuEF spaceheat.node.gt.100 Active - - recHxMHk1Q13AGxQT - 2022-11-21T14:53:17Z - rec2J6tKssVJwVmFd - recDp8U1jLA9zeEx2 - gnr base.g.node.gt.002 - gnr - base.g.node.gt.002 - Pending - recI3qMEZNOVje6qG 2022-11-30T19:46:25Z - recN6489A2iI0CRXz - rece2rn8uFKupSOZM gworld debug.tc.reinitialize.time.000 + recN6489A2iI0CRXz gworld + rece2rn8uFKupSOZM debug.tc.reinitialize.time.000 Pending recIX7Ev6QVM4jtwT 2023-01-16T17:36:08Z - rec3nJaxOMLIKJoNY - recBEBBA0ctnOYQnC gwatn join.dispatch.contract.000 + rec3nJaxOMLIKJoNY gwatn + recBEBBA0ctnOYQnC join.dispatch.contract.000 Active recJJyBjjBHOe3FnE 2023-04-03T20:38:11Z - rec5aZ8ud9lQDmlBu - recEGOX7VX0bQ3Lvf gwproto egauge.io.000 + rec5aZ8ud9lQDmlBu gwproto + recEGOX7VX0bQ3Lvf egauge.io.000 Active + + recJRYtEf5HsSuZBM + 2023-05-09T12:45:43Z + gwatn initial.tadeed.algo.create.000 + rec3nJaxOMLIKJoNY + gwatn + recO8OdobcISYms0B + initial.tadeed.algo.create.000 + Active + recJWEoBrffJ7gSMB 2023-04-03T20:38:14Z - rec5aZ8ud9lQDmlBu - rec9dL2CYkm5s4OXX gwproto egauge.register.config.000 + rec5aZ8ud9lQDmlBu gwproto + rec9dL2CYkm5s4OXX egauge.register.config.000 Active recJbB2aEPqgo0e6D 2022-12-03T16:11:55Z - rect1hCTZjieEGxgr - reczVqlxJInFWonml gridworks supervisor.container.gt.000 + rect1hCTZjieEGxgr gridworks + reczVqlxJInFWonml supervisor.container.gt.000 - Pending + Active recJnQIpCbM1mDUV6 2023-01-23T13:56:06Z + satn simplesim.snapshot.heatpumpwithbooststore.000 recHY8DLO7gBfWjtC - recbAMyCyUX2bLKfz - satn snapshot.heatpumpwithbooststore.000 satn - snapshot.heatpumpwithbooststore.000 + recbAMyCyUX2bLKfz + simplesim.snapshot.heatpumpwithbooststore.000 Pending recJqKGuHpco4ynvW 2023-01-08T10:25:24Z - rect1hCTZjieEGxgr - rectayh08KEGGGcZc gridworks gw.cert.id.000 + rect1hCTZjieEGxgr gridworks + rectayh08KEGGGcZc gw.cert.id.000 Active @@ -22440,16 +25657,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa 2022-11-10T13:22:55Z - - recKCYKKIRjtnFzdh - 2023-01-08T10:25:40Z - recXaQaXNNDyxIlT7 - rectayh08KEGGGcZc - gnf gw.cert.id.000 - gnf - gw.cert.id.000 - Active - recKI17ljnQcjf4Eg 2023-02-28T00:39:50Z @@ -22463,12 +25670,12 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recKs7BOeqelLodrB 2022-11-21T02:50:13Z - rec3nJaxOMLIKJoNY - recacY2b5R2bByiAQ gwatn accepted.bid.000 + rec3nJaxOMLIKJoNY gwatn + recacY2b5R2bByiAQ accepted.bid.000 - Pending + Active recL9qJowwtPWcf4X @@ -22478,20 +25685,20 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recLBYNcGvIrpb1nX 2022-11-17T16:39:07Z - rec3nJaxOMLIKJoNY - recLufl9jSdsMGsFR gwatn market.slot.000 + rec3nJaxOMLIKJoNY gwatn + recLufl9jSdsMGsFR market.slot.000 - Pending + Active recLbNfmaoYeiI8A9 2023-02-20T19:19:29Z - rec5aZ8ud9lQDmlBu - recDq5Oo6baJLVS5s gwproto heartbeat.b.001 + rec5aZ8ud9lQDmlBu gwproto + recDq5Oo6baJLVS5s heartbeat.b.001 Active @@ -22500,129 +25707,93 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa 2023-02-20T14:31:21Z - - recLjbg3qWweCJCqx - 2023-02-20T18:59:51Z - recrnRklRws6Txbqr - snapshot.spaceheat.000 - snapshot.spaceheat.000 - Active - - - recM6At5qFrk4dsir - 2022-11-07T18:58:07Z - rec3nJaxOMLIKJoNY - recbAMyCyUX2bLKfz - gwatn snapshot.heatpumpwithbooststore.000 - gwatn - snapshot.heatpumpwithbooststore.000 - Pending - recM8DeGDMOPo9ezd 2022-11-21T14:53:25Z - rec2J6tKssVJwVmFd - recazQb2vEXgbroHd gnr basegnode.terminalasset.create.000 + rec2J6tKssVJwVmFd gnr + recazQb2vEXgbroHd basegnode.terminalasset.create.000 Pending recMWNrvkQjOIdOjQ 2022-12-27T15:56:53Z - recdu3DxzzmNH2eNq - reca2LF7P05qQmFJW scada relay.cac.gt.000 + recdu3DxzzmNH2eNq scada + reca2LF7P05qQmFJW relay.cac.gt.000 Active - - recMiJmpBdJWV7BmB - 2022-12-28T13:17:02Z - recdNEAMkZeOLS8Vo - telemetry.snapshot.spaceheat.000 - telemetry.snapshot.spaceheat.000 - Active - recMvuzDPwhs257Bs 2022-11-16T19:17:40Z - rec3E1mvlkD3mlc6K - recDYjXYf8RbWmUFe gwmm market.type.gt.000 + rec3E1mvlkD3mlc6K gwmm + recDYjXYf8RbWmUFe market.type.gt.000 - Pending + Active recOD1KrMbyUpliyI 2023-02-20T18:57:08Z - rec5aZ8ud9lQDmlBu - recQVDSRdSrYEHimS gwproto gt.sh.cli.atn.cmd.110 + rec5aZ8ud9lQDmlBu gwproto + recQVDSRdSrYEHimS gt.sh.cli.atn.cmd.110 Active recOEHxBFFDNPACx1 2022-11-21T05:22:50Z - recre1axpcL8VVuaQ - recf5K0BP9qLabpdS gwtime pause.time.000 + recre1axpcL8VVuaQ gwtime + recf5K0BP9qLabpdS pause.time.000 Pending - - recOVsu1AQ1nyhMTN - 2022-11-16T19:18:24Z - rec3E1mvlkD3mlc6K - rec7peRuDqMNa0vlW - gwmm sim.timestep.000 - gwmm - sim.timestep.000 - Pending - recOoCg1T2rOplTJT 2023-01-23T13:47:04Z - recHY8DLO7gBfWjtC + gwatn atn.params.report.000 + rec3nJaxOMLIKJoNY + gwatn rec3fLb6b0gIeuCTO - satn atn.params.report.heatpumpwithbooststore.000 - satn - atn.params.report.heatpumpwithbooststore.000 - Pending + atn.params.report.000 + Active recOq6H5IW6gkmww6 2022-12-27T16:09:24Z - recdu3DxzzmNH2eNq - recQ1SzB1rQPnbRUR scada gt.sensor.reporting.config.100 + recdu3DxzzmNH2eNq scada + recQ1SzB1rQPnbRUR gt.sensor.reporting.config.100 Active recPRrjd1GyqOVHIZ 2022-10-31T20:32:12Z - recXaQaXNNDyxIlT7 - recMyDdiQjtfTMAP1 gnf old.tadeed.algo.return.000 + recXaQaXNNDyxIlT7 gnf + recMyDdiQjtfTMAP1 old.tadeed.algo.return.000 Active recPkFr8lDBRTXq08 2022-11-17T06:08:11Z - rec3E1mvlkD3mlc6K - rec3H5b04RB2vmYrk gwmm market.price.000 + rec3E1mvlkD3mlc6K gwmm + rec3H5b04RB2vmYrk market.price.000 Pending @@ -22631,24 +25802,26 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa 2023-01-19T20:14:19Z - - recQDvrJAF4lWWp1l - 2022-12-28T11:57:08Z - recxNIfCRauFrb57o - heartbeat.a.100 - heartbeat.a.100 - Pending - recQItJExa3ZiV3Jh 2022-11-04T17:59:59Z - recXaQaXNNDyxIlT7 - recPy6SuizSerb3JG gnf new.tadeed.send.000 + recXaQaXNNDyxIlT7 gnf + recPy6SuizSerb3JG new.tadeed.send.000 Active + + recQZBqdNBFdbHYdk + 2023-04-30T18:10:59Z + gwatn atn.params.000 + rec3nJaxOMLIKJoNY + gwatn + rec4yUxGiLZpqWQqb + atn.params.000 + Active + recR0I6YDYPnvPeTV 2022-12-31T23:50:21Z @@ -22657,14 +25830,13 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recRLpRImAACQhmSj 2022-11-21T14:53:28Z - rec2J6tKssVJwVmFd - recT4SSkJ18pz5YoZ gnr basegnodes.broadcast.000 + rec2J6tKssVJwVmFd gnr + recT4SSkJ18pz5YoZ basegnodes.broadcast.000 Pending - itrlCl3rj8BpTDsN7/recRLpRImAACQhmSj recRONwOhclu8u3Ef 2023-04-03T20:40:05Z @@ -22675,6 +25847,16 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa resistive.heater.cac.gt.000 Active + + recRis6YmxjqUGg0c + 2023-05-10T14:46:43Z + gwatn flo.params.brickstorageheater.000 + rec3nJaxOMLIKJoNY + gwatn + recfDQscmquO0odpo + flo.params.brickstorageheater.000 + Active + recRlWqdLmqPKyUME 2023-02-28T00:40:30Z @@ -22695,16 +25877,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gt.driver.booleanactuator.cmd.100 Active - - recSENoEtLHiKubGR - 2022-12-27T16:04:36Z - newatn telemetry.snapshot.spaceheat.000 - recvaW2RuHMh5mwwR - newatn - recdNEAMkZeOLS8Vo - telemetry.snapshot.spaceheat.000 - Active - recSEzthAkF4L0on3 2022-12-27T15:56:31Z @@ -22718,7 +25890,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gwmm recECSz5o4Z7NFjhG atn.bid.001 - Pending + Active recSNej4i6EwucKbV @@ -22728,17 +25900,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gwatn recECSz5o4Z7NFjhG atn.bid.001 - Pending - - - recSxY4F5Ewetp9tW - 2022-12-04T14:26:46Z - gwatn super.starter.000 - rec3nJaxOMLIKJoNY - gwatn - recwp0F6Gdrg8qLwb - super.starter.000 - Pending + Active recTvm4cpEzdavk6J @@ -22780,6 +25942,11 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa debug.tc.reinitialize.time.000 Pending + + recVWqvgLlixOKWfr + 2023-06-28T14:36:02Z + + recVyJz6EmMdwDjYy 2022-11-21T14:53:12Z @@ -22797,26 +25964,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recvaW2RuHMh5mwwR newatn - - recWaQL9LKI0BTilC - 2023-01-12T15:39:31Z - gwatn initial.tadeed.algo.create.000 - rec3nJaxOMLIKJoNY - gwatn - recO8OdobcISYms0B - initial.tadeed.algo.create.000 - Active - - - recWbhB62TTgTQUtI - 2023-01-08T10:25:05Z - gwatn gw.cert.id.000 - rec3nJaxOMLIKJoNY - gwatn - rectayh08KEGGGcZc - gw.cert.id.000 - Active - + itrhpLtc1ZflgJJpT/recWQ4qoe36jdvDDu recWvvOaaukL2Ufvk 2023-02-20T15:06:08Z @@ -22862,26 +26010,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa pipe.flow.sensor.component.gt.000 Active - - recYSfcJBIVxFIWCZ - 2022-11-03T14:32:25Z - gnf initial.tadeed.algo.optin.002 - recXaQaXNNDyxIlT7 - gnf - recAWKkS0hcyws7O6 - initial.tadeed.algo.optin.002 - Active - - - recYXSUnBW9DHXJWw - 2023-01-13T21:19:41Z - gwatn gt.dispatch.boolean.110 - rec3nJaxOMLIKJoNY - gwatn - reckTci9LVdsEt2WQ - gt.dispatch.boolean.110 - Active - recYbrmOJrNmUO4pd 2022-12-27T15:56:34Z @@ -22925,7 +26053,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gwatn recPxYqZlRvCFlD8p sla.enter.000 - Pending + Active recZiKOMXJ8UCneY9 @@ -22937,6 +26065,16 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa basegnode.terminalasset.create.000 Pending + + recZsOKTlEbZPh3rD + 2023-06-25T20:46:39Z + gwatn atn.params.simpleresistivehydronic.000 + rec3nJaxOMLIKJoNY + gwatn + rechp89wabr5kkqti + atn.params.simpleresistivehydronic.000 + Pending + recaBlt54tM7DPjwR 2023-01-19T20:14:06Z @@ -22945,14 +26083,14 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gwatn recF9KonH58AltK0K basegnode.scada.create.000 - Pending + Active recaT1SF8nRebYo7G 2023-01-10T21:22:48Z - gridworks initial.tadeed.algo.create.000 - rect1hCTZjieEGxgr - gridworks + gnf initial.tadeed.algo.create.000 + recXaQaXNNDyxIlT7 + gnf recO8OdobcISYms0B initial.tadeed.algo.create.000 Active @@ -22965,7 +26103,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gwatn recd5K0XiAzHsj2Pw latest.price.000 - Pending + Active recbN7L6MH925xDby @@ -22985,17 +26123,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gwmm recacY2b5R2bByiAQ accepted.bid.000 - Pending - - - recbuSNZg3DwAGxys - 2022-11-29T14:04:36Z - gworld supervisor.container.gt.000 - recN6489A2iI0CRXz - gworld - reczVqlxJInFWonml - supervisor.container.gt.000 - Pending + Active recc24iKFupSXBEgQ @@ -23005,7 +26133,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gridworks recV0KuDFayH4qGIl g.node.instance.gt.000 - Pending + Active reccBR6cClLjH0r2X @@ -23025,7 +26153,17 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gnf recPPTLAWZu08mD7s terminalasset.certify.hack.000 - Pending + Active + + + reccIKvkAunTQR3uO + 2023-05-01T17:55:22Z + gwatn flo.params.000 + rec3nJaxOMLIKJoNY + gwatn + recvJ9OVpqVVP895H + flo.params.000 + Active reccfgO8fAUzT3J2W @@ -23040,22 +26178,22 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa reccq15mpDgpXGekn 2022-10-31T20:31:08Z - gnf base.g.node.gt.002 - recXaQaXNNDyxIlT7 - gnf + gridworks base.g.node.gt.002 + rect1hCTZjieEGxgr + gridworks recDp8U1jLA9zeEx2 base.g.node.gt.002 - Pending + Active - reccuFJPlMliv6yW8 - 2022-11-08T18:54:46Z - gwtime sim.timestep.000 - recre1axpcL8VVuaQ - gwtime - rec7peRuDqMNa0vlW - sim.timestep.000 - Pending + recdAy68epnKcXjLL + 2023-05-09T12:45:47Z + gwatn initial.tadeed.algo.transfer.000 + rec3nJaxOMLIKJoNY + gwatn + recPf7eAhpge7kvO7 + initial.tadeed.algo.transfer.000 + Active recdd2Y2jRIeGsjh1 @@ -23087,36 +26225,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa egauge.io.000 Active - - recfLzamGrtSF52cT - 2022-11-29T14:04:44Z - gwatn supervisor.container.gt.000 - rec3nJaxOMLIKJoNY - gwatn - reczVqlxJInFWonml - supervisor.container.gt.000 - Pending - - - recfdC5aUpHXgXtON - 2022-11-29T13:23:38Z - gnr g.node.gt.002 - rec2J6tKssVJwVmFd - gnr - rec8uTC7GK5qgXzg9 - g.node.gt.002 - Pending - - - recfsDYNRW0af16Ol - 2022-11-11T00:45:59Z - gwatn atn.params.report.heatpumpwithbooststore.000 - rec3nJaxOMLIKJoNY - gwatn - rec3fLb6b0gIeuCTO - atn.params.report.heatpumpwithbooststore.000 - Pending - recg17XBd52YMSt1Q 2023-03-09T18:52:48Z @@ -23137,16 +26245,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa tatradingrights.algo.create.000 Active - - recg5ScMmCJuinnKL - 2023-01-23T13:46:31Z - satn join.dispatch.contract.000 - recHY8DLO7gBfWjtC - satn - recBEBBA0ctnOYQnC - join.dispatch.contract.000 - Active - recgeWd2XE4WEhaqC 2023-03-09T19:00:36Z @@ -23162,16 +26260,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa 2023-03-09T19:00:35Z - - recgroRYrhO8lRT9B - 2023-01-13T19:03:54Z - gwatn heartbeat.b.001 - rec3nJaxOMLIKJoNY - gwatn - recDq5Oo6baJLVS5s - heartbeat.b.001 - Active - rechF5mJ2nH8ZB9Vn 2022-12-27T16:00:48Z @@ -23220,27 +26308,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gnf recbGrdqqYGiwVYVK tadeed.specs.hack.000 - Pending - - - reciXeCa9g1WrIc02 - 2022-12-03T16:41:56Z - gworld sim.timestep.000 - recN6489A2iI0CRXz - gworld - rec7peRuDqMNa0vlW - sim.timestep.000 - Pending - - - recianedmKDqWVh0O - 2022-11-21T05:23:50Z - gworld heartbeat.a.100 - recN6489A2iI0CRXz - gworld - recxNIfCRauFrb57o - heartbeat.a.100 - Pending + Active recjg4AvSyxIiItff @@ -23252,6 +26320,16 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa pipe.flow.sensor.cac.gt.000 Active + + recjmLBzSO8k29I9e + 2023-06-25T20:47:07Z + gwatn flo.params.simpleresistivehydronic.000 + rec3nJaxOMLIKJoNY + gwatn + rec2EA0TG0Xexi6wg + flo.params.simpleresistivehydronic.000 + Pending + recjvYtEfvMLsZJtV 2023-01-20T00:21:28Z @@ -23260,7 +26338,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gwatn recbrp6V9qD6J1NHb scada.cert.transfer.000 - Pending + Active reckTKf3fzOuHTt7p @@ -23280,7 +26358,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gridworks recwp0F6Gdrg8qLwb super.starter.000 - Pending + Active recktn7mVOjp0WCql @@ -23305,12 +26383,12 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recl5OGEwbCR9w3O7 2023-01-23T13:46:50Z - satn atn.params.heatpumpwithbooststore.000 + satn atn.params.heatpumpwithbooststore.001 recHY8DLO7gBfWjtC satn recrZz3gmzl97POA1 - atn.params.heatpumpwithbooststore.000 - Active + atn.params.heatpumpwithbooststore.001 + Pending recl5eLv36HJnILWJ @@ -23330,7 +26408,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gnf recF9KonH58AltK0K basegnode.scada.create.000 - Pending + Active recleupDcbcVTVRQ9 @@ -23340,7 +26418,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gwmm recLufl9jSdsMGsFR market.slot.000 - Pending + Active recly1p2PV8V88LXc @@ -23352,6 +26430,11 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa multipurpose.sensor.component.gt.000 Active + + recm7gEfKk0Irv8M0 + 2023-05-10T14:46:31Z + + recmM5fq13YDWN7oc 2022-11-30T19:48:30Z @@ -23362,26 +26445,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa debug.tc.reinitialize.time.000 Pending - - recmXImdzdJvIhwRj - 2022-11-06T19:58:32Z - gwatn g.node.gt.002 - rec3nJaxOMLIKJoNY - gwatn - rec8uTC7GK5qgXzg9 - g.node.gt.002 - Pending - - - recnBbGAlK4U8sngT - 2022-11-08T18:54:37Z - gwtime heartbeat.a.100 - recre1axpcL8VVuaQ - gwtime - recxNIfCRauFrb57o - heartbeat.a.100 - Pending - recnQKx1KrJs2FsGa 2023-04-03T20:38:07Z @@ -23411,25 +26474,15 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa Active - recnvClBEU4WU5lOe - 2023-01-12T15:40:11Z - gwatn tavalidatorcert.algo.transfer.000 + recntdJAXDry45FT5 + 2023-05-01T17:55:31Z + gwatn simplesim.snapshot.brickstorageheater.000 rec3nJaxOMLIKJoNY gwatn - rec1SFXYQUXElpeJ9 - tavalidatorcert.algo.transfer.000 + recm5UcVaAPAtrrFS + simplesim.snapshot.brickstorageheater.000 Active - - recnwesXAnDk54IJt - 2022-12-03T16:07:00Z - gworld g.node.gt.002 - recN6489A2iI0CRXz - gworld - rec8uTC7GK5qgXzg9 - g.node.gt.002 - Pending - reco01YhMk6anEqXo 2023-04-03T20:38:24Z @@ -23503,17 +26556,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gridworks rec7peRuDqMNa0vlW sim.timestep.000 - Pending - - - recrWS8cReivzRx92 - 2022-11-16T19:17:13Z - gwmm g.node.gt.002 - rec3E1mvlkD3mlc6K - gwmm - rec8uTC7GK5qgXzg9 - g.node.gt.002 - Pending + Active recrpoQF951bAlwS5 @@ -23523,7 +26566,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gnf recbrp6V9qD6J1NHb scada.cert.transfer.000 - Pending + Active recs6Jf8auLqC5z1T @@ -23533,7 +26576,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gwatn rec5bEVzI1k5qcXYg discoverycert.algo.create.000 - Pending + Active recs8N9wVyonAKE8y @@ -23545,16 +26588,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa basegnodes.get.000 Pending - - recsRFfTXSym7gX54 - 2022-10-31T20:32:30Z - gnf initial.tadeed.algo.transfer.000 - recXaQaXNNDyxIlT7 - gnf - recPf7eAhpge7kvO7 - initial.tadeed.algo.transfer.000 - Active - recsqbuLwrgitVmoY 2022-12-03T16:10:42Z @@ -23563,7 +26596,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gridworks recxNIfCRauFrb57o heartbeat.a.100 - Pending + Active recstn9IrZMpRLKja @@ -23593,16 +26626,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gridworks rec8uTC7GK5qgXzg9 g.node.gt.002 - Pending - - - rect61DlS8mCPHnUL - 2022-10-31T20:32:12Z - gnf initial.tadeed.algo.create.000 - recXaQaXNNDyxIlT7 - gnf - recO8OdobcISYms0B - initial.tadeed.algo.create.000 Active @@ -23613,9 +26636,8 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gwatn recDYjXYf8RbWmUFe market.type.gt.000 - Pending + Active - itrlCl3rj8BpTDsN7/rectD1KxAzqJILPfu rectQ3NbkFd9nWXGO 2023-02-20T19:19:42Z @@ -23651,16 +26673,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa pipe.flow.sensor.component.gt.000 Active - - recuetPMCxsDyU0R4 - 2022-11-07T20:23:32Z - gwatn sim.timestep.000 - rec3nJaxOMLIKJoNY - gwatn - rec7peRuDqMNa0vlW - sim.timestep.000 - Pending - recuqYXBpW9rcXrKC 2022-12-27T15:57:28Z @@ -23671,16 +26683,6 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa resistive.heater.cac.gt.000 Active - - recurndoUQt30tVFv - 2023-01-16T17:35:57Z - gwatn dispatch.contract.confirmed.heatpumpwithbooststore.000 - rec3nJaxOMLIKJoNY - gwatn - rec3kcgktiHCBYpA4 - dispatch.contract.confirmed.heatpumpwithbooststore.000 - Pending - recuxGhKEXF5Edw2W 2022-12-27T16:03:06Z @@ -23694,18 +26696,28 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recvFLJdLpTh7dGh1 2023-01-23T13:58:03Z - satn flo.params.heatpumpwithbooststore.000 + satn flo.params.heatpumpwithbooststore.001 recHY8DLO7gBfWjtC satn reczzIn3wGYrEKtbr - flo.params.heatpumpwithbooststore.000 - Active + flo.params.heatpumpwithbooststore.001 + Pending recvNxIPhHtDgsYvO 2023-04-03T20:37:43Z + + recvUI21ZPLimt9Tt + 2023-05-01T17:58:39Z + gwatn atn.params.brickstorageheater.000 + rec3nJaxOMLIKJoNY + gwatn + recw5evm1WetKAzZG + atn.params.brickstorageheater.000 + Active + recvpIR8rXsHiuLTP 2022-11-17T06:20:58Z @@ -23734,27 +26746,7 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa gwmm rechXkF4uGNAulje7 price.quantity.000 - Pending - - - recx1ZcM9hO3GKRkp - 2022-12-04T14:26:21Z - gworld super.starter.000 - recN6489A2iI0CRXz - gworld - recwp0F6Gdrg8qLwb - super.starter.000 - Pending - - - recx5JlRHk2l9zzQK - 2022-11-16T19:18:06Z - gwmm ready.001 - rec3E1mvlkD3mlc6K - gwmm - recc2Km1jUViJqVeK - ready.001 - Pending + Active recx6S4XffM5RzxKe @@ -23786,40 +26778,12 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa relay.component.gt.000 Active - - recxtr4LhX2Ixojmg - 2022-10-31T20:34:49Z - gnf tavalidatorcert.algo.transfer.000 - recXaQaXNNDyxIlT7 - gnf - rec1SFXYQUXElpeJ9 - tavalidatorcert.algo.transfer.000 - Active - - - recyENjaG4Mi1n27B - 2022-11-21T15:21:50Z - gnr heartbeat.a.100 - rec2J6tKssVJwVmFd - gnr - recxNIfCRauFrb57o - heartbeat.a.100 - Pending - - - recytzNgmiqkWb2di - 2023-02-20T19:00:00Z - telemetry.snapshot.spaceheat.000 - recdNEAMkZeOLS8Vo - telemetry.snapshot.spaceheat.000 - Active - recyzaIpCoUsKpVbL 2023-01-10T21:23:01Z - gridworks initial.tadeed.algo.optin.002 - rect1hCTZjieEGxgr - gridworks + gnf initial.tadeed.algo.optin.002 + recXaQaXNNDyxIlT7 + gnf recAWKkS0hcyws7O6 initial.tadeed.algo.optin.002 Active @@ -23844,65 +26808,66 @@ AtomicMeteringNode can turn into AtomicTNode and vice versa recGccwcLXmR4m4iY 2022-11-08T15:42:51Z - supervisor Supervisor 9 + supervisor recJ1rzF1GylIXAko 2022-08-12T12:35:19Z - ctn ConductorTopologyNode 5 + ctn recPUNulj7eEdYA8s 2022-08-12T13:14:01Z - ws WeatherService 12 + ws recPnosdjBpyg5lVp 2022-11-08T15:43:03Z - recLAk1m0A1lP1qbp - unknown Unknown 0 + unknown + recLAk1m0A1lP1qbp recVQaDHYNET3Oim3 2022-08-12T13:22:52Z Scada - 10 recWWAN9rudjlUYst rec0DJdNtBZJr6pOK reckop7rgbzAi5Iqq + 10 recZEJx3FufFt3Q1I 2022-08-12T13:14:27Z - world World 7 + world recbVscuuzdxIlA0B 2022-08-12T13:13:55Z - ps PriceService 11 + ps recdOYiffWcSZEwPY 2022-11-08T15:42:09Z - amn AtomicMeteringNode 2 + amn recdR35p57kOOjduw 2022-08-12T13:14:17Z + TerminalAsset A Terminal Asset is a code object with 3 primary attributes: - a characterization of an electrical device connected to the electric grid with known electrical characteristics - a pointer to a power and electricity meter that meters all the electrical use of that device and nothing more, which is @@ -23913,49 +26878,48 @@ It is also a terminal node in the spanning tree graph of the copper tree encoded The point of a Terminal Asset is to act as a trusted digital representation of a Transactive Energy Resource which in fact is the characterized electrical device, using the meter described, at the location described. - ta - TerminalAsset 1 + ta recmGbxh6muY317U5 2022-08-12T12:35:19Z - cable InterconnectionComponent 6 + cable recrICKb8tuEXHz73 2022-08-12T12:35:19Z - recVOa2DYOtTyarDA - rec8jEHDtqmce7jqG - recXoGg7l3r7ZG6Em - atomictnode AtomicTNode - 3 recmwngNXL4YDMudy recHA9kJVs2sT0Fkx + 3 + atomictnode + rec8jEHDtqmce7jqG + recXoGg7l3r7ZG6Em + recVOa2DYOtTyarDA rectxhMaA0VNuhHQ2 2022-08-12T13:14:07Z - rec5d0mwIHTTqYjC8 - recLAk1m0A1lP1qbp - recXoGg7l3r7ZG6Em - timecoordinator TimeCoordinator 8 + timecoordinator + recLAk1m0A1lP1qbp + recXoGg7l3r7ZG6Em + rec5d0mwIHTTqYjC8 reczel9oTcNrweZ1X 2022-08-12T12:42:31Z - recg6kZdbgxDUXAAh - recU3mtc9M0U3uM3q - recnCUFtuRaM9imRG - rec8jEHDtqmce7jqG - marketmaker MarketMaker 4 + marketmaker + rec8jEHDtqmce7jqG + recnCUFtuRaM9imRG + recU3mtc9M0U3uM3q + recg6kZdbgxDUXAAh @@ -23964,44 +26928,44 @@ characterized electrical device, using the meter described, at the location desc 2022-11-08T16:21:31Z rectxhMaA0VNuhHQ2 rec7peRuDqMNa0vlW - timecoordinator broadcasts sim.timestep v000 - TimeCoordinator timecoordinator sim.timestep 000 + timecoordinator broadcasts sim.timestep v000 + TimeCoordinator recVOa2DYOtTyarDA 2022-11-08T16:21:31Z recrICKb8tuEXHz73 recbAMyCyUX2bLKfz - atomictnode broadcasts snapshot.heatpumpwithbooststore v000 - AtomicTNode atomictnode - snapshot.heatpumpwithbooststore + simplesim.snapshot.heatpumpwithbooststore 000 + atomictnode broadcasts simplesim.snapshot.heatpumpwithbooststore v000 + AtomicTNode recnCUFtuRaM9imRG 2022-11-08T16:21:31Z reczel9oTcNrweZ1X recd5K0XiAzHsj2Pw - marketmaker broadcasts latest.price v000 - MarketMaker marketmaker latest.price 000 + marketmaker broadcasts latest.price v000 + MarketMaker rec0DJdNtBZJr6pOK 2022-08-12T13:24:55Z - recc5qGcZNQPmktbe recVQaDHYNET3Oim3 - Scada/gs.pwr + recc5qGcZNQPmktbe Scada gs.pwr + Scada/gs.pwr Active 100 gs.pwr.100 @@ -24009,11 +26973,11 @@ characterized electrical device, using the meter described, at the location desc recHA9kJVs2sT0Fkx 2022-08-12T13:20:47Z - receVdNEfIE1HLnwN recrICKb8tuEXHz73 - AtomicTNode/gt.sh.cli.atn.cmd + receVdNEfIE1HLnwN AtomicTNode gt.sh.cli.atn.cmd + AtomicTNode/gt.sh.cli.atn.cmd Active 110 gt.sh.cli.atn.cmd.110 @@ -24021,11 +26985,11 @@ characterized electrical device, using the meter described, at the location desc recWWAN9rudjlUYst 2022-08-12T13:20:47Z - recPnrf8TmF9WBgAm recVQaDHYNET3Oim3 - Scada/snapshot.spaceheat + recPnrf8TmF9WBgAm Scada snapshot.spaceheat + Scada/snapshot.spaceheat Active 000 snapshot.spaceheat.000 @@ -24033,11 +26997,11 @@ characterized electrical device, using the meter described, at the location desc reckop7rgbzAi5Iqq 2022-08-12T13:25:08Z - recbbx6wGZEfqP2Kn recVQaDHYNET3Oim3 - Scada/gt.sh.status + recbbx6wGZEfqP2Kn Scada gt.sh.status + Scada/gt.sh.status Active 110 gt.sh.status.110 @@ -24045,11 +27009,11 @@ characterized electrical device, using the meter described, at the location desc recmwngNXL4YDMudy 2022-08-12T13:20:47Z - rechZBY0G1JuNeEuG recrICKb8tuEXHz73 - AtomicTNode/gt.dispatch.boolean + rechZBY0G1JuNeEuG AtomicTNode gt.dispatch.boolean + AtomicTNode/gt.dispatch.boolean Active 110 gt.dispatch.boolean.110 @@ -24076,416 +27040,176 @@ characterized electrical device, using the meter described, at the location desc rec8jEHDtqmce7jqG 2022-11-08T15:59:25Z - reczel9oTcNrweZ1X recrICKb8tuEXHz73 + reczel9oTcNrweZ1X + atomictnode + marketmaker atomictnode says to marketmaker AtomicTNode - atomictnode MarketMaker - marketmaker recLAk1m0A1lP1qbp 2022-11-08T15:59:25Z - recPnosdjBpyg5lVp rectxhMaA0VNuhHQ2 + recPnosdjBpyg5lVp + timecoordinator + unknown timecoordinator says to unknown TimeCoordinator - timecoordinator Unknown - unknown recXoGg7l3r7ZG6Em 2022-11-08T16:32:47Z - rectxhMaA0VNuhHQ2 recrICKb8tuEXHz73 + rectxhMaA0VNuhHQ2 recXGRmBBB6Pch163 + atomictnode + timecoordinator atomictnode says to timecoordinator AtomicTNode - atomictnode TimeCoordinator - timecoordinator rec1AjUKBV2cKU0zq 2022-11-08T00:19:36Z - rec4S3L3NZiPihbLi - rec3nJaxOMLIKJoNY gwatn distribution.tariff.000 + rec3nJaxOMLIKJoNY gwatn + rec4S3L3NZiPihbLi distribution.tariff.000 distribution.tariff - - rec1OdnzZiXinfwfj - 2022-12-27T15:34:34Z - recomGYBJ9ldSsiNU - recdu3DxzzmNH2eNq - scada sh.node.role.000 - scada - sh.node.role.000 - role - rec3OJ7Qnn65b8uug 2023-01-18T21:33:12Z - rec75xMuw0SMkzjVc - rect1hCTZjieEGxgr gridworks market.price.unit.000 + rect1hCTZjieEGxgr gridworks + rec75xMuw0SMkzjVc market.price.unit.000 market.price.unit - - rec3aEohPrsl8Z6M3 - 2022-11-29T13:53:22Z - recdH9n0oS3nRRWON - recN6489A2iI0CRXz - gworld supervisor.container.status.000 - gworld - supervisor.container.status.000 - supervisor.container.status - rec3kWy6dOMnMqXs8 2022-11-08T04:24:19Z - - rec3lKyK0qukOmAfT - 2022-11-29T13:48:40Z - recWX07Mlzf8djb6q - recN6489A2iI0CRXz - gworld gni.status.000 - gworld - gni.status.000 - gni.status - - - rec3tGkwCYPLdVaio - 2022-11-29T13:53:33Z - recdH9n0oS3nRRWON - rec3nJaxOMLIKJoNY - gwatn supervisor.container.status.000 - gwatn - supervisor.container.status.000 - supervisor.container.status - rec4ZV16eScgcdZAE 2023-04-03T23:40:37Z - recLQWqTvGwSz2GcN + gwproto spaceheat.make.model.001 rec5aZ8ud9lQDmlBu - gwproto spaceheat.make.model.000 gwproto - spaceheat.make.model.000 + recLQWqTvGwSz2GcN + spaceheat.make.model.001 make.model - - rec4dIrr33GsfXGEi - 2022-11-09T19:39:58Z - recPvHsXzCenxLa7v - recre1axpcL8VVuaQ - gwtime universe.type.000 - gwtime - universe.type.000 - universe.type - rec51fsTRCxOb3OK1 2023-01-24T18:00:07Z - - rec6kz3pyxVALoFsu - 2022-12-02T17:47:25Z - recgq98LIAwVwgALk - rec3nJaxOMLIKJoNY - gwatn atn.spaceheat.strategy.name.000 - gwatn - atn.spaceheat.strategy.name.000 - atn.spaceheat.strategy.name - - - rec6qUrXNHuchMTRb - 2023-01-12T15:35:47Z - rec5HXPeyp3jic6FV - rec3nJaxOMLIKJoNY - gwatn core.g.node.role.000 - gwatn - core.g.node.role.000 - core.g.node.role - - - rec7riMLKDhllLHJF - 2022-11-21T07:38:28Z - recPvHsXzCenxLa7v - recXaQaXNNDyxIlT7 - gnf universe.type.000 - gnf - universe.type.000 - universe.type - rec7umpHOe1zBQgmH 2022-12-03T16:09:29Z - reclaO4DqpDmwPOIC - rect1hCTZjieEGxgr gridworks message.category.symbol.000 + rect1hCTZjieEGxgr gridworks + reclaO4DqpDmwPOIC message.category.symbol.000 message.category.symbol - - rec8Ahq8RdNkgPzQN - 2022-10-31T18:31:02Z - recqx4EqT3OFtnxTG - recXaQaXNNDyxIlT7 - gnf g.node.status.100 - gnf - g.node.status.100 - g.node.status - - - rec8B7NqLQHwAZjcw - 2022-11-08T04:01:06Z - rec75xMuw0SMkzjVc - rec3nJaxOMLIKJoNY - gwatn market.price.unit.000 - gwatn - market.price.unit.000 - market.price.unit - rec8OQN6hn0y5lwSm 2022-12-27T18:26:22Z - - rec8YFBXCvMbO7Fnc - 2022-11-16T19:40:48Z - recZmZP13YV9Rmbnw - rec3E1mvlkD3mlc6K - gwmm market.type.name.000 - gwmm - market.type.name.000 - market.type.name - - - rec9HtmIiTasYUNy0 - 2022-11-16T19:20:54Z - rec7pzii3dy9m3jCe - rec3E1mvlkD3mlc6K - gwmm message.category.000 - gwmm - message.category.000 - message.category - - - rec9bDgohSOum1o1F - 2022-11-08T22:25:05Z - reclaO4DqpDmwPOIC - recre1axpcL8VVuaQ - gwtime message.category.symbol.000 - gwtime - message.category.symbol.000 - message.category.symbol - rec9izwc0IQmbp6gf 2022-11-08T00:19:32Z - recEyU9EKDtM3bD18 - rec3nJaxOMLIKJoNY gwatn recognized.temperature.unit.000 + rec3nJaxOMLIKJoNY gwatn + recEyU9EKDtM3bD18 recognized.temperature.unit.000 recognized.temperature.unit - - recA0Q62wqmXkzSse - 2022-11-21T15:04:10Z - recZB6uJDEaCzvTZX - rec2J6tKssVJwVmFd - gnr g.node.role.000 - gnr - g.node.role.000 - g.node.role - - - recCEQgAR8tPu4mgu - 2022-11-21T14:51:31Z - rec5HXPeyp3jic6FV - rec2J6tKssVJwVmFd - gnr core.g.node.role.000 - gnr - core.g.node.role.000 - core.g.node.role - - - recDa8t2QVwfTLzpo - 2022-11-06T16:52:31Z - recLQWqTvGwSz2GcN - rec3nJaxOMLIKJoNY - gwatn spaceheat.make.model.000 - gwatn - spaceheat.make.model.000 - make.model - recE24bIOzJ4vCtXl 2023-04-03T23:40:29Z - rec7Ck8y72m0NytYa - rec5aZ8ud9lQDmlBu gwproto local.comm.interface.000 + rec5aZ8ud9lQDmlBu gwproto + rec7Ck8y72m0NytYa local.comm.interface.000 local.comm.interface recEAaklKzWgLdKio 2023-01-18T21:33:35Z - recA15Ak50x6bNMx1 - rect1hCTZjieEGxgr gridworks recognized.currency.unit.000 + rect1hCTZjieEGxgr gridworks + recA15Ak50x6bNMx1 recognized.currency.unit.000 recognized.currency.unit - - recEIu8DZMwf0J7za - 2023-01-23T13:49:46Z - recomGYBJ9ldSsiNU - recHY8DLO7gBfWjtC - satn sh.node.role.000 - satn - sh.node.role.000 - role - recFcFz3hJ9GJbVDh 2022-12-03T16:08:24Z - recZB6uJDEaCzvTZX - rect1hCTZjieEGxgr gridworks g.node.role.000 + rect1hCTZjieEGxgr gridworks + recZB6uJDEaCzvTZX g.node.role.000 g.node.role - recGcb0eH9z0Np8jd - 2022-11-09T19:40:05Z - recPvHsXzCenxLa7v - rec3nJaxOMLIKJoNY - gwatn universe.type.000 - gwatn - universe.type.000 - universe.type - - - recGhJkY0Egp6jCRt - 2022-11-16T19:20:29Z - recounhEj97w5SfDm - rec3E1mvlkD3mlc6K - gwmm market.quantity.unit.000 - gwmm - market.quantity.unit.000 - market.quantity.unit - - - recISSyBDybwCsc9S - 2022-11-16T19:21:02Z - reclaO4DqpDmwPOIC - rec3E1mvlkD3mlc6K - gwmm message.category.symbol.000 - gwmm - message.category.symbol.000 - message.category.symbol - - - recIqNIyjBeIu6oTe - 2022-11-21T06:33:01Z - + recIqNIyjBeIu6oTe + 2022-11-21T06:33:01Z + recIyZCjcgxuH7wbv 2022-12-03T16:08:42Z - recqx4EqT3OFtnxTG - rect1hCTZjieEGxgr gridworks g.node.status.100 + rect1hCTZjieEGxgr gridworks + recqx4EqT3OFtnxTG g.node.status.100 g.node.status - - recJX40Wt0rcWDFET - 2022-11-08T04:24:21Z - recZmZP13YV9Rmbnw - rec3nJaxOMLIKJoNY - gwatn market.type.name.000 - gwatn - market.type.name.000 - market.type.name - - - recKJi6uA9s9Sp8XM - 2023-01-23T13:49:09Z - recgq98LIAwVwgALk - recHY8DLO7gBfWjtC - satn atn.spaceheat.strategy.name.000 - satn - atn.spaceheat.strategy.name.000 - atn.spaceheat.strategy.name - recLRAc86dtBYsogW 2023-01-12T15:35:30Z - rec5HXPeyp3jic6FV - rect1hCTZjieEGxgr gridworks core.g.node.role.000 + rect1hCTZjieEGxgr gridworks + rec5HXPeyp3jic6FV core.g.node.role.000 core.g.node.role - - recLgjTEHK9NGb3nq - 2022-11-21T06:33:17Z - reclaO4DqpDmwPOIC - recN6489A2iI0CRXz - gworld message.category.symbol.000 - gworld - message.category.symbol.000 - message.category.symbol - - - recLjDrJSnNnwWD54 - 2022-11-06T16:51:39Z - recc1W1unmzowrKX9 - rec3nJaxOMLIKJoNY - gwatn spaceheat.unit.000 - gwatn - spaceheat.unit.000 - unit - recLromkpguogn9x9 2022-11-08T00:19:17Z + satn sh.dist.pump.feedback.model.000 + recHY8DLO7gBfWjtC + satn rec57bh9xoIxLUHjY - rec3nJaxOMLIKJoNY - gwatn emitter.pump.feedback.model.000 - gwatn - emitter.pump.feedback.model.000 - emitter.pump.feedback.model + sh.dist.pump.feedback.model.000 + sh.dist.pump.feedback.model recM4mFl7a9iTxdrm 2022-12-27T18:07:03Z - rec7Ck8y72m0NytYa - recdu3DxzzmNH2eNq scada local.comm.interface.000 + recdu3DxzzmNH2eNq scada + rec7Ck8y72m0NytYa local.comm.interface.000 local.comm.interface @@ -24497,590 +27221,202 @@ characterized electrical device, using the meter described, at the location desc recNZQe0b4tOcjM0W 2022-12-03T16:09:53Z - recPvHsXzCenxLa7v - rect1hCTZjieEGxgr gridworks universe.type.000 + rect1hCTZjieEGxgr gridworks + recPvHsXzCenxLa7v universe.type.000 universe.type recNmqSEf7jl4AsqG 2022-12-03T16:09:20Z - rec7pzii3dy9m3jCe - rect1hCTZjieEGxgr gridworks message.category.000 + rect1hCTZjieEGxgr gridworks + rec7pzii3dy9m3jCe message.category.000 message.category - recOCu54C8gBud4Rp - 2022-11-06T23:56:53Z - recqx4EqT3OFtnxTG - rec3nJaxOMLIKJoNY - gwatn g.node.status.100 - gwatn - g.node.status.100 - g.node.status - - - recRncRvdA6tysnAt - 2022-11-06T16:52:21Z - rec2HyLffy6QK9QId - rec3nJaxOMLIKJoNY - gwatn spaceheat.telemetry.name.000 - gwatn - spaceheat.telemetry.name.000 - telemetry.name - - - recT6IKeUqmmI7L84 - 2022-11-21T14:52:17Z - rec7pzii3dy9m3jCe - rec2J6tKssVJwVmFd - gnr message.category.000 - gnr - message.category.000 - message.category + recSXyujnroySodqB + 2023-06-27T15:22:46Z + gwprice energy.supply.type.000 + recVsPBZNyq2U6Fmz + gwprice + recf9ZTshqRu81HZo + energy.supply.type.000 + energy.supply.type recTsc0Fiab7VGVWX 2023-04-03T23:40:21Z - recQeMNisJZjsYXTl + gwproto sh.actor.class.000 rec5aZ8ud9lQDmlBu - gwproto sh.actor.class.001 gwproto - sh.actor.class.001 + recQeMNisJZjsYXTl + sh.actor.class.000 actor.class - recTt38mXlQtJdywQ - 2022-11-16T19:19:58Z - recqx4EqT3OFtnxTG - rec3E1mvlkD3mlc6K - gwmm g.node.status.100 - gwmm - g.node.status.100 - g.node.status + recUJdyAtLmKAZB4S + 2023-06-27T15:22:42Z + gwprice distribution.tariff.000 + recVsPBZNyq2U6Fmz + gwprice + rec4S3L3NZiPihbLi + distribution.tariff.000 + distribution.tariff recUKBtypJxJFHldg 2022-11-08T00:19:22Z - recX0A9nSriRUvl9n - rec3nJaxOMLIKJoNY - gwatn mixing.valve.feedback.model.000 - gwatn - mixing.valve.feedback.model.000 - mixing.valve.feedback.model - - - recUiiAdTTH4zmBfJ - 2022-11-21T14:51:44Z - recqx4EqT3OFtnxTG - rec2J6tKssVJwVmFd - gnr g.node.status.100 - gnr - g.node.status.100 - g.node.status - - - recV83OsyQx8GqHV8 - 2023-01-23T13:50:11Z - recc1W1unmzowrKX9 - recHY8DLO7gBfWjtC - satn spaceheat.unit.000 - satn - spaceheat.unit.000 - unit - - - recV9jP0nFcRCDphV - 2022-11-21T06:33:15Z - rec7pzii3dy9m3jCe - recN6489A2iI0CRXz - gworld message.category.000 - gworld - message.category.000 - message.category - - - recVdbIqzBFT6Qpsd - 2022-11-07T22:58:59Z - recA15Ak50x6bNMx1 - recognized.currency.unit.000 - recognized.currency.unit.000 - recognized.currency.unit - - - recVpliEuu2jtKKUj - 2023-01-23T13:49:37Z - recLQWqTvGwSz2GcN + satn sh.mixing.valve.feedback.model.000 recHY8DLO7gBfWjtC - satn spaceheat.make.model.000 satn - spaceheat.make.model.000 - make.model - - - recWkTXMymydxR5UX - 2022-11-21T06:33:11Z - recqx4EqT3OFtnxTG - recN6489A2iI0CRXz - gworld g.node.status.100 - gworld - g.node.status.100 - g.node.status - - - recWrjAGRucT1hiRq - 2022-12-27T15:34:49Z - recc1W1unmzowrKX9 - recdu3DxzzmNH2eNq - scada spaceheat.unit.000 - scada - spaceheat.unit.000 - unit - - - recX5VXrxWR81za5J - 2022-10-31T18:31:02Z - rec5HXPeyp3jic6FV - recXaQaXNNDyxIlT7 - gnf core.g.node.role.000 - gnf - core.g.node.role.000 - core.g.node.role - - - recZKMG3hALXcWQuc - 2022-11-21T14:52:36Z - recPvHsXzCenxLa7v - rec2J6tKssVJwVmFd - gnr universe.type.000 - gnr - universe.type.000 - universe.type - - - recZKMmBxWot2RY5F - 2022-11-08T18:54:07Z - recqx4EqT3OFtnxTG - recre1axpcL8VVuaQ - gwtime g.node.status.100 - gwtime - g.node.status.100 - g.node.status - - - recaR5EUku9iF2rKc - 2022-12-27T18:07:13Z - rec7Ck8y72m0NytYa - rec3nJaxOMLIKJoNY - gwatn local.comm.interface.000 - gwatn - local.comm.interface.000 - local.comm.interface - - - recaWGhVScY6KXA44 - 2022-11-08T22:24:57Z - rec7pzii3dy9m3jCe - rec3nJaxOMLIKJoNY - gwatn message.category.000 - gwatn - message.category.000 - message.category - - - recaaXWI5JSINnLOx - 2022-11-08T22:24:49Z - rec7pzii3dy9m3jCe - recre1axpcL8VVuaQ - gwtime message.category.000 - gwtime - message.category.000 - message.category + recX0A9nSriRUvl9n + sh.mixing.valve.feedback.model.000 + sh.mixing.valve.feedback.model recdOkYhGUBlj7FBT 2022-12-03T16:09:03Z - recWX07Mlzf8djb6q - rect1hCTZjieEGxgr gridworks gni.status.000 + rect1hCTZjieEGxgr gridworks + recWX07Mlzf8djb6q gni.status.000 gni.status recdz6xbHSpZlJDxe 2023-01-06T03:09:38Z - recCQyaQ1Oq0MlT20 - rect1hCTZjieEGxgr gridworks algo.cert.type.000 + rect1hCTZjieEGxgr gridworks + recCQyaQ1Oq0MlT20 algo.cert.type.000 algo.cert.type receRjseORDOQyD4F 2023-04-03T23:40:45Z - recomGYBJ9ldSsiNU - rec5aZ8ud9lQDmlBu gwproto sh.node.role.000 + rec5aZ8ud9lQDmlBu gwproto + recomGYBJ9ldSsiNU sh.node.role.000 role - - recesY3Van2qeFjV0 - 2022-11-21T07:38:34Z - reclaO4DqpDmwPOIC - recXaQaXNNDyxIlT7 - gnf message.category.symbol.000 - gnf - message.category.symbol.000 - message.category.symbol - - - recf2bjSGV3D1Ml5i - 2022-11-08T22:25:12Z - reclaO4DqpDmwPOIC - rec3nJaxOMLIKJoNY - gwatn message.category.symbol.000 - gwatn - message.category.symbol.000 - message.category.symbol - - - recf9z2cLhcr9up3s - 2022-12-03T16:23:30Z - recyOOpe9zHor9FIY - recN6489A2iI0CRXz - gworld strategy.name.000 - gworld - strategy.name.000 - strategy.name - - - recfChwtbhGYGwQAx - 2022-11-21T06:33:20Z - recPvHsXzCenxLa7v - recN6489A2iI0CRXz - gworld universe.type.000 - gworld - universe.type.000 - universe.type - recfKJvRoPrS32Ima 2022-12-03T16:23:41Z - recyOOpe9zHor9FIY + gridworks strategy.name.001 rect1hCTZjieEGxgr - gridworks strategy.name.000 gridworks - strategy.name.000 + recyOOpe9zHor9FIY + strategy.name.001 strategy.name - - recfXjHuQMUL0RQ7H - 2022-12-27T15:33:04Z - recLQWqTvGwSz2GcN - recdu3DxzzmNH2eNq - scada spaceheat.make.model.000 - scada - spaceheat.make.model.000 - make.model - - - recfpS2uOHAcfWGdN - 2023-01-23T13:49:57Z - rec2HyLffy6QK9QId - recHY8DLO7gBfWjtC - satn spaceheat.telemetry.name.000 - satn - spaceheat.telemetry.name.000 - telemetry.name - recfpgcDj8PWcwGZe 2023-04-03T23:40:59Z - recc1W1unmzowrKX9 - rec5aZ8ud9lQDmlBu gwproto spaceheat.unit.000 + rec5aZ8ud9lQDmlBu gwproto + recc1W1unmzowrKX9 spaceheat.unit.000 unit - recg4YcVJnk1bG3PL - 2023-01-23T13:49:24Z - recQeMNisJZjsYXTl - recHY8DLO7gBfWjtC - satn sh.actor.class.001 - satn - sh.actor.class.001 - actor.class - - - rechPYPk940Fi7Uud - 2022-11-07T22:59:39Z - recA15Ak50x6bNMx1 - rec3nJaxOMLIKJoNY - gwatn recognized.currency.unit.000 - gwatn - recognized.currency.unit.000 - recognized.currency.unit - - - recihvUJVR6oEfEap - 2022-11-16T19:21:10Z - recPvHsXzCenxLa7v - rec3E1mvlkD3mlc6K - gwmm universe.type.000 - gwmm - universe.type.000 - universe.type - - - recjOCdfp4V6Ugqfs - 2022-11-21T07:38:25Z - recZB6uJDEaCzvTZX - recXaQaXNNDyxIlT7 - gnf g.node.role.000 - gnf - g.node.role.000 - g.node.role - - - reck0WsxFdPOoe5ZM - 2022-11-16T19:20:08Z - recA15Ak50x6bNMx1 - rec3E1mvlkD3mlc6K - gwmm recognized.currency.unit.000 - gwmm - recognized.currency.unit.000 - recognized.currency.unit - - - reckI8CRWIPcmOTrC - 2022-11-29T13:48:59Z - recWX07Mlzf8djb6q + recg48Xi06BYdm33C + 2023-05-12T13:32:04Z + gwatn recognized.irradiance.type.000 rec3nJaxOMLIKJoNY - gwatn gni.status.000 gwatn - gni.status.000 - gni.status + recM2pM6KPgGbqEe2 + recognized.irradiance.type.000 + recognized.irradiance.type reclDWkXtj41G28wW 2022-11-08T00:19:28Z - recf9ZTshqRu81HZo - rec3nJaxOMLIKJoNY gwatn energy.supply.type.000 + rec3nJaxOMLIKJoNY gwatn + recf9ZTshqRu81HZo energy.supply.type.000 energy.supply.type - - recmNuAp0alwhubds - 2022-11-16T19:20:37Z - rec75xMuw0SMkzjVc - rec3E1mvlkD3mlc6K - gwmm market.price.unit.000 - gwmm - market.price.unit.000 - market.price.unit - recmacM072NkqkOW1 2022-11-21T14:51:59Z - rechRk6DjahLATrOI - rec2J6tKssVJwVmFd gnr registry.g.node.role.000 + rec2J6tKssVJwVmFd gnr + rechRk6DjahLATrOI registry.g.node.role.000 registry.g.node.role - - recpKd5HOmAf37QY5 - 2022-11-08T18:53:58Z - recZB6uJDEaCzvTZX - recre1axpcL8VVuaQ - gwtime g.node.role.000 - gwtime - g.node.role.000 - g.node.role - - - recpwlwbrp4FbfXbU - 2022-12-03T15:14:02Z - recyOOpe9zHor9FIY - rec3nJaxOMLIKJoNY - gwatn strategy.name.000 - gwatn - strategy.name.000 - strategy.name - - - recqMWuADrFZz8VgP - 2022-12-27T15:34:19Z - recomGYBJ9ldSsiNU - rec3nJaxOMLIKJoNY - gwatn sh.node.role.000 - gwatn - sh.node.role.000 - role - recqt9zKlCbThWViA 2023-02-28T00:30:34Z - rec2HyLffy6QK9QId - rec5aZ8ud9lQDmlBu gwproto spaceheat.telemetry.name.000 + rec5aZ8ud9lQDmlBu gwproto + rec2HyLffy6QK9QId spaceheat.telemetry.name.000 telemetry.name recr9TyWTi2Ct7iKH 2022-10-31T18:31:02Z - rechRk6DjahLATrOI - recXaQaXNNDyxIlT7 gnf registry.g.node.role.000 + recXaQaXNNDyxIlT7 gnf + rechRk6DjahLATrOI registry.g.node.role.000 registry.g.node.role - - recsHlBETSCTId6TE - 2023-01-06T03:10:12Z - recCQyaQ1Oq0MlT20 - rec3nJaxOMLIKJoNY - gwatn algo.cert.type.000 - gwatn - algo.cert.type.000 - algo.cert.type - - - recsRpVdgR7q3fCML - 2022-11-21T14:52:25Z - reclaO4DqpDmwPOIC - rec2J6tKssVJwVmFd - gnr message.category.symbol.000 - gnr - message.category.symbol.000 - message.category.symbol - - - rect0T4CM09fP7g2t - 2022-11-16T19:19:39Z - recZB6uJDEaCzvTZX - rec3E1mvlkD3mlc6K - gwmm g.node.role.000 - gwmm - g.node.role.000 - g.node.role - rectGOQvuxBQ1f8LZ 2023-01-18T21:33:26Z - recounhEj97w5SfDm - rect1hCTZjieEGxgr gridworks market.quantity.unit.000 + rect1hCTZjieEGxgr gridworks + recounhEj97w5SfDm market.quantity.unit.000 market.quantity.unit rectmy7sSSaRVzm4x 2023-01-12T17:08:39Z - recZmZP13YV9Rmbnw - rect1hCTZjieEGxgr gridworks market.type.name.000 + rect1hCTZjieEGxgr gridworks + recZmZP13YV9Rmbnw market.type.name.000 market.type.name recu25eXE4ralXooT 2022-12-27T15:32:46Z - recQeMNisJZjsYXTl + scada sh.actor.class.000 recdu3DxzzmNH2eNq - scada sh.actor.class.001 scada - sh.actor.class.001 - actor.class - - - recvmdMYmWLhBwujD - 2023-01-06T03:10:03Z - recCQyaQ1Oq0MlT20 - recXaQaXNNDyxIlT7 - gnf algo.cert.type.000 - gnf - algo.cert.type.000 - algo.cert.type - - - recxchS4k09ivH7vN - 2022-11-21T06:33:08Z - recZB6uJDEaCzvTZX - recN6489A2iI0CRXz - gworld g.node.role.000 - gworld - g.node.role.000 - g.node.role - - - recy37qKrW01vTt7S - 2022-11-08T04:00:56Z - recounhEj97w5SfDm - rec3nJaxOMLIKJoNY - gwatn market.quantity.unit.000 - gwatn - market.quantity.unit.000 - market.quantity.unit - - - recyDSPjw1NYVGiOH - 2022-12-27T15:32:02Z recQeMNisJZjsYXTl - rec3nJaxOMLIKJoNY - gwatn sh.actor.class.001 - gwatn - sh.actor.class.001 + sh.actor.class.000 actor.class reczQlMuDvW3WO9oA 2022-12-03T16:09:44Z - recdH9n0oS3nRRWON - rect1hCTZjieEGxgr gridworks supervisor.container.status.000 + rect1hCTZjieEGxgr gridworks + recdH9n0oS3nRRWON supervisor.container.status.000 supervisor.container.status - - reczplFItDku5AaRa - 2022-11-06T16:53:01Z - recZB6uJDEaCzvTZX - rec3nJaxOMLIKJoNY - gwatn g.node.role.000 - gwatn - g.node.role.000 - g.node.role - - - reczs2uW5OOP1dIaw - 2022-11-21T07:38:38Z - rec7pzii3dy9m3jCe - recXaQaXNNDyxIlT7 - gnf message.category.000 - gnf - message.category.000 - message.category - diff --git a/CodeGenerationTools/GridworksCore/SSoT/Entities.json b/CodeGenerationTools/GridworksCore/SSoT/Entities.json index cc2bafb2..09dd9e5d 100644 --- a/CodeGenerationTools/GridworksCore/SSoT/Entities.json +++ b/CodeGenerationTools/GridworksCore/SSoT/Entities.json @@ -64,7 +64,8 @@ "recsCmQ5g1sy3MKx6", "recuhuEDQn3NKBJJf", "rec2djRgncV4Fpy3U", - "recnMa5xJD7jb3ier" + "recnMa5xJD7jb3ier", + "recNZ1bh0Ysk48HHN" ], "TableGroup": "General", "ToName": "SchemaRoot" @@ -275,7 +276,9 @@ "rec4UQz0uQGTOXP7v", "recjBcWHaD0txkThT", "recPChJ4Z0yYiZUOA", - "recCc4GQB5icU2hYH" + "recCc4GQB5icU2hYH", + "recnHjL5hWmhS57nY", + "recHpojco9I09N58x" ], "TableGroup": "General", "ToName": "Schema" diff --git a/CodeGenerationTools/GridworksCore/aicapture.json b/CodeGenerationTools/GridworksCore/aicapture.json index 8f92a551..ae7aa701 100644 --- a/CodeGenerationTools/GridworksCore/aicapture.json +++ b/CodeGenerationTools/GridworksCore/aicapture.json @@ -144,17 +144,6 @@ "RelativePath": "/Types/Docs/ApiDocs/Toc", "CommandLine": "codee42/xml-xslt-transform -i ../../../../SSoT/Airtable.xml -i DeriveToc.xslt -i ../../../../GnfCommon.xslt -i ../../../../ODXML/DataSchema.odxml -w 120000" }, - { - "MatchedTranspiler": { - "TranspilerId": "4b713f03-1d9f-42f2-b02f-e3cdbd237bb3", - "Name": "XmlXsltTransform", - "Description": "Given an Xml and Xslt file, will process and \"split\" a resulting fileset." - }, - "ProjectTranspilerId": "a2b6bc61-44d1-4bcd-b35c-fef614baf114", - "Name": "XmlXsltTransform", - "RelativePath": "/Types/ApiUtil", - "CommandLine": "codee42/xml-xslt-transform -i ../../SSoT/Airtable.xml -i DeriveApiUtil.xslt -i ../../GnfCommon.xslt -i ../../ODXML/DataSchema.odxml -w 120000" - }, { "MatchedTranspiler": { "TranspilerId": "4b713f03-1d9f-42f2-b02f-e3cdbd237bb3", diff --git a/poetry.lock b/poetry.lock index c1a9d33b..149222a2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1378,6 +1378,89 @@ files = [ {file = "msgpack-1.0.5.tar.gz", hash = "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c"}, ] +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, + {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, + {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, + {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, + {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, + {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, + {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, + {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, + {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, + {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, + {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, + {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, + {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, +] + [[package]] name = "mypy" version = "1.4.1" @@ -2916,7 +2999,94 @@ tests-binary = ["cmake", "cmake", "ninja", "ninja", "pybind11", "pybind11", "sci tests-binary-strict = ["cmake (==3.21.2)", "cmake (==3.25.0)", "ninja (==1.10.2)", "ninja (==1.11.1)", "pybind11 (==2.10.3)", "pybind11 (==2.7.1)", "scikit-build (==0.11.1)", "scikit-build (==0.16.1)"] tests-strict = ["codecov (==2.0.15)", "pytest (==4.6.0)", "pytest (==4.6.0)", "pytest (==6.2.5)", "pytest-cov (==3.0.0)", "typing (==3.7.4)"] +[[package]] +name = "yarl" +version = "1.9.2" +description = "Yet another URL library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, + {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, + {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, + {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, + {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, + {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, + {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, + {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, + {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, + {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, + {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, + {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, + {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + [metadata] lock-version = "2.0" python-versions = ">=3.10, <4.0" -content-hash = "154647beb722cd3c70e6b0aa426dc41294dc58c26dbb20762859783b6076fada" +content-hash = "3efe69409c08f344e476363a10796be367b5e55197bb477cc594db8e9e043cd8" diff --git a/pyproject.toml b/pyproject.toml index bd566dae..8e445524 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "gridworks-protocol" -version = "0.5.7" +version = "0.6.0" description = "Gridworks Protocol" authors = ["Jessica Millar "] license = "MIT" @@ -24,6 +24,7 @@ pydantic = "^1.10.2" pendulum = "^2.1.2" fastapi-utils = "^0.2.1" gridworks = "^0.2.9" +yarl = "^1.9.2" [tool.poetry.dev-dependencies] Pygments = ">=2.10.0" diff --git a/src/gwproto/__init__.py b/src/gwproto/__init__.py index 84063e73..35546134 100644 --- a/src/gwproto/__init__.py +++ b/src/gwproto/__init__.py @@ -1,6 +1,5 @@ -import gwproto.enums as enums -import gwproto.messages as messages -import gwproto.property_format as property_format +from gwproto.data_classes.hardware_layout import HardwareLayout +from gwproto.data_classes.sh_node import ShNode from gwproto.decoders import CallableDecoder from gwproto.decoders import Decoder from gwproto.decoders import DecoderItem @@ -11,9 +10,16 @@ from gwproto.decoders import MQTTCodec from gwproto.decoders import OneDecoderExtractor from gwproto.decoders import PydanticDecoder +from gwproto.decoders import PydanticTypeNameDecoder +from gwproto.decoders import create_discriminator from gwproto.decoders import create_message_payload_discriminator from gwproto.decoders import get_pydantic_literal_type_name from gwproto.decoders import pydantic_named_types +from gwproto.default_decoders import CacDecoder +from gwproto.default_decoders import ComponentDecoder +from gwproto.default_decoders import decode_to_data_class +from gwproto.default_decoders import default_cac_decoder +from gwproto.default_decoders import default_component_decoder from gwproto.errors import SchemaError from gwproto.message import Header from gwproto.message import Message @@ -24,25 +30,33 @@ __all__ = [ "as_enum", + "CacDecoder", "CallableDecoder", + "ComponentDecoder", + "create_discriminator", "create_message_payload_discriminator", + "decode_to_data_class", "Decoder", "DecoderItem", "DecodedMQTTTopic", "Decoders", - "enums", + "default_cac_decoder", + "default_component_decoder", "get_pydantic_literal_type_name", + "HardwareLayout", "Header", "MakerDecoder", "MakerExtractor", "Message", "messages", "MessageDiscriminator", - "SchemaError", "MQTTCodec", "MQTTTopic", "OneDecoderExtractor", "property_format", "PydanticDecoder", + "PydanticTypeNameDecoder", "pydantic_named_types", + "SchemaError", + "ShNode", ] diff --git a/src/gwproto/data_classes/cacs/fibaro_smart_implant_cac.py b/src/gwproto/data_classes/cacs/fibaro_smart_implant_cac.py new file mode 100644 index 00000000..198b4948 --- /dev/null +++ b/src/gwproto/data_classes/cacs/fibaro_smart_implant_cac.py @@ -0,0 +1,5 @@ +from gwproto.data_classes.component_attribute_class import ComponentAttributeClass + + +class FibaroSmartImplantCac(ComponentAttributeClass): + ... diff --git a/src/gwproto/data_classes/cacs/hubitat_cac.py b/src/gwproto/data_classes/cacs/hubitat_cac.py new file mode 100644 index 00000000..69a7731a --- /dev/null +++ b/src/gwproto/data_classes/cacs/hubitat_cac.py @@ -0,0 +1,5 @@ +from gwproto.data_classes.component_attribute_class import ComponentAttributeClass + + +class HubitatCac(ComponentAttributeClass): + ... diff --git a/src/gwproto/data_classes/cacs/hubitat_tank_module_cac.py b/src/gwproto/data_classes/cacs/hubitat_tank_module_cac.py new file mode 100644 index 00000000..101bf591 --- /dev/null +++ b/src/gwproto/data_classes/cacs/hubitat_tank_module_cac.py @@ -0,0 +1,5 @@ +from gwproto.data_classes.component_attribute_class import ComponentAttributeClass + + +class HubitatTankModuleCac(ComponentAttributeClass): + ... diff --git a/src/gwproto/data_classes/cacs/rest_poller_cac.py b/src/gwproto/data_classes/cacs/rest_poller_cac.py new file mode 100644 index 00000000..3ed085d2 --- /dev/null +++ b/src/gwproto/data_classes/cacs/rest_poller_cac.py @@ -0,0 +1,5 @@ +from gwproto.data_classes.component_attribute_class import ComponentAttributeClass + + +class RESTPollerCac(ComponentAttributeClass): + ... diff --git a/src/gwproto/data_classes/components/fibaro_smart_implant_component.py b/src/gwproto/data_classes/components/fibaro_smart_implant_component.py new file mode 100644 index 00000000..7e7cd3be --- /dev/null +++ b/src/gwproto/data_classes/components/fibaro_smart_implant_component.py @@ -0,0 +1,19 @@ +from typing import Optional + +from gwproto.data_classes.component import Component + + +class FibaroSmartImplantComponent(Component): + def __init__( + self, + component_id: str, + component_attribute_class_id: str, + display_name: Optional[str] = None, + hw_uid: Optional[str] = None, + ): + super().__init__( + component_id=component_id, + component_attribute_class_id=component_attribute_class_id, + display_name=display_name, + hw_uid=hw_uid, + ) diff --git a/src/gwproto/data_classes/components/hubitat_component.py b/src/gwproto/data_classes/components/hubitat_component.py new file mode 100644 index 00000000..51146740 --- /dev/null +++ b/src/gwproto/data_classes/components/hubitat_component.py @@ -0,0 +1,29 @@ +from typing import Optional + +import yarl + +from gwproto.data_classes.component import Component +from gwproto.types.hubitat_gt import HubitatGt + + +class HubitatComponent(Component): + hubitat_gt: HubitatGt + + def __init__( + self, + component_id: str, + component_attribute_class_id: str, + hubitat_gt: HubitatGt, + display_name: Optional[str] = None, + hw_uid: Optional[str] = None, + ): + self.hubitat_gt = hubitat_gt + super().__init__( + component_id=component_id, + component_attribute_class_id=component_attribute_class_id, + display_name=display_name, + hw_uid=hw_uid, + ) + + def urls(self) -> dict[str, Optional[yarl.URL]]: + return self.hubitat_gt.urls() diff --git a/src/gwproto/data_classes/components/hubitat_tank_component.py b/src/gwproto/data_classes/components/hubitat_tank_component.py new file mode 100644 index 00000000..74e5655d --- /dev/null +++ b/src/gwproto/data_classes/components/hubitat_tank_component.py @@ -0,0 +1,113 @@ +from typing import Optional + +import yarl + +from gwproto.data_classes.component import Component +from gwproto.data_classes.components.hubitat_component import HubitatComponent +from gwproto.data_classes.resolver import ComponentResolver +from gwproto.data_classes.sh_node import ShNode +from gwproto.types.hubitat_component_gt import HubitatComponentGt +from gwproto.types.hubitat_component_gt import HubitatRESTResolutionSettings +from gwproto.types.hubitat_gt import HubitatGt +from gwproto.types.hubitat_tank_gt import FibaroTempSensorSettings +from gwproto.types.hubitat_tank_gt import FibaroTempSensorSettingsGt +from gwproto.types.hubitat_tank_gt import HubitatTankSettingsGt +from gwproto.types.telemetry_reporting_config import TelemetryReportingConfig + + +class HubitatTankComponent(Component, ComponentResolver): + hubitat: HubitatComponentGt + sensor_supply_voltage: float + devices_gt: list[FibaroTempSensorSettingsGt] + devices: list[FibaroTempSensorSettings] = [] + + def __init__( + self, + component_id: str, + component_attribute_class_id: str, + tank_gt: HubitatTankSettingsGt, + display_name: Optional[str] = None, + hw_uid: Optional[str] = None, + ): + # Create self.hubitat as a proxy containing only the id + # of the hubitat; the actual component data will be resolved + # when resolve() is called; Here in the constructor we cannot + # rely on the actual HubitatComponentGt existing yet. + self.hubitat = HubitatComponentGt( + ComponentId=tank_gt.hubitat_component_id, + ComponentAttributeClassId="00000000-0000-0000-0000-000000000000", + Hubitat=HubitatGt( + Host="", + MakerApiId=-1, + AccessToken="", + MacAddress="000000000000", + ), + ) + self.sensor_supply_voltage = tank_gt.sensor_supply_voltage + self.devices_gt = list(tank_gt.devices) + super().__init__( + display_name=display_name, + component_id=component_id, + hw_uid=hw_uid, + component_attribute_class_id=component_attribute_class_id, + ) + + def resolve( + self, + tank_node_name: str, + nodes: dict[str, ShNode], + components: dict[str, Component], + ): + hubitat_component = components.get(self.hubitat.ComponentId, None) + if hubitat_component is None: + raise ValueError( + "ERROR. No component found for " + f"HubitatTankComponent.hubitat.CompnentId {self.hubitat.ComponentId}" + ) + if not isinstance(hubitat_component, HubitatComponent): + raise ValueError( + "ERROR. Referenced hubitat component has type " + f"{type(hubitat_component)}; " + "must be instance of HubitatComponent. " + f"Hubitat component id: {self.hubitat.ComponentId}" + ) + hubitat_component_gt = HubitatComponentGt.from_data_class(hubitat_component) + hubitat_settings = HubitatRESTResolutionSettings(hubitat_component_gt) + devices = [ + FibaroTempSensorSettings.create( + tank_name=tank_node_name, + settings_gt=device_gt, + hubitat=hubitat_settings, + ) + for device_gt in self.devices_gt + if device_gt.enabled + ] + for device in devices: + if device.node_name not in nodes: + raise ValueError( + f"ERROR. Node not found for tank temp sensor <{device.node_name}>" + ) + # replace proxy hubitat component, which only had component id. + # with the actual hubitat component containing data. + self.hubitat = hubitat_component_gt + self.devices = devices + + def urls(self) -> dict[str, Optional[yarl.URL]]: + urls = self.hubitat.urls() + for device in self.devices: + urls[device.node_name] = device.url + return urls + + @property + def config_list(self) -> list[TelemetryReportingConfig]: + return [ + TelemetryReportingConfig( + TelemetryName=device.telemetry_name, + AboutNodeName=device.node_name, + ReportOnChange=False, + SamplePeriodS=int(device.rest.poll_period_seconds), + Exponent=device.exponent, + Unit=device.unit, + ) + for device in self.devices + ] diff --git a/src/gwproto/data_classes/components/rest_poller_component.py b/src/gwproto/data_classes/components/rest_poller_component.py new file mode 100644 index 00000000..d5a80462 --- /dev/null +++ b/src/gwproto/data_classes/components/rest_poller_component.py @@ -0,0 +1,24 @@ +from typing import Optional + +from gwproto.data_classes.component import Component +from gwproto.types.rest_poller_gt import RESTPollerSettings + + +class RESTPollerComponent(Component): + rest: RESTPollerSettings + + def __init__( + self, + component_id: str, + component_attribute_class_id: str, + rest: RESTPollerSettings, + display_name: Optional[str] = None, + hw_uid: Optional[str] = None, + ): + self.rest = rest + super().__init__( + display_name=display_name, + component_id=component_id, + hw_uid=hw_uid, + component_attribute_class_id=component_attribute_class_id, + ) diff --git a/src/gwproto/data_classes/hardware_layout.py b/src/gwproto/data_classes/hardware_layout.py index 539e4e63..653ecbed 100644 --- a/src/gwproto/data_classes/hardware_layout.py +++ b/src/gwproto/data_classes/hardware_layout.py @@ -22,8 +22,13 @@ ElectricMeterComponent, ) from gwproto.data_classes.errors import DataClassLoadingError +from gwproto.data_classes.resolver import ComponentResolver from gwproto.data_classes.sh_node import ShNode from gwproto.data_classes.telemetry_tuple import TelemetryTuple +from gwproto.default_decoders import CacDecoder +from gwproto.default_decoders import ComponentDecoder +from gwproto.default_decoders import default_cac_decoder +from gwproto.default_decoders import default_component_decoder from gwproto.enums import ActorClass from gwproto.enums import Role from gwproto.enums import TelemetryName @@ -58,8 +63,15 @@ class LoadError: exception: Exception -def load_cacs(layout: dict, raise_errors: bool = True) -> list[LoadError]: - errors: list[LoadError] = [] +def load_cacs( + layout: dict, + raise_errors: bool = True, + errors: Optional[list[LoadError]] = None, + cac_decoder: Optional[CacDecoder] = None, +) -> dict: + if errors is None: + errors: list[LoadError] = [] + cacs = dict() for type_name, maker_class in [ ("RelayCacs", RelayCacGt_Maker), ("ResistiveHeaterCacs", ResistiveHeaterCacGt_Maker), @@ -68,27 +80,41 @@ def load_cacs(layout: dict, raise_errors: bool = True) -> list[LoadError]: ("MultipurposeSensorCacs", MultipurposeSensorCacGt_Maker), ("SimpleTempSensorCacs", SimpleTempSensorCacGt_Maker), ]: - for d in layout[type_name]: + for d in layout.get(type_name, []): try: - maker_class.dict_to_dc(d) + cacs[d["ComponentAttributeClassId"]] = maker_class.dict_to_dc(d) except Exception as e: if raise_errors: raise e errors.append(LoadError(type_name, d, e)) - for d in layout["OtherCacs"]: + if cac_decoder is None: + cac_decoder = default_cac_decoder + for d in layout.get("OtherCacs", []): + cac_type = d.get("TypeName", "") try: - ComponentAttributeClass( - component_attribute_class_id=d["ComponentAttributeClassId"] - ) + if cac_type and cac_type in cac_decoder: + cac = cac_decoder.decode_to_data_class(d) + else: + cac = ComponentAttributeClass( + component_attribute_class_id=d["ComponentAttributeClassId"] + ) + cacs[d["ComponentAttributeClassId"]] = cac except Exception as e: if raise_errors: raise e errors.append(LoadError("OtherCacs", d, e)) - return errors - - -def load_components(layout: dict, raise_errors: bool = True) -> list[LoadError]: - errors: list[LoadError] = [] + return cacs + + +def load_components( + layout: dict, + raise_errors: bool = True, + errors: Optional[list[LoadError]] = None, + component_decoder: Optional[ComponentDecoder] = None, +) -> dict: + if errors is None: + errors: list[LoadError] = [] + components = dict() for type_name, maker_class in [ ("RelayComponents", RelayComponentGt_Maker), ("ResistiveHeaterComponents", ResistiveHeaterComponentGt_Maker), @@ -97,22 +123,74 @@ def load_components(layout: dict, raise_errors: bool = True) -> list[LoadError]: ("MultipurposeSensorComponents", MultipurposeSensorComponentGt_Maker), ("SimpleTempSensorComponents", SimpleTempSensorComponentGt_Maker), ]: - for d in layout[type_name]: + for d in layout.get(type_name, []): try: - maker_class.dict_to_dc(d) + components[d["ComponentId"]] = maker_class.dict_to_dc(d) except Exception as e: if raise_errors: raise e errors.append(LoadError(type_name, d, e)) - for camel in layout["OtherComponents"]: - try: - snake_dict = {camel_to_snake(k): v for k, v in camel.items()} - Component(**snake_dict) - except Exception as e: - if raise_errors: - raise e - errors.append(LoadError(type_name, camel, e)) - return errors + if component_decoder is None: + component_decoder = default_component_decoder + for d in layout["OtherComponents"]: + component_type = d.get("TypeName", "") + try: + if component_type and component_type in component_decoder: + component = component_decoder.decode_to_data_class(d) + else: + component = Component(**{camel_to_snake(k): v for k, v in d.items()}) + components[d["ComponentId"]] = component + except Exception as e: + if raise_errors: + raise e + errors.append(LoadError("OtherComponents", d, e)) + return components + + +def load_nodes( + layout: dict, + raise_errors: bool = True, + errors: Optional[list[LoadError]] = None, + included_node_names: Optional[set[str]] = None, +) -> dict: + nodes = {} + for d in layout.get("ShNodes", []): + try: + node_name = d["Alias"] + if included_node_names is None or node_name in included_node_names: + nodes[node_name] = SpaceheatNodeGt_Maker.dict_to_dc(d) + except Exception as e: + if raise_errors: + raise e + errors.append(LoadError("ShNode", d, e)) + return nodes + + +def resolve_links( + nodes: dict[str, ShNode] = None, + components: dict[str, Component] = None, + raise_errors: bool = True, + errors: Optional[list[LoadError]] = None, +) -> None: + for node_name, node in nodes.items(): + d = dict(node=dict(name=node_name, node=node)) + try: + if node.component_id is not None: + component = components.get(node.component_id, None) + if component is None: + raise DataClassLoadingError( + f"{node.alias} component {node.component_id} not loaded!" + ) + if isinstance(component, ComponentResolver): + component.resolve( + node.alias, + nodes, + components, + ) + except Exception as e: + if raise_errors: + raise e + errors.append(LoadError("ShNode", d, e)) class HardwareLayout: @@ -121,15 +199,31 @@ class HardwareLayout: components: dict[str, Component] nodes: dict[str, ShNode] - def __init__(self, layout: dict, included_node_names: Optional[set[str]] = None): + def __init__( + self, + layout: dict, + cacs: Optional[dict[str, ComponentAttributeClass]] = None, + components: Optional[dict[str, Component]] = None, + nodes: Optional[dict[str, ShNode]] = None, + ): self.layout = copy.deepcopy(layout) - self.cacs = dict(ComponentAttributeClass.by_id) - self.components = dict(Component.by_id) - self.nodes = { - node_dict["Alias"]: SpaceheatNodeGt_Maker.dict_to_dc(node_dict) - for node_dict in self.layout["ShNodes"] - if included_node_names is None or node_dict["Alias"] in included_node_names - } + if cacs is None: + cacs = ComponentAttributeClass.by_id + self.cacs = dict(cacs) + if components is None: + components = Component.by_id + self.components = dict(components) + if nodes is None: + nodes = ShNode.by_id + self.nodes = dict(nodes) + + def clear_property_cache(self): + for cached_prop_name in [ + prop_name + for prop_name in type(self).__dict__ + if isinstance(type(self).__dict__[prop_name], cached_property) + ]: + self.__dict__.pop(cached_prop_name, None) @classmethod def load( @@ -138,6 +232,8 @@ def load( included_node_names: Optional[set[str]] = None, raise_errors: bool = True, errors: Optional[list[LoadError]] = None, + cac_decoder: Optional[CacDecoder] = None, + component_decoder: Optional[ComponentDecoder] = None, ) -> "HardwareLayout": with Path(layout_path).open() as f: layout: dict = json.loads(f.read()) @@ -146,6 +242,8 @@ def load( included_node_names=included_node_names, raise_errors=raise_errors, errors=errors, + cac_decoder=cac_decoder, + component_decoder=component_decoder, ) @classmethod @@ -155,12 +253,38 @@ def load_dict( included_node_names: Optional[set[str]] = None, raise_errors: bool = True, errors: Optional[list[LoadError]] = None, + cac_decoder: Optional[CacDecoder] = None, + component_decoder: Optional[ComponentDecoder] = None, ) -> "HardwareLayout": if errors is None: - errors = [] - errors.extend(load_cacs(layout=layout, raise_errors=raise_errors)) - errors.extend(load_components(layout=layout, raise_errors=raise_errors)) - return HardwareLayout(layout, included_node_names=included_node_names) + errors: list[LoadError] = [] + load_args = dict( + cacs=load_cacs( + layout=layout, + raise_errors=raise_errors, + errors=errors, + cac_decoder=cac_decoder, + ), + components=load_components( + layout=layout, + raise_errors=raise_errors, + errors=errors, + component_decoder=component_decoder, + ), + nodes=load_nodes( + layout=layout, + raise_errors=raise_errors, + errors=errors, + included_node_names=included_node_names, + ), + ) + resolve_links( + load_args["nodes"], + load_args["components"], + raise_errors=raise_errors, + errors=errors, + ) + return HardwareLayout(layout, **load_args) def node(self, alias: str, default: Any = None) -> ShNode: return self.nodes.get(alias, default) @@ -347,23 +471,24 @@ def my_simple_sensors(self) -> List[ShNode]: @cached_property def all_multipurpose_telemetry_tuples(self) -> List[TelemetryTuple]: - all_nodes = list(self.nodes.values()) multi_nodes = list( filter( lambda x: ( - x.actor_class == ActorClass.MultipurposeSensor + ( + x.actor_class == ActorClass.MultipurposeSensor + or x.actor_class == ActorClass.HubitatTankModule + ) and hasattr(x.component, "config_list") ), - all_nodes, + self.nodes.values(), ) ) telemetry_tuples = [] for node in multi_nodes: for config in getattr(node.component, "config_list"): - about_node = self.node(config.AboutNodeName) telemetry_tuples.append( TelemetryTuple( - AboutNode=about_node, + AboutNode=self.node(config.AboutNodeName), SensorNode=node, TelemetryName=config.TelemetryName, ) diff --git a/src/gwproto/data_classes/resolver.py b/src/gwproto/data_classes/resolver.py new file mode 100644 index 00000000..54140192 --- /dev/null +++ b/src/gwproto/data_classes/resolver.py @@ -0,0 +1,16 @@ +from abc import ABC +from abc import abstractmethod + +from gwproto.data_classes.component import Component +from gwproto.data_classes.sh_node import ShNode + + +class ComponentResolver(ABC): + @abstractmethod + def resolve( + self, + node_name: str, + nodes: dict[str, ShNode], + components: dict[str, Component], + ): + raise NotImplementedError diff --git a/src/gwproto/decoders.py b/src/gwproto/decoders.py index d29e8e84..dd1a93b8 100644 --- a/src/gwproto/decoders.py +++ b/src/gwproto/decoders.py @@ -1,6 +1,7 @@ import abc import inspect import json +import re import sys from abc import abstractmethod from dataclasses import dataclass @@ -286,6 +287,7 @@ def pydantic_named_types( module_names: str | Sequence[str], modules: Optional[Sequence[Any]] = None, type_name_field: str = DEFAULT_TYPE_NAME_FIELD, + type_name_regex: Optional[re.Pattern] = None, ) -> list[Any]: if isinstance(module_names, str): module_names = [module_names] @@ -315,6 +317,9 @@ def pydantic_named_types( f"for {module_class} already seen for " f"class {type_names[type_name]}" ) + if type_name_regex is not None: + if not type_name_regex.match(type_name): + continue type_names[type_name] = module_class named_types.append(module_class) return named_types @@ -326,8 +331,14 @@ def create_message_payload_discriminator( modules: Optional[Sequence[Any]] = None, explicit_types: Optional[Sequence[Any]] = None, type_name_field: str = DEFAULT_TYPE_NAME_FIELD, + type_name_regex: Optional[re.Pattern] = None, ) -> Type[MessageDiscriminator]: - used_types = pydantic_named_types(module_names=module_names, modules=modules) + used_types = pydantic_named_types( + module_names=module_names, + modules=modules, + type_name_field=type_name_field, + type_name_regex=type_name_regex, + ) if explicit_types is not None: used_types.extend(explicit_types) return create_model( @@ -338,3 +349,76 @@ def create_message_payload_discriminator( Field(..., discriminator=type_name_field), ), ) + + +def create_discriminator( + model_name: str, + module_names: str | Sequence[str] = "", + modules: Optional[Sequence[Any]] = None, + explicit_types: Optional[Sequence[Any]] = None, + type_name_field: str = DEFAULT_TYPE_NAME_FIELD, + type_name_regex: Optional[re.Pattern] = None, + payload_field_name="Payload", +) -> BaseModel: + used_types = pydantic_named_types( + module_names=module_names, + modules=modules, + type_name_field=type_name_field, + type_name_regex=type_name_regex, + ) + if explicit_types is not None: + used_types.extend(explicit_types) + if len(used_types) == 1: + payload_field_type = ( + used_types[0], + Field(...), + ) + else: + payload_field_type = ( + Union[tuple(used_types)], + Field(..., discriminator=type_name_field), + ) + payload_field_kwargs = {payload_field_name: payload_field_type} + return create_model(model_name, **payload_field_kwargs) + + +class PydanticTypeNameDecoder(Decoder): + loader: BaseModel + payload_field_name: str + contains: set[str] + + def __init__( + self, + model_name: str, + *, + module_names: str | Sequence[str] = "", + modules: Optional[Sequence[Any]] = None, + explicit_types: Optional[Sequence[Any]] = None, + type_name_field: str = DEFAULT_TYPE_NAME_FIELD, + type_name_regex: Optional[re.Pattern] = None, + payload_field_name="Payload", + ): + self.payload_field_name = payload_field_name + self.loader = create_discriminator( + model_name=model_name, + module_names=module_names, + modules=modules, + explicit_types=explicit_types, + type_name_field=type_name_field, + type_name_regex=type_name_regex, + payload_field_name=payload_field_name, + ) + payload_field = self.loader.__fields__[self.payload_field_name] + if payload_field.sub_fields_mapping is not None: + self.contains = set(payload_field.sub_fields_mapping.keys()) + else: + self.contains = {payload_field.type_.__fields__["TypeName"].default} + + def __contains__(self, type_name: str) -> bool: + return type_name in self.contains + + def decode_obj(self, data: dict) -> BaseModel: + return getattr( + self.loader.parse_obj({self.payload_field_name: data}), + self.payload_field_name, + ) diff --git a/src/gwproto/default_decoders.py b/src/gwproto/default_decoders.py new file mode 100644 index 00000000..011c6d33 --- /dev/null +++ b/src/gwproto/default_decoders.py @@ -0,0 +1,97 @@ +import re +import typing +from typing import Type +from typing import TypeVar + +import gwproto.types.fibaro_smart_implant_cac_gt +import gwproto.types.fibaro_smart_implant_component_gt +import gwproto.types.hubitat_cac_gt +import gwproto.types.hubitat_component_gt +import gwproto.types.hubitat_tank_cac_gt +import gwproto.types.hubitat_tank_component_gt +import gwproto.types.rest_poller_cac_gt +import gwproto.types.rest_poller_component_gt +from gwproto.data_classes.component import Component +from gwproto.data_classes.component_attribute_class import ComponentAttributeClass +from gwproto.decoders import PydanticTypeNameDecoder + + +T = TypeVar("T") + + +def decode_to_data_class( + decoded_gt: typing.Any, + return_type: Type[T], + allow_missing_func: bool = True, + allow_non_instance: bool = False, +) -> T: + if hasattr(decoded_gt, "to_data_class"): + data_class = decoded_gt.to_data_class() + if not allow_non_instance and not isinstance(data_class, return_type): + raise ValueError( + f"ERROR. Returned data class {type(data_class)} is not" + f" instance of {return_type}" + ) + return typing.cast(T, decoded_gt.to_data_class()) + if allow_missing_func: + raise ValueError( + f"ERROR. Decoded type {type(decoded_gt)} has no" f" to_data_class() method." + ) + return Component(**decoded_gt.dict()) + + +class CacDecoder(PydanticTypeNameDecoder): + TYPE_NAME_REGEX = re.compile(r".*\.cac\.gt") + + def __init__(self, model_name: str, **kwargs): + if "type_name_regex" not in kwargs: + kwargs["type_name_regex"] = CacDecoder.TYPE_NAME_REGEX + super().__init__(model_name, **kwargs) + + def decode_to_data_class( + self, data: dict, allow_missing_func: bool = True + ) -> ComponentAttributeClass: + return decode_to_data_class( + decoded_gt=self.decode_obj(data), + return_type=ComponentAttributeClass, + allow_missing_func=allow_missing_func, + ) + + +class ComponentDecoder(PydanticTypeNameDecoder): + TYPE_NAME_REGEX = re.compile(r".*\.component\.gt") + + def __init__(self, model_name: str, **kwargs): + if "type_name_regex" not in kwargs: + kwargs["type_name_regex"] = ComponentDecoder.TYPE_NAME_REGEX + super().__init__(model_name, **kwargs) + + def decode_to_data_class( + self, data: dict, allow_missing_func: bool = True + ) -> Component: + return decode_to_data_class( + decoded_gt=self.decode_obj(data), + return_type=Component, + allow_missing_func=allow_missing_func, + ) + + +default_cac_decoder = CacDecoder( + model_name="DefaultCacDecoder", + module_names=[ + "gwproto.types.fibaro_smart_implant_cac_gt", + "gwproto.types.hubitat_cac_gt", + "gwproto.types.hubitat_tank_cac_gt", + "gwproto.types.rest_poller_cac_gt", + ], +) + +default_component_decoder = ComponentDecoder( + model_name="DefaultComponentDecoder", + module_names=[ + "gwproto.types.fibaro_smart_implant_component_gt", + "gwproto.types.hubitat_component_gt", + "gwproto.types.hubitat_tank_component_gt", + "gwproto.types.rest_poller_component_gt", + ], +) diff --git a/src/gwproto/enums/__init__.py b/src/gwproto/enums/__init__.py index 5754ceb7..3c61c1ad 100644 --- a/src/gwproto/enums/__init__.py +++ b/src/gwproto/enums/__init__.py @@ -8,10 +8,10 @@ __all__ = [ - "LocalCommInterface", "ActorClass", - "Role", + "LocalCommInterface", "MakeModel", + "Role", "TelemetryName", "Unit", ] diff --git a/src/gwproto/enums/actor_class.py b/src/gwproto/enums/actor_class.py index 7b2808e0..d6d92fda 100644 --- a/src/gwproto/enums/actor_class.py +++ b/src/gwproto/enums/actor_class.py @@ -31,7 +31,9 @@ class ActorClass(StrEnum): SimpleSensor = auto() MultipurposeSensor = auto() Thermostat = auto() - + HubitatTelemetryReader = auto() + HubitatTankModule = auto() + @classmethod def default(cls) -> "ActorClass": """ diff --git a/src/gwproto/enums/make_model.py b/src/gwproto/enums/make_model.py index 49c82796..19aa6cb9 100644 --- a/src/gwproto/enums/make_model.py +++ b/src/gwproto/enums/make_model.py @@ -1,4 +1,4 @@ -""" Enum with TypeName spaceheat.make.model, Version 000, Status Active""" +""" Enum with TypeName spaceheat.make.model, Version 001, Status Pending""" from enum import auto from typing import List @@ -13,17 +13,49 @@ class MakeModel(StrEnum): Name (EnumSymbol, Version): description * UNKNOWNMAKE__UNKNOWNMODEL (00000000, 000): - * EGAUGE__4030 (beb6d3fb, 000): A power meter in Egauge's 403x line. [More Info](https://store.egauge.net/meters). - * NCD__PR814SPST (fabfa505, 000): NCD's 4-channel high-power relay controller + 4 GPIO with I2C interface. [More Info](https://store.ncd.io/product/4-channel-high-power-relay-controller-4-gpio-with-i2c-interface/?attribute_pa_choose-a-relay=20-amp-spdt). - * ADAFRUIT__642 (acd93fb3, 000): Adafruit's high-temp, water-proof 1-wire temp sensor. [More Info](https://www.adafruit.com/product/642). + * EGAUGE__4030 (beb6d3fb, 000): A power meter in Egauge's 403x line. + [More Info](https://store.egauge.net/meters). + * NCD__PR814SPST (fabfa505, 000): NCD's 4-channel high-power relay controller + 4 GPIO + with I2C interface. + [More Info](https://store.ncd.io/product/4-channel-high-power-relay-controller-4-gpio-with-i2c-interface/?attribute_pa_choose-a-relay=20-amp-spdt). + * ADAFRUIT__642 (acd93fb3, 000): Adafruit's high-temp, water-proof 1-wire temp sensor. + [More Info](https://www.adafruit.com/product/642). * GRIDWORKS__TSNAP1 (d0178dc3, 000): Actual GridWorks TSnap 1.0 SCADA Box * GRIDWORKS__WATERTEMPHIGHPRECISION (f8b497e8, 000): Simulated temp sensor * GRIDWORKS__SIMPM1 (076da322, 000): Simulated power meter * SCHNEIDERELECTRIC__IEM3455 (d300635e, 000): Schneider Electric IEM 344 utility meter * GRIDWORKS__SIMBOOL30AMPRELAY (e81d74a8, 000): Simulated relay - * OPENENERGY__EMONPI (c75d269f, 000): Open Energy's open source multipurpose sensing device (including internal power meter). [More Info](https://docs.openenergymonitor.org/emonpi/technical.html). + * OPENENERGY__EMONPI (c75d269f, 000): Open Energy's open source multipurpose sensing device + (including internal power meter). + [More Info](https://docs.openenergymonitor.org/emonpi/technical.html). * GRIDWORKS__SIMTSNAP1 (3042c432, 000): Simulated SCADA Box - * ATLAS__EZFLO (d0b0e375, 000): Atlas Scientific EZO Embedded Flow Meter Totalizer, pulse to I2C. [More Info](https://drive.google.com/drive/u/0/folders/142bBV1pQIbMpyIR_0iRUr5gnzWgknOJp). + * ATLAS__EZFLO (d0b0e375, 000): Atlas Scientific EZO Embedded Flow Meter Totalizer, pulse to I2C. + [More Info](https://drive.google.com/drive/u/0/folders/142bBV1pQIbMpyIR_0iRUr5gnzWgknOJp). + * HUBITAT__C7__LAN1 (4d649420, 001): This refers to a Hubitat C7 that has been configured + in a specific way with respect to the APIs it presents on the Local Area Network. The + Hubitat C7 is a home automation hub that supports building ZigBee and ZWave meshes, + plugs into Ethernet, has a reasonable user interface and has an active community of + open-source developers who create drivers and package managers for devices, and supports + the creation of various types of APIs on the Local Area Network. + [More Info](https://drive.google.com/drive/folders/1AqAU_lC2phzuI9XRYvogiIYA7GXNtlr6). + * GRIDWORKS__TANK_MODULE_1 (bd759051, 001): This refers to a small module designed and + assembled by GridWorks that is meant to be mounted to the side of a hot water tank. It + requires 24V DC and has 4 temperature sensors coming out of it labeled 1, 2, 3 and 4. + It is meant to provide temperature readings (taken within a half a second of each other) + of all 4 of its sensors once a minute. + [More Info](https://drive.google.com/drive/folders/1GSxDd8Naf1GKK_fSOgQU933M1UcJ4r8q). + * FIBARO__ANALOG_TEMP_SENSOR (1f19839d, 001): This enum refers to a Fibaro home automation + device that has been configured in a specific way. This includes (1) being attached to two + 10K NTC thermistors and a specific voltage divider circuit that specifies its temperature + as a function of voltage and (2) one of its potential free outputs being in-line with + the power of a partner Fibaro, so that it can power cycle its partner (because there are + reports of Fibaros no longer reporting temp change after weeks or months until power cylced). + The Fibaro itself is a tiny (29 X 18 X 13 mm) Z-Wave device powered on 9-30V DC that can read + up to 6 1-wire DS18B20 temp sensors, 2 0-10V analog inputs and also has 2 potential free outputs. + [More Info](https://drive.google.com/drive/u/0/folders/1Muhsvw00goppHIfGSEmreX4hM6V78b-m). + * AMPHENOL__NTC_10K_THERMISTOR_MA100GG103BN (46f21cd5, 001): A small gauge, low-cost, rapid response + NTC 10K Thermistor designed for medical applications. + [More Info](https://drive.google.com/drive/u/0/folders/11HW4ov66UvxKAwqApW6IrtoXatZBLQkd). """ UNKNOWNMAKE__UNKNOWNMODEL = auto() EGAUGE__4030 = auto() @@ -37,8 +69,10 @@ class MakeModel(StrEnum): OPENENERGY__EMONPI = auto() GRIDWORKS__SIMTSNAP1 = auto() ATLAS__EZFLO = auto() - MAGNELAB__SCT0300050 = auto() - YHDC__SCT013100 = auto() + HUBITAT__C7__LAN1 = auto() + GRIDWORKS__TANK_MODULE_1 = auto() + FIBARO__ANALOG_TEMP_SENSOR = auto() + AMPHENOL__NTC_10K_THERMISTOR_MA100GG103BN = auto() @classmethod def default(cls) -> "MakeModel": diff --git a/src/gwproto/types/__init__.py b/src/gwproto/types/__init__.py index 2c9334c8..2c5da2f0 100644 --- a/src/gwproto/types/__init__.py +++ b/src/gwproto/types/__init__.py @@ -12,6 +12,14 @@ from gwproto.types.egauge_register_config import EgaugeRegisterConfig_Maker from gwproto.types.electric_meter_cac_gt import ElectricMeterCacGt from gwproto.types.electric_meter_cac_gt import ElectricMeterCacGt_Maker +from gwproto.types.fibaro_smart_implant_cac_gt import FibaroSmartImplantCacGt +from gwproto.types.fibaro_smart_implant_cac_gt import FibaroSmartImplantCacGt_Maker +from gwproto.types.fibaro_smart_implant_component_gt import ( + FibaroSmartImplantComponentGt, +) +from gwproto.types.fibaro_smart_implant_component_gt import ( + FibaroSmartImplantComponentGt_Maker, +) from gwproto.types.gt_dispatch_boolean import GtDispatchBoolean from gwproto.types.gt_dispatch_boolean import GtDispatchBoolean_Maker from gwproto.types.gt_dispatch_boolean_local import GtDispatchBooleanLocal @@ -44,6 +52,18 @@ from gwproto.types.gt_telemetry import GtTelemetry_Maker from gwproto.types.heartbeat_b import HeartbeatB from gwproto.types.heartbeat_b import HeartbeatB_Maker +from gwproto.types.hubitat_cac_gt import HubitatCacGt +from gwproto.types.hubitat_cac_gt import HubitatCacGt_Maker +from gwproto.types.hubitat_component_gt import HubitatComponentGt +from gwproto.types.hubitat_component_gt import HubitatComponentGt_Maker +from gwproto.types.hubitat_component_gt import HubitatRESTResolutionSettings +from gwproto.types.hubitat_tank_cac_gt import HubitatTankCacGt +from gwproto.types.hubitat_tank_cac_gt import HubitatTankCacGt_Maker +from gwproto.types.hubitat_tank_component_gt import HubitatTankComponentGt +from gwproto.types.hubitat_tank_component_gt import HubitatTankComponentGt_Maker +from gwproto.types.hubitat_tank_gt import FibaroTempSensorSettings +from gwproto.types.hubitat_tank_gt import FibaroTempSensorSettingsGt +from gwproto.types.hubitat_tank_gt import HubitatTankSettingsGt from gwproto.types.multipurpose_sensor_cac_gt import MultipurposeSensorCacGt from gwproto.types.multipurpose_sensor_cac_gt import MultipurposeSensorCacGt_Maker from gwproto.types.pipe_flow_sensor_cac_gt import PipeFlowSensorCacGt @@ -60,6 +80,16 @@ from gwproto.types.resistive_heater_cac_gt import ResistiveHeaterCacGt_Maker from gwproto.types.resistive_heater_component_gt import ResistiveHeaterComponentGt from gwproto.types.resistive_heater_component_gt import ResistiveHeaterComponentGt_Maker +from gwproto.types.rest_poller_cac_gt import RESTPollerCacGt +from gwproto.types.rest_poller_cac_gt import RESTPollerCacGt_Maker +from gwproto.types.rest_poller_component_gt import RESTPollerComponentGt +from gwproto.types.rest_poller_component_gt import RESTPollerComponentGt_Maker +from gwproto.types.rest_poller_gt import AioHttpClientTimeout +from gwproto.types.rest_poller_gt import RequestArgs +from gwproto.types.rest_poller_gt import RESTPollerSettings +from gwproto.types.rest_poller_gt import SessionArgs +from gwproto.types.rest_poller_gt import URLArgs +from gwproto.types.rest_poller_gt import URLConfig from gwproto.types.simple_temp_sensor_cac_gt import SimpleTempSensorCacGt from gwproto.types.simple_temp_sensor_cac_gt import SimpleTempSensorCacGt_Maker from gwproto.types.simple_temp_sensor_component_gt import SimpleTempSensorComponentGt @@ -77,6 +107,7 @@ __all__ = [ + "AioHttpClientTimeout", "ComponentAttributeClassGt", "ComponentAttributeClassGt_Maker", "ComponentGt", @@ -91,6 +122,12 @@ "ElectricMeterCacGt_Maker", # "ElectricMeterComponentGt", # "ElectricMeterComponentGt_Maker", + "FibaroTempSensorSettingsGt", + "FibaroTempSensorSettings", + "FibaroSmartImplantCacGt", + "FibaroSmartImplantCacGt_Maker", + "FibaroSmartImplantComponentGt", + "FibaroSmartImplantComponentGt_Maker", "GtDispatchBoolean", "GtDispatchBoolean_Maker", "GtDispatchBooleanLocal", @@ -113,6 +150,16 @@ "GtTelemetry_Maker", "HeartbeatB", "HeartbeatB_Maker", + "HubitatCacGt", + "HubitatCacGt_Maker", + "HubitatComponentGt", + "HubitatComponentGt_Maker", + "HubitatRESTResolutionSettings", + "HubitatTankCacGt", + "HubitatTankCacGt_Maker", + "HubitatTankComponentGt", + "HubitatTankComponentGt_Maker", + "HubitatTankSettingsGt", "MultipurposeSensorCacGt", "MultipurposeSensorCacGt_Maker", # "MultipurposeSensorComponentGt", @@ -127,10 +174,19 @@ "RelayCacGt_Maker", "RelayComponentGt", "RelayComponentGt_Maker", + "RequestArgs", "ResistiveHeaterCacGt", "ResistiveHeaterCacGt_Maker", "ResistiveHeaterComponentGt", "ResistiveHeaterComponentGt_Maker", + "RESTPollerSettings", + "RESTPollerCacGt", + "RESTPollerCacGt_Maker", + "RESTPollerComponentGt", + "RESTPollerComponentGt_Maker", + "RelayComponentGt", + "RelayComponentGt_Maker", + "SessionArgs", "SimpleTempSensorCacGt", "SimpleTempSensorCacGt_Maker", "SimpleTempSensorComponentGt", @@ -143,4 +199,6 @@ "TelemetryReportingConfig_Maker", "TelemetrySnapshotSpaceheat", "TelemetrySnapshotSpaceheat_Maker", + "URLArgs", + "URLConfig", ] diff --git a/src/gwproto/types/component_attribute_class_gt.py b/src/gwproto/types/component_attribute_class_gt.py index 57694302..c29eada4 100644 --- a/src/gwproto/types/component_attribute_class_gt.py +++ b/src/gwproto/types/component_attribute_class_gt.py @@ -68,15 +68,14 @@ def _check_component_attribute_class_id(cls, v: str) -> str: check_is_uuid_canonical_textual(v) except ValueError as e: raise ValueError( - f"ComponentAttributeClassId failed UuidCanonicalTextual format validation: {e}" + f"ComponentAttributeClassId <{v}> failed UuidCanonicalTextual format validation: {e}" ) return v def as_dict(self) -> Dict[str, Any]: - d = self.dict() - if d["DisplayName"] is None: - del d["DisplayName"] - return d + return self.dict( + include=self.__fields_set__ | {"TypeName"}, + ) def as_type(self) -> str: return json.dumps(self.as_dict()) diff --git a/src/gwproto/types/component_gt.py b/src/gwproto/types/component_gt.py index 6e15666a..146b301d 100644 --- a/src/gwproto/types/component_gt.py +++ b/src/gwproto/types/component_gt.py @@ -74,7 +74,7 @@ def _check_component_id(cls, v: str) -> str: check_is_uuid_canonical_textual(v) except ValueError as e: raise ValueError( - f"ComponentId failed UuidCanonicalTextual format validation: {e}" + f"ComponentId <{v}> failed UuidCanonicalTextual format validation: {e}" ) return v @@ -84,17 +84,14 @@ def _check_component_attribute_class_id(cls, v: str) -> str: check_is_uuid_canonical_textual(v) except ValueError as e: raise ValueError( - f"ComponentAttributeClassId failed UuidCanonicalTextual format validation: {e}" + f"ComponentAttributeClassId <{v}> failed UuidCanonicalTextual format validation: {e}" ) return v def as_dict(self) -> Dict[str, Any]: - d = self.dict() - if d["DisplayName"] is None: - del d["DisplayName"] - if d["HwUid"] is None: - del d["HwUid"] - return d + return self.dict( + include=self.__fields_set__ | {"TypeName"}, + ) def as_type(self) -> str: return json.dumps(self.as_dict()) diff --git a/src/gwproto/types/fibaro_smart_implant_cac_gt.py b/src/gwproto/types/fibaro_smart_implant_cac_gt.py new file mode 100644 index 00000000..cb71d7fa --- /dev/null +++ b/src/gwproto/types/fibaro_smart_implant_cac_gt.py @@ -0,0 +1,79 @@ +import json +import typing +from typing import Any +from typing import Literal + +from pydantic import Extra + +from gwproto.data_classes.cacs.fibaro_smart_implant_cac import FibaroSmartImplantCac +from gwproto.data_classes.component_attribute_class import ComponentAttributeClass +from gwproto.types import ComponentAttributeClassGt + + +class FibaroSmartImplantCacGt(ComponentAttributeClassGt): + Model: str = "" + TypeName: Literal["fibaro.smart.implant.cac.gt"] = "fibaro.smart.implant.cac.gt" + Version: str = "000" + + class Config: + extra = Extra.allow + + @classmethod + def from_data_class(cls, cac: FibaroSmartImplantCac) -> "FibaroSmartImplantCacGt": + return FibaroSmartImplantCacGt( + ComponentAttributeClassId=cac.component_attribute_class_id, + DisplayName=cac.display_name, + ) + + def to_data_class(self) -> FibaroSmartImplantCac: + cac = ComponentAttributeClass.by_id.get(self.ComponentAttributeClassId, None) + if cac is not None: + return typing.cast(FibaroSmartImplantCac, cac) + return FibaroSmartImplantCac( + component_attribute_class_id=self.ComponentAttributeClassId, + display_name=self.DisplayName, + ) + + def __hash__(self): + return hash((type(self),) + tuple(self.__dict__.values())) + + +class FibaroSmartImplantCacGt_Maker: + type_name: str = FibaroSmartImplantCacGt.__fields__["TypeName"].default + version = "000" + tuple: FibaroSmartImplantCacGt + + def __init__(self, cac: FibaroSmartImplantCac): + self.tuple = FibaroSmartImplantCacGt.from_data_class(cac) + + @classmethod + def tuple_to_type(cls, tpl: FibaroSmartImplantCacGt) -> str: + return tpl.as_type() + + @classmethod + def type_to_tuple(cls, t: str) -> FibaroSmartImplantCacGt: + return cls.dict_to_tuple(json.loads(t)) + + @classmethod + def dict_to_tuple(cls, d: dict[str, Any]) -> FibaroSmartImplantCacGt: + return FibaroSmartImplantCacGt(**d) + + @classmethod + def tuple_to_dc(cls, t: FibaroSmartImplantCacGt) -> FibaroSmartImplantCac: + return t.to_data_class() + + @classmethod + def dc_to_tuple(cls, dc: FibaroSmartImplantCac) -> FibaroSmartImplantCacGt: + return FibaroSmartImplantCacGt.from_data_class(dc) + + @classmethod + def type_to_dc(cls, t: str) -> FibaroSmartImplantCac: + return cls.tuple_to_dc(cls.type_to_tuple(t)) + + @classmethod + def dc_to_type(cls, dc: FibaroSmartImplantCac) -> str: + return cls.dc_to_tuple(dc).as_type() + + @classmethod + def dict_to_dc(cls, d: dict[Any, str]) -> FibaroSmartImplantCac: + return cls.tuple_to_dc(cls.dict_to_tuple(d)) diff --git a/src/gwproto/types/fibaro_smart_implant_component_gt.py b/src/gwproto/types/fibaro_smart_implant_component_gt.py new file mode 100644 index 00000000..202148a5 --- /dev/null +++ b/src/gwproto/types/fibaro_smart_implant_component_gt.py @@ -0,0 +1,86 @@ +import json +import typing +from typing import Any + +from gwproto.data_classes.component import Component +from gwproto.data_classes.components.fibaro_smart_implant_component import ( + FibaroSmartImplantComponent, +) +from gwproto.types import ComponentGt + + +class FibaroSmartImplantComponentGt(ComponentGt): + ZWaveDSK: str = "" + TypeName: typing.Literal[ + "fibaro.smart.implant.component.gt" + ] = "fibaro.smart.implant.component.gt" + + def __hash__(self): + return hash((type(self),) + tuple(self.__dict__.values())) + + @classmethod + def from_data_class( + cls, component: FibaroSmartImplantComponent + ) -> "FibaroSmartImplantComponentGt": + return FibaroSmartImplantComponentGt( + ComponentId=component.component_id, + ComponentAttributeClassId=component.component_attribute_class_id, + DisplayName=component.display_name, + HwUid=component.hw_uid, + ) + + def to_data_class(self) -> FibaroSmartImplantComponent: + component = Component.by_id.get(self.ComponentId, None) + if component is not None: + return typing.cast(FibaroSmartImplantComponent, component) + return FibaroSmartImplantComponent( + component_id=self.ComponentId, + component_attribute_class_id=self.ComponentAttributeClassId, + display_name=self.DisplayName, + hw_uid=self.HwUid, + ) + + +class FibaroSmartImplantComponentGt_Maker: + type_name: str = FibaroSmartImplantComponentGt.__fields__["TypeName"].default + version = "000" + tuple: FibaroSmartImplantComponentGt + + def __init__(self, component: FibaroSmartImplantComponent): + self.tuple = FibaroSmartImplantComponentGt.from_data_class(component) + + @classmethod + def tuple_to_type(cls, tpl: FibaroSmartImplantComponentGt) -> str: + return tpl.as_type() + + @classmethod + def type_to_tuple(cls, t: str) -> FibaroSmartImplantComponentGt: + return cls.dict_to_tuple(json.loads(t)) + + @classmethod + def dict_to_tuple(cls, d: dict[str, Any]) -> FibaroSmartImplantComponentGt: + return FibaroSmartImplantComponentGt(**d) + + @classmethod + def tuple_to_dc( + cls, t: FibaroSmartImplantComponentGt + ) -> FibaroSmartImplantComponent: + return t.to_data_class() + + @classmethod + def dc_to_tuple( + cls, dc: FibaroSmartImplantComponent + ) -> FibaroSmartImplantComponentGt: + return FibaroSmartImplantComponentGt.from_data_class(dc) + + @classmethod + def type_to_dc(cls, t: str) -> FibaroSmartImplantComponent: + return cls.tuple_to_dc(cls.type_to_tuple(t)) + + @classmethod + def dc_to_type(cls, dc: FibaroSmartImplantComponent) -> str: + return cls.dc_to_tuple(dc).as_type() + + @classmethod + def dict_to_dc(cls, d: dict[Any, str]) -> FibaroSmartImplantComponent: + return cls.tuple_to_dc(cls.dict_to_tuple(d)) diff --git a/src/gwproto/types/hubitat_cac_gt.py b/src/gwproto/types/hubitat_cac_gt.py new file mode 100644 index 00000000..6b14d65e --- /dev/null +++ b/src/gwproto/types/hubitat_cac_gt.py @@ -0,0 +1,72 @@ +import json +import typing +from typing import Literal + +from gwproto.data_classes.cacs.hubitat_cac import HubitatCac +from gwproto.data_classes.component_attribute_class import ComponentAttributeClass +from gwproto.types.component_attribute_class_gt import ComponentAttributeClassGt + + +class HubitatCacGt(ComponentAttributeClassGt): + TypeName: Literal["hubitat.cac.gt"] = "hubitat.cac.gt" + Version: str = "000" + + @classmethod + def from_data_class(cls, cac: HubitatCac) -> "HubitatCacGt": + return HubitatCacGt( + ComponentAttributeClassId=cac.component_attribute_class_id, + DisplayName=cac.display_name, + ) + + def to_data_class(self) -> HubitatCac: + cac = ComponentAttributeClass.by_id.get(self.ComponentAttributeClassId, None) + if cac is not None: + return typing.cast(HubitatCac, cac) + return HubitatCac( + component_attribute_class_id=self.ComponentAttributeClassId, + display_name=self.DisplayName, + ) + + def __hash__(self): + return hash((type(self),) + tuple(self.__dict__.values())) + + +class HubitatCacGt_Maker: + type_name: str = HubitatCacGt.__fields__["TypeName"].default + version = "000" + tuple: HubitatCacGt + + def __init__(self, cac: HubitatCac): + self.tuple = HubitatCacGt.from_data_class(cac) + + @classmethod + def tuple_to_type(cls, tpl: HubitatCacGt) -> str: + return tpl.as_type() + + @classmethod + def type_to_tuple(cls, t: str) -> HubitatCacGt: + return cls.dict_to_tuple(json.loads(t)) + + @classmethod + def dict_to_tuple(cls, d: dict[str, typing.Any]) -> HubitatCacGt: + return HubitatCacGt(**d) + + @classmethod + def tuple_to_dc(cls, t: HubitatCacGt) -> HubitatCac: + return t.to_data_class() + + @classmethod + def dc_to_tuple(cls, dc: HubitatCac) -> HubitatCacGt: + return HubitatCacGt.from_data_class(dc) + + @classmethod + def type_to_dc(cls, t: str) -> HubitatCac: + return cls.tuple_to_dc(cls.type_to_tuple(t)) + + @classmethod + def dc_to_type(cls, dc: HubitatCac) -> str: + return cls.dc_to_tuple(dc).as_type() + + @classmethod + def dict_to_dc(cls, d: dict[typing.Any, str]) -> HubitatCac: + return cls.tuple_to_dc(cls.dict_to_tuple(d)) diff --git a/src/gwproto/types/hubitat_component_gt.py b/src/gwproto/types/hubitat_component_gt.py new file mode 100644 index 00000000..03935563 --- /dev/null +++ b/src/gwproto/types/hubitat_component_gt.py @@ -0,0 +1,103 @@ +import json +import typing +from typing import Any +from typing import Dict +from typing import Literal +from typing import Optional + +import yarl + +from gwproto.data_classes.component import Component +from gwproto.data_classes.components.hubitat_component import HubitatComponent +from gwproto.types.component_gt import ComponentGt +from gwproto.types.hubitat_gt import HubitatGt +from gwproto.types.rest_poller_gt import URLConfig + + +class HubitatComponentGt(ComponentGt): + Hubitat: HubitatGt + TypeName: Literal["hubitat.component.gt"] = "hubitat.component.gt" + + def __hash__(self): + return hash((type(self),) + tuple(self.__dict__.values())) + + def url_config(self) -> URLConfig: + return self.Hubitat.url_config() + + def maker_api_url_config(self) -> URLConfig: + return self.Hubitat.maker_api_url_config() + + def urls(self) -> dict[str, Optional[yarl.URL]]: + return self.Hubitat.urls() + + @classmethod + def from_data_class(cls, component: HubitatComponent) -> "HubitatComponentGt": + return HubitatComponentGt( + ComponentId=component.component_id, + ComponentAttributeClassId=component.component_attribute_class_id, + Hubitat=component.hubitat_gt, + DisplayName=component.display_name, + HwUid=component.hw_uid, + ) + + def to_data_class(self) -> HubitatComponent: + component = Component.by_id.get(self.ComponentId, None) + if component is not None: + return typing.cast(HubitatComponent, component) + return HubitatComponent( + component_id=self.ComponentId, + component_attribute_class_id=self.ComponentAttributeClassId, + hubitat_gt=self.Hubitat, + display_name=self.DisplayName, + hw_uid=self.HwUid, + ) + + +class HubitatRESTResolutionSettings: + component_gt: HubitatComponentGt + maker_api_url_config: URLConfig + + def __init__(self, component_gt: HubitatComponentGt): + self.component_gt = component_gt + self.maker_api_url_config = self.component_gt.maker_api_url_config() + + +class HubitatComponentGt_Maker: + type_name: str = HubitatComponentGt.__fields__["TypeName"].default + version = "000" + tuple: HubitatComponentGt + + def __init__(self, component: HubitatComponent): + self.tuple = HubitatComponentGt.from_data_class(component) + + @classmethod + def tuple_to_type(cls, tpl: HubitatComponentGt) -> str: + return tpl.as_type() + + @classmethod + def type_to_tuple(cls, t: str) -> HubitatComponentGt: + return cls.dict_to_tuple(json.loads(t)) + + @classmethod + def dict_to_tuple(cls, d: dict[str, Any]) -> HubitatComponentGt: + return HubitatComponentGt(**d) + + @classmethod + def tuple_to_dc(cls, t: HubitatComponentGt) -> HubitatComponent: + return t.to_data_class() + + @classmethod + def dc_to_tuple(cls, dc: HubitatComponent) -> HubitatComponentGt: + return HubitatComponentGt.from_data_class(dc) + + @classmethod + def type_to_dc(cls, t: str) -> HubitatComponent: + return cls.tuple_to_dc(cls.type_to_tuple(t)) + + @classmethod + def dc_to_type(cls, dc: HubitatComponent) -> str: + return cls.dc_to_tuple(dc).as_type() + + @classmethod + def dict_to_dc(cls, d: dict[Any, str]) -> HubitatComponent: + return cls.tuple_to_dc(cls.dict_to_tuple(d)) diff --git a/src/gwproto/types/hubitat_gt.py b/src/gwproto/types/hubitat_gt.py new file mode 100644 index 00000000..e2f47170 --- /dev/null +++ b/src/gwproto/types/hubitat_gt.py @@ -0,0 +1,57 @@ +from typing import Optional + +import yarl +from gridworks.property_format import predicate_validator +from pydantic import BaseModel + +from gwproto.types.rest_poller_gt import URLArgs +from gwproto.types.rest_poller_gt import URLConfig +from gwproto.utils import has_mac_address_format + + +class HubitatGt(BaseModel): + Host: str + MakerApiId: int + AccessToken: str + MacAddress: str + + _is_mac_address = predicate_validator("MacAddress", has_mac_address_format) + + def url_config(self) -> URLConfig: + return URLConfig( + url_args=URLArgs( + scheme="http", + host=self.Host, + ), + ) + + def maker_api_url_config(self) -> URLConfig: + config = self.url_config() + if config.url_args.query is None: + config.url_args.query = [] + config.url_args.query.append(("access_token", self.AccessToken)) + if config.url_path_format is None: + config.url_path_format = "" + config.url_path_format += "/apps/api/{app_id}" + if config.url_path_args is None: + config.url_path_args = {} + config.url_path_args.update({"app_id": self.MakerApiId}) + return config + + def devices_url_config(self) -> URLConfig: + config = self.maker_api_url_config() + config.url_path_format += "/devices" + return config + + def url_configs(self) -> dict[str, URLConfig]: + return dict( + base=self.url_config(), + maker_api=self.maker_api_url_config(), + devices=self.devices_url_config(), + ) + + def urls(self) -> dict[str, Optional[yarl.URL]]: + return { + name: URLConfig.make_url(config) + for name, config in self.url_configs().items() + } diff --git a/src/gwproto/types/hubitat_tank_cac_gt.py b/src/gwproto/types/hubitat_tank_cac_gt.py new file mode 100644 index 00000000..c82b5a63 --- /dev/null +++ b/src/gwproto/types/hubitat_tank_cac_gt.py @@ -0,0 +1,72 @@ +import json +import typing +from typing import Literal + +from gwproto.data_classes.cacs.hubitat_tank_module_cac import HubitatTankModuleCac +from gwproto.data_classes.component_attribute_class import ComponentAttributeClass +from gwproto.types.component_attribute_class_gt import ComponentAttributeClassGt + + +class HubitatTankCacGt(ComponentAttributeClassGt): + TypeName: Literal["hubitat.tank.cac.gt"] = "hubitat.tank.cac.gt" + Version: str = "000" + + @classmethod + def from_data_class(cls, cac: HubitatTankModuleCac) -> "HubitatTankCacGt": + return HubitatTankCacGt( + ComponentAttributeClassId=cac.component_attribute_class_id, + DisplayName=cac.display_name, + ) + + def to_data_class(self) -> HubitatTankModuleCac: + cac = ComponentAttributeClass.by_id.get(self.ComponentAttributeClassId, None) + if cac is not None: + return typing.cast(HubitatTankModuleCac, cac) + return HubitatTankModuleCac( + component_attribute_class_id=self.ComponentAttributeClassId, + display_name=self.DisplayName, + ) + + def __hash__(self): + return hash((type(self),) + tuple(self.__dict__.values())) + + +class HubitatTankCacGt_Maker: + type_name: str = HubitatTankCacGt.__fields__["TypeName"].default + version = "000" + tuple: HubitatTankCacGt + + def __init__(self, cac: HubitatTankModuleCac): + self.tuple = HubitatTankCacGt.from_data_class(cac) + + @classmethod + def tuple_to_type(cls, tpl: HubitatTankCacGt) -> str: + return tpl.as_type() + + @classmethod + def type_to_tuple(cls, t: str) -> HubitatTankCacGt: + return cls.dict_to_tuple(json.loads(t)) + + @classmethod + def dict_to_tuple(cls, d: dict[str, typing.Any]) -> HubitatTankCacGt: + return HubitatTankCacGt(**d) + + @classmethod + def tuple_to_dc(cls, t: HubitatTankCacGt) -> HubitatTankModuleCac: + return t.to_data_class() + + @classmethod + def dc_to_tuple(cls, dc: HubitatTankModuleCac) -> HubitatTankCacGt: + return HubitatTankCacGt.from_data_class(dc) + + @classmethod + def type_to_dc(cls, t: str) -> HubitatTankModuleCac: + return cls.tuple_to_dc(cls.type_to_tuple(t)) + + @classmethod + def dc_to_type(cls, dc: HubitatTankModuleCac) -> str: + return cls.dc_to_tuple(dc).as_type() + + @classmethod + def dict_to_dc(cls, d: dict[typing.Any, str]) -> HubitatTankModuleCac: + return cls.tuple_to_dc(cls.dict_to_tuple(d)) diff --git a/src/gwproto/types/hubitat_tank_component_gt.py b/src/gwproto/types/hubitat_tank_component_gt.py new file mode 100644 index 00000000..03371faa --- /dev/null +++ b/src/gwproto/types/hubitat_tank_component_gt.py @@ -0,0 +1,86 @@ +import copy +import json +import typing +from typing import Any +from typing import Literal + +from gwproto.data_classes.component import Component +from gwproto.data_classes.components.hubitat_tank_component import HubitatTankComponent +from gwproto.types.component_gt import ComponentGt +from gwproto.types.hubitat_tank_gt import HubitatTankSettingsGt + + +class HubitatTankComponentGt(ComponentGt): + Tank: HubitatTankSettingsGt + TypeName: Literal["hubitat.tank.component.gt"] = "hubitat.tank.component.gt" + + def __hash__(self): + return hash((type(self),) + tuple(self.__dict__.values())) + + @classmethod + def from_data_class( + cls, component: HubitatTankComponent + ) -> "HubitatTankComponentGt": + return HubitatTankComponentGt( + ComponentId=component.component_id, + ComponentAttributeClassId=component.component_attribute_class_id, + Tank=HubitatTankSettingsGt( + hubitat_component_id=component.hubitat.ComponentId, + devices=copy.deepcopy(component.devices), + ), + DisplayName=component.display_name, + HwUid=component.hw_uid, + ) + + def to_data_class(self) -> HubitatTankComponent: + component = Component.by_id.get(self.ComponentId, None) + if component is not None: + return typing.cast(HubitatTankComponent, component) + return HubitatTankComponent( + component_id=self.ComponentId, + component_attribute_class_id=self.ComponentAttributeClassId, + tank_gt=self.Tank, + display_name=self.DisplayName, + hw_uid=self.HwUid, + ) + + +class HubitatTankComponentGt_Maker: + type_name: str = HubitatTankComponentGt.__fields__["TypeName"].default + version = "000" + tuple: HubitatTankComponentGt + + def __init__(self, component: HubitatTankComponent): + self.tuple = HubitatTankComponentGt.from_data_class(component) + + @classmethod + def tuple_to_type(cls, tpl: HubitatTankComponentGt) -> str: + return tpl.as_type() + + @classmethod + def type_to_tuple(cls, t: str) -> HubitatTankComponentGt: + return cls.dict_to_tuple(json.loads(t)) + + @classmethod + def dict_to_tuple(cls, d: dict[str, Any]) -> HubitatTankComponentGt: + return HubitatTankComponentGt(**d) + + @classmethod + def tuple_to_dc(cls, t: HubitatTankComponentGt) -> HubitatTankComponent: + return t.to_data_class() + + @classmethod + def dc_to_tuple(cls, dc: HubitatTankComponent) -> HubitatTankComponentGt: + return HubitatTankComponentGt.from_data_class(dc) + + @classmethod + def type_to_dc(cls, t: str) -> HubitatTankComponent: + return cls.tuple_to_dc(cls.type_to_tuple(t)) + + @classmethod + def dc_to_type(cls, dc: HubitatTankComponent) -> str: + return cls.dc_to_tuple(dc).as_type() + + @classmethod + def dict_to_dc(cls, d: dict[Any, str]) -> HubitatTankComponent: + return cls.tuple_to_dc(cls.dict_to_tuple(d)) diff --git a/src/gwproto/types/hubitat_tank_gt.py b/src/gwproto/types/hubitat_tank_gt.py new file mode 100644 index 00000000..53cd5a88 --- /dev/null +++ b/src/gwproto/types/hubitat_tank_gt.py @@ -0,0 +1,228 @@ +import copy +import re +from functools import cached_property +from typing import Optional + +import yarl +from pydantic import BaseModel +from pydantic import Extra +from pydantic import conint +from pydantic import validator + +from gwproto.enums import TelemetryName as EnumTelemetryName +from gwproto.enums import Unit as EnumUnit +from gwproto.types.hubitat_component_gt import HubitatRESTResolutionSettings +from gwproto.types.rest_poller_gt import RequestArgs +from gwproto.types.rest_poller_gt import RESTPollerSettings +from gwproto.types.rest_poller_gt import URLArgs +from gwproto.types.rest_poller_gt import URLConfig +from gwproto.types.simple_temp_sensor_cac_gt import TelemetryNameMap +from gwproto.types.simple_temp_sensor_cac_gt import UnitMap +from gwproto.utils import snake_to_camel + + +HUBITAT_ID_REGEX = re.compile( + r".*/apps/api/(?P-?\d+)/devices/(?P-?\d+).*?" +) +HUBITAT_ACCESS_TOKEN_REGEX = re.compile( + r".*\?.*access_token=(?P[a-fA-F0-9\-]+).*" +) + + +class FibaroTempSensorSettingsGt(BaseModel): + stack_depth: conint(ge=1) + device_id: int + fibaro_component_id: str + analog_input_id: conint(ge=1, le=2) + tank_label: str = "" + exponent: int = 1 + telemetry_name_gt_enum_symbol: str = "c89d0ba1" + temp_unit_gt_enum_symbol: str = "ec14bd47" + enabled: bool = True + rest: Optional[RESTPollerSettings] = None + + class Config: + extra = Extra.allow + alias_generator = snake_to_camel + allow_population_by_field_name = True + + @validator("telemetry_name_gt_enum_symbol") + def _check_telemetry_name_symbol(cls, v: str) -> str: + if v not in TelemetryNameMap.type_to_versioned_enum_dict: + v = TelemetryNameMap.local_to_type(EnumTelemetryName.default()) + return v + + @validator("temp_unit_gt_enum_symbol") + def _checktemp_unit_gt_enum_symbol(cls, v: str) -> str: + if v not in UnitMap.type_to_versioned_enum_dict: + v = UnitMap.local_to_type(EnumUnit.default()) + return v + + +DEFAULT_SENSOR_NODE_NAME_FORMAT = "{tank_name}.temp.depth{stack_depth}" + + +class FibaroTempSensorSettings(FibaroTempSensorSettingsGt): + node_name: str + + class Config: + keep_untouched = (cached_property, EnumTelemetryName) + + @validator("rest") + def _collapse_rest_url(cls, v: Optional[RESTPollerSettings]): + if v is not None: + # Collapse session.base_url and request.url into + # request.url. + collapsed_url = v.url + v.session.base_url = URLConfig() + v.request.url.url_args = URLArgs.from_url(collapsed_url) + return v + + @property + def telemetry_name(self) -> EnumTelemetryName: + return TelemetryNameMap.type_to_local( + self.telemetry_name_gt_enum_symbol, + ) + + @property + def unit(self) -> EnumUnit: + return UnitMap.type_to_local( + self.temp_unit_gt_enum_symbol, + ) + + @cached_property + def url(self) -> yarl.URL: + return self.rest.url + + @cached_property + def api_id(self) -> int: + return int(HUBITAT_ID_REGEX.match(str(self.url)).group("api_id")) + + @property + def host(self) -> str: + return self.rest.url.host + + @cached_property + def access_token(self) -> Optional[str]: + match = HUBITAT_ACCESS_TOKEN_REGEX.match(str(self.url)) + if match: + return match.group("access_token") + return None + + def clear_property_cache(self): + if self.rest is not None: + self.rest.clear_property_cache() + for prop in [ + "url", + "api_id", + "access_token", + ]: + self.__dict__.pop(prop, None) + + def resolve_rest( + self, + hubitat: HubitatRESTResolutionSettings, + ) -> None: + # Constuct url config on top of maker api url url config + constructed_config = copy.deepcopy(hubitat.maker_api_url_config) + constructed_config.url_path_format += "/devices/{device_id}/refresh" + constructed_config.url_path_args["device_id"] = self.device_id + + if self.rest is None: + # Since no "inline" rest configuration is present, use constructed url config + self.rest = RESTPollerSettings(request=RequestArgs(url=constructed_config)) + else: + # Again, no inline url config is found; use constructed url config + if self.rest.request.url is None: + self.rest.request.url = constructed_config + else: + # An inline config exists; take items *not* in inline config from + # constructed config (inline config 'wins' on disagreement) + existing_config = self.rest.request.url + if not existing_config.url_args.host: + existing_config.url_args.host = constructed_config.url_args.host + if existing_config.url_path_format is None: + existing_config.url_path_format = constructed_config.url_path_format + if existing_config.url_path_args is None: + existing_config.url_path_args = constructed_config.url_path_args + else: + existing_config.url_path_args = dict( + constructed_config.url_path_args, + **existing_config.url_path_args, + ) + self.rest.clear_property_cache() + + # Verify new URL produced by combining any inline REST configuration + # with hubitat configuration is valid. + url_str = str(self.rest.url) + hubitat_gt = hubitat.component_gt.Hubitat + # check host + if hubitat_gt.Host != self.rest.url.host: + raise ValueError( + "ERROR host expected to be " + f"{hubitat_gt.Host} but host in url is " + f"{self.rest.url.host}, from url: <{url_str}>" + ) + + # check api_id + if hubitat_gt.MakerApiId != self.api_id: + raise ValueError( + "ERROR api_id expected to be " + f"{hubitat_gt.MakerApiId} but api_id in url is " + f"{self.api_id}, from url: <{url_str}>" + ) + + # check device_id + id_match = HUBITAT_ID_REGEX.match(url_str) + if not id_match: + raise ValueError( + f"ERROR. ID regex <{HUBITAT_ID_REGEX.pattern}> failed to match " + f" url <{url_str}>" + ) + found_device_id = int(id_match.group("device_id")) + if self.device_id != found_device_id: + raise ValueError( + "ERROR explicit device_id is " + f"{self.device_id} but device in url is " + f"{found_device_id}, from url: <{url_str}>" + ) + + # check token match + if hubitat_gt.AccessToken != self.access_token: + raise ValueError( + "ERROR explicit access_token is " + f"{hubitat_gt.AccessToken} but device in url is " + f"{self.access_token}, from url: <{url_str}>" + ) + + @classmethod + def create( + cls, + tank_name: str, + settings_gt: FibaroTempSensorSettingsGt, + hubitat: HubitatRESTResolutionSettings, + node_name_format=DEFAULT_SENSOR_NODE_NAME_FORMAT, + ) -> "FibaroTempSensorSettings": + settings = FibaroTempSensorSettings( + node_name=node_name_format.format( + tank_name=tank_name, + stack_depth=settings_gt.stack_depth, + ), + **settings_gt.dict(), + ) + settings.resolve_rest(hubitat) + return settings + + +DEFAULT_TANK_MODULE_VOLTAGE = 23.7 + + +class HubitatTankSettingsGt(BaseModel): + hubitat_component_id: str + sensor_supply_voltage: float = DEFAULT_TANK_MODULE_VOLTAGE + devices: list[FibaroTempSensorSettingsGt] = [] + + class Config: + extra = Extra.allow + alias_generator = snake_to_camel + allow_population_by_field_name = True diff --git a/src/gwproto/types/rest_poller_cac_gt.py b/src/gwproto/types/rest_poller_cac_gt.py new file mode 100644 index 00000000..104ee55c --- /dev/null +++ b/src/gwproto/types/rest_poller_cac_gt.py @@ -0,0 +1,90 @@ +import json +import typing +from typing import Any +from typing import Dict +from typing import Literal +from typing import Optional + +from pydantic import UUID4 +from pydantic import BaseModel +from pydantic import validator + +from gwproto.data_classes.cacs.rest_poller_cac import RESTPollerCac +from gwproto.data_classes.component_attribute_class import ComponentAttributeClass + + +class RESTPollerCacGt(BaseModel): + ComponentAttributeClassId: str + DisplayName: Optional[str] = None + TypeName: Literal["rest.poller.cac.gt"] = "rest.poller.cac.gt" + Version: str = "000" + + @validator("ComponentAttributeClassId") + def _check_component_attribute_class_id(cls, v: str) -> str: + return str(UUID4(v)) + + def as_dict(self) -> Dict[str, Any]: + return self.dict(exclude_unset=True) + + def as_type(self) -> str: + return json.dumps(self.as_dict()) + + @classmethod + def from_data_class(cls, cac: RESTPollerCac) -> "RESTPollerCacGt": + return RESTPollerCacGt( + ComponentAttributeClassId=cac.component_attribute_class_id, + DisplayName=cac.display_name, + ) + + def to_data_class(self) -> RESTPollerCac: + cac = ComponentAttributeClass.by_id.get(self.ComponentAttributeClassId, None) + if cac is not None: + return typing.cast(RESTPollerCac, cac) + return RESTPollerCac( + component_attribute_class_id=self.ComponentAttributeClassId, + display_name=self.DisplayName, + ) + + def __hash__(self): + return hash((type(self),) + tuple(self.__dict__.values())) + + +class RESTPollerCacGt_Maker: + type_name: str = RESTPollerCacGt.__fields__["TypeName"].default + version = "000" + tuple: RESTPollerCacGt + + def __init__(self, cac: RESTPollerCac): + self.tuple = RESTPollerCacGt.from_data_class(cac) + + @classmethod + def tuple_to_type(cls, tpl: RESTPollerCacGt) -> str: + return tpl.as_type() + + @classmethod + def type_to_tuple(cls, t: str) -> RESTPollerCacGt: + return cls.dict_to_tuple(json.loads(t)) + + @classmethod + def dict_to_tuple(cls, d: dict[str, Any]) -> RESTPollerCacGt: + return RESTPollerCacGt(**d) + + @classmethod + def tuple_to_dc(cls, t: RESTPollerCacGt) -> RESTPollerCac: + return t.to_data_class() + + @classmethod + def dc_to_tuple(cls, dc: RESTPollerCac) -> RESTPollerCacGt: + return RESTPollerCacGt.from_data_class(dc) + + @classmethod + def type_to_dc(cls, t: str) -> RESTPollerCac: + return cls.tuple_to_dc(cls.type_to_tuple(t)) + + @classmethod + def dc_to_type(cls, dc: RESTPollerCac) -> str: + return cls.dc_to_tuple(dc).as_type() + + @classmethod + def dict_to_dc(cls, d: dict[Any, str]) -> RESTPollerCac: + return cls.tuple_to_dc(cls.dict_to_tuple(d)) diff --git a/src/gwproto/types/rest_poller_component_gt.py b/src/gwproto/types/rest_poller_component_gt.py new file mode 100644 index 00000000..b38d02ba --- /dev/null +++ b/src/gwproto/types/rest_poller_component_gt.py @@ -0,0 +1,106 @@ +"""Code for actors that use a simple rest interaction, converting the response to one or more +REST commands into a message posted to main processing thread. + +""" +import json +import typing +from typing import Any +from typing import Dict +from typing import Optional + +from pydantic import UUID4 +from pydantic import BaseModel +from pydantic import validator + +from gwproto.data_classes.component import Component +from gwproto.data_classes.components.rest_poller_component import RESTPollerComponent +from gwproto.types.rest_poller_gt import RESTPollerSettings + + +class RESTPollerComponentGt(BaseModel): + ComponentId: str + ComponentAttributeClassId: str + DisplayName: Optional[str] = None + HwUid: Optional[str] = None + Rest: RESTPollerSettings + TypeName: typing.Literal["rest.poller.component.gt"] = "rest.poller.component.gt" + + @validator("ComponentId") + def _check_component_id(cls, v: str) -> str: + return str(UUID4(v)) + + @validator("ComponentAttributeClassId") + def _check_component_attribute_class_id(cls, v: str) -> str: + return str(UUID4(v)) + + def as_dict(self) -> Dict[str, Any]: + return self.dict(exclude_unset=True) + + def as_type(self) -> str: + return json.dumps(self.as_dict()) + + def __hash__(self): + return hash((type(self),) + tuple(self.__dict__.values())) + + @classmethod + def from_data_class(cls, component: RESTPollerComponent) -> "RESTPollerComponentGt": + return RESTPollerComponentGt( + ComponentId=component.component_id, + ComponentAttributeClassId=component.component_attribute_class_id, + DisplayName=component.display_name, + HwUid=component.hw_uid, + Rest=component.rest, + ) + + def to_data_class(self) -> RESTPollerComponent: + component = Component.by_id.get(self.ComponentId, None) + if component is not None: + return typing.cast(RESTPollerComponent, component) + return RESTPollerComponent( + component_id=self.ComponentId, + component_attribute_class_id=self.ComponentAttributeClassId, + rest=self.Rest, + display_name=self.DisplayName, + hw_uid=self.HwUid, + ) + + +class RESTPollerComponentGt_Maker: + type_name: str = RESTPollerComponentGt.__fields__["TypeName"].default + version = "000" + tuple: RESTPollerComponentGt + + def __init__(self, component: RESTPollerComponent): + self.tuple = RESTPollerComponentGt.from_data_class(component) + + @classmethod + def tuple_to_type(cls, tpl: RESTPollerComponentGt) -> str: + return tpl.as_type() + + @classmethod + def type_to_tuple(cls, t: str) -> RESTPollerComponentGt: + return cls.dict_to_tuple(json.loads(t)) + + @classmethod + def dict_to_tuple(cls, d: dict[str, Any]) -> RESTPollerComponentGt: + return RESTPollerComponentGt(**d) + + @classmethod + def tuple_to_dc(cls, t: RESTPollerComponentGt) -> RESTPollerComponent: + return t.to_data_class() + + @classmethod + def dc_to_tuple(cls, dc: RESTPollerComponent) -> RESTPollerComponentGt: + return RESTPollerComponentGt.from_data_class(dc) + + @classmethod + def type_to_dc(cls, t: str) -> RESTPollerComponent: + return cls.tuple_to_dc(cls.type_to_tuple(t)) + + @classmethod + def dc_to_type(cls, dc: RESTPollerComponent) -> str: + return cls.dc_to_tuple(dc).as_type() + + @classmethod + def dict_to_dc(cls, d: dict[Any, str]) -> RESTPollerComponent: + return cls.tuple_to_dc(cls.dict_to_tuple(d)) diff --git a/src/gwproto/types/rest_poller_gt.py b/src/gwproto/types/rest_poller_gt.py new file mode 100644 index 00000000..ce90361e --- /dev/null +++ b/src/gwproto/types/rest_poller_gt.py @@ -0,0 +1,263 @@ +"""Code for actors that use a simple rest interaction, converting the response to one or more +REST commands into a message posted to main processing thread. + +""" +from functools import cached_property +from typing import Literal +from typing import Optional +from typing import Tuple + +import yarl +from pydantic import BaseModel +from pydantic import Extra +from pydantic import HttpUrl +from pydantic import root_validator + +from gwproto.utils import snake_to_camel + + +class URLArgs(BaseModel): + """A container for paramters that can be passed to yarl.URL.build()""" + + scheme: Literal["http", "https", ""] = "https" + user: Optional[str] = None + password: Optional[str] = None + host: str = "" + port: Optional[int] = None + path: str = "" + query: Optional[list[Tuple[str, str | int | float]]] = None + fragment: str = "" + encoded: bool = True + + class Config: + alias_generator = snake_to_camel + allow_population_by_field_name = True + + @classmethod + def dict_from_url(cls, url: str | yarl.URL) -> dict: + if isinstance(url, str): + url = yarl.URL(url) + return dict( + scheme=url.scheme, + user=url.user, + password=url.password, + host=url.host, + port=url.port, + path=url.path, + query=list(url.query.items()), + fragment=url.fragment, + ) + + @classmethod + def from_url(cls, url: str | yarl.URL) -> "URLArgs": + return URLArgs(**cls.dict_from_url(url)) + + +class URLConfig(BaseModel): + """Construct a URL. Three methods are provided. They are run in order of appearance, + each updating and/or modifying the previous method. + + The methods are: + - 'URL', an explicit string (e.g. https://www.example.org) + - 'URLArgs', a dictionary of arguments that will be passed to yarl.URL.build() + - 'URLPathFormat' and 'URLPathArgs', a format string and optional parameters used to + set the 'path' portion of a yarl.URL. + + See make_url() for implementation. + """ + + url: Optional[HttpUrl] = None + """URL as an explicit string""" + + url_args: Optional[URLArgs] = None + """Arguments that can be passed to yarl.URL.build()""" + + url_path_format: str = "" + """A string or format string used for the 'path' portion of the URL. + This string will be formatted with the contents of url_path_args. + For example, url_path_format="a/{device_id}/b" could be used used with + url_path_args={"device_id":1} to produce a 'path' of "a/1/b". + See make_url() for details. + """ + + url_path_args: Optional[dict[str, str | int | float]] = None + """A dictionary of parameters used for filling in url_path_format to + produce the URL 'path' field. The formatting operation is done as + url_path_format.format(**URLPathArgs). See make_url() for details. + """ + + class Config: + alias_generator = snake_to_camel + allow_population_by_field_name = True + + def to_url(self) -> yarl.URL: + return self.make_url(self) + + @classmethod + def make_url_args(cls, url_config: "URLConfig") -> Optional[dict]: + if url_config is None: + return None + + # args from self.url + if url_config.url is None: + url_args = dict() + else: + url_args = dict(URLArgs.from_url(yarl.URL(url_config.url))) + + # args from self.url_args + if url_config.url_args is not None: + url_args.update(url_config.url_args) + + # args from url_path_format + if url_config.url_path_format: + path = url_config.url_path_format + if url_config.url_path_args: + path = path.format(**url_config.url_path_args) + url_args["path"] = path + + return url_args + + @classmethod + def make_url(cls, url_config: "URLConfig") -> Optional[yarl.URL]: + args = URLConfig.make_url_args(url_config) + if args: + return yarl.URL.build(**args) + return None + + +class AioHttpClientTimeout(BaseModel): + total: Optional[float] = None + connect: Optional[float] = None + sock_read: Optional[float] = None + sock_connect: Optional[float] = None + + class Config: + alias_generator = snake_to_camel + allow_population_by_field_name = True + + +class SessionArgs(BaseModel): + base_url: Optional[URLConfig] = None + timeout: Optional[AioHttpClientTimeout] = None + + class Config: + extra = Extra.allow + alias_generator = snake_to_camel + allow_population_by_field_name = True + + +class RequestArgs(BaseModel): + url: Optional[URLConfig] = None + method: Literal["GET", "POST", "PUT", "DELETE"] = "GET" + params: Optional[dict] = None + data: Optional[dict | list | tuple] = None + headers: Optional[dict] = None + timeout: AioHttpClientTimeout = None + ssl: Optional[bool] = None + + class Config: + extra = Extra.allow + alias_generator = snake_to_camel + allow_population_by_field_name = True + + +class ErrorResponse(BaseModel): + error_for_http_status: bool = True + raise_exception: bool = False + report: bool = True + + class Config: + extra = Extra.allow + alias_generator = snake_to_camel + allow_population_by_field_name = True + + +class ErrorResponses(BaseModel): + request: ErrorResponse = ErrorResponse() + convert: ErrorResponse = ErrorResponse() + + class Config: + extra = Extra.allow + alias_generator = snake_to_camel + allow_population_by_field_name = True + + +class RESTPollerSettings(BaseModel): + session: SessionArgs = SessionArgs() + request: RequestArgs = RequestArgs() + poll_period_seconds: float = 60 + errors: ErrorResponses = ErrorResponses() + + class Config: + extra = Extra.allow + alias_generator = snake_to_camel + allow_population_by_field_name = True + keep_untouched = (cached_property,) + + def url_args(self) -> dict: + session_args = URLConfig.make_url_args(self.session.base_url) + request_args = URLConfig.make_url_args(self.request.url) + if session_args is None and request_args is None: + if session_args is None and request_args is None: + raise ValueError( + "Neither session.base_url nor request.url produces a URL" + ) + if session_args is not None: + url_args = session_args + if request_args is not None: + url_args.update(request_args) + else: + url_args = request_args + return url_args + + @cached_property + def url(self) -> yarl.URL: + if self.session.base_url is None and self.request.url is None: + raise ValueError("Neither session.base_url nor request.url produces a URL") + session_args = URLConfig.make_url_args(self.session.base_url) + request_args = URLConfig.make_url_args(self.request.url) + if session_args is not None: + url_args = session_args + if request_args is not None: + url_args.update(request_args) + else: + url_args = request_args + return yarl.URL.build(**url_args) + + def clear_property_cache(self): + self.__dict__.pop("url", None) + + @root_validator(skip_on_failure=True) + def post_root_validator(cls, values: dict) -> dict: + base_url = URLConfig.make_url(values["session"].base_url) + url = URLConfig.make_url(values["request"].url) + if base_url is None and url is None: + raise ValueError( + "ERROR. At least one of session.base_url and request.url must be specified" + ) + if base_url is None: + if not url.is_absolute(): + raise ValueError( + "ERROR. if session.base_url is None, request.url must be absolute\n" + f" request.url: <{url}>\n" + ) + if base_url is not None and not base_url.is_absolute(): + raise ValueError( + f"ERROR. session.base_url is not absolute.\n" + f" session.base_url: <{base_url}>\n" + ) + if base_url is not None and url is not None: + if url.is_absolute(): + raise ValueError( + "ERROR. Both session.base_url and request.url are absolute.\n" + f" session.base_url: <{base_url}>\n" + f" request.url: <{url}>\n" + ) + if not url.path.startswith("/"): + raise ValueError( + "ERROR. If session.base_url not None, request.url.path must start with '/'.\n" + f" session.base_url: <{base_url}>\n" + f" request.url: <{url}>\n" + f" request.url.path: <{url.path}>\n" + ) + return values diff --git a/src/gwproto/types/spaceheat_node_gt.py b/src/gwproto/types/spaceheat_node_gt.py index aef90e58..1f4d5172 100644 --- a/src/gwproto/types/spaceheat_node_gt.py +++ b/src/gwproto/types/spaceheat_node_gt.py @@ -30,7 +30,8 @@ class ShActorClass000SchemaEnum: "b103058f", "dae4b2f0", "7c483ad0", - "4a9c1785", + "0401b27e", + "e2877329", ] @classmethod @@ -50,6 +51,8 @@ class ShActorClass000(StrEnum): SimpleSensor = auto() MultipurposeSensor = auto() Thermostat = auto() + HubitatTelemetryReader = auto() + HubitatTankModule = auto() @classmethod def default(cls) -> "ShActorClass000": @@ -87,6 +90,8 @@ def local_to_type(cls, actor_class: EnumActorClass) -> str: "dae4b2f0": ShActorClass000.SimpleSensor, "7c483ad0": ShActorClass000.MultipurposeSensor, "4a9c1785": ShActorClass000.Thermostat, + "0401b27e": ShActorClass000.HubitatTelemetryReader, + "e2877329": ShActorClass000.HubitatTankModule, } versioned_enum_to_type_dict: Dict[ShActorClass000, str] = { @@ -99,6 +104,8 @@ def local_to_type(cls, actor_class: EnumActorClass) -> str: ShActorClass000.SimpleSensor: "dae4b2f0", ShActorClass000.MultipurposeSensor: "7c483ad0", ShActorClass000.Thermostat: "4a9c1785", + ShActorClass000.HubitatTelemetryReader: "0401b27e", + ShActorClass000.HubitatTankModule: "e2877329", } diff --git a/src/gwproto/utils.py b/src/gwproto/utils.py index 333da558..591e66b4 100644 --- a/src/gwproto/utils.py +++ b/src/gwproto/utils.py @@ -89,3 +89,14 @@ def all_equal(iterator: Any) -> bool: except StopIteration: return True return all(first == x for x in iterator) + + +# def predicate_validator( +# field_name: str, predicate: Callable[[Any], bool], error_format: str = "", **kwargs +# ) -> classmethod: # type: ignore + +MAC_REGEX = re.compile("[0-9a-f]{2}([-:]?)[0-9a-f]{2}(\\1[0-9a-f]{2}){4}$") + + +def has_mac_address_format(mac_str: str) -> bool: + return bool(MAC_REGEX.match(mac_str.lower())) diff --git a/tests/enums/actor_class_test.py b/tests/enums/actor_class_test.py index fc75965a..49853746 100644 --- a/tests/enums/actor_class_test.py +++ b/tests/enums/actor_class_test.py @@ -1,4 +1,4 @@ -"""Tests for schema enum sh.actor.class.001""" +"""Tests for schema enum sh.actor.class.000""" from gwproto.enums import ActorClass @@ -13,6 +13,8 @@ def test_actor_class() -> None: "SimpleSensor", "MultipurposeSensor", "Thermostat", + "HubitatTankModule", + "HubitatTelemetryReader", } assert ActorClass.default() == ActorClass.NoActor diff --git a/tests/enums/make_model_test.py b/tests/enums/make_model_test.py index ee99e4c0..83cff91a 100644 --- a/tests/enums/make_model_test.py +++ b/tests/enums/make_model_test.py @@ -1,4 +1,4 @@ -"""Tests for schema enum spaceheat.make.model.000""" +"""Tests for schema enum spaceheat.make.model.001""" from gwproto.enums import MakeModel @@ -6,10 +6,6 @@ def test_make_model() -> None: assert set(MakeModel.values()) == { "UNKNOWNMAKE__UNKNOWNMODEL", "EGAUGE__4030", - "GRIDWORKS__SIMTSNAP1", - "ATLAS__EZFLO", - "MAGNELAB__SCT0300050", - "YHDC__SCT013100", "NCD__PR814SPST", "ADAFRUIT__642", "GRIDWORKS__TSNAP1", @@ -18,6 +14,12 @@ def test_make_model() -> None: "SCHNEIDERELECTRIC__IEM3455", "GRIDWORKS__SIMBOOL30AMPRELAY", "OPENENERGY__EMONPI", + "GRIDWORKS__SIMTSNAP1", + "ATLAS__EZFLO", + "HUBITAT__C7__LAN1", + "GRIDWORKS__TANK_MODULE_1", + "FIBARO__ANALOG_TEMP_SENSOR", + "AMPHENOL__NTC_10K_THERMISTOR_MA100GG103BN", } assert MakeModel.default() == MakeModel.UNKNOWNMAKE__UNKNOWNMODEL