{
  "node": {
    "id": "block:signal-schedule",
    "type": "Block",
    "label": "Physical availability / signal schedule",
    "properties": {
      "id": "signal-schedule",
      "name": "Physical availability / signal schedule",
      "kind": "studio",
      "summary": "A typed physical signal selected by explicit time windows.",
      "behavior": "Each window is active on its half-open interval [startS, endS). Outside all windows the block emits defaultValue. Windows are ordered and cannot overlap; adjacent windows are allowed.",
      "ports": [
        {
          "name": "out",
          "direction": "output",
          "unit": "declared signal quantity",
          "description": "Observed result from the solved component or sampled controller."
        }
      ],
      "parameters": [
        {
          "key": "defaultValue",
          "label": "Default Value",
          "unit": "declared signal",
          "default": 0,
          "min": -1000000000000,
          "max": 1000000000000,
          "description": "Configured model parameter; the default is an initial editor value, not an operating recommendation."
        },
        {
          "key": "schedule",
          "label": "Schedule windows",
          "unit": "startS/endS in s; value in declared signal quantity",
          "description": "Required array of 1 to 32 ordered, nonoverlapping {startS, endS, value} windows; endS must exceed startS. This is a document field, not a scalar parameter."
        }
      ],
      "equations": [
        "out(t) = window.value when startS <= t < endS; defaultValue otherwise"
      ],
      "example": {
        "title": "Charge during available stops",
        "text": "A 15-minute stop at a 100 kW grid cap has a 25 kWh upper grid-energy bound before losses and battery limits.",
        "url": "https://design.lemonergy.com/cosim.html?example=charging-opportunity",
        "label": "Open the Studio example"
      },
      "limits": [
        "All battery and converter limits still apply. A schedule is not an electrochemical law."
      ],
      "evidence": [
        "js/charging-control.js",
        "js/charging-scenarios.js",
        "docs/CHARGING_BLOCKS_SPEC.md",
        "js/physical-network.js"
      ],
      "caseIds": [
        "opportunity-window"
      ],
      "type": "signal-schedule",
      "implementationId": "signal-schedule",
      "url": "https://lemonergy.com/learn/glossary/blocks/signal-schedule/",
      "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/signal-schedule/",
      "sourceFile": "block-library.json",
      "sourceRepository": "battery-design",
      "sourceRevision": "ef9802329b75bc15bb96885f8ed5d49425106696",
      "reviewed": "2026-10-27"
    }
  },
  "incoming": [
    {
      "id": "edge:usesBlock/opportunity-window/0",
      "type": "usesBlock",
      "source": "workflow:opportunity-window",
      "target": "block:signal-schedule",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 0,
        "name": "Physical availability / signal schedule",
        "type": "signal-schedule",
        "role": "Defines stop windows",
        "settings": [
          "defaultValue",
          "startS / endS / value"
        ]
      }
    }
  ],
  "neighbors": [
    {
      "id": "workflow:opportunity-window",
      "type": "Workflow",
      "label": "Charge during available stops",
      "properties": {
        "id": "opportunity-window",
        "title": "Charge during available stops",
        "kind": "studio",
        "summary": "Availability is an independent signal.",
        "steps": [
          "Inspect availability and preferred windows.",
          "Shorten a stop."
        ],
        "example": "A 15-minute stop at a 100 kW grid cap has a 25 kWh upper grid-energy bound before losses and battery limits.",
        "observe": "More power cannot recover disconnected time.",
        "limits": "All battery and converter limits still apply. A schedule is not an electrochemical law.",
        "url": "https://design.lemonergy.com/cosim.html?example=charging-opportunity",
        "label": "Open the Studio example",
        "evidence": [
          "js/charging-control.js",
          "js/charging-scenarios.js",
          "docs/CHARGING_BLOCKS_SPEC.md"
        ]
      }
    }
  ]
}
