{
  "format": "heart-signals/1",
  "system": "com.example.cool-air.ac-controller",
  "template": "heart/embeddedstandard/c-posix/v1.2611",
  "reviewed": { "by": "Installer team", "at": "2026-11-08" },
  "signals": [
    {
      "name": "com.example.cool-air.room_temp",
      "title": "Room temperature",
      "type": "number",
      "unit": "Cel",
      "range": { "min": -20, "max": 60 },
      "source": { "protocol": "modbus-tcp", "target": "tcp:127.0.0.1:502:1", "table": "input", "register": 0, "scale": 0.1 },
      "sampleSec": 5,
      "historySec": 3600,
      "privacy": "internal",
      "derive": ["mean", "min", "max", "trend"],
      "alerts": [
        { "when": "outside-range", "code": "sensors.out-of-range", "severity": "warning" },
        { "when": "stuck", "afterSec": 900, "code": "sensors.stuck", "severity": "warning" }
      ]
    },
    {
      "name": "com.example.cool-air.setpoint",
      "title": "Target temperature",
      "type": "number",
      "unit": "Cel",
      "range": { "min": 16, "max": 30 },
      "source": { "protocol": "modbus-tcp", "target": "tcp:127.0.0.1:502:1", "table": "holding", "register": 9, "scale": 0.1 },
      "privacy": "internal",
      "writable": true,
      "physical": true
    },
    {
      "name": "com.example.cool-air.high_pressure_trip",
      "title": "High-pressure trip",
      "description": "Wired to the safety circuit. HEART only watches it.",
      "type": "boolean",
      "source": { "protocol": "modbus-tcp", "target": "tcp:127.0.0.1:502:1", "table": "discrete", "register": 2 },
      "privacy": "internal",
      "safety": true
    },
    {
      "name": "com.example.cool-air.occupancy",
      "title": "Room occupied",
      "description": "Shows whether someone is home: personal data.",
      "type": "boolean",
      "source": { "protocol": "on-chip", "channel": 7 },
      "privacy": "private"
    }
  ]
}
