M-Bus Wärmezähler


Wolfgang Fahl

Software[edit]

libmbus[edit]

install script for ubuntu[edit]

e.g. copy to /usr/local/src/libmbus and run

#!/bin/bash
# WF 2022-10-13

# libmbus install

# 
# install general libraries 
apt install libglib2.0-dev autoconf autotools-dev automake

# now install libmbus
# see http://www.rscada.se/libmbus/
version=0.8.0
platform=amd64
baseurl=http://www.rscada.se/public-dist
for part in "1" "-dev" 
do
  deb=libmbus${part}_${version}_${platform}.deb
  if [ ! -f $deb ]
  then
    echo "downloading $deb"
    wget $baseurl/$deb
  else
    echo "$deb already downloaded"
  fi
  sudo dpkg -i $deb
done

Hichi[edit]

Linux[edit]

lsusb
Bus 001 Device 006: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
 /usr/bin/udevadm info --query=all --name=/dev/ttyUSB0
P: /devices/pci0000:00/0000:00:15.0/usb1/1-2/1-2:1.0/ttyUSB0/tty/ttyUSB0
N: ttyUSB0
L: 0
S: serial/by-path/pci-0000:00:15.0-usb-0:2:1.0-port0
S: serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0026-if00-port0
E: DEVPATH=/devices/pci0000:00/0000:00:15.0/usb1/1-2/1-2:1.0/ttyUSB0/tty/ttyUSB0
E: DEVNAME=/dev/ttyUSB0
E: MAJOR=188
E: MINOR=0
E: SUBSYSTEM=tty
E: USEC_INITIALIZED=9041897
E: ID_BUS=usb
E: ID_VENDOR_ID=10c4
E: ID_MODEL_ID=ea60
E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
E: ID_VENDOR_FROM_DATABASE=Silicon Labs
E: ID_MODEL_FROM_DATABASE=CP210x UART Bridge
E: ID_VENDOR=Silicon_Labs
E: ID_VENDOR_ENC=Silicon\x20Labs
E: ID_MODEL=CP2102_USB_to_UART_Bridge_Controller
E: ID_MODEL_ENC=CP2102\x20USB\x20to\x20UART\x20Bridge\x20Controller
E: ID_REVISION=0100
E: ID_SERIAL=Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0026
E: ID_SERIAL_SHORT=0026
E: ID_TYPE=generic
E: ID_USB_INTERFACES=:ff0000:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=cp210x
E: ID_PATH=pci-0000:00:15.0-usb-0:2:1.0
E: ID_PATH_TAG=pci-0000_00_15_0-usb-0_2_1_0
E: ID_MM_CANDIDATE=1
E: DEVLINKS=/dev/serial/by-path/pci-0000:00:15.0-usb-0:2:1.0-port0 /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0026-if00-port0
E: TAGS=:systemd:
E: CURRENT_TAGS=:systemd:

Linux[edit]

lsusb
Bus 001 Device 006: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
 /usr/bin/udevadm info --query=all --name=/dev/ttyUSB0
P: /devices/pci0000:00/0000:00:15.0/usb1/1-2/1-2:1.0/ttyUSB0/tty/ttyUSB0
N: ttyUSB0
L: 0
S: serial/by-path/pci-0000:00:15.0-usb-0:2:1.0-port0
S: serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0026-if00-port0
E: DEVPATH=/devices/pci0000:00/0000:00:15.0/usb1/1-2/1-2:1.0/ttyUSB0/tty/ttyUSB0
E: DEVNAME=/dev/ttyUSB0
E: MAJOR=188
E: MINOR=0
E: SUBSYSTEM=tty
E: USEC_INITIALIZED=9041897
E: ID_BUS=usb
E: ID_VENDOR_ID=10c4
E: ID_MODEL_ID=ea60
E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
E: ID_VENDOR_FROM_DATABASE=Silicon Labs
E: ID_MODEL_FROM_DATABASE=CP210x UART Bridge
E: ID_VENDOR=Silicon_Labs
E: ID_VENDOR_ENC=Silicon\x20Labs
E: ID_MODEL=CP2102_USB_to_UART_Bridge_Controller
E: ID_MODEL_ENC=CP2102\x20USB\x20to\x20UART\x20Bridge\x20Controller
E: ID_REVISION=0100
E: ID_SERIAL=Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0026
E: ID_SERIAL_SHORT=0026
E: ID_TYPE=generic
E: ID_USB_INTERFACES=:ff0000:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=cp210x
E: ID_PATH=pci-0000:00:15.0-usb-0:2:1.0
E: ID_PATH_TAG=pci-0000_00_15_0-usb-0_2_1_0
E: ID_MM_CANDIDATE=1
E: DEVLINKS=/dev/serial/by-path/pci-0000:00:15.0-usb-0:2:1.0-port0 /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0026-if00-port0
E: TAGS=:systemd:
E: CURRENT_TAGS=:systemd:

set baud rate[edit]

stty -F /dev/ttyUSB0 2400

Video[edit]

Mac[edit]

ioreg -p IOUSB -l -w 0 | grep -i uart
    +-o CP2102 USB to UART Bridge Controller@14200000  <class AppleUSBDevice, id 0x10006716a, registered, matched, active, busy 0 (8 ms), retain 13>
    |     "USB Product Name" = "CP2102 USB to UART Bridge Controller"
    |     "kUSBProductString" = "CP2102 USB to UART Bridge Controller"

CP210x VCP Driver[edit]

pyMeterBus[edit]

git clone https://github.com/ganehag/pyMeterBus
Cloning into 'pyMeterBus'...
remote: Enumerating objects: 1219, done.
remote: Counting objects: 100% (85/85), done.
remote: Compressing objects: 100% (50/50), done.
remote: Total 1219 (delta 34), reused 70 (delta 29), pack-reused 1134
Receiving objects: 100% (1219/1219), 271.58 KiB | 757.00 KiB/s, done.
Resolving deltas: 100% (750/750), done.
cd pyMeterBus/
pip3 install .
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing /home/wf/source/python/pyMeterBus
Collecting pyaml (from pyMeterBus==0.8.3)
  Downloading https://files.pythonhosted.org/packages/6d/5a/5200ad18f321530b881f667c47d20026c3795dbbc200619c0330311b7907/pyaml-23.5.8-py3-none-any.whl
Collecting pycryptodome (from pyMeterBus==0.8.3)
  Downloading https://www.piwheels.org/simple/pycryptodome/pycryptodome-3.20.0-cp35-abi3-linux_armv7l.whl (2.0MB)
    100% |████████████████████████████████| 2.0MB 198kB/s 
Requirement already satisfied: pyserial in /usr/lib/python3/dist-packages (from pyMeterBus==0.8.3) (3.4)
Requirement already satisfied: simplejson in /usr/lib/python3/dist-packages (from pyMeterBus==0.8.3) (3.16.0)
Requirement already satisfied: PyYAML in /usr/local/lib/python3.7/dist-packages (from pyaml->pyMeterBus==0.8.3) (5.1)
Building wheels for collected packages: pyMeterBus
  Running setup.py bdist_wheel for pyMeterBus ... done
  Stored in directory: /tmp/pip-ephem-wheel-cache-ybm69ily/wheels/40/49/79/d2c9d6b919d406ea11affa578792c7729298e8c0ca25044c24
Successfully built pyMeterBus
Installing collected packages: pyaml, pycryptodome, pyMeterBus
Successfully installed pyMeterBus-0.8.3 pyaml-23.5.8 pycryptodome-3.20.0
🖨 🚪