Skip to main content

Primary links

  • Home
  • AI
  • Kubernetes
  • Incus
  • Ansible
  • Terraform
  • OpenStack
  • Virtualization
  • Linux
  • SmartHome
  • HowTo

Misc

  • Linux
  • Hardware
    • APC Back-UPS ES 700G
    • ARM
    • AVM
    • AX88772A Fast Ethernet USB Adapter
    • AXIS M1144-L
    • Adaptec RAID controller
    • Android
    • Archive
    • Arduino
    • Bionx
    • Bluetooth
    • Brother
    • Cisco
    • DCPMM / NVRAM
    • Dell
    • ESP32 / ESP8266
    • HP (Hewlett Packard)
    • IPMI
    • Intel NVMe
    • LSI MegaRAID
    • Lenovo ThinkPad
    • Linpack
    • Linux Benchmark
    • Logitech Squeezebox Touch
    • Logitech
    • Mellanox
    • Micron
    • NVMe
    • OpenWRT
    • RaLink RT2500
    • Raspberry Pi
    • SmartHome
      • DAIKIN Altherma M HW
      • Home Assistant
      • Sonoff
      • Tasmota Smart Meter Interface (Stromzähler / Volkszähler)
      • Zigbee
      • gPlugM
    • Snom 320 / 370
    • Solar
    • Sony KDL-55EX725
    • Supermicro
    • Surface
    • TEMPer (usb temperatur)
    • USB Serial adapter
    • Ubiquiti
    • Update Intel NIC firmware
    • Yamaha
    • ZyXEL NSA320
    • ahoy DTU
    • batteries
    • hdparm
    • iDRAC
    • memtest86+
    • smartmontools
  • Programming
  • Databases
  • Multimedia
  • Windows

Cloud

  • OpenStack
  • cloud-config
  • nextcloud

Virtualization

  • Virtualization
  • Incus
  • Docker
  • KVM
  • Kubernetes
  • LXC
  • LXD
  • QEMU
  • VMware
  • VirtualBox
  • multipass
  • podman
  • vagrant
  • XEN

Network

  • DNS
  • Firewall
  • Linux
  • OpenvSwitch
  • SSL
  • VLAN
  • VPN
  • iPXE
  • namespaces
  • nmcli
  • tcpdump

Storage

  • CEPH
  • DRBD
  • LVM
  • S3
  • ZFS
  • btrfs

Automation / CI/CD

  • Install
  • Ansible
  • GitLab
  • LLM
  • Preseed
  • Puppet
  • Terraform
  • Ubuntu autoinstall

Monitoring / Visualisation

  • Grafana
  • Icinga
  • Prometheus
  • Monitoring
  • ELK
  • mermaid
  • smarthome

Manufacter
https://gplug.ch/produkte/gplugm/

gPlugM.yml

# gPlugM (ESP32-C3) – Landis+Gyr E450 über M-Bus / DLMS
#
# Analog zu: https://github.com/haribert/gplug-esphome (gPlugE-DSMR-P1)
# Hardware:  RX=GPIO7 inverted, 2400 8E1, unverschlüsselt
# Parser:    PR #16942 (dlms_parser 1.2.0 – Self-describing E450)

external_components:
  - source: github://pr#16942
    components: [dlms_meter]
    refresh: 1d

substitutions:
  devicename: "gplugm"
  friendly_name: "gPlugM - Stromzähler"
  purpose: "Landis+Gyr E450 über M-Bus/DLMS auslesen"
  project_name: "esphome.gplug"
  project_version: "1.4"
  dns_domain: ".local"
  timezone: "Europe/Zurich"
  log_level: "DEBUG"
  web_server_user: admin
  web_server_password: !secret web_server_password
  current_ota_password: !secret "gplugm_ota_password"
  new_ota_password: !secret ota_password

esphome:
  name: "${devicename}"
  friendly_name: "${friendly_name}"
  comment: "${purpose}"
  project:
    name: "${project_name}"
    version: "${project_version}"
  min_version: "2025.2.0"
  on_boot:
    - priority: -10
      then:
        - lambda: |-
            if (strcmp("${current_ota_password}", "${new_ota_password}") != 0) {
              ESP_LOGI("ota_update", "OTA Passwörter unterschiedlich. Setze neues Passwort...");
              id(ota_component).set_auth_password("${new_ota_password}");
            } else {
              ESP_LOGI("ota_update", "OTA Passwörter sind identisch. Keine Änderung nötig.");
            }

esp32:
  board: esp32-c3-devkitm-1
  framework:
    type: arduino

wifi:
  networks:
    - ssid: !secret wifi_1_ssid
      password: !secret wifi_1_password
      priority: 10
    - ssid: !secret wifi_2_ssid
      password: !secret wifi_2_password
      priority: 5
  domain: "${dns_domain}"
  ap:
    ssid: "${devicename} Fallback"
    password: !secret ap_password

captive_portal:

ota:
  - platform: esphome
    id: ota_component
    password: ${current_ota_password}
  - platform: web_server

web_server:
  port: 80
  version: 3
  local: true
  # auth:
  #   username: ${web_server_user}
  #   password: ${web_server_password}
  sorting_groups:
    - id: group_total
      name: "Total"
      sorting_weight: 10
    - id: group_l1
      name: "Phase L1"
      sorting_weight: 20
    - id: group_l2
      name: "Phase L2"
      sorting_weight: 30
    - id: group_l3
      name: "Phase L3"
      sorting_weight: 40
    - id: group_energy
      name: "Energiezähler"
      sorting_weight: 50
    - id: group_reactive
      name: "Blindenergie"
      sorting_weight: 55
    - id: group_meter
      name: "Stromzähler"
      sorting_weight: 60
    - id: group_diag
      name: "${friendly_name}"
      sorting_weight: 70

api:
  # encryption:
    # key: !secret api_key
  reboot_timeout: 86400s

logger:
  level: ${log_level}
  baud_rate: 0

time:
  - platform: sntp
    id: sntp_time
    timezone: "${timezone}"

# --- UART M-Bus (Tasmota: Pin 7, 8E1, 2400, invert so2,0C) ---
uart:
  id: mbus_uart
  rx_pin:
    number: GPIO7
    inverted: true
  baud_rate: 2400
  parity: EVEN
  data_bits: 8
  stop_bits: 1
  rx_buffer_size: 4096

# --- DLMS Meter ---
dlms_meter:
  id: dlms_hub
  uart_id: mbus_uart
  receive_timeout: 150ms
  skip_crc: true
  # dKEY="" → keine decryption_key

sensor:
  # ========== TOTAL ==========
  # Rohwert in W → kW
  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.1.7.0.255"
    name: "Aktueller Bezug (Pi 1.7.0)"
    id: power_in
    unit_of_measurement: "W"
    icon: "mdi:transmission-tower-import"
    accuracy_decimals: 0
    device_class: power
    state_class: measurement
    web_server: {sorting_group_id: group_total, sorting_weight: 10}
    # kein filters / kein multiply

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.2.7.0.255"
    name: "Aktuelle Einspeisung (Po 2.7.0)"
    id: power_out
    unit_of_measurement: "W"
    icon: "mdi:transmission-tower-export"
    accuracy_decimals: 0
    device_class: power
    state_class: measurement
    web_server: {sorting_group_id: group_total, sorting_weight: 20}
    # kein filters / kein multiply

  # ========== PHASE L1 ==========
  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.21.7.0.255"
    name: "Leistung L1 Bezug (21.7.0)"
    unit_of_measurement: "W"
    icon: "mdi:flash"
    accuracy_decimals: 0
    device_class: power
    state_class: measurement
    web_server: {sorting_group_id: group_l1, sorting_weight: 10}

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.22.7.0.255"
    name: "Leistung L1 Einspeisung (22.7.0)"
    unit_of_measurement: "W"
    icon: "mdi:flash"
    accuracy_decimals: 0
    device_class: power
    state_class: measurement
    web_server: {sorting_group_id: group_l1, sorting_weight: 15}

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.32.7.0.255"
    name: "Spannung L1 (32.7.0)"
    unit_of_measurement: "V"
    icon: "mdi:sine-wave"
    accuracy_decimals: 1
    device_class: voltage
    state_class: measurement
    web_server: {sorting_group_id: group_l1, sorting_weight: 20}

  # Strom: Rohwert oft in 0.01 A → multiply 0.01 (bei Bedarf auf 0.001 ändern)
  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.31.7.0.255"
    name: "Strom L1 (31.7.0)"
    unit_of_measurement: "A"
    icon: "mdi:current-ac"
    accuracy_decimals: 2
    device_class: current
    state_class: measurement
    web_server: {sorting_group_id: group_l1, sorting_weight: 30}
    filters:
      - multiply: 0.01

  # ========== PHASE L2 ==========
  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.41.7.0.255"
    name: "Leistung L2 Bezug (41.7.0)"
    unit_of_measurement: "W"
    icon: "mdi:flash"
    accuracy_decimals: 0
    device_class: power
    state_class: measurement
    web_server: {sorting_group_id: group_l2, sorting_weight: 10}

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.42.7.0.255"
    name: "Leistung L2 Einspeisung (42.7.0)"
    unit_of_measurement: "W"
    icon: "mdi:flash"
    accuracy_decimals: 0
    device_class: power
    state_class: measurement
    web_server: {sorting_group_id: group_l2, sorting_weight: 15}

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.52.7.0.255"
    name: "Spannung L2 (52.7.0)"
    unit_of_measurement: "V"
    icon: "mdi:sine-wave"
    accuracy_decimals: 1
    device_class: voltage
    state_class: measurement
    web_server: {sorting_group_id: group_l2, sorting_weight: 20}

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.51.7.0.255"
    name: "Strom L2 (51.7.0)"
    unit_of_measurement: "A"
    icon: "mdi:current-ac"
    accuracy_decimals: 2
    device_class: current
    state_class: measurement
    web_server: {sorting_group_id: group_l2, sorting_weight: 30}
    filters:
      - multiply: 0.01

  # ========== PHASE L3 ==========
  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.61.7.0.255"
    name: "Leistung L3 Bezug (61.7.0)"
    unit_of_measurement: "W"
    icon: "mdi:flash"
    accuracy_decimals: 0
    device_class: power
    state_class: measurement
    web_server: {sorting_group_id: group_l3, sorting_weight: 10}

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.62.7.0.255"
    name: "Leistung L3 Einspeisung (62.7.0)"
    unit_of_measurement: "W"
    icon: "mdi:flash"
    accuracy_decimals: 0
    device_class: power
    state_class: measurement
    web_server: {sorting_group_id: group_l3, sorting_weight: 15}

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.72.7.0.255"
    name: "Spannung L3 (72.7.0)"
    unit_of_measurement: "V"
    icon: "mdi:sine-wave"
    accuracy_decimals: 1
    device_class: voltage
    state_class: measurement
    web_server: {sorting_group_id: group_l3, sorting_weight: 20}

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.71.7.0.255"
    name: "Strom L3 (71.7.0)"
    unit_of_measurement: "A"
    icon: "mdi:current-ac"
    accuracy_decimals: 2
    device_class: current
    state_class: measurement
    web_server: {sorting_group_id: group_l3, sorting_weight: 30}
    filters:
      - multiply: 0.01

  # ========== ENERGIE (Kanal 1.1 wie im E450-Frame) ==========
  # Rohwert in Wh → kWh
  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.1.1.8.0.255"
    name: "Energie Bezug Total (1.8.0)"
    id: energy_in
    unit_of_measurement: "kWh"
    icon: "mdi:counter"
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    web_server: {sorting_group_id: group_energy, sorting_weight: 10}
    filters:
      - multiply: 0.001

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.1.2.8.0.255"
    name: "Energie Einspeisung Total (2.8.0)"
    id: energy_out
    unit_of_measurement: "kWh"
    icon: "mdi:counter"
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    web_server: {sorting_group_id: group_energy, sorting_weight: 20}
    filters:
      - multiply: 0.001

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.1.8.1.255"
    name: "Energie Bezug Tarif 1 (1.8.1)"
    unit_of_measurement: "kWh"
    icon: "mdi:counter"
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    web_server: {sorting_group_id: group_energy, sorting_weight: 30}
    filters:
      - multiply: 0.001

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.1.8.2.255"
    name: "Energie Bezug Tarif 2 (1.8.2)"
    unit_of_measurement: "kWh"
    icon: "mdi:counter"
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    web_server: {sorting_group_id: group_energy, sorting_weight: 40}
    filters:
      - multiply: 0.001

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.2.8.1.255"
    name: "Energie Einspeisung Tarif 1 (2.8.1)"
    unit_of_measurement: "kWh"
    icon: "mdi:counter"
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    web_server: {sorting_group_id: group_energy, sorting_weight: 50}
    filters:
      - multiply: 0.001

  - platform: dlms_meter
    dlms_meter_id: dlms_hub
    obis_code: "1.0.2.8.2.255"
    name: "Energie Einspeisung Tarif 2 (2.8.2)"
    unit_of_measurement: "kWh"
    icon: "mdi:counter"
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    web_server: {sorting_group_id: group_energy, sorting_weight: 60}
    filters:
      - multiply: 0.001

  # Fallback Kanal 0
  - platform: dlms_meter
    dlms_meter_id: dlms_hub

secrets.yaml

wifi_1_ssid: "foo1"
wifi_1_password: "bar1"
wifi_2_ssid: "foo2"
wifi_2_password: "bar2"
ap_password: ""
ota_password: ""
web_server_password: ""
gplugm_ota_password: ""
api_key: ""

Flash to ESPHome

curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv esphome --python 3.12
uv venv esphome
source esphome/bin/activate
uv pip install tornado esptool esphome

# backup
esptool.py --chip esp32c3 --port /dev/ttyACM0 --baud 460800 read_flash 0 ALL gplugm_full_backup.bin

# flash over tty
esphome run --device /dev/ttyACM0 gPlugM.yml 

# flash over ota
esphome run gPlugM.yml --device 192.168.178.x

Installation
https://gplug.ch/installationsanleitung/gplugmt/

configuration.yaml
https://gplug.ch/blog/integration-gplugm-in-home-assistant/
https://gplug.ch/blog/integration-gplug-in-home-assistent/

homeassistant:
  customize_glob:
    sensor.gplugm_z_ei:
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      last_reset: 1970-01-01T00:00:00+00:00
    sensor.gplugm_z_ei1:
      unit_of_measurement: "kWh"
    sensor.gplugm_z_ei2:
      unit_of_measurement: "kWh"
    sensor.gplugm_z_eo:
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      last_reset: 1970-01-01T00:00:00+00:00
    sensor.gplugm_z_eo1:
      unit_of_measurement: "kWh"
    sensor.gplugm_z_eo2:
      unit_of_measurement: "kWh" 
    sensor.gplugm_z_i1:
      unit_of_measurement: "A"
    sensor.gplugm_z_i2:
      unit_of_measurement: "A"
    sensor.gplugm_z_i3:
      unit_of_measurement: "A"
    sensor.gplugm_z_v1:
      unit_of_measurement: "V"
    sensor.gplugm_z_v2:
      unit_of_measurement: "V"
    sensor.gplugm_z_v3:
      unit_of_measurement: "V"
    sensor.gplugm_z_pi:
      unit_of_measurement: "kW"
    sensor.gplugm_z_po:
      unit_of_measurement: "kW"

utility_meter:
  energy_in_daily:
    source: sensor.gplugm_z_ei
    cycle: daily
  energy_in_weekly:
    source: sensor.gplugm_z_ei
    cycle: weekly
  energy_in_monthly:
    source: sensor.gplugm_z_ei
    cycle: monthly
  energy_in_yearly:
    source: sensor.gplugm_z_ei
    cycle: yearly
Profiles GitHub StackOverflow LinkedIn Xing
Contact Imprint
© panticz 2026

Cookie-Einstellungen

Diese Website nutzt eingebettete Inhalte von Drittanbietern (z.B. YouTube, SoundCloud). Beim Laden dieser Inhalte werden Daten an die jeweiligen Anbieter übermittelt. Datenverarbeitungserklärung