Initial: PostgreSQL CR, Grafana, Tecalor Dashboard, Ingress

This commit is contained in:
hermes
2026-09-08 14:43:28 +00:00
commit 754be12d70
13 changed files with 2073 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
# HomeAssistant Observability
## Komponenten
- **PostgreSQL** (Zalando Operator) Recorder-Backend für HomeAssistant
- **Grafana** Visualisierung der Recorder-Daten
- **Ingress** (`grafana.kilhaasi-home.de`) Grafana-Zugriff via HTTPS
## Wichtige Hinweise
### Historische Daten
HomeAssistant unterstützt **keine Migration** der Recorder-Historie von SQLite zu PostgreSQL.
Nur neue Daten ab dem Zeitpunkt der Umstellung werden in PostgreSQL gespeichert.
### PostgreSQL-Passwort
Der Zalando-Operator generiert automatisch ein Passwort-Secret:
```
homeassistant-observability.homeassistant-db-credentials.postgresql.acid.zalan.do
```
Key: `password` (base64-kodiert)
### HA-Recorder umstellen
In der HomeAssistant-Konfiguration (`recorder.yaml` oder über UI):
```yaml
recorder:
db_url: postgresql://homeassistant:<PASSWORD>@10.0.0.36:5432/homeassistant
```
Dabei ist `<PASSWORD>` das aus dem Operator-Secret ausgelesene Passwort.
## Deployment-Reihenfolge
1. PostgreSQL CR anwenden → Operator erstellt DB und Secret
2. LoadBalancer-SERVICE prüfen (IP 10.0.0.36)
3. HA-Recorder auf PostgreSQL umstellen
4. Grafana-Pod startet automatisch (liest Passwort aus Secret)
@@ -0,0 +1,17 @@
apiVersion: v1
kind: Service
metadata:
name: homeassistant-db-lb
namespace: homeassistant-observability
spec:
type: LoadBalancer
loadBalancerIP: 10.0.0.36
selector:
application: spilo
cluster-name: homeassistant-db
spilo-role: master
ports:
- name: postgresql
port: 5432
targetPort: 5432
protocol: TCP
+12
View File
@@ -0,0 +1,12 @@
apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
name: homeassistant-observability
namespace: fleet-local
spec:
repo: https://gitea.de.kilhaasi//hermes/homeassistant-observability.git
branch: main
paths:
- ./homeassistant-observability
clientSecretName: auth-gitea
insecureSkipTLSVerify: true
@@ -0,0 +1,18 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-dashboards
namespace: homeassistant-observability
data:
dashboards.yaml: |
apiVersion: 1
providers:
- name: default
orgId: 1
folder: HomeAssistant
type: file
disableDeletion: false
editable: true
options:
path: /var/lib/grafana/dashboards
foldersFromFilesStructure: false
@@ -0,0 +1,22 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-datasources
namespace: homeassistant-observability
data:
datasources.yaml: |
apiVersion: 1
datasources:
- name: HomeAssistant
type: postgres
access: proxy
url: homeassistant-db.homeassistant-observability:5432
dbname: homeassistant
user: homeassistant
isDefault: true
jsonData:
sslmode: require
postgresVersion: 1600
tlsSkipVerify: false
secureJsonData:
password: ${GF_DATASOURCE_HOMEASSISTANT_PASSWORD}
@@ -0,0 +1,86 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
namespace: homeassistant-observability
spec:
replicas: 1
selector:
matchLabels:
app: grafana
strategy:
type: Recreate
template:
metadata:
labels:
app: grafana
spec:
containers:
- name: grafana
image: grafana/grafana:11.3.0
ports:
- containerPort: 3000
name: http
protocol: TCP
env:
- name: GF_SECURITY_ADMIN_PASSWORD
value: admin
- name: GF_USERS_ALLOW_SIGN_UP
value: "false"
- name: GF_PATHS_PROVISIONING
value: /etc/grafana/provisioning
- name: GF_PATHS_DATA
value: /var/lib/grafana
- name: GF_PATHS_LOGS
value: /var/log/grafana
- name: GF_DATASOURCE_HOMEASSISTANT_PASSWORD
valueFrom:
secretKeyRef:
name: homeassistant-db-credentials
key: password
volumeMounts:
- name: grafana-data
mountPath: /var/lib/grafana
- name: grafana-datasources
mountPath: /etc/grafana/provisioning/datasources
- name: grafana-dashboards-config
mountPath: /etc/grafana/provisioning/dashboards
- name: grafana-dashboards
mountPath: /var/lib/grafana/dashboards
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
livenessProbe:
httpGet:
path: /api/health
port: 3000
initialDelaySeconds: 30
periodSeconds: 30
readinessProbe:
httpGet:
path: /api/health
port: 3000
initialDelaySeconds: 10
periodSeconds: 10
volumes:
- name: grafana-data
persistentVolumeClaim:
claimName: grafana-data
- name: grafana-datasources
configMap:
name: grafana-datasources
- name: grafana-dashboards-config
configMap:
name: grafana-dashboards
- name: grafana-dashboards
emptyDir: {}
- name: grafana-db-secret
secret:
secretName: homeassistant-db-credentials
- name: grafana-dashboards-vol
configMap:
name: tecalor-dashboard
@@ -0,0 +1,26 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grafana
namespace: homeassistant-observability
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
tls:
- hosts:
- grafana.kilhaasi-home.de
secretName: grafana-tls
rules:
- host: grafana.kilhaasi-home.de
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grafana
port:
number: 3000
@@ -0,0 +1,12 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: grafana-data
namespace: homeassistant-observability
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: longhorn
@@ -0,0 +1,14 @@
apiVersion: v1
kind: Service
metadata:
name: grafana
namespace: homeassistant-observability
spec:
type: ClusterIP
selector:
app: grafana
ports:
- name: http
port: 3000
targetPort: 3000
protocol: TCP
@@ -0,0 +1,7 @@
apiVersion: v1
kind: Namespace
metadata:
name: homeassistant-observability
labels:
app.kubernetes.io/name: homeassistant-observability
app.kubernetes.io/managed-by: fleet
@@ -0,0 +1,54 @@
apiVersion: acid.zalan.do/v1
kind: postgresql
metadata:
name: homeassistant-db
namespace: homeassistant-observability
spec:
teamId: home
numberOfInstances: 2
postgresql:
version: "16"
volume:
size: 10Gi
storageClass: longhorn
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: "1"
memory: 1Gi
databases:
homeassistant: homeassistant
users:
homeassistant:
- superuser
env:
- name: WAL_S3_BUCKET
value: postgresql
- name: WALG_S3_PREFIX
value: s3://postgresql
- name: WAL_BUCKET_SCOPE_PREFIX
value: ""
- name: WAL_BUCKET_SCOPE_SUFFIX
value: ""
- name: USE_WALG_BACKUP
value: "true"
- name: USE_WALG_RESTORE
value: "true"
- name: BACKUP_SCHEDULE
value: 00 12 * * *
- name: AWS_ACCESS_KEY_ID
value: admin
- name: AWS_SECRET_ACCESS_KEY
value: Jupiter01!
- name: AWS_S3_FORCE_PATH_STYLE
value: "true"
- name: AWS_ENDPOINT
value: http://10.0.0.10:8333
- name: WALG_DISABLE_S3_SSE
value: "true"
- name: BACKUP_NUM_TO_RETAIN
value: "5"
maintenanceWindows: []
allowedSourceRanges: []
@@ -0,0 +1,888 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: tecalor-dashboard
namespace: homeassistant-observability
data:
tecalor-waermepumpe.json: |
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "grafana",
"uid": "-- Grafana --"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 1,
"id": null,
"links": [],
"liveNow": false,
"panels": [
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 0
},
"id": 14,
"title": "Temperatures",
"panelType": "row",
"type": "row"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"fillGradient": 0,
"lineInterpolation": "linear",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": "linear",
"show": "default",
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "°C"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 1
},
"id": 2,
"options": {
"legend": {
"calcs": ["lastNotNull", "max", "min"],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "time_series",
"rawQuery": true,
"rawSql": "SELECT\n last_changed AS time,\n state::float AS value,\n entity_id AS metric\nFROM recorder_states\nWHERE entity_id IN ('sensor.thzctl_vorlaufisttemp', 'sensor.thzctl_ruecklaufisttemp')\n AND $__timeFilter(last_changed)\nORDER BY last_changed",
"refId": "A"
}
],
"title": "Vorlauf & Rücklauf Temperatur",
"type": "timeseries"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"fillGradient": 0,
"lineInterpolation": "linear",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": "linear",
"show": "default",
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "°C"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 1
},
"id": 3,
"options": {
"legend": {
"calcs": ["lastNotNull", "max", "min"],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "time_series",
"rawQuery": true,
"rawSql": "SELECT\n last_changed AS time,\n state::float AS value,\n entity_id AS metric\nFROM recorder_states\nWHERE entity_id IN ('sensor.tecalor_thz5_5_eco_heissgas_temp', 'sensor.tecalor_thz5_5_eco_olsumpftemperatur', 'sensor.tecalor_thz5_5_eco_invertertemperatur')\n AND $__timeFilter(last_changed)\nORDER BY last_changed",
"refId": "A"
}
],
"title": "Kesseltemperatur (Heissgas, Ölsumpftemp, Inverter)",
"type": "timeseries"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 9
},
"id": 15,
"title": "Druck & Zustand",
"panelType": "row"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"fillGradient": 0,
"lineInterpolation": "linear",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": "linear",
"show": "default",
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "bar"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 8,
"x": 0,
"y": 10
},
"id": 4,
"options": {
"legend": {
"calcs": ["lastNotNull", "max", "min"],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "time_series",
"rawQuery": true,
"rawSql": "SELECT\n last_changed AS time,\n state::float AS value,\n entity_id AS metric\nFROM recorder_states\nWHERE entity_id IN ('sensor.tecalor_thz5_5_eco_druck_hochdruck', 'sensor.tecalor_thz5_5_eco_druck_niederdruck', 'sensor.tecalor_thz5_5_eco_druck_heizkreis')\n AND $__timeFilter(last_changed)\nORDER BY last_changed",
"refId": "A"
}
],
"title": "Druck (Hoch/Nieder/Heizkreis)",
"type": "timeseries"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"fillGradient": 0,
"lineInterpolation": "linear",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": "linear",
"show": "default",
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "°C"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 8,
"x": 8,
"y": 10
},
"id": 5,
"options": {
"legend": {
"calcs": ["lastNotNull", "max", "min"],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "time_series",
"rawQuery": true,
"rawSql": "SELECT\n last_changed AS time,\n state::float AS value,\n entity_id AS metric\nFROM recorder_states\nWHERE entity_id IN ('sensor.tecalor_thz5_5_eco_verfluessiger_temp', 'sensor.tecalor_thz5_5_eco_speichersolltemp_tag')\n AND $__timeFilter(last_changed)\nORDER BY last_changed",
"refId": "A"
}
],
"title": "Verflüssiger & Speichersoll",
"type": "timeseries"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"fillGradient": 0,
"lineInterpolation": "linear",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": "linear",
"show": "default",
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "h"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 8,
"x": 16,
"y": 10
},
"id": 6,
"options": {
"legend": {
"calcs": ["lastNotNull", "max", "min"],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "time_series",
"rawQuery": true,
"rawSql": "SELECT\n last_changed AS time,\n state::float AS value,\n entity_id AS metric\nFROM recorder_states\nWHERE entity_id IN ('sensor.tecalor_thz5_5_eco_laufzeit_verdichter_heizen', 'sensor.tecalor_thz5_5_eco_laufzeit_verdichter_ww')\n AND $__timeFilter(last_changed)\nORDER BY last_changed",
"refId": "A"
}
],
"title": "Laufzeit Verdichter (Heizen / WW)",
"type": "timeseries"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 18
},
"id": 16,
"title": "Energieverbrauch",
"panelType": "row"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"fillGradient": 0,
"lineInterpolation": "linear",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": "linear",
"show": "default",
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "MWh"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 19
},
"id": 7,
"options": {
"legend": {
"calcs": ["lastNotNull", "max", "min"],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "time_series",
"rawQuery": true,
"rawSql": "SELECT\n last_changed AS time,\n state::float AS value,\n entity_id AS metric\nFROM recorder_states\nWHERE entity_id IN ('sensor.tecalor_thz5_5_eco_el_energieaufnahme_ww_summe_mwh', 'sensor.tecalor_thz5_5_eco_el_energieaufnahme_heiz_summe_mwh')\n AND $__timeFilter(last_changed)\nORDER BY last_changed",
"refId": "A"
}
],
"title": "Energieaufnahme (WW / Heizung, kumuliert)",
"type": "timeseries"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "MWh"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 6,
"x": 12,
"y": 19
},
"id": 8,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"textMode": "auto"
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "table",
"rawQuery": true,
"rawSql": "SELECT state::float AS value, entity_id AS metric\nFROM recorder_states\nWHERE entity_id = 'sensor.tecalor_thz5_5_eco_el_energieaufnahme_ww_summe_mwh'\nORDER BY last_changed DESC LIMIT 1",
"refId": "A"
}
],
"title": "WW Gesamtenergie (MWh)",
"type": "stat"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "MWh"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 6,
"x": 18,
"y": 19
},
"id": 9,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"textMode": "auto"
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "table",
"rawQuery": true,
"rawSql": "SELECT state::float AS value, entity_id AS metric\nFROM recorder_states\nWHERE entity_id = 'sensor.tecalor_thz5_5_eco_el_energieaufnahme_heiz_summe_mwh'\nORDER BY last_changed DESC LIMIT 1",
"refId": "A"
}
],
"title": "Heizung Gesamtenergie (MWh)",
"type": "stat"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 27
},
"id": 17,
"title": "Zusatzinformationen",
"panelType": "row"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 4,
"x": 0,
"y": 28
},
"id": 10,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"textMode": "auto"
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "table",
"rawQuery": true,
"rawSql": "SELECT state::float AS value, entity_id AS metric\nFROM recorder_states\nWHERE entity_id = 'sensor.tecalor_thz5_5_eco_firmware_version'\nORDER BY last_changed DESC LIMIT 1",
"refId": "A"
}
],
"title": "Firmware Version",
"type": "stat"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 4,
"x": 4,
"y": 28
},
"id": 11,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"textMode": "auto"
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "table",
"rawQuery": true,
"rawSql": "SELECT state::float AS value, entity_id AS metric\nFROM recorder_states\nWHERE entity_id = 'sensor.tecalor_thz5_5_eco_laufzeit_verdichter_heizen'\nORDER BY last_changed DESC LIMIT 1",
"refId": "A"
}
],
"title": "Verdichter Laufzeit (Heizen, h)",
"type": "stat"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 4,
"x": 8,
"y": 28
},
"id": 12,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"textMode": "auto"
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "table",
"rawQuery": true,
"rawSql": "SELECT state::float AS value, entity_id AS metric\nFROM recorder_states\nWHERE entity_id = 'sensor.tecalor_thz5_5_eco_laufzeit_verdichter_ww'\nORDER BY last_changed DESC LIMIT 1",
"refId": "A"
}
],
"title": "Verdichter Laufzeit (WW, h)",
"type": "stat"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 4,
"x": 12,
"y": 28
},
"id": 13,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"textMode": "auto"
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "table",
"rawQuery": true,
"rawSql": "SELECT state::float AS value, entity_id AS metric\nFROM recorder_states\nWHERE entity_id = 'sensor.tecalor_thz5_5_eco_raumsolltemp_tag'\nORDER BY last_changed DESC LIMIT 1",
"refId": "A"
}
],
"title": "Raumsolltemp (Tag)",
"type": "stat"
}
],
"refresh": "30s",
"schemaVersion": 40,
"tags": ["homeassistant", "tec", "heat-pump"],
"templating": {
"list": []
},
"time": {
"from": "now-24h",
"to": "now"
},
"timepicker": {},
"timezone": "browser",
"title": "Tecalor Wärmepumpe",
"uid": "tec-waermepumpe",
"version": 1
}
@@ -0,0 +1,880 @@
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "grafana",
"uid": "-- Grafana --"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 1,
"id": null,
"links": [],
"liveNow": false,
"panels": [
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 0
},
"id": 14,
"title": "Temperatures",
"panelType": "row",
"type": "row"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"fillGradient": 0,
"lineInterpolation": "linear",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": "linear",
"show": "default",
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "°C"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 1
},
"id": 2,
"options": {
"legend": {
"calcs": ["lastNotNull", "max", "min"],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "time_series",
"rawQuery": true,
"rawSql": "SELECT\n last_changed AS time,\n state::float AS value,\n entity_id AS metric\nFROM recorder_states\nWHERE entity_id IN ('sensor.thzctl_vorlaufisttemp', 'sensor.thzctl_ruecklaufisttemp')\n AND $__timeFilter(last_changed)\nORDER BY last_changed",
"refId": "A"
}
],
"title": "Vorlauf & Rücklauf Temperatur",
"type": "timeseries"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"fillGradient": 0,
"lineInterpolation": "linear",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": "linear",
"show": "default",
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "°C"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 1
},
"id": 3,
"options": {
"legend": {
"calcs": ["lastNotNull", "max", "min"],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "time_series",
"rawQuery": true,
"rawSql": "SELECT\n last_changed AS time,\n state::float AS value,\n entity_id AS metric\nFROM recorder_states\nWHERE entity_id IN ('sensor.tecalor_thz5_5_eco_heissgas_temp', 'sensor.tecalor_thz5_5_eco_olsumpftemperatur', 'sensor.tecalor_thz5_5_eco_invertertemperatur')\n AND $__timeFilter(last_changed)\nORDER BY last_changed",
"refId": "A"
}
],
"title": "Kesseltemperatur (Heissgas, Ölsumpftemp, Inverter)",
"type": "timeseries"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 9
},
"id": 15,
"title": "Druck & Zustand",
"panelType": "row"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"fillGradient": 0,
"lineInterpolation": "linear",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": "linear",
"show": "default",
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "bar"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 8,
"x": 0,
"y": 10
},
"id": 4,
"options": {
"legend": {
"calcs": ["lastNotNull", "max", "min"],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "time_series",
"rawQuery": true,
"rawSql": "SELECT\n last_changed AS time,\n state::float AS value,\n entity_id AS metric\nFROM recorder_states\nWHERE entity_id IN ('sensor.tecalor_thz5_5_eco_druck_hochdruck', 'sensor.tecalor_thz5_5_eco_druck_niederdruck', 'sensor.tecalor_thz5_5_eco_druck_heizkreis')\n AND $__timeFilter(last_changed)\nORDER BY last_changed",
"refId": "A"
}
],
"title": "Druck (Hoch/Nieder/Heizkreis)",
"type": "timeseries"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"fillGradient": 0,
"lineInterpolation": "linear",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": "linear",
"show": "default",
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "°C"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 8,
"x": 8,
"y": 10
},
"id": 5,
"options": {
"legend": {
"calcs": ["lastNotNull", "max", "min"],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "time_series",
"rawQuery": true,
"rawSql": "SELECT\n last_changed AS time,\n state::float AS value,\n entity_id AS metric\nFROM recorder_states\nWHERE entity_id IN ('sensor.tecalor_thz5_5_eco_verfluessiger_temp', 'sensor.tecalor_thz5_5_eco_speichersolltemp_tag')\n AND $__timeFilter(last_changed)\nORDER BY last_changed",
"refId": "A"
}
],
"title": "Verflüssiger & Speichersoll",
"type": "timeseries"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"fillGradient": 0,
"lineInterpolation": "linear",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": "linear",
"show": "default",
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "h"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 8,
"x": 16,
"y": 10
},
"id": 6,
"options": {
"legend": {
"calcs": ["lastNotNull", "max", "min"],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "time_series",
"rawQuery": true,
"rawSql": "SELECT\n last_changed AS time,\n state::float AS value,\n entity_id AS metric\nFROM recorder_states\nWHERE entity_id IN ('sensor.tecalor_thz5_5_eco_laufzeit_verdichter_heizen', 'sensor.tecalor_thz5_5_eco_laufzeit_verdichter_ww')\n AND $__timeFilter(last_changed)\nORDER BY last_changed",
"refId": "A"
}
],
"title": "Laufzeit Verdichter (Heizen / WW)",
"type": "timeseries"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 18
},
"id": 16,
"title": "Energieverbrauch",
"panelType": "row"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"fillGradient": 0,
"lineInterpolation": "linear",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": "linear",
"show": "default",
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "MWh"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 19
},
"id": 7,
"options": {
"legend": {
"calcs": ["lastNotNull", "max", "min"],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "time_series",
"rawQuery": true,
"rawSql": "SELECT\n last_changed AS time,\n state::float AS value,\n entity_id AS metric\nFROM recorder_states\nWHERE entity_id IN ('sensor.tecalor_thz5_5_eco_el_energieaufnahme_ww_summe_mwh', 'sensor.tecalor_thz5_5_eco_el_energieaufnahme_heiz_summe_mwh')\n AND $__timeFilter(last_changed)\nORDER BY last_changed",
"refId": "A"
}
],
"title": "Energieaufnahme (WW / Heizung, kumuliert)",
"type": "timeseries"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "MWh"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 6,
"x": 12,
"y": 19
},
"id": 8,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"textMode": "auto"
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "table",
"rawQuery": true,
"rawSql": "SELECT state::float AS value, entity_id AS metric\nFROM recorder_states\nWHERE entity_id = 'sensor.tecalor_thz5_5_eco_el_energieaufnahme_ww_summe_mwh'\nORDER BY last_changed DESC LIMIT 1",
"refId": "A"
}
],
"title": "WW Gesamtenergie (MWh)",
"type": "stat"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "MWh"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 6,
"x": 18,
"y": 19
},
"id": 9,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"textMode": "auto"
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "table",
"rawQuery": true,
"rawSql": "SELECT state::float AS value, entity_id AS metric\nFROM recorder_states\nWHERE entity_id = 'sensor.tecalor_thz5_5_eco_el_energieaufnahme_heiz_summe_mwh'\nORDER BY last_changed DESC LIMIT 1",
"refId": "A"
}
],
"title": "Heizung Gesamtenergie (MWh)",
"type": "stat"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 27
},
"id": 17,
"title": "Zusatzinformationen",
"panelType": "row"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 4,
"x": 0,
"y": 28
},
"id": 10,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"textMode": "auto"
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "table",
"rawQuery": true,
"rawSql": "SELECT state::float AS value, entity_id AS metric\nFROM recorder_states\nWHERE entity_id = 'sensor.tecalor_thz5_5_eco_firmware_version'\nORDER BY last_changed DESC LIMIT 1",
"refId": "A"
}
],
"title": "Firmware Version",
"type": "stat"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 4,
"x": 4,
"y": 28
},
"id": 11,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"textMode": "auto"
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "table",
"rawQuery": true,
"rawSql": "SELECT state::float AS value, entity_id AS metric\nFROM recorder_states\nWHERE entity_id = 'sensor.tecalor_thz5_5_eco_laufzeit_verdichter_heizen'\nORDER BY last_changed DESC LIMIT 1",
"refId": "A"
}
],
"title": "Verdichter Laufzeit (Heizen, h)",
"type": "stat"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 4,
"x": 8,
"y": 28
},
"id": 12,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"textMode": "auto"
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "table",
"rawQuery": true,
"rawSql": "SELECT state::float AS value, entity_id AS metric\nFROM recorder_states\nWHERE entity_id = 'sensor.tecalor_thz5_5_eco_laufzeit_verdichter_ww'\nORDER BY last_changed DESC LIMIT 1",
"refId": "A"
}
],
"title": "Verdichter Laufzeit (WW, h)",
"type": "stat"
},
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 4,
"x": 12,
"y": 28
},
"id": 13,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"textMode": "auto"
},
"targets": [
{
"datasource": {
"type": "postgres",
"uid": "homeassistant"
},
"format": "table",
"rawQuery": true,
"rawSql": "SELECT state::float AS value, entity_id AS metric\nFROM recorder_states\nWHERE entity_id = 'sensor.tecalor_thz5_5_eco_raumsolltemp_tag'\nORDER BY last_changed DESC LIMIT 1",
"refId": "A"
}
],
"title": "Raumsolltemp (Tag)",
"type": "stat"
}
],
"refresh": "30s",
"schemaVersion": 40,
"tags": ["homeassistant", "tec", "heat-pump"],
"templating": {
"list": []
},
"time": {
"from": "now-24h",
"to": "now"
},
"timepicker": {},
"timezone": "browser",
"title": "Tecalor Wärmepumpe",
"uid": "tec-waermepumpe",
"version": 1
}