# Dec 16th, 2025: \[EN\] Visualize Your Bosch Smart Home Data in Kibana

**URL:** <https://discuss.elastic.co/t/dec-16th-2025-en-visualize-your-bosch-smart-home-data-in-kibana/384014>\
**Category:** Advent Calendar\
**Created:** [December 16, 2025, 8:00am UTC](https://discuss.elastic.co/t/dec-16th-2025-en-visualize-your-bosch-smart-home-data-in-kibana/384014 "2025-12-16T08:00:21Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![walterra](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/walterra/32/139867_2.png) [@walterra](https://discuss.elastic.co/u/walterra)\
**Post date:** [December 16, 2025, 8:00am UTC](https://discuss.elastic.co/t/dec-16th-2025-en-visualize-your-bosch-smart-home-data-in-kibana/384014/1 "2025-12-16T08:00:21Z")

</div>

Ever wondered what's really happening in your smart home? When does your heating kick in? How does humidity change throughout the day? What's the temperature pattern in each room?

If you have a **Bosch Smart Home Controller II** , all this data is flowing through your local network - but it's locked away in an app that only shows you the current state. What if you could capture that stream of events and visualize it over time?

That's exactly what **[shc2es](http://github.com/walterra/shc2es)** does: it connects to your Bosch Smart Home Controller, collects real-time device events via long polling, and ingests them into Elasticsearch for time-series visualizations in Kibana.

 ![shc2es Kibana Dashboard](https://us1.discourse-cdn.com/elastic/original/3X/0/5/05f92e53be8d451335513a4fb259612b9b529472.png)

The Bosch Smart Home Controller II exposes a **local API** for private, non-commercial use. The controller's API uses long polling to push device state changes in real-time. Temperature readings, humidity levels, door/window states, motion detection - it all comes through as a stream of JSON events.

`shc2es` taps into this stream using the [bosch-smart-home-bridge](https://github.com/holomekc/bosch-smart-home-bridge) library, stores everything as NDJSON files, and then ingests it into Elasticsearch with proper field mappings and a ready-to-use dashboard.

## Getting Started

### Installation

```bash
npm install -g shc2es

```

### Configuration

Create a `.env` file in your working directory:

```bash
# Your controller's IP (find it in the Bosch app or your router)
BSH_HOST=192.168.1.100

# System password from Bosch Smart Home app
# (Settings → System → Smart Home Controller)
BSH_PASSWORD=your_password

```

### First Run: Pairing

The first time you connect, you'll need to pair with your controller. This is a one-time security handshake. Before running the script, **press the pairing button** on your Controller. The script will generate a client certificate that's stored locally for future connections.

```bash
shc2es poll

```

## Ingesting into Elasticsearch

The `poll` script will now perist your smart home data into NDJSON files. Next, we'll set up the Elastic Stack to receive that data. First, set up a local dev environment with [start-local](https://github.com/elastic/start-local):

```bash
curl -fsSL https://elastic.co/start-local | sh

```

Add the Elasticsearch credentials to your `.env`:

```bash
ES_NODE=http://localhost:9200
ES_PASSWORD=your_es_password
KIBANA_NODE=http://localhost:5601

```

Now run the setup and start ingesting:

```bash
# Fetch device/room names for enrichment
shc2es registry

# Create index template + import dashboard
shc2es ingest --setup

# Watch for new events and ingest in real-time
shc2es ingest --watch

```

Open Kibana → Dashboards → **"Smart Home"** and you'll see your data come to life. The pre-built dashboard will show room temperature over time as well as the percentage of how far opened the valve's of your radiator thermostats are. Each event is enriched with human-readable device names and room assignments, so you're not staring at cryptic device IDs.

The underlying data structure is clean and query-friendly:

```json
{
  "@timestamp": "2025-12-16T08:30:00.000Z",
  "device.name": "Living Room Thermostat",
  "device.type": "ROOM_CLIMATE_CONTROL",
  "room.name": "Living Room",
  "metric.name": "temperature",
  "metric.value": 21.5
}

```

This makes it easy to build your own visualizations or run ES|QL queries:

```esql
FROM smart-home-events-*
| WHERE metric.name == "temperature"
| STATS avg_temp = AVG(metric.value) BY room.name
| SORT avg_temp DESC

```

 ![shc2es-esql](https://us1.discourse-cdn.com/elastic/original/3X/9/c/9cb46381a02b41c3307ab7d53349be054ddbf981.jpeg)

## Bonus: OpenTelemetry Integration

For those running Elastic APM, `shc2es` includes automatic OpenTelemetry instrumentation via [EDOT Node.js](https://www.elastic.co/docs/reference/opentelemetry/edot-sdks/node/setup). Add your APM endpoint to `.env` and you get traces and metrics for the polling and ingestion processes themselves.

## Try It Out

If you have a Bosch Smart Home Controller II, give it a spin:

- **GitHub** : [github.com/walterra/shc2es](https://github.com/walterra/shc2es)
- **npm** : `npm install -g shc2es`

Are you visualizing smart home data in the Elastic Stack? Share your setups in the comments!
