Open-source Building Management

The backbone of
scalable building automation

Connect your software to any building equipment — regardless of protocol, vendor, or model. One platform, one API, every device.

Learn more

The challenge

Buildings are hard to integrate

Every building is different. Every piece of equipment comes with its own protocol, its own quirks, and its own integration burden.

🔌

Vendor lock-in everywhere

Each manufacturer has its own proprietary way of communicating. Connecting a new device means learning yet another protocol from scratch.

🔀

Protocol fragmentation

BACnet, Modbus, MQTT, HTTP, KNX — each requires a completely different integration stack. The glue code keeps growing, project after project.

📊

No common data model

Raw device values have no standard shape. Building applications that work across equipment brands and models is a constant uphill battle.

Gridone is built for extensibility. It is device, protocol, and vendor-agnostic. Build any application on top of it, deploy it wherever you want.

Extensibility — Devices

Plug & play device drivers

Tired of writing custom integration code for every new device you encounter? That's exactly what makes building management software impossible to scale.

With Gridone, all vendor-specific logic is encapsulated in a simple, portable YAML file: a driver. Write once, reuse across every building. Share with the community.

Public driver library coming soon.

id: thermocktat_http
transport: http
type: thermostat

device_config:
  - name: ip

attributes:
  - name: temperature
    data_type: float
    read: "GET ${ip}/v1"
    json_pointer: /ambient_temperature

  - name: temperature_setpoint
    data_type: float
    read: "GET ${ip}/v1"
    json_pointer: /temperature_setpoint
    write:
      method: "POST"
      path: "${ip}/v1/temperature_setpoint"
      body:
        value: ${value}

  - name: onoff_state
    data_type: bool
    read: "GET ${ip}/v1"
    json_pointer: /enabled
    write:
      method: "POST"
      path: "${ip}/v1/enabled"
      body:
        value: ${value}
id: thermocktat_modbus
transport: modbus-tcp
type: thermostat

device_config:
  - name: device_id

attributes:
  - name: temperature
    data_type: float
    read: IR0:2
    byte_convert: "float32 big_endian"

  - name: temperature_setpoint
    data_type: float
    read_write: HR0:2
    byte_convert: "float32 big_endian"

  - name: onoff_state
    data_type: bool
    read_write: C0

  - name: mode
    data_type: str
    read_write: HR6
    mapping:
      1: heat
      2: cool
      3: fan
      4: auto

  - name: fan_speed
    data_type: str
    read_write: HR8
    mapping:
      1: auto
      2: low
      3: medium
      4: high
id: breeze_bc106_4d_thermostat
transport: bacnet

device_config:
  - name: device_instance

attributes:
  - name: state
    data_type: bool
    read_write: BV1

  - name: temperature
    data_type: float
    read: AI1

  - name: temperature_setpoint
    data_type: float
    read: AV3
    write:
      object_type: AV
      object_instance: 3
      write_priority: 8

  - name: mode
    data_type: int
    read_write: AV1

  - name: fan_speed
    data_type: int
    read_write: AV2
id: thermocktat_mqtt
transport: mqtt
type: thermostat

device_config:
  - name: device_id

update_strategy:
  polling_interval: 60s

discovery:
  topic: thermocktat/#
  field_getters:
    - name: device_id
      codecs:
        - json_pointer: /device_id

attributes:
  - name: temperature
    data_type: float
    read:
      topic: thermocktat/${device_id}/snapshot
      request:
        topic: thermocktat/${device_id}/get/snapshot
        message:
          input: "hello"
    codecs:
      - json_pointer: /ambient_temperature

  - name: temperature_setpoint
    data_type: float
    read:
      topic: thermocktat/${device_id}/snapshot
      request:
        topic: thermocktat/${device_id}/get/snapshot
        message:
          input: hello
    write:
      topic: thermocktat/${device_id}/set/temperature_setpoint
      message:
        value: ${value}
    codecs:
      - json_pointer: /temperature_setpoint
id: thermocktat_knx
transport: knx
type: thermostat

device_config:
  - name: ga_main
  - name: ga_middle

attributes:
  - name: temperature
    data_type: float
    read: "${ga_main}/${ga_middle}/4"
    codecs:
      - knx_dpt: "9.001"

  - name: temperature_setpoint
    data_type: float
    read_write: "${ga_main}/${ga_middle}/1"
    codecs:
      - knx_dpt: "9.001"

  - name: onoff_state
    data_type: bool
    read_write: "${ga_main}/${ga_middle}/0"
    codecs:
      - knx_dpt: "1.001"

  - name: mode
    data_type: str
    read_write: "${ga_main}/${ga_middle}/5"
    codecs:
      - knx_dpt: "5.010"
      - mapping: {1: heat, 2: cool, 3: fan, 4: auto}

Extensibility — Applications

Your platform, any application

Gridone is API-first — a REST API today, MCP server coming soon. Focus on what's your core business. Rely on Gridone for scaling deployment across buildings.

🧠 AI-driven smart workflows
Energy optimization
🔋 Demand response pools
🔧 Predictive maintenance
📄 Automated ESG reporting
🏨 Comfort optimization & hotel GRMS

What you get

Batteries included

YAML device drivers

One file per device model. No code required. Portable across buildings and shareable with the community.

Automatic time-series

Every reading stored automatically. Query, aggregate, and export historical data through the API.

Standardized device types

Thermostat, heat pump, weather sensor — drivers declare a type, enabling consistent schemas and UI behavior across vendors.

REST API & app platform

Documented HTTP API for every capability. App-based extensibility lets you add custom features on top of the core.

Automation & rules engine

Define automated workflows and rules that react to device data in real time. Coming soon.

Self-hosted & open source

Deploy anywhere. Full control over your infrastructure and data — no vendor lock-in, no cloud dependency.

Quick start

Up and running in seconds

# Clone & install
git clone https://github.com/Agrid-Dev/gridone
cd gridone
uv sync

# Start the API server
uv run fastapi dev apps/api_server/main.py

Learn more

Ready to dive in?

Explore the documentation, check out the API reference, or jump straight into the code.