{
  "type": "tabs",
  "items": {
    "components": {
      "type": "panel",
      "label": "Components",
      "items": {
        "_deviceTypeHeader": {
          "type": "staticText",
          "text": "Select the Sigenergy device type at this Modbus endpoint. One instance handles exactly one system type (strict either/or). All component options below depend on this choice.",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "deviceType": {
          "type": "select",
          "label": "Device Type",
          "help": "Defines which register sets are valid (protocol V2.9 model footnotes)",
          "default": "sigenstor",
          "options": [
            {
              "label": "SigenStor (all-in-one storage system)",
              "value": "sigenstor"
            },
            {
              "label": "Sigen Hybrid (hybrid inverter, optional battery)",
              "value": "sigenhybrid"
            },
            {
              "label": "Sigen PV M1-HYB (commercial hybrid series)",
              "value": "m1hyb"
            },
            {
              "label": "Sigen PV / PV Max (PV-only inverter)",
              "value": "pvinverter"
            },
            {
              "label": "SigenMicro only (micro-inverters, no plant)",
              "value": "sigenmicroOnly"
            }
          ],
          "sm": 12,
          "xs": 12,
          "md": 8,
          "lg": 6,
          "xl": 6
        },
        "_detectDeviceType": {
          "type": "sendTo",
          "command": "detectDeviceType",
          "label": "Auto-detect from device",
          "help": "Reads model type (reg. 30500) and battery pack count (reg. 31024) — requires a working, saved connection",
          "useNative": true,
          "showProcess": true,
          "variant": "outlined",
          "sm": 12,
          "xs": 12,
          "md": 4,
          "lg": 4,
          "xl": 4
        },
        "_dividerType": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_componentsHeader": {
          "type": "staticText",
          "text": "Select which components are installed in your Sigenergy system.",
          "hidden": "data.deviceType === 'sigenmicroOnly'",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "hasBattery": {
          "type": "checkbox",
          "label": "Battery / ESS",
          "help": "Energy Storage System. SigenStor: integral (always on). Hybrid/M1-HYB: optional battery packs.",
          "default": true,
          "sm": 12,
          "md": 6,
          "lg": 3,
          "xs": 12,
          "xl": 3,
          "hidden": "data.deviceType === 'pvinverter' || data.deviceType === 'sigenmicroOnly'",
          "disabled": "data.deviceType === 'sigenstor'"
        },
        "hasPv": {
          "type": "checkbox",
          "label": "PV Panels",
          "help": "Photovoltaic solar panels",
          "default": true,
          "sm": 12,
          "md": 6,
          "lg": 3,
          "xs": 12,
          "xl": 3,
          "hidden": "data.deviceType === 'sigenmicroOnly'"
        },
        "hasAcCharger": {
          "type": "checkbox",
          "label": "AC Charger (EVAC)",
          "help": "Sigen EVAC EV charging station (reached via the inverter as Modbus gateway)",
          "default": false,
          "sm": 12,
          "md": 6,
          "lg": 3,
          "xs": 12,
          "xl": 3,
          "hidden": "data.deviceType === 'sigenmicroOnly'"
        },
        "hasDcCharger": {
          "type": "checkbox",
          "label": "DC Charger",
          "help": "DC fast charging — only SigenStor and Sigen Hybrid support a DC charger (protocol note 5.3)",
          "default": false,
          "sm": 12,
          "md": 6,
          "lg": 3,
          "xs": 12,
          "xl": 3,
          "hidden": "data.deviceType !== 'sigenstor' && data.deviceType !== 'sigenhybrid'"
        },
        "hasSigenMicro": {
          "type": "checkbox",
          "label": "SigenMicro Micro-Inverter",
          "help": "Sigenergy SigenMicro module-level power electronics (MLPE). Activates the SigenMicro scan & configuration tab.",
          "default": false,
          "sm": 12,
          "md": 6,
          "lg": 3,
          "xs": 12,
          "xl": 3,
          "hidden": "data.deviceType === 'sigenmicroOnly'"
        },
        "_microOnlyInfo": {
          "type": "staticText",
          "text": "SigenMicro-only mode: plant and inverter polling is disabled — only the configured micro-inverters are read. Use the SigenMicro tab to scan and select devices.",
          "hidden": "data.deviceType !== 'sigenmicroOnly'",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "hasEmergencyGateway": {
          "type": "checkbox",
          "label": "Emergency Gateway (off-grid switching)",
          "help": "Enable automatic device switching when Sigenergy enters off-grid / island mode. Configure the devices and notifications in the Emergency Switching tab.",
          "default": false,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "_divider1": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "acChargerId": {
          "type": "number",
          "label": "AC Charger Modbus ID",
          "help": "Modbus address of the EVAC charger",
          "min": 1,
          "max": 246,
          "default": 2,
          "hidden": "!data.hasAcCharger",
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "_divider2": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "pollInterval": {
          "type": "number",
          "label": "Poll Interval (ms)",
          "help": "How often to read Modbus registers. Minimum: 5000 ms",
          "min": 5000,
          "max": 60000,
          "step": 1000,
          "default": 10000,
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "timeout": {
          "type": "number",
          "label": "Connection Timeout (ms)",
          "help": "Modbus request timeout before failure",
          "min": 1000,
          "max": 30000,
          "step": 1000,
          "default": 5000,
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        }
      }
    },
    "connection": {
      "type": "panel",
      "label": "Connection",
      "items": {
        "connectionType": {
          "type": "select",
          "label": "Connection Type",
          "default": "tcp",
          "options": [
            {
              "value": "tcp",
              "label": "TCP / Ethernet"
            },
            {
              "value": "serial",
              "label": "Serial / RS485"
            }
          ],
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "_divider_conn": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "tcpHost": {
          "type": "text",
          "label": "Host / IP Address",
          "placeholder": "192.168.1.100",
          "default": "192.168.1.100",
          "hidden": "data.connectionType !== 'tcp'",
          "sm": 12,
          "md": 5,
          "xs": 12,
          "lg": 5,
          "xl": 5
        },
        "tcpPort": {
          "type": "number",
          "label": "Port",
          "min": 1,
          "max": 65535,
          "default": 502,
          "hidden": "data.connectionType !== 'tcp'",
          "sm": 12,
          "md": 3,
          "xs": 12,
          "lg": 3,
          "xl": 3
        },
        "plantId": {
          "type": "number",
          "label": "Plant Modbus ID",
          "help": "Default: 247 (0xF7)",
          "min": 1,
          "max": 247,
          "default": 247,
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "inverterId": {
          "type": "number",
          "label": "Inverter Modbus ID",
          "help": "Default: 1",
          "min": 1,
          "max": 246,
          "default": 1,
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "serialPort": {
          "type": "text",
          "label": "Serial Port",
          "placeholder": "/dev/ttyUSB0",
          "default": "/dev/ttyUSB0",
          "hidden": "data.connectionType !== 'serial'",
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "serialBaudRate": {
          "type": "select",
          "label": "Baud Rate",
          "default": 9600,
          "hidden": "data.connectionType !== 'serial'",
          "options": [
            {
              "value": 9600,
              "label": "9600 (default)"
            },
            {
              "value": 19200,
              "label": "19200"
            },
            {
              "value": 38400,
              "label": "38400"
            },
            {
              "value": 115200,
              "label": "115200"
            }
          ],
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "serialDataBits": {
          "type": "select",
          "label": "Data Bits",
          "default": 8,
          "hidden": "data.connectionType !== 'serial'",
          "options": [
            {
              "value": 8,
              "label": "8"
            },
            {
              "value": 7,
              "label": "7"
            }
          ],
          "sm": 12,
          "md": 2,
          "xs": 12,
          "lg": 2,
          "xl": 2
        },
        "serialParity": {
          "type": "select",
          "label": "Parity",
          "default": "none",
          "hidden": "data.connectionType !== 'serial'",
          "options": [
            {
              "value": "none",
              "label": "None"
            },
            {
              "value": "even",
              "label": "Even"
            },
            {
              "value": "odd",
              "label": "Odd"
            }
          ],
          "sm": 12,
          "md": 2,
          "xs": 12,
          "lg": 2,
          "xl": 2
        },
        "serialStopBits": {
          "type": "select",
          "label": "Stop Bits",
          "default": 1,
          "hidden": "data.connectionType !== 'serial'",
          "options": [
            {
              "value": 1,
              "label": "1"
            },
            {
              "value": 2,
              "label": "2"
            }
          ],
          "sm": 12,
          "md": 2,
          "xs": 12,
          "lg": 2,
          "xl": 2
        },
        "_divider_test": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_testHeader": {
          "type": "staticText",
          "text": "Connection Test: sends the current settings to the adapter and attempts to read register 30000 (plant system time) via Modbus.",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "test_btn": {
          "type": "sendTo",
          "label": "Test Connection",
          "command": "testConnection",
          "jsonData": "{\"connectionType\": \"${data.connectionType}\", \"tcpHost\": \"${data.tcpHost}\", \"tcpPort\": ${data.tcpPort}, \"plantId\": ${data.plantId}, \"inverterId\": ${data.inverterId}, \"serialPort\": \"${data.serialPort}\", \"serialBaudRate\": ${data.serialBaudRate}, \"timeout\": ${data.timeout}}",
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        }
      }
    },
    "sigenmicro": {
      "type": "panel",
      "label": "SigenMicro",
      "hidden": "!data.hasSigenMicro",
      "items": {
        "_microHeader": {
          "type": "staticText",
          "text": "Configure the Modbus slave-ID range to scan for SigenMicro micro-inverters. After scanning, enable each discovered device individually. The adapter polls all enabled devices in every cycle.",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_divider_micro1": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "sigenMicroScanFrom": {
          "type": "number",
          "label": "Scan — first Modbus ID",
          "help": "Lowest slave address to probe during the SigenMicro device scan (1–246)",
          "min": 1,
          "max": 246,
          "default": 10,
          "sm": 12,
          "md": 3,
          "xs": 12,
          "lg": 3,
          "xl": 3
        },
        "sigenMicroScanTo": {
          "type": "number",
          "label": "Scan — last Modbus ID",
          "help": "Highest slave address to probe during the SigenMicro device scan (1–246)",
          "min": 1,
          "max": 246,
          "default": 30,
          "sm": 12,
          "md": 3,
          "xs": 12,
          "lg": 3,
          "xl": 3
        },
        "_divider_micro2": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_scanBtnHeader": {
          "type": "staticText",
          "text": "Click the button below to scan the Modbus bus for SigenMicro devices. The scan uses the ID range configured above. Found devices are saved automatically — use the SigenMicro admin tab to enable or disable individual devices.",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "scan_btn": {
          "type": "sendTo",
          "label": "🔍  Scan for SigenMicro devices",
          "command": "scanSigenMicro",
          "jsonData": "{\"sigenMicroScanFrom\": ${data.sigenMicroScanFrom}, \"sigenMicroScanTo\": ${data.sigenMicroScanTo}}",
          "variant": "contained",
          "color": "primary",
          "sm": 12,
          "xs": 12,
          "md": 6,
          "lg": 5,
          "xl": 4
        },
        "_divider_progress": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_progressLabel": {
          "type": "staticText",
          "text": "Live scan progress (updates while scan is running):",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_scanProgress": {
          "type": "state",
          "label": "Progress",
          "oid": "info.scanProgress",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_scanStatus": {
          "type": "state",
          "label": "Status",
          "oid": "info.scanStatus",
          "sm": 12,
          "xs": 12,
          "md": 6,
          "lg": 6,
          "xl": 6
        }
      }
    },
    "extended": {
      "type": "panel",
      "label": "Extended Registers",
      "items": {
        "_extHeader": {
          "type": "staticText",
          "text": "Optional register groups for V2.6–V2.9 features. Enable only if your Sigenergy firmware version supports the corresponding registers. Enabling unsupported registers may cause harmless Modbus warnings.",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_divider_ext1": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "enableSmartLoads": {
          "type": "checkbox",
          "label": "Smart Loads 1–24 (V2.6)",
          "help": "Read total consumption and power for up to 24 smart load outputs (registers 30098–30193)",
          "default": false,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 4,
          "xl": 4,
          "hidden": "data.deviceType === 'sigenmicroOnly'"
        },
        "enableCumulativeEnergy": {
          "type": "checkbox",
          "label": "Cumulative Energy Statistics (V2.7/V2.8)",
          "help": "Read cumulative energy totals for ESS, EVDC, grid import/export, 3rd party inverter (registers 30194–30271)",
          "default": false,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 4,
          "xl": 4,
          "hidden": "data.deviceType === 'sigenmicroOnly'"
        },
        "enableGridCode": {
          "type": "checkbox",
          "label": "Grid Code Parameters (V2.8)",
          "help": "Grid code parameters (40051-40068) — only SigenStor and Sigen Hybrid (protocol note 5.2.4)",
          "default": false,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 4,
          "xl": 4,
          "hidden": "data.deviceType !== 'sigenstor' && data.deviceType !== 'sigenhybrid'"
        },
        "_divider_ext2": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_pssHeader": {
          "type": "staticText",
          "text": "PSS (Power Station Switch, V2.9) — external MV/LV switchgear unit with its own Modbus slave ID.",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "enablePss": {
          "type": "checkbox",
          "label": "PSS — Power Station Switch (V2.9)",
          "help": "Poll PSS input registers 32500–32631 (MV/LV switchgear, transformer, distribution cabinet)",
          "default": false,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 4,
          "xl": 4,
          "hidden": "data.deviceType === 'sigenmicroOnly'"
        },
        "pssSlaveId": {
          "type": "number",
          "label": "PSS Modbus Slave ID",
          "help": "Modbus slave ID of the PSS device (default: 5)",
          "default": 5,
          "min": 1,
          "max": 246,
          "hidden": "(!data.enablePss) || data.deviceType === 'sigenmicroOnly'",
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "_divider_ext3": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_pidHeader": {
          "type": "staticText",
          "text": "PID (PV Insulation Detection, V2.9) — standalone insulation monitoring device with its own Modbus slave ID.",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "enablePid": {
          "type": "checkbox",
          "label": "PID — PV Insulation Detection (V2.9)",
          "help": "Poll PID input registers 33000–33067 (voltages, currents, temperatures, alarms)",
          "default": false,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 4,
          "xl": 4,
          "hidden": "data.deviceType === 'sigenmicroOnly'"
        },
        "pidSlaveId": {
          "type": "number",
          "label": "PID Modbus Slave ID",
          "help": "Modbus slave ID of the PID device (default: 6)",
          "default": 6,
          "min": 1,
          "max": 246,
          "hidden": "(!data.enablePid) || data.deviceType === 'sigenmicroOnly'",
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "_divider_ext4": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_essPreheatingHeader": {
          "type": "staticText",
          "text": "ESS Preheating (V2.9, M1-HYA/HYB only) — TOU schedule for battery preheating (holding registers 50000–50183, plant slave 247).",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "enableEssPreheating": {
          "type": "checkbox",
          "label": "ESS Preheating TOU Schedules (V2.9)",
          "help": "ESS Preheating TOU registers (50000-50183) — only Sigen PV M1-HYA/HYB (protocol note 5.2.3)",
          "default": false,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 4,
          "xl": 4,
          "hidden": "data.deviceType !== 'm1hyb'"
        }
      }
    },
    "statistics": {
      "type": "panel",
      "label": "Statistics",
      "items": {
        "_statsHeader": {
          "type": "staticText",
          "text": "Select which additional statistics should be calculated and written as ioBroker states. These values are derived from live Modbus measurements.",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "calcBatteryTimeToFull": {
          "type": "checkbox",
          "label": "Time to full charge",
          "help": "How long until the battery reaches 100% at current charge rate",
          "default": true,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 6,
          "xl": 6
        },
        "calcBatteryTimeRemaining": {
          "type": "checkbox",
          "label": "Battery time remaining",
          "help": "How long the battery will last at current consumption",
          "default": true,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 6,
          "xl": 6
        },
        "calcBatteryDailyFull": {
          "type": "checkbox",
          "label": "Daily charging time",
          "help": "Today: cumulative time the battery spent actively charging",
          "default": true,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 6,
          "xl": 6
        },
        "calcBatteryCoverageTime": {
          "type": "checkbox",
          "label": "Battery coverage time today",
          "help": "How long today the battery covered the house consumption without grid",
          "default": true,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 6,
          "xl": 6
        },
        "calcBatteryFlowPower": {
          "type": "checkbox",
          "label": "Battery charge/discharge source power",
          "help": "While charging: PV power currently going into the battery. While discharging: battery power currently covering house consumption",
          "default": true,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 6,
          "xl": 6
        },
        "calcSelfConsumptionRate": {
          "type": "checkbox",
          "label": "Self-consumption rate",
          "help": "Percentage of PV production used locally (not exported)",
          "default": true,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 6,
          "xl": 6
        },
        "calcAutarkyRate": {
          "type": "checkbox",
          "label": "Autarky rate",
          "help": "Percentage of house consumption covered by PV + battery",
          "default": true,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 6,
          "xl": 6
        },
        "calcPvYield": {
          "type": "checkbox",
          "label": "PV yield (15-min average)",
          "help": "Average PV power output over the last 15 minutes",
          "default": true,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 6,
          "xl": 6
        },
        "calcGridFeedIn": {
          "type": "checkbox",
          "label": "Grid feed-in tracking",
          "help": "Track daily grid export and import energy",
          "default": true,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 6,
          "xl": 6
        },
        "_divider_derived": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_derivedInfo": {
          "type": "staticText",
          "text": "Always calculated (cannot be disabled): House Power (PV + Battery discharge − Grid export) · Today max/min SOC · Formatted durations (e.g. \"2h 15m\")",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        }
      }
    },
    "emergency": {
      "type": "panel",
      "label": "Emergency Switching",
      "hidden": "!data.hasEmergencyGateway",
      "items": {
        "_emergencyWarning": {
          "type": "staticText",
          "text": "emergencyWarningText",
          "style": {
            "backgroundColor": "#fff3cd",
            "border": "1px solid #ffc107",
            "borderRadius": "4px",
            "padding": "10px 14px",
            "fontWeight": "bold",
            "color": "#856404"
          },
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_emergencyHeader": {
          "type": "staticText",
          "text": "Configure devices to switch automatically when Sigenergy enters off-grid (island) mode. Device 1 is always switched OFF on grid failure and ON after stable grid recovery. Devices 2–4 are optional — choose the switching direction for each.",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "emergencyStableDelay": {
          "type": "number",
          "label": "Stable delay after grid return (minutes)",
          "help": "Wait this many minutes of stable on-grid operation before switching devices back on.",
          "min": 1,
          "max": 60,
          "step": 1,
          "default": 10,
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "_divider_emerg1": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_device1Header": {
          "type": "staticText",
          "text": "Device 1 — switched OFF on grid failure, ON after stable recovery (required if emergency switching is used)",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "emergencyDevice1Id": {
          "type": "objectId",
          "label": "Device 1 — Object ID",
          "sm": 12,
          "md": 8,
          "xs": 12,
          "lg": 6,
          "xl": 6
        },
        "_divider_emerg2": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_device2Header": {
          "type": "staticText",
          "text": "Device 2 (optional)",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "emergencyDevice2Id": {
          "type": "objectId",
          "label": "Device 2 — Object ID",
          "sm": 12,
          "md": 8,
          "xs": 12,
          "lg": 6,
          "xl": 6
        },
        "emergencyDevice2Dir": {
          "type": "select",
          "label": "Device 2 — Direction",
          "options": [
            { "label": "OFF on failure, ON after recovery", "value": "off" },
            { "label": "ON on failure, OFF after recovery", "value": "on" }
          ],
          "default": "off",
          "hidden": "!data.emergencyDevice2Id",
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "_divider_emerg3": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_device3Header": {
          "type": "staticText",
          "text": "Device 3 (optional)",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "emergencyDevice3Id": {
          "type": "objectId",
          "label": "Device 3 — Object ID",
          "sm": 12,
          "md": 8,
          "xs": 12,
          "lg": 6,
          "xl": 6
        },
        "emergencyDevice3Dir": {
          "type": "select",
          "label": "Device 3 — Direction",
          "options": [
            { "label": "OFF on failure, ON after recovery", "value": "off" },
            { "label": "ON on failure, OFF after recovery", "value": "on" }
          ],
          "default": "off",
          "hidden": "!data.emergencyDevice3Id",
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "_divider_emerg4": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "_device4Header": {
          "type": "staticText",
          "text": "Device 4 (optional)",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "emergencyDevice4Id": {
          "type": "objectId",
          "label": "Device 4 — Object ID",
          "sm": 12,
          "md": 8,
          "xs": 12,
          "lg": 6,
          "xl": 6
        },
        "emergencyDevice4Dir": {
          "type": "select",
          "label": "Device 4 — Direction",
          "options": [
            { "label": "OFF on failure, ON after recovery", "value": "off" },
            { "label": "ON on failure, OFF after recovery", "value": "on" }
          ],
          "default": "off",
          "hidden": "!data.emergencyDevice4Id",
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "_divider_telegram": {
          "type": "divider",
          "sm": 12,
          "xs": 12,
          "md": 12,
          "lg": 12,
          "xl": 12
        },
        "emergencyTelegram": {
          "type": "checkbox",
          "label": "Enable Telegram notification",
          "help": "Send a Telegram message when the system switches to off-grid mode and when stable grid operation is restored.",
          "default": false,
          "sm": 12,
          "md": 6,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "emergencyTelegramInst": {
          "type": "instance",
          "adapter": "telegram",
          "label": "Telegram instance",
          "hidden": "!data.emergencyTelegram",
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        },
        "emergencyTelegramChat": {
          "type": "text",
          "label": "Chat ID (empty = broadcast to all configured chats)",
          "hidden": "!data.emergencyTelegram",
          "sm": 12,
          "md": 4,
          "xs": 12,
          "lg": 4,
          "xl": 4
        }
      }
    }
  },
  "i18n": true
}
