{
  "version": "0.6",
  "problemsPage": "meter-problems-today.html",
  "tracks": [
    {
      "id": "steamaco",
      "short": "SteamaCo",
      "label": "SteamaCo · Nimbus + Savi",
      "href": "index.html#village-metering/vendor-study"
    },
    {
      "id": "sparkmeter",
      "short": "SparkMeter",
      "label": "SparkMeter / EarthSpark · TC2.0",
      "href": "index.html#village-metering/tc20-review"
    },
    {
      "id": "enaccess",
      "short": "EnAccess",
      "label": "EnAccess OSS · MPM · OpenPAYGO · OpenSmartMeter",
      "href": "https://github.com/enaccess"
    },
    {
      "id": "openami",
      "short": "OpenAMI",
      "label": "OpenAMI (could) · MeshEMS · MQTT · geo",
      "href": "index.html#village-metering/openami",
      "mode": "could"
    }
  ],
  "groups": [
    { "id": "billing", "label": "Billing & payment", "short": "Billing" },
    { "id": "cutoffs", "label": "Cutoffs & control", "short": "Cutoffs" },
    { "id": "theft", "label": "Theft & losses", "short": "Theft & losses" },
    { "id": "visibility", "label": "Visibility & operations", "short": "Visibility" },
    { "id": "affordability", "label": "Affordability", "short": "Affordability" },
    { "id": "comms", "label": "When communications fail", "short": "Comms failure" },
    { "id": "integration", "label": "Integration & long-term freedom", "short": "Integration" }
  ],
  "problems": [
    { "id": "prob-usage", "group": "billing", "label": "Per-home kWh" },
    { "id": "prob-prepaid", "group": "billing", "label": "Collect before use" },
    { "id": "prob-token-deliver", "group": "billing", "label": "Deliver credit" },
    { "id": "prob-balance", "group": "billing", "label": "Show balance" },
    { "id": "prob-token-audit", "group": "billing", "label": "Token audit" },
    { "id": "prob-oam-revenue", "group": "billing", "label": "O&M revenue" },
    { "id": "prob-disconnect", "group": "cutoffs", "label": "Disconnect" },
    { "id": "prob-reconnect", "group": "cutoffs", "label": "Reconnect" },
    { "id": "prob-multi-pole", "group": "cutoffs", "label": "Multi-home pole" },
    { "id": "prob-tamper", "group": "theft", "label": "Illegal taps" },
    { "id": "prob-unmetered", "group": "theft", "label": "Unmetered load" },
    { "id": "prob-leakage", "group": "theft", "label": "Line leakage" },
    { "id": "prob-neutral", "group": "theft", "label": "Neutral imbalance" },
    { "id": "prob-meter-disagree", "group": "theft", "label": "Meters disagree" },
    { "id": "prob-spot-theft", "group": "theft", "label": "Spot theft" },
    { "id": "prob-voltage", "group": "visibility", "label": "Voltage at home" },
    { "id": "prob-instant-power", "group": "visibility", "label": "Instant power" },
    { "id": "prob-identity", "group": "visibility", "label": "Serial & clock" },
    { "id": "prob-meter-cost", "group": "affordability", "label": "Meter capex" },
    { "id": "prob-mdms-cost", "group": "affordability", "label": "MDMS cost" },
    { "id": "prob-cloud-down", "group": "comms", "label": "Cloud unreachable" },
    { "id": "prob-prepaid-offline", "group": "comms", "label": "Prepaid offline" },
    { "id": "prob-vend-down", "group": "comms", "label": "Vending down" },
    { "id": "prob-crm", "group": "integration", "label": "Mobile money CRM" },
    { "id": "prob-protocols", "group": "integration", "label": "Mixed protocols" },
    { "id": "prob-vendor-exit", "group": "integration", "label": "Vendor exit" },
    { "id": "prob-inverter-mix", "group": "integration", "label": "Inverter vs billing" }
  ],
  "hardware": [
    { "id": "meter", "label": "House revenue meter", "short": "Meter" },
    { "id": "ciu", "label": "CIU · keypad", "short": "CIU" },
    { "id": "site-hes", "label": "Site HES / DCU / GroundBolt", "short": "Site HES" },
    { "id": "street-ems", "label": "Street EMS gateway", "short": "Street EMS", "desc": "Multitenant pole system (uses MeshEMS board)" },
    { "id": "mesh", "label": "MeshEMS · DCU · NAN", "short": "Mesh / NAN", "desc": "Mesh board, SparkNet NAN, or vendor DCU radio path" },
    { "id": "feeder", "label": "Feeder instrumentation", "short": "Feeder" },
    { "id": "cloud", "label": "Operator cloud host", "short": "Cloud" }
  ],
  "softwareKinds": [
    { "id": "steamaco", "label": "SteamaCo", "short": "SteamaCo" },
    { "id": "sparkmeter", "label": "SparkMeter / EarthSpark", "short": "SparkMeter" },
    { "id": "enaccess", "label": "EnAccess OSS", "short": "EnAccess" },
    { "id": "openami", "label": "OpenAMI (could)", "short": "OpenAMI" }
  ],
  "software": [
    {
      "id": "sol-savi",
      "label": "Savi STS meters",
      "kind": "steamaco",
      "track": ["steamaco"],
      "hardware": ["meter"],
      "href": "https://steama.co/savi-meters",
      "specs": ["STS", "Donsun"]
    },
    {
      "id": "sol-nimbus",
      "label": "Nimbus AMI HES/MDMS",
      "kind": "steamaco",
      "track": ["steamaco"],
      "hardware": ["cloud"],
      "href": "https://steama.co/nimbus-ami",
      "specs": ["SaaS", "DLMS interop claim"]
    },
    {
      "id": "sol-steama-nan",
      "label": "Savi GPRS / PLC / RF",
      "kind": "steamaco",
      "track": ["steamaco"],
      "hardware": ["mesh", "site-hes"],
      "href": "https://steama.co/savi-meters",
      "specs": ["GPRS", "PLC", "RF mesh"]
    },
    {
      "id": "sol-steama-api",
      "label": "Nimbus REST + mobile money",
      "kind": "steamaco",
      "track": ["steamaco"],
      "hardware": ["cloud"],
      "href": "https://steama.co/off-grid-smart-metering-platform",
      "specs": ["REST", "mobile money"]
    },
    {
      "id": "sol-sm-ciu",
      "label": "SM meter + CIU",
      "kind": "sparkmeter",
      "track": ["sparkmeter"],
      "hardware": ["meter", "ciu"],
      "href": "index.html#village-metering/tc20-review",
      "specs": ["SparkNet RF", "local CIU"]
    },
    {
      "id": "sol-groundbolt",
      "label": "GroundBolt site HES",
      "kind": "sparkmeter",
      "track": ["sparkmeter"],
      "hardware": ["site-hes"],
      "href": "index.html#village-metering/tc20-review",
      "specs": ["wallet", "Enable/Disable"]
    },
    {
      "id": "sol-thundercloud",
      "label": "ThunderCloud / TC2.0",
      "kind": "sparkmeter",
      "track": ["sparkmeter"],
      "hardware": ["cloud"],
      "href": "index.html#village-metering/tc20-review",
      "specs": ["TC1.x SaaS", "TC2.0 Apache-2.0"],
      "mode": "partial"
    },
    {
      "id": "sol-sparknet",
      "label": "SparkNet-HTTP + USB Gateway",
      "kind": "sparkmeter",
      "track": ["sparkmeter"],
      "hardware": ["mesh"],
      "href": "index.html#village-metering/tc20-review",
      "specs": ["2.4 GHz NAN"]
    },
    {
      "id": "sol-mpm",
      "label": "MicroPowerManager",
      "kind": "enaccess",
      "track": ["enaccess"],
      "hardware": ["cloud"],
      "href": "https://github.com/enaccess/micropowermanager",
      "specs": ["CRM", "prepaid", "Steama plugin"]
    },
    {
      "id": "sol-openpaygo",
      "label": "OpenPAYGO Token",
      "kind": "enaccess",
      "track": ["enaccess"],
      "hardware": ["meter", "ciu"],
      "href": "https://github.com/enaccess/OpenPAYGO-Token",
      "specs": ["tokens", "SHS-class"],
      "mode": "partial"
    },
    {
      "id": "sol-opensmartmeter",
      "label": "OpenSmartMeter",
      "kind": "enaccess",
      "track": ["enaccess"],
      "hardware": ["meter"],
      "href": "https://github.com/enaccess/OpenSmartMeter",
      "specs": ["GSM prepaid", "open API"]
    },
    {
      "id": "sol-cicada",
      "label": "Cicada-FW",
      "kind": "enaccess",
      "track": ["enaccess"],
      "hardware": ["meter"],
      "href": "https://github.com/enaccess/Cicada-FW",
      "specs": ["IoT comms"]
    },
    {
      "id": "sol-vmrs",
      "label": "VMRS register model",
      "kind": "openami",
      "track": ["openami"],
      "hardware": ["meter", "street-ems", "cloud"],
      "href": "index.html#village-metering/vmrs",
      "specs": ["OBIS-shaped"],
      "mode": "could"
    },
    {
      "id": "sol-northbound",
      "label": "MQTT northbound contract",
      "kind": "openami",
      "track": ["openami"],
      "hardware": ["street-ems", "cloud"],
      "href": "meter-benchmark/northbound-mqtt-v0.1.json",
      "specs": ["MQTT v0.1"],
      "mode": "could"
    },
    {
      "id": "sol-pole-ems",
      "label": "Street EMS / MeshEMS",
      "kind": "openami",
      "track": ["openami"],
      "hardware": ["street-ems", "mesh"],
      "href": "index.html#village-metering/meshems",
      "specs": ["multi-tenant pole"],
      "mode": "could"
    },
    {
      "id": "sol-openami",
      "label": "Feeder AMI + geo topology",
      "kind": "openami",
      "track": ["openami"],
      "hardware": ["feeder", "street-ems", "mesh"],
      "href": "index.html#village-metering/openami",
      "specs": ["leakage layers"],
      "mode": "could"
    },
    {
      "id": "sol-openami-compose",
      "label": "Compose MPM / OpenPAYGO",
      "kind": "openami",
      "track": ["openami"],
      "hardware": ["cloud", "meter"],
      "href": "index.html#village-metering/openami",
      "specs": ["compose, not new tokens"],
      "mode": "could"
    }
  ],
  "links": [
    ["prob-usage", "sol-savi"],
    ["prob-prepaid", "sol-savi"],
    ["prob-token-deliver", "sol-savi"],
    ["prob-balance", "sol-savi"],
    ["prob-token-audit", "sol-savi"],
    ["prob-disconnect", "sol-savi"],
    ["prob-reconnect", "sol-savi"],
    ["prob-prepaid-offline", "sol-savi"],
    ["prob-oam-revenue", "sol-nimbus"],
    ["prob-crm", "sol-steama-api"],
    ["prob-crm", "sol-nimbus"],
    ["prob-mdms-cost", "sol-nimbus"],
    ["prob-protocols", "sol-nimbus"],
    ["prob-cloud-down", "sol-steama-nan"],
    ["prob-vend-down", "sol-savi"],

    ["prob-usage", "sol-sm-ciu"],
    ["prob-prepaid", "sol-groundbolt"],
    ["prob-prepaid", "sol-sm-ciu"],
    ["prob-balance", "sol-sm-ciu"],
    ["prob-balance", "sol-groundbolt"],
    ["prob-oam-revenue", "sol-thundercloud"],
    ["prob-disconnect", "sol-groundbolt"],
    ["prob-reconnect", "sol-groundbolt"],
    ["prob-tamper", "sol-sm-ciu"],
    ["prob-voltage", "sol-groundbolt"],
    ["prob-instant-power", "sol-groundbolt"],
    ["prob-identity", "sol-sm-ciu"],
    ["prob-cloud-down", "sol-groundbolt"],
    ["prob-prepaid-offline", "sol-sm-ciu"],
    ["prob-vend-down", "sol-groundbolt"],
    ["prob-crm", "sol-thundercloud"],
    ["prob-mdms-cost", "sol-thundercloud"],
    ["prob-vendor-exit", "sol-thundercloud"],
    ["prob-vendor-exit", "sol-sparknet"],
    ["prob-meter-cost", "sol-sm-ciu"],

    ["prob-prepaid", "sol-mpm"],
    ["prob-oam-revenue", "sol-mpm"],
    ["prob-crm", "sol-mpm"],
    ["prob-mdms-cost", "sol-mpm"],
    ["prob-reconnect", "sol-mpm"],
    ["prob-protocols", "sol-mpm"],
    ["prob-prepaid", "sol-openpaygo"],
    ["prob-token-deliver", "sol-openpaygo"],
    ["prob-token-audit", "sol-openpaygo"],
    ["prob-reconnect", "sol-openpaygo"],
    ["prob-prepaid-offline", "sol-openpaygo"],
    ["prob-vend-down", "sol-openpaygo"],
    ["prob-usage", "sol-opensmartmeter"],
    ["prob-prepaid", "sol-opensmartmeter"],
    ["prob-meter-cost", "sol-opensmartmeter"],
    ["prob-cloud-down", "sol-cicada"],

    ["prob-usage", "sol-vmrs"],
    ["prob-balance", "sol-vmrs"],
    ["prob-disconnect", "sol-vmrs"],
    ["prob-tamper", "sol-vmrs"],
    ["prob-voltage", "sol-vmrs"],
    ["prob-instant-power", "sol-vmrs"],
    ["prob-identity", "sol-vmrs"],
    ["prob-meter-cost", "sol-pole-ems"],
    ["prob-instant-power", "sol-northbound"],
    ["prob-identity", "sol-northbound"],
    ["prob-crm", "sol-northbound"],
    ["prob-protocols", "sol-northbound"],
    ["prob-protocols", "sol-pole-ems"],
    ["prob-vendor-exit", "sol-northbound"],
    ["prob-multi-pole", "sol-pole-ems"],
    ["prob-unmetered", "sol-pole-ems"],
    ["prob-unmetered", "sol-openami"],
    ["prob-leakage", "sol-pole-ems"],
    ["prob-leakage", "sol-openami"],
    ["prob-neutral", "sol-pole-ems"],
    ["prob-neutral", "sol-openami"],
    ["prob-meter-disagree", "sol-openami"],
    ["prob-cloud-down", "sol-pole-ems"],
    ["prob-prepaid", "sol-openami-compose"],
    ["prob-token-deliver", "sol-openami-compose"],
    ["prob-token-audit", "sol-openami-compose"],
    ["prob-prepaid-offline", "sol-openami-compose"],
    ["prob-mdms-cost", "sol-openami-compose"],
    ["prob-crm", "sol-openami-compose"]
  ],
  "storyThemes": [
    {
      "theme": "Revenue collection",
      "problems": "Per-home kWh, collect-before-use, deliver credit, show balance, token audit, O&M revenue",
      "tracks": {
        "steamaco": [
          { "label": "Savi STS prepaid + Nimbus vending / mobile money", "href": "https://steama.co/savi-meters" }
        ],
        "sparkmeter": [
          { "label": "GroundBolt wallet + CIU (not STS / OpenPAYGO)", "href": "index.html#village-metering/tc20-review" },
          { "label": "ThunderCloud billing (TC1.x SaaS · TC2.0 opening)", "href": "index.html#village-metering/tc20-review" }
        ],
        "enaccess": [
          { "label": "MPM prepaid + customer accounts", "href": "https://github.com/enaccess/micropowermanager" },
          { "label": "OpenPAYGO tokens (device-agnostic; SHS-class)", "href": "https://github.com/enaccess/OpenPAYGO-Token" },
          { "label": "OpenSmartMeter GSM prepaid", "href": "https://github.com/enaccess/OpenSmartMeter" }
        ],
        "openami": [
          { "label": "Could reuse MPM / OpenPAYGO on VMRS + MQTT registers — not a new token scheme", "href": "index.html#village-metering/openami", "mode": "could" }
        ]
      }
    },
    {
      "theme": "Control",
      "problems": "Disconnect, reconnect, multi-home pole",
      "tracks": {
        "steamaco": [
          { "label": "STS disconnect / reconnect at Savi meter", "href": "https://steama.co/savi-meters" }
        ],
        "sparkmeter": [
          { "label": "GroundBolt Enable/Disable relays; CIU local", "href": "index.html#village-metering/tc20-review" }
        ],
        "enaccess": [
          { "label": "MPM meter commands (incl. Steama plugin)", "href": "https://micropowermanager.io/integrations-guide/steama-meter-integration.html" },
          { "label": "OpenPAYGO token enable/disable", "href": "https://github.com/enaccess/OpenPAYGO-Token" }
        ],
        "openami": [
          { "label": "Could: tenant cutoffs at Street EMS / MeshEMS pole", "href": "index.html#village-metering/meshems", "mode": "could" }
        ]
      },
      "gaps": {
        "steamaco": "Multi-home pole not documented this pass",
        "sparkmeter": "Multi-home pole not in TC2.0 scope",
        "enaccess": "No pole-tenant EMS in MPM / OpenPAYGO"
      }
    },
    {
      "theme": "Loss & theft visibility",
      "problems": "Illegal taps, unmetered load, leakage, neutral imbalance, meters disagree, spot theft",
      "tracks": {
        "steamaco": [],
        "sparkmeter": [
          { "label": "Meter-driver-spec tamper flags (meter-level, not feeder AMI)", "href": "index.html#village-metering/tc20-review" }
        ],
        "enaccess": [],
        "openami": [
          { "label": "Could: leakage at feeder / branch / customer via geo model + MeshEMS", "href": "index.html#village-metering/openami", "mode": "could" }
        ]
      },
      "gaps": {
        "steamaco": "No public feeder-AMI / ΔP leakage docs this pass",
        "sparkmeter": "TC2.0 does not claim feeder / branch loss visibility",
        "enaccess": "MPM / OpenPAYGO / OpenSmartMeter are billing + meter, not feeder AMI"
      }
    },
    {
      "theme": "Operational visibility",
      "problems": "Voltage, instant power, serial & clock",
      "tracks": {
        "steamaco": [],
        "sparkmeter": [
          { "label": "GroundBolt live kWh, power, voltage, state", "href": "index.html#village-metering/tc20-review" }
        ],
        "enaccess": [
          { "label": "MPM reporting; OpenSmartMeter customizable API", "href": "https://github.com/enaccess/OpenSmartMeter" }
        ],
        "openami": [
          { "label": "Could: VMRS registers + MQTT northbound contract", "href": "index.html#village-metering/vmrs", "mode": "could" }
        ]
      },
      "gaps": {
        "steamaco": "Nimbus is AMI-class; no public meter ICD / VMRS export this pass"
      }
    },
    {
      "theme": "Cost & independence",
      "problems": "Meter capex, MDMS cost, mixed protocols, vendor exit, inverter vs billing",
      "tracks": {
        "steamaco": [
          { "label": "Nimbus marketed as DLMS-interoperable HES (claim, not open Savi ICD)", "href": "index.html#village-metering/vendor-study", "mode": "claim" },
          { "label": "Partner stack — does not solve vendor-exit", "href": "index.html#village-metering/vendor-study" }
        ],
        "sparkmeter": [
          { "label": "TC2.0 opens HES (partial exit); meters stay SparkNet", "href": "index.html#village-metering/tc20-review", "mode": "partial" },
          { "label": "Installed-meter band ~$40–110", "href": "index.html#village-metering/vendor-study" }
        ],
        "enaccess": [
          { "label": "MPM as open MDMS/HES-class backend", "href": "https://github.com/enaccess/micropowermanager" },
          { "label": "OpenSmartMeter low-cost GSM meter; OpenPAYGO avoids STS license", "href": "https://github.com/enaccess/OpenSmartMeter" }
        ],
        "openami": [
          { "label": "Could: OEM-agnostic gateway + open northbound; MPM as backend option", "href": "index.html#village-metering/openami", "mode": "could" }
        ]
      },
      "gaps": {
        "steamaco": "Inverter vs billing not in Nimbus/Savi docs",
        "sparkmeter": "No IEEE 1547 / 2030.5 village prepaid path",
        "enaccess": "Inverter vs billing not an MPM/OpenPAYGO job",
        "openami": "OpenADR / 2030.5 called later-grid, not year-one prepaid"
      }
    },
    {
      "theme": "Comms resilience",
      "problems": "Cloud unreachable, prepaid offline, vending down",
      "tracks": {
        "steamaco": [
          { "label": "Savi GPRS/PLC/RF mesh; STS credit at the meter without cloud", "href": "https://steama.co/savi-meters" }
        ],
        "sparkmeter": [
          { "label": "CIU works if WAN down; GroundBolt keeps local prepaid + control", "href": "index.html#village-metering/tc20-review" }
        ],
        "enaccess": [
          { "label": "OpenPAYGO tokens work without continuous cloud", "href": "https://github.com/enaccess/OpenPAYGO-Token" },
          { "label": "Cicada-FW bi-directional IoT comms; OpenSmartMeter GSM", "href": "https://github.com/enaccess/Cicada-FW" }
        ],
        "openami": [
          { "label": "Could: MeshEMS NAN when cloud down + compose OpenPAYGO/STS for local credit", "href": "index.html#village-metering/meshems", "mode": "could" }
        ]
      }
    }
  ]
}
