Stromzähler, Verbrauch monitoren?

Hallo,
hat hier jemand ggf. schon checmk mit einem Stromzähler kombiniert.
Bin heute über

gestolpert und da mal ich frag ma nach.
Gruß
Ralf

Dieses spezielle Gerät kenne ich nicht.

Folgende Vermutung: Dieses Gerät kann über eine WebAPI abgefragt werden und stellt die Daten evtl. in einem json Format zur Verfügung. Das kann dann über einen lokalen Check abgefragt und verarbeitet werden.

Ich habe ähnliches für Tasmota Steckdosen am laufen.

#!/usr/bin/env python3
#
# CheckMK local check to read out some information from tasmota sockets
#
# Read: https://tasmota.github.io/docs/Commands/
import yaml
import urllib.request
import urllib.parse
### Threshold Values
VOLTAGE=";240;250"
POWER=";200;300"
### Get Status
url = 'http://192.168.178.27/cm?cmnd=Status0'
f = urllib.request.urlopen(url)
valuesYaml = yaml.safe_load(f)
DEVICE=valuesYaml['Status']['DeviceName']
print("0 \"Tasmota {} Firmeware\" - {}".format(DEVICE,valuesYaml['StatusFWR']['Version']))
print("0 \"Tasmota {} Build date\" - {}".format(DEVICE,valuesYaml['StatusFWR']['BuildDateTime']))
print("P \"Tasmota {} Voltage\"
Voltage={}{}".format(DEVICE,valuesYaml['StatusSNS']['ENERGY']['Voltage'],VOLTAGE))
print("0 \"Tasmota {} Current\"
Current={}".format(DEVICE,valuesYaml['StatusSNS']['ENERGY']['Current']))
print("P \"Tasmota {} Power\"
Power={}{}".format(DEVICE,valuesYaml['StatusSNS']['ENERGY']['Power'],POWER))
print("0 \"Tasmota {} Total Energy\"
TotalEnergy={}".format(DEVICE,valuesYaml['StatusSNS']['ENERGY']['Total'])) 

Also wenn ich das richtig verstehe dann hat der IR Sensor die Tasmota Firmware.

Da könntest Du vermutlich den lokalen Check übernehmen. Evtl. dort aber noch weitere oder andere Werte hinzufügen bzw. anpassen. Eine Übersicht welche Werte die Tasmota API zurück liefert bekommst du mittels Web Abfrage:

http://<ip-des-ir-sensors>/cm?cmnd=Status0

Hallo zusammen,

ich habe das laufen. Der gezeigte IR-Lesekopf ist vom Hichi. Der baut und supportet diesen selber. Netter Kerl.
Ich habe den VZ-Logger (Volkszähler-Logger ohne die Vollinstallation des Volkszählers) auf einer Debian Maschine installiert. Den Lesekopf habe ich als USB Variante beim Hichi über ebay bestellt. Kein Umbau mit irgendwelcher Software, sondern so, wie geliefert.

Anderer Zähler als der vom Ralf.

Der VZ-Logger kann, mit der richtigen Konfiguration, die Daten via eines eigenen HTTP-Servers bereitstellen. Da habe ich eingestellt, dass er keine Daten puffern soll, weil ich hier mit einem Local-Check die Daten abfrage und in Checkmk darstelle.
Kombiniert habe ich das in Combined Graphs, usw…

Das Gleiche habe ich auch noch für das Balkonkraftwerk mit einem Hoymiles Wechselrichter gemacht. Da gibt es OpenDTU. Das Hardware Dingen bastelt man für unter 20€ zusammen. Macht WLAN zum Wechselrichter und ins eigene WLAN. Das hat dann auch eine API, wo der ganze Spaß nochmal von vorne los ging.
Ich bin immer noch nicht in der Lage selber Plugins zu bauen, deshalb Local Checks.

Screenshots:

Das habe ich auch nochmal mit Grafana visualisiert. Da gibt es aber ein Problem mit der Darstellung/Unterscheidung der verschiedenen Phasen, weil nicht der Servicename, sondern das PerfdataLabel zur Beschriftung genutzt wird. (Ist an Marcel Arentz kommuniziert.)

Wenn da Interesse besteht, kann ich das Ganze mal zusammenschreiben oder MKPs basteln. Habe aber jetzt Urlaub bis zum 21.8.

2 Likes

Ach was solls…

https://wiki.volkszaehler.org/software/controller/vzlogger/installation_cpp-version

Die Konfig für den VZ-Logger muss man teilweise selber rausfinden und viel Googlen. Hier meine laufende. Die könnte zumindest schneller zum Ziel fühern. Man kann das Debug-Level erhöhen um zu sehen was denn da alles kommt. Kommt nix im Debugging, kann man versuchen den Sensor einen Millimeter zu bewegen.
Hilfe: Youtube Hichis Video: USB Lesekopf mit hterm testen - YouTube

Ich schicke die Daten noch an einen MQTT Server. Damit könnte z.B. Homeassistant was anzeigen. Habe ich für das Smartmeter noch nicht geschafft. OpenDTU wird aber angezeigt.

cat /etc/vzlogger.conf
{
  "retry": 0,
  "verbosity": 2,
  "log": "/var/log/vzlogger.log",
  "local": {
    "enabled": true,
    "port": 8081,
    "index": true,
    "timeout": 0,
    "buffer": 0
  },
  "mqtt": {
    "enabled": true,
    "host": "<NE_IP>",
    "port": 1883,
    "id": "vzlogger",
    "keepalive": 30,
    "topic": "vzlogger/data",
    "id": "smartmeter",
    "user": "mqtt",
    "pass": "<SUPER_GEHEIM>",
    "retain": false,
    "rawAndAgg": false,
    "qos": 0,
    "timestamp": true
  },
  "meters": [
    {
      "enabled": true,
      "allowskip": false,
      "interval": -1,
      "aggtime": -1,
      "aggfixedinterval": false,
      "channels": [
        {
          "api": "volkszaehler",
          "uuid": "101670",
          "identifier": "1-0:16.7.0",  /* Leistung */
          "middleware": "http://localhost/middleware.php",
          "aggmode": "none",
          "duplicates": 0
        },
        {
          "api": "volkszaehler",
          "uuid": "103670",
          "identifier": "1-0:36.7.0", /* Leistung L1 (Momentan) */
          "middleware": "http://localhost/middleware.php",
          "aggmode": "none",
          "duplicates": 0
        },
        {
          "api": "volkszaehler",
          "uuid": "105670",
          "identifier": "1-0:56.7.0", /* Leistung L2 (Momentan) */
          "middleware": "http://localhost/middleware.php",
          "aggmode": "none",
          "duplicates": 0
        },
        {
          "api": "volkszaehler",
          "uuid": "107670",
          "identifier": "1-0:76.7.0", /* Leistung L3 (Momentan) */
          "middleware": "http://localhost/middleware.php",
          "aggmode": "none",
          "duplicates": 0
        },
        {
          "api": "volkszaehler",
          "uuid": "10180",
          "identifier": "1-0:1.8.0", /* Wirkarbeit Bezug +A */
          "middleware": "http://localhost/middleware.php",
          "aggmode": "none",
          "duplicates": 0
        },
        {
          "api": "volkszaehler",
          "uuid": "10280",
          "identifier": "1-0:2.8.0", /* Wirkarbeit Lieferung -A */
          "middleware": "http://localhost/middleware.php",
          "aggmode": "none",
          "duplicates": 0
        },
        {
          "api": "volkszaehler",
          "uuid": "103270",
          "identifier": "1-0:32.7.0", /* (228.38*V)    Spannung L1 (Momentan) */
          "middleware": "http://localhost/middleware.php",
          "aggmode": "none",
          "duplicates": 0
        },
        {
          "api": "volkszaehler",
          "uuid": "105270",
          "identifier": "1-0:52.7.0", /* (228.38*V)    Spannung L2 (Momentan) */
          "middleware": "http://localhost/middleware.php",
          "aggmode": "none",
          "duplicates": 0
        },
        {
          "api": "volkszaehler",
          "uuid": "107270",
          "identifier": "1-0:72.7.0", /* (228.38*V)    Spannung L3 (Momentan) */
          "middleware": "http://localhost/middleware.php",
          "aggmode": "none",
          "duplicates": 0
        }
      ],
      "protocol": "sml",
      "device": "/dev/ttyUSB0",
      "baudrate": 9600,
      "parity": "8n1",
      "use_local_time": true
    }
  ]
}

Der VZ-Logger liefert dann sowas:

curl -s http://<IP>:8081/ | jq
{
  "version": "0.8.1",
  "generator": "vzlogger",
  "data": [
    {
      "uuid": "101670",
      "last": 1690921720649,
      "interval": -1,
      "protocol": "sml",
      "tuples": [
        [
          1690921720649,
          273.31
        ]
      ]
    },
    {
      "uuid": "103670",
      "last": 1690921720649,
      "interval": -1,
      "protocol": "sml",
      "tuples": [
        [
          1690921720649,
          144.36
        ]
      ]
    },
    {
      "uuid": "105670",
      "last": 1690921720649,
      "interval": -1,
      "protocol": "sml",
      "tuples": [
        [
          1690921720649,
          11.1
        ]
      ]
    },
    {
      "uuid": "107670",
      "last": 1690921720649,
      "interval": -1,
      "protocol": "sml",
      "tuples": [
        [
          1690921720649,
          117.84
        ]
      ]
    },
    {
      "uuid": "10180",
      "last": 1690921720649,
      "interval": -1,
      "protocol": "sml",
      "tuples": [
        [
          1690921720649,
          17199974.934100002
        ]
      ]
    },
    {
      "uuid": "10280",
      "last": 1690921720649,
      "interval": -1,
      "protocol": "sml",
      "tuples": [
        [
          1690921720649,
          88550.9837
        ]
      ]
    },
    {
      "uuid": "103270",
      "last": 1690921720649,
      "interval": -1,
      "protocol": "sml",
      "tuples": [
        [
          1690921720649,
          235.20000000000002
        ]
      ]
    },
    {
      "uuid": "105270",
      "last": 1690921720649,
      "interval": -1,
      "protocol": "sml",
      "tuples": [
        [
          1690921720649,
          235
        ]
      ]
    },
    {
      "uuid": "107270",
      "last": 1690921720649,
      "interval": -1,
      "protocol": "sml",
      "tuples": [
        [
          1690921720649,
          235.20000000000002
        ]
      ]
    }
  ]
}

Meine Mom schaut jetzt immer ob gerade Sonne ist und stellt daraufhin erst die Waschmaschine, etc. an.
Zeigt die “Electrical power” einen negativen Wert an, schenkt man dem Energieversorger Strom. Sollte man besser speichern, lohnt aber bei den Batteriepreisen noch nicht.

Viel Erfolg!

2 Likes

Die lokale API frage ich via Cronjob ab, weil ich die Daten noch von woanders abholen will:

* * * * * curl -s http://<IP>:8081/ > /tmp/smartmeter.json
* * * * * curl -s http://<IP>/api/livedata/status > /tmp/hm-600.json

In Ermangelung an Fähigkeiten meinerseits habe ich eine Datasource gebaut:

cat ~/local/bin/datasource_vzlogger_all.py

#!/usr/bin/env python3

# needs crontab entry
# * * * * * curl -s http://localhost:8081/ > /tmp/smartmeter.json


import requests
import json

def main():
    # Abrufen der JSON-Daten von der URL mit einem Timeout von 3 Sekunden
    try:
        #response = requests.get("http://localhost:8081/", timeout=3)
        #response.raise_for_status()

        with open('/tmp/smartmeter.json', 'r') as file:
            data = json.load(file)

    except (requests.exceptions.RequestException, requests.exceptions.HTTPError) as e:
        print("Fehler beim Abrufen der Daten:", e)
        exit()

    # Analysieren der JSON-Daten
    #data = response.json()

    print('<<<local>>>')

    for item in data['data']:
        uuid = item['uuid']
        value = item['tuples'][0][1]
        metriclabel = ''
        output = ''

        if uuid == '10180': # Wirkarbeit Bezug +A -- Zählerstand Bezug El. Energie (Zählerstände) Auflösung 1000
            servicename = 'Zaehlerstand_Bezug_plus_A_tariflos'
            metriclabel = 'smartmeter_counter'
            value = value/1000
            output = 'Wirkarbeit Bezug +A -- Zählerstand Bezug El. Energie (Zählerstände)'

        elif uuid == '10280': # Wirkarbeit Lieferung -A -- Zählerstand Lieferung El. Energie (Zählerstände) Auflösung 1000
            servicename = 'Zaehlerstand_Lieferung_minus_A_tariflos'
            metriclabel = 'smartmeter_counter-out'
            value = value/1000
            output = 'Wirkarbeit Lieferung -A -- Zählerstand Lieferung El. Energie (Zählerstände)'

        elif uuid == '10181': # Zählerstand Bezug El. Energie (Zählerstände) Auflösung 1000 Tarif 1
            servicename = 'Zaehlerstand_Bezug_plus_A_tarif_1'
            metriclabel = 'smartmeter_esy-counter-t1'
            value = value/1000
            output = 'Wirkarbeit Bezug +A - Zählerstand Bezug El. Energie (Zählerstände) Tarif 1'

        elif uuid == '10182': # Zählerstand Bezug El. Energie (Zählerstände) Auflösung 1000 Tarif 2
            servicename = 'Zaehlerstand_Bezug_plus_A_tarif_2'
            metriclabel = 'smartmeter_esy-counter-t2'
            value = value/1000
            output = 'Wirkarbeit Bezug +A - Zählerstand Bezug El. Energie (Zählerstände) Tarif 2'


        elif uuid == '101670': # Leistung -- Leistung (Momentan) El. Energie (Leistungswerte)
            servicename = 'Leistung_Momentan_Summe'
            metriclabel = 'smartmeter_power'
            output = 'Leistung (Momentan) El. Energie (Leistungswerte)'

        elif uuid == '103670': # Leistung L1 (Momentan) El. Energie (Leistungswerte)
            servicename = 'Leistung_L1'
            metriclabel = 'smartmeter_power-l1'
            output = 'Leistung L1 (Momentan) El. Energie (Leistungswerte)'

        elif uuid == '105670': # Leistung L2 (Momentan) El. Energie (Leistungswerte)
            servicename = 'Leistung_L2'
            metriclabel = 'smartmeter_power-l2'
            output = 'Leistung L2 (Momentan) El. Energie (Leistungswerte)'

        elif uuid == '107670': # Leistung L3 (Momentan) El. Energie (Leistungswerte)
            servicename = 'Leistung_L3'
            metriclabel = 'smartmeter_power-l3'
            output = 'Leistung L3 (Momentan) El. Energie (Leistungswerte)'


        elif uuid == '103270': # (228.38*V) Spannung L1 (Momentan)
            servicename = 'Spannung_L1'
            metriclabel = 'smartmeter_voltage-l1'
            output = 'Spannung L1 (Momentan)'

        elif uuid == '105270': # (228.38*V) Spannung L2 (Momentan)
            servicename = 'Spannung_L2'
            metriclabel = 'smartmeter_voltage-l2'
            output = 'Spannung L2 (Momentan)'

        elif uuid == '107270': # (228.38*V) Spannung L3 (Momentan)
            servicename = 'Spannung_L3'
            metriclabel = 'smartmeter_voltage-l3'
            output = 'Spannung L3 (Momentan)'

        else:
            servicename = uuid
            print(f'{servicename} nicht zugeordnet')

        #print(f'0 Smartmeter_{servicename} {metriclabel}={value} {output}')
        print(f'0 {servicename} {metriclabel}={value} {output}')

if __name__ == '__main__':
    main()

Und weil wir schon dabei sind. Hier auch noch der Code für den Wechselrichter. Sollte bei allen Hoymiles (HM-xxx) Wechselrichtern funktionieren:

cat ~/local/bin/datasource_opendtu.py

#!/usr/bin/env python3

# needs crontab entry
# * * * * * curl -s http://<IP>/api/livedata/status > /tmp/hm-600.json


import requests
import json

def main():
    ## Abrufen der JSON-Daten von der URL mit einem Timeout von 3 Sekunden
    #    #response = requests.get("http://<IP>/api/livedata/status", timeout=5)
    #    #response.raise_for_status()
    #    #data = response.json()

    try:
        with open('/tmp/hm-600.json', 'r') as file:
            json_data = json.load(file)

    except (requests.exceptions.RequestException, requests.exceptions.HTTPError) as e:
        print("Fehler beim Abrufen der Daten:", e)
        exit()

    print("<<<local>>>")

    # Daten ausgeben
    for inverter in json_data['inverters']:
        inverter_serial = inverter['serial']
        inverter_name = inverter['name'].replace(" ", "_")
        inverter_data_age = inverter['data_age']
        inverter_reachable = json_data['inverters'][0]['reachable']
        inverter_producing = json_data['inverters'][0]['producing']
        inverter_limit_relative = json_data['inverters'][0]['limit_relative']
        inverter_limit_absolute = json_data['inverters'][0]['limit_absolute']

        print("0 {}_{} - The serial number of inverter {} is {} ".format(inverter_name, "serial", inverter_name, inverter_serial))
        print("0 {}_{} age={} The age of the shown data is {} s".format(inverter_name, "data_age", inverter_data_age, inverter_data_age))
        print("0 {}_{} - The inverter is reachable: {} and is producing: {}.".format(inverter_name, "state", inverter_reachable, inverter_producing))
        print("0 {}_{} - The inverters relative limit is {} and the maximum is {} W.".format(inverter_name, "limits", inverter_limit_relative, inverter_limit_absolute))

        ### AC
        AC_json = json_data['inverters'][0]['AC']['0']

        for key, value in AC_json.items():
            service_key = key.replace(" ", "_")
            metric_key = key.replace(" ", "_").lower()
            metric_value = json_data['inverters'][0]['AC']['0'][key]['v']
            value = round(float(json_data['inverters'][0]['AC']['0'][key]['v']), 2)
            unit = json_data['inverters'][0]['AC']['0'][key]['u']

            print("0 {}_AC_{} {}={} {} {}".format(inverter_name, service_key, metric_key, metric_value, value, unit))


        ### DC
        DC_json = json_data['inverters'][0]['DC']


# 0 HM-600_DC_Panel_1_name - {'u': 'Panel 1'}
# 0 HM-600_DC_Panel_1_Power - {'v': 0.300000012, 'u': 'W', 'd': 1}
# 0 HM-600_DC_Panel_1_Voltage - {'v': 15, 'u': 'V', 'd': 1}
# 0 HM-600_DC_Panel_1_Current - {'v': 0.02, 'u': 'A', 'd': 2}
# 0 HM-600_DC_Panel_1_YieldDay - {'v': 320, 'u': 'Wh', 'd': 0}
# 0 HM-600_DC_Panel_1_YieldTotal - {'v': 0.319999993, 'u': 'kWh', 'd': 3}

# 0 HM-600_DC_Panel_2_name - Panel_2
# 0 HM-600_DC_Panel_2_Power - 0.300000012
# 0 HM-600_DC_Panel_2_Voltage - 15
# 0 HM-600_DC_Panel_2_Current - 0.02
# 0 HM-600_DC_Panel_2_YieldDay - 312
# 0 HM-600_DC_Panel_2_YieldTotal - 0.312000006

        for panel in DC_json.items():
            #print("panel_data 0: ", panel[0]) # 0, 1
            #print("panel_data 1: ", panel[1]) # json data
            #print("-----")

            for key, value in panel[1].items():
                #print("key: ", key)
                #print("value: ", value)

                if key == "name":
                    # key:  name
                    # value:  {'u': 'Panel 2'}
                    #print("key: ", key)
                    #print("value: ", value)
                    panel_name = value['u'].replace(" ", "_")
                    service_key = "Name"
                    metric_key = key.replace(" ", "_").lower()
                    metric_value = value['u']
                    value = value['u']
                    unit = ""
                    print("0 {}_DC_{}_{} - {} {}".format(inverter_name, panel_name, service_key, value, unit))
                else:
                    #print("key: {}, value: {}".format(key, value))
                    service_key = key.replace(" ", "_")
                    metric_key = key.replace(" ", "_").lower()
                    metric_value = value['v']
                    value = round(float(value['v']), 2)
                    #unit = value['u']
                    print("0 {}_DC_{}_{} {}={} {} {}".format(inverter_name, panel_name, service_key, metric_key, metric_value, value, unit))


        ### INV
        INV_json = json_data['inverters'][0]['INV']['0']['Temperature']
        #print("INV_json: ", INV_json)

        # INV_json:  {'v': 9.5, 'u': '°C', 'd': 1}

        #print("INV_json temp: ", json_data['inverters'][0]['INV']['0']['Temperature']['v'])
        #print("INV_json temp: ", INV_json['v'])

        #inverter_temp = INV_json['v']

        print("0 {}_Temperature temperature={} {} {}".format(inverter_name, INV_json['v'], INV_json['v'], INV_json['u']))


        #INV_json = json_data['inverters'][0]['events']
        print("0 {}_Events events={} {}".format(inverter_name,json_data['inverters'][0]['events'], json_data['inverters'][0]['events']))


        ### total
        total_json = json_data['total']
        #print("total_json: ", total_json)

        # total_json:  {'Power': {'v': 0, 'u': 'W', 'd': 1}, 'YieldDay': {'v': 632, 'u': 'Wh', 'd': 0}, 'YieldTotal': {'v': 0.631999969, 'u': 'kWh', 'd': 2}}

        # 0 HM-600_AC_Panel_2_Power - {'v': 0, 'u': 'W', 'd': 1}
        # 0 HM-600_AC_Panel_2_YieldDay - {'v': 632, 'u': 'Wh', 'd': 0}
        # 0 HM-600_AC_Panel_2_YieldTotal - {'v': 0.631999969, 'u': 'kWh', 'd': 2}

        for key, value in total_json.items():
            #print("key: {}, value: {}".format(key, value))
            service_key = key.replace(" ", "_")
            metric_key = key.replace(" ", "_").lower()
            metric_value = value['v']
            value = round(float(value['v']), 2)
            #unit = value['u']

            print("0 {}_total_{} {}={} {} {}".format(inverter_name, service_key, metric_key, metric_value, value, unit))


if __name__ == '__main__':
    main()

Wenn ich mal richtige Plugins schreiben kann oder @thl-cmk Langeweile hat :wink: , kann man das alles auch noch in schön machen.

was soll das sein? :wink: kannst mich ja mal direkt anpingen…

1 Like

Das nette ist ja, dass man in Kombination mit openDTU und dem IR-Leser relativ einfach eine Nulleinspeisung realisieren kann. Könnte man in Checkmk über einen Alerthandler lösen… oder einfach direkt in openhab/homeassistant. :wink:
Aber interessant, um Temperaturen und Spannungen im Blick zu behalten.
Schade, dass wir kein mqtt-Agent-Plugin haben, um Topics zu abonnieren. :thinking:

Off-Topic: Ich hab da übrigens noch ne Shelly zwischen Balkonkraftwerk, Sicherung und Hausnetz geschaltet. Dann kann u.a. auch die maximale Leistung einstellen, ab der hart abgeschaltet wird.

1 Like

“Schade, dass wir kein mqtt-Agent-Plugin haben, um Topics zu abonnieren.” → ganz genau! Das hatte ich auch schon im Sinn. Die Idee musste sich @thl-cmk auch schon anhören :rofl:
Das sollte relativ leicht in der Basis sein. Kann man unendlich viel mit machen.
Ich würde da gerne eine Auswahlmöglichkeit bei der Regelerstellung in der Datasource haben. Ne Art Wizard. Man gibht die Zugangsdaten an und Checkmk gibt eine Liste mit möglichen Topics an, … Sollte machbar sein und vielleicht eine ganz neue Art der Regelerstellung.

Shelly ist auch gut. Wie liest Du das Ding aus?
Warum willst Du Abschalten? Damit der Zähler nicht rückwärts läuft?

@thl-cmk Willste das vzlogger MKP hochladen? Dürfte nix confidentiales drin sein, oder?

Warte nur noch auf die “öffentlichkeitsarbeit”. setze des vzlogger Repo in der zwischenzeit mal auf Public :slight_smile:

1 Like

Hab ich gerade keine Zeit für leider. Aber das können wir ja vielleicht mit @marcel.arentz zusammen machen.

#blogartikel

Hi,
hab das mit der Nulleinspeisung (ohne checkmk) gerade am Wochenende bei meinem Vater basierend auf dem Script und Service gemacht.
Für die Shelly pro3em muss man etwas die API anpassen.

Nulleinspeisung Hoymiles HM-1500 mit OpenDTU & Python Steuerung - selbstbau-pv.de

Selbstbau-PV-Hoymiles-nulleinspeisung-mit-OpenDTU-und-Shelly3EM/nulleinspeisung.py at main · Selbstbau-PV/Selbstbau-PV-Hoymiles-nulleinspeisung-mit-OpenDTU-und-Shelly3EM · GitHub

Ansonsten bastell ich grad nebenher an einem Special Agent für den Hichi IR Lesekopf bzw. Tasmota Geräte.
Weiss aber nicht wie weit ich das treiben soll da ich nur das eine Tasmota Gerät habe :smiley:
Aktuell sieht es dummy mäßig so aus (noch keine Logik oder irgendwas mit Schwellwerten. Am Interessantesten wäre das im SNS, das sind die Zähler bzw. Sensor Werte

1 Like

Ich kämpfe immer wieder mit OpenDTU, weil die Daten, die man über die API bekommt teilweise sehr wirr sind… gerade läuft sie (aus welchem Grund auch immer) gar nicht mehr. Sobald sie wieder läuft (mit aktueller Firmware), schreibe ich mal den Rest fertig und lade es als MKP hoch. Dann können andere mal schauen, inwiefern es mit ihren Versionen von OpenDTU zusammenpasst.

Hi @marcel.arentz,

ich hatte da auch ein Problem. Die haben das Dateisystem geändert. Ich habe deshalb gerade keine Updates gemacht. Muss ich demnächst mal neu aufsetzen.

Zu Deiner OpenDTU Implementierung:

Den Hichii IR Lesekopf hatte ich schon mit @thl-cmk fertig. Allerdings mit installiertem vzlogger:

Wie hast Du den implementiert? Umgeflasht auf Tasmota und dann die API auslesen? Oder MQTT?
Bringt mich immer wieder auf den Punkt, dass wir eine MQTT Implementierung für Checkmk brauchen. Sowas mit Matching Tabellen. Das könnte relativ generisch werden.

1 Like

Mit ein paar Tasmota Plugs habe ich auch mal rumgespielt. Da bin ich aber auch nicht weiter:

Falls jemand was mit Fritz macht. Da hätten wir auch was:

Danke @thl-cmk !

Eine MQTT-Implementiertung wäre auch für viele andere Sachen sehr hilfreich… :slight_smile:

1 Like

immer gerne :slight_smile: