Homee Prometheus Exporter

Disclaimer

Der Exporter benutzt undokumentierte und nicht freigegebene Schnittstellen (APIs) von Homee. Die Betreiber koennen den Gebrauch jederzeit verbieten, einschraenken oder die APIs aendern, so dass diese Software nicht mehr funktioniert. Verwendung auf eigenes Risiko!

Projektbeschreibung

Das Projekt stellt eine HTTP Schnitstelle bereit, in welcher die Metriken (aktuell Strom, Licht, Temperatur) der Sensoren “exportiert” werden. Das exportierte Format ist kompatibel mit Prometheus, einem Open-Source Projekt zum Sammeln und Aggregieren von Metriken ueber Zeit. Auf Basis von Prometheus koennen dann, z. B. mit Grafana, Dashboards erstellt werden oder mit Alertmanager Benachrichtigungen verschickt werden, wenn bestimmte Metriken oder Kobinationen aus Metriken definierte Werte ueber-/unterschreiten, etc.

Anwendungsbeispiele

Prometheus

Dies ist meine original Konfiguration, die fuer das unten gezeigte Dashboard verwendet wird:

global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - alertmanager:9093

rule_files:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  - job_name: node
    static_configs:
      - targets: ['localhost:9100']
        labels:
          node: srv.lvp6.htz
          datacenter: htz
          env: prod
  - job_name: homee
    static_configs:
      - targets: ['localhost:7100']
        labels:
          node: homee_xenji

Grafana

Hier ist das Dashboard als JSON zum importieren. Nach dem import muesst ihr eventuell den Namen der Datenquelle in den einzelnen Graphen anpassen.

{
  "annotations": {
    "list": [
      {
        "builtIn": 1,
        "datasource": "-- Grafana --",
        "enable": true,
        "hide": true,
        "iconColor": "rgba(0, 211, 255, 1)",
        "name": "Annotations & Alerts",
        "type": "dashboard"
      }
    ]
  },
  "editable": true,
  "gnetId": null,
  "graphTooltip": 0,
  "id": 6,
  "links": [],
  "panels": [
    {
      "aliasColors": {},
      "bars": false,
      "dashLength": 10,
      "dashes": false,
      "datasource": null,
      "decimals": 0,
      "fill": 1,
      "gridPos": {
        "h": 8,
        "w": 12,
        "x": 0,
        "y": 0
      },
      "id": 6,
      "legend": {
        "avg": false,
        "current": true,
        "max": false,
        "min": false,
        "show": true,
        "total": false,
        "values": true
      },
      "lines": true,
      "linewidth": 1,
      "links": [],
      "nullPointMode": "null",
      "percentage": false,
      "pointradius": 5,
      "points": false,
      "renderer": "flot",
      "seriesOverrides": [],
      "spaceLength": 10,
      "stack": false,
      "steppedLine": false,
      "targets": [
        {
          "$$hashKey": "object:1255",
          "expr": "current_light",
          "format": "time_series",
          "interval": "",
          "intervalFactor": 1,
          "legendFormat": "{{name}}",
          "refId": "A"
        }
      ],
      "thresholds": [],
      "timeFrom": null,
      "timeShift": null,
      "title": "Brightness",
      "tooltip": {
        "shared": true,
        "sort": 0,
        "value_type": "individual"
      },
      "type": "graph",
      "xaxis": {
        "buckets": null,
        "mode": "time",
        "name": null,
        "show": true,
        "values": []
      },
      "yaxes": [
        {
          "$$hashKey": "object:1280",
          "format": "short",
          "label": "Lux",
          "logBase": 1,
          "max": null,
          "min": null,
          "show": true
        },
        {
          "$$hashKey": "object:1281",
          "format": "short",
          "label": null,
          "logBase": 1,
          "max": null,
          "min": null,
          "show": true
        }
      ]
    },
    {
      "aliasColors": {},
      "bars": false,
      "dashLength": 10,
      "dashes": false,
      "datasource": null,
      "fill": 0,
      "gridPos": {
        "h": 8,
        "w": 12,
        "x": 12,
        "y": 0
      },
      "id": 4,
      "legend": {
        "avg": false,
        "current": false,
        "max": false,
        "min": false,
        "show": true,
        "total": false,
        "values": false
      },
      "lines": true,
      "linewidth": 1,
      "links": [],
      "nullPointMode": "null",
      "percentage": false,
      "pointradius": 5,
      "points": false,
      "renderer": "flot",
      "seriesOverrides": [],
      "spaceLength": 10,
      "stack": false,
      "steppedLine": false,
      "targets": [
        {
          "$$hashKey": "object:940",
          "expr": "current_temperature",
          "format": "time_series",
          "interval": "",
          "intervalFactor": 1,
          "legendFormat": "{{name}}",
          "refId": "A"
        }
      ],
      "thresholds": [],
      "timeFrom": null,
      "timeShift": null,
      "title": "Current Temperature Levels",
      "tooltip": {
        "shared": true,
        "sort": 0,
        "value_type": "individual"
      },
      "type": "graph",
      "xaxis": {
        "buckets": null,
        "mode": "time",
        "name": null,
        "show": true,
        "values": []
      },
      "yaxes": [
        {
          "$$hashKey": "object:965",
          "format": "celsius",
          "label": null,
          "logBase": 1,
          "max": "35",
          "min": "-5",
          "show": true
        },
        {
          "$$hashKey": "object:966",
          "format": "short",
          "label": null,
          "logBase": 1,
          "max": null,
          "min": null,
          "show": true
        }
      ]
    },
    {
      "aliasColors": {},
      "bars": false,
      "dashLength": 10,
      "dashes": false,
      "datasource": null,
      "fill": 1,
      "gridPos": {
        "h": 7,
        "w": 24,
        "x": 0,
        "y": 8
      },
      "id": 2,
      "legend": {
        "avg": false,
        "current": true,
        "max": true,
        "min": false,
        "show": true,
        "total": false,
        "values": true
      },
      "lines": true,
      "linewidth": 1,
      "links": [],
      "nullPointMode": "null",
      "percentage": false,
      "pointradius": 5,
      "points": false,
      "renderer": "flot",
      "seriesOverrides": [],
      "spaceLength": 10,
      "stack": false,
      "steppedLine": false,
      "targets": [
        {
          "expr": "current_energy{unit=\"W\"}",
          "format": "time_series",
          "interval": "",
          "intervalFactor": 1,
          "legendFormat": "{{name}}",
          "refId": "A"
        }
      ],
      "thresholds": [],
      "timeFrom": null,
      "timeShift": null,
      "title": "Current Energy Consumption",
      "tooltip": {
        "shared": true,
        "sort": 0,
        "value_type": "individual"
      },
      "type": "graph",
      "xaxis": {
        "buckets": null,
        "mode": "time",
        "name": null,
        "show": true,
        "values": []
      },
      "yaxes": [
        {
          "format": "watt",
          "label": null,
          "logBase": 1,
          "max": null,
          "min": null,
          "show": true
        },
        {
          "format": "short",
          "label": null,
          "logBase": 1,
          "max": null,
          "min": null,
          "show": true
        }
      ]
    }
  ],
  "refresh": false,
  "schemaVersion": 16,
  "style": "dark",
  "tags": [],
  "templating": {
    "list": []
  },
  "time": {
    "from": "now-3h",
    "to": "now"
  },
  "timepicker": {
    "refresh_intervals": [
      "5s",
      "10s",
      "30s",
      "1m",
      "5m",
      "15m",
      "30m",
      "1h",
      "2h",
      "1d"
    ],
    "time_options": [
      "5m",
      "15m",
      "1h",
      "6h",
      "12h",
      "24h",
      "2d",
      "7d",
      "30d"
    ]
  },
  "timezone": "",
  "title": "Homee",
  "uid": "nN5A_jekz",
  "version": 4
}
8 „Gefällt mir“

kann man das hier mit IObroker verwenden??
gibt es ne schritt für schritt anleitung für mich :frowning:
gehts das aufn n raspberry

ich les zum grossteil nur fragezeichen soooorrrryyyy

I/O Broker ist ja quasi ein selbst-bau Homee mit eigener Hardware, wenn ich das richtig verstanden habe. In diesem Fall muss ich dann klar sagen: nein, der homee Prometheus Exporter ist rein fuer den Export von Metriken von homee nach Prometheus gebaut und wird auch nichts anderes als dies machen.

Zu der Frage "Geht das auf nem Raspi:
Den Exporter kannst du ohne Probleme auf einem Raspi laufen lassen. Prometheus schreibt viel auf der Festplatte rum, ich denke das eine SD Karte da das falsche Medium ist. Mit einer externen Festplatte (z. B. SSD via USB) koennte man es probieren. Hier ist ein Artikel, der sich mit dem Thema Prometheus auf dem RPi beschaeftigt: Prometheus on Raspberry Pi

Und das naechste Release ist raus: https://github.com/xenji/homee_exporter/releases/tag/0.3.0

Release Notes

This release adds new metrics to the export

  • Binary Sensors
    
  • Motion Alarms
    
  • Battery Levels
    
  • Link Quality to e.g. Netatmo devices
    

This release fixes the thread timing and sleep handling and reduces the necessary memory consumption to roughly 30MB.

This release has been successfully tested with -Xms16m -Xmx32m -XX:+UseG1GC -XX:MaxGCPauseMillis=50

die frage zum IoBroker war ja nur das man evtl homee mit in die grapische oberfläche intergrieren könnte

muss man wohl doch warten bis homee ne api hat
ist zwar alles schön soweit aber mir gefällt mein 3d modell vom haus sehr gut
macht alles etwas persönlicher und individueller

Ich habe nicht ausgeschlossen, dass es grundsaetzlich geht, nur dass es nicht im Fokus meines Projekts steht.

1 „Gefällt mir“

Und ein neues Release mit einem Bugfix fuer das Websocket handling beim neu-verbinden nach Verbindungsabbruch: https://github.com/xenji/homee_exporter/releases/tag/0.3.2

3 „Gefällt mir“