wmbusmeters/README.md

499 wiersze
21 KiB
Markdown
Czysty Zwykły widok Historia

2019-12-03 20:06:11 +00:00
2017-08-06 17:20:59 +00:00
# wmbusmeters
2019-06-16 20:07:22 +00:00
The program receives and decodes C1,T1 or S1 telegrams
2017-08-09 10:00:11 +00:00
(using the wireless mbus protocol) to acquire
2018-11-25 11:33:14 +00:00
utility meter readings. The readings can then be published using
2019-02-26 08:33:10 +00:00
MQTT, curled to a REST api, inserted into a database or stored in a log file.
2019-04-28 11:55:21 +00:00
[FAQ/WIKI/MANUAL pages](https://weetmuts.github.io/wmbusmeterswiki/)
2018-01-05 16:54:51 +00:00
2020-04-21 16:07:46 +00:00
The program runs on GNU/Linux, MacOSX, FreeBSD, and Raspberry Pi.
2018-12-28 19:31:52 +00:00
2019-02-23 21:17:00 +00:00
| OS | Status |
| ------------ |:-------------:|
|GNU/Linux & MacOSX| [![Build Status](https://travis-ci.org/weetmuts/wmbusmeters.svg?branch=master)](https://travis-ci.org/weetmuts/wmbusmeters) |
2020-05-11 19:45:04 +00:00
|Docker build status|[![CircleCI>](https://circleci.com/gh/weetmuts/wmbusmeters.svg?style=shield)](https://circleci.com/gh/weetmuts/wmbusmeters)|
|Snap status|[![wmbusmeters](https://snapcraft.io//wmbusmeters/badge.svg)](https://snapcraft.io/wmbusmeters)|
2020-05-11 10:14:28 +00:00
2019-01-04 22:07:52 +00:00
| Static Scan | Status |
| ------------- |:-------------:|
|Linux G++| [![Build Status](https://scan.coverity.com/projects/14774/badge.svg)](https://scan.coverity.com/projects/weetmuts-wmbusmeters) |
# Distributions
**wmbusmeters** package is available on [Fedora](https://src.fedoraproject.org/rpms/wmbusmeters) _(version 31 or newer)_ and can be simply installed by using:
```
# dnf install wmbusmeters
```
Availability of **wmbusmeters** for other Linux distributions can be checked on [release-monitoring](https://release-monitoring.org/project/88654/) project page.
2019-01-04 22:07:52 +00:00
2019-02-26 08:33:10 +00:00
# Run as a daemon
2020-09-26 11:52:24 +00:00
Remove the wmbus dongle (im871a,amb8465,cul,rc1180,rfmrx2,d1tc) or the generic rtlsdr dongle (RTL2838) from your computer.
2019-02-26 08:33:10 +00:00
`./configure; make; sudo make install` will install wmbusmeters as a daemon.
2020-09-02 12:36:10 +00:00
Check the contents of your `/etc/wmbusmeters.conf` file, assuming it
has `device=auto:c1` and you are using a im871a,amb8465,rc1180 or cul device,
then you can now start the daemon with `sudo systemctl start wmbusmeters`
or you can try it from the command line `wmbusmeters auto:c1`
2020-09-02 12:36:10 +00:00
Wmbusmeters will scan for wmbus devices every few seconds and detect whenever
a device is plugged in or removed.
2020-09-02 12:36:10 +00:00
To have the wmbusmeters daemon start automatically when the computer boots do:
2020-09-02 12:36:10 +00:00
`sudo systemctl enable wmbusmeters`
You can trigger a reload of the config files with `sudo killall -HUP wmbusmetersd`
2019-03-12 19:57:13 +00:00
(Note! make install only works for GNU/Linux. For MacOSX try to start
`wmbusmetersd /tmp/thepidfile` from a script instead.)
2019-02-26 08:33:10 +00:00
2020-04-03 11:21:21 +00:00
Check the config file /etc/wmbusmeters.conf and edit the device to
2020-09-02 12:36:10 +00:00
point to your dongle or use auto
2019-02-26 08:33:10 +00:00
```
loglevel=normal
2020-04-03 11:21:21 +00:00
device=/dev/ttyUSB0:im871a
2019-02-26 08:33:10 +00:00
logtelegrams=false
format=json
meterfiles=/var/log/wmbusmeters/meter_readings
meterfilesaction=overwrite
2019-06-20 12:28:52 +00:00
meterfilesnaming=name
2019-12-11 17:58:44 +00:00
meterfilestimestamp=day
2019-02-26 08:33:10 +00:00
logfile=/var/log/wmbusmeters/wmbusmeters.log
shell=/usr/bin/mosquitto_pub -h localhost -t wmbusmeters/$METER_ID -m "$METER_JSON"
2020-08-01 19:56:46 +00:00
alarmshell=/usr/bin/mosquitto_pub -h localhost -t wmbusmeters_alarm -m "$ALARM_TYPE $ALARM_MESSAGE"
alarmtimeout=1h
alarmexpectedactivity=mon-sun(00-23)
2019-02-26 08:33:10 +00:00
```
Then add a meter file in /etc/wmbusmeters.d/MyTapWater
2017-08-31 09:15:12 +00:00
```
2019-02-26 08:33:10 +00:00
name=MyTapWater
type=multical21
id=12345678
key=00112233445566778899AABBCCDDEEFF
```
Now plugin your wmbus dongle. Wmbusmeters should start automatically,
check with `tail -f /var/log/syslog` and `tail -f /var/log/wmbusmeters/wmbusmeters.log`
(If you are using an rtlsdr dongle, then make sure the binaries /usr/bin/rtl_sdr and
2020-02-17 17:09:27 +00:00
/usr/bin/rtl_wmbus exists and are executable. If not you will see the
error message `(rtlwmbus) error: when starting as daemon, wmbusmeters expects /usr/bin/rtl_sdr to exist!`
and the daemon will refuse to start.)
2019-02-26 08:33:10 +00:00
The latest reading of the meter can also be found here: /var/log/wmbusmeters/meter_readings/MyTapWater
You can use several ids using `id=1111111,2222222,3333333` or you can listen to all
2019-06-06 16:16:24 +00:00
meters of a certain type `id=*` or you can suffix with star `id=8765*` to match
all meters with a given prefix. If you supply at least one positive match rule, then you
can add negative match rules as well. For example `id=*,!2222*`
which will match all meter ids, except those that begin with 2222.
You can add the static json data "address":"RoadenRd 456","city":"Stockholm" to every json message with the
wmbusmeters.conf setting:
```
json_address=RoadenRd 456
json_city=Stockholm
```
If you add `json_floor=5` to the meter file MyTapWater, then you can have the meter tailored
static json "floor":"5" added to telegrams handled by that particular meter.
2019-05-21 16:00:21 +00:00
If you are running on a Raspberry PI with flash storage and you relay the data to
another computer using a shell command (mosquitto_pub or curl or similar) then you might want to remove
`meterfiles` and `meterfilesaction` to minimize the writes to the local flash file system.
2019-12-11 17:56:34 +00:00
If you specify --metefilesaction=append --meterfilestimestamp=day then wmbusmeters will
append all todays received telegrams in for example the file Water_2019-12-11, the day
after the telegrams will be recorded in Water_2019-12-12. You can change the resolution
to day,hour,minute and micros. Micros means that every telegram gets their own file.
2019-02-26 08:33:10 +00:00
# Run using config files
If you cannot install as a daemon, then you can also start
wmbusmeters in your terminal using the config files in /etc/wmbusmeters.
```
2019-03-01 14:41:11 +00:00
wmbusmeters --useconfig=/
2019-02-26 08:33:10 +00:00
```
Or you can start wmbusmeters with your own config files:
```
wmbusmeters --useconfig=/home/me/.config/wmbusmeters
```
You can add --device to override the settings in the config. Like this:
2020-01-19 22:36:19 +00:00
```
wmbusmeters --useconfig=/home/me/.config/wmbusmeters --device=rtlwmbus
2020-01-19 22:36:19 +00:00
```
2019-02-26 08:33:10 +00:00
The files/dir should then be located here:
`/home/me/.config/wmbusmeters/etc/wmbusmeters.conf` and
`/home/me/.config/wmbusmeters/etc/wmbusmeters.d`
2019-06-11 16:52:41 +00:00
When running using config files then you can trigger a reload of the config files
2019-06-11 17:15:12 +00:00
using `sudo killall -HUP wmbusmetersd` or `killall -HUP wmbusmeters`
2019-06-11 16:52:41 +00:00
depending on if you are running as a daemon or not.
2019-02-26 08:34:21 +00:00
# Running without config files, good for experimentation and test.
2019-02-26 08:33:10 +00:00
```
wmbusmeters version: 0.9.36
Usage: wmbusmeters {options} <device> ( [meter_name] [meter_type]{:<modes>} [meter_id] [meter_key] )*
As <options> you can use:
2019-08-14 09:10:51 +00:00
--addconversions=<unit>+ add conversion to these units to json and meter env variables (GJ)
--alarmexpectedactivity=mon-fri(08-17),sat-sun(09-12) Specify when the timeout is tested, default is mon-sun(00-23)
2020-09-18 18:05:59 +00:00
--alarmshell=<cmdline> invokes cmdline when an alarm triggers
--alarmtimeout=<time> Expect a telegram to arrive within <time> seconds, eg 60s, 60m, 24h during expected activity.
--debug for a lot of information
--exitafter=<time> exit program after time, eg 20h, 10m 5s
--format=<hr/json/fields> for human readable, json or semicolon separated fields
--json_xxx=yyy always add "xxx"="yyy" to the json output and add shell env METER_xxx=yyy
--listenvs=<meter_type> list the env variables available for the given meter type
--listfields=<meter_type> list the fields selectable for the given meter type
2020-09-25 18:01:16 +00:00
--listmeters list all meter types
--listmeters=<search> list all meter types containing the text <search>
--logfile=<file> use this file instead of stdout
--logtelegrams log the contents of the telegrams for easy replay
--meterfiles=<dir> store meter readings in dir
--meterfilesaction=(overwrite|append) overwrite or append to the meter readings file
2019-06-20 12:28:52 +00:00
--meterfilesnaming=(name|id|name-id) the meter file is the meter's: name, id or name-id
2019-12-11 17:56:34 +00:00
--meterfilestimestamp=(never|day|hour|minute|micros) the meter file is suffixed with a
timestamp (localtime) with the given resolution.
--oneshot wait for an update from each meter, then quit
2020-09-26 11:52:24 +00:00
--resetafter=<time> reset the wmbus dongle regularly, default is 23h
2020-05-09 21:43:30 +00:00
--selectfields=id,timestamp,total_m3 select fields to be printed
--separator=<c> change field separator to c
--shell=<cmdline> invokes cmdline with env variables containing the latest reading
--useconfig=<dir> load config files from dir/etc
2020-09-13 14:55:22 +00:00
--usestderr write notices/debug/verbose and other logging output to stderr (the default)
--usestdoutforlogging write debug/verbose and logging output to stdout
--verbose for more information
2019-11-03 15:31:30 +00:00
As <device> you can use:
2019-10-20 18:39:12 +00:00
auto:c1, to have wmbusmeters look existing serial devices and probe them to detect: im871a, amb8465 or cul.
2019-10-20 18:39:12 +00:00
2019-12-28 10:19:50 +00:00
/dev/ttyUSB0:amb8465, if you have an amb8465 dongle assigned to ttyUSB0. Other suffixes are im871a,rfmrx2,d1tc,cul.
2019-11-22 18:43:38 +00:00
/dev/ttyUSB0, to have wmbusmeters auto-detect amb8465, im871a or CUL device.
2019-12-28 10:19:50 +00:00
(The rfmrx2 and the d1tc device cannot be autodetected right now, you have to specify it as a suffix on the device.)
2019-11-03 15:31:30 +00:00
/dev/ttyUSB0:38400, to have wmbusmeters set the baud rate to 38400 and listen for raw wmbus telegrams.
2020-03-22 17:43:09 +00:00
These telegrams are expected to have the data link layer crc bytes removed already!
2019-11-03 15:31:30 +00:00
rtlwmbus, to spawn the background process: "rtl_sdr -f 868.95M -s 1600000 - 2>/dev/null | rtl_wmbus"
2019-11-03 15:31:30 +00:00
rtlwmbus:868.9M, to tune to this fq instead.
rtl433, to spawn the background process: "rtl_433 -F csv -f 868.95M"
rtl433:868.9M, to tune to this fq instead.
rtlwmbus:CMD(<commandline>), to specify the entire background process command line that is expected to produce rtlwbus compatible output.
Likewise for rtl433.
2019-11-03 15:31:30 +00:00
2019-11-03 22:43:29 +00:00
stdin, to read raw binary telegrams from stdin.
2020-03-22 17:43:09 +00:00
These telegrams are expected to have the data link layer crc bytes removed already!
2019-11-03 15:31:30 +00:00
2020-03-22 17:43:09 +00:00
telegrams.bin, to read raw wmbus telegrams from this file.
These telegrams are expected to have the data link layer crc bytes removed already!
2019-11-03 15:31:30 +00:00
stdin:rtlwmbus, to read telegrams formatted using the rtlwmbus format from stdin. Works for rtl433 as well.
2019-11-03 15:31:30 +00:00
telegrams.msg:rtlwmbus, to read rtlwmbus formatted telegrams from this file. Works for rtl433 as well.
2019-11-03 22:43:29 +00:00
simulation_abc.txt, to read telegrams from the file (which has a name beginning with simulation_)
expecting the same format that is the output from --logtelegrams. This format also supports replay with timing.
As meter quadruples you specify:
2019-11-03 15:31:30 +00:00
<meter_name> a mnemonic for this particular meter
<meter_type> one of the supported meters
(can be suffixed with :<mode> to specify which mode you expect the meter to use when transmitting)
<meter_id> an 8 digit mbus id, usually printed on the meter
<meter_key> an encryption key unique for the meter
2020-02-06 18:06:53 +00:00
if the meter uses no encryption, then supply NOKEY
2019-02-26 08:33:10 +00:00
2019-11-03 15:31:30 +00:00
Supported wmbus dongles:
2020-03-22 13:20:47 +00:00
IMST 871a (im871a)
Amber 8465 (amb8465)
CUL family (cul)
2020-09-26 11:52:24 +00:00
Radiocraft (RC1180) work in progress
rtl_wmbus (rtlwmbus)
rtl_433 (rtl433)
2020-09-26 11:52:24 +00:00
BMeters RFM-RX2 (rfmrx2)
2019-11-03 15:31:30 +00:00
2018-12-28 19:20:30 +00:00
Supported water meters:
2020-02-23 17:41:21 +00:00
Apator at-wmbus-08 (apator08) (non-standard protocol)
2019-03-22 18:01:05 +00:00
Apator at-wmbus-16-2 (apator162) (non-standard protocol)
2020-09-02 11:17:52 +00:00
Aquametro/Integra Topas Es Kr (topaseskr)
Bmeters Hydrodigit (hydrodigit) (partly non-standard protocol)
Diehl/Sappel IZAR RC 868 I R4 PL (izar) (non-standard protocol)
2019-11-26 13:24:17 +00:00
Diehl HYDRUS (hydrus)
Honeywell Q400 (q400)
2020-09-02 11:17:52 +00:00
Kamstrup Multical 21 (multical21)
Kamstrup flowIQ 3100 (flowiq3100)
Sontex Supercom 587 (supercom587)
Sensus iPERL (iperl)
Techem MK Radio 3 (mkradio3) (non-standard protocol)
2020-07-30 10:19:54 +00:00
Waterstar M (waterstarm)
2018-12-28 19:20:30 +00:00
2020-09-04 10:13:06 +00:00
Currently not supported, please help!
Diehl/Sappel ACQUARIUS/IZAR R3 (izar3)
Supported heat cost allocators:
2019-06-11 17:12:01 +00:00
Innotas EurisII (eurisii)
2020-09-02 11:17:52 +00:00
Qundis Q caloric (qcaloric)
2020-02-11 21:35:57 +00:00
Techem FHKV data II/III (fhkvdataiii)
2019-03-01 14:51:54 +00:00
2019-05-04 06:52:25 +00:00
Supported heat meter:
2020-07-26 12:40:25 +00:00
Heat meter Techem Compact V (compact5) (non-standard protocol)
2020-09-02 11:17:52 +00:00
(compact5 is unfortunately not quite supported since we lack a test telegram to prevent regressions)
2019-05-04 20:39:45 +00:00
Heat meter Techem Vario 4 (vario451) (non-standard protocol)
2019-11-26 15:12:32 +00:00
Heat meter Kamstrup Multical 302 (multical302) (in C1 mode, please open issue for T1 mode)
2020-08-18 16:56:08 +00:00
Heat and Cooling meter Kamstrup Multical 403 (multical403) (in C1 mode)
Heat and Cooling meter Kamstrup Multical 603 (multical403) (in C1 mode) (work in progress)
2019-05-04 06:52:25 +00:00
2019-10-20 18:39:12 +00:00
Supported room sensors:
2019-10-20 19:39:42 +00:00
Bmeters RFM-AMB Thermometer/Hygrometer (rfmamb)
Elvaco CMa12w Thermometer (cma12w)
2020-09-02 11:17:52 +00:00
Lansen Thermometer/Hygrometer (lansenth)
2019-10-20 18:39:12 +00:00
Supported smoke detectors:
Lansen Smoke Detector (lansensm)
Supported door/window detectors:
Lansen Door/Window Detector (lansendw)
2020-06-30 14:12:20 +00:00
Supported pulse counter:
Lansen Pulse Counter (lansenpu)
Supported electricity meters:
Easy Meter ESYS-WM20 (esyswm)
2020-02-06 12:14:46 +00:00
eBZ wMB-E01 (ebzwmbe)
2020-09-02 11:17:52 +00:00
EMH Metering (ehzp)
Tauron Amiplus (amiplus) (includes vendor apator and echelon)
2020-09-24 17:49:45 +00:00
Gavazzi EM24 (em24)
2017-08-31 09:15:12 +00:00
```
2017-08-09 10:00:11 +00:00
2019-10-24 19:06:33 +00:00
The wmbus dongles imst871a can listen to one type of wmbus telegrams
at a time, ie either C1 or T1 telegrams. Thus you can listen to
multiple meters as long as they all require the same radio mode C1 or
T1.
2019-06-11 16:52:41 +00:00
2019-10-24 19:06:33 +00:00
However if you use amb8465 or rtlwmbus, then you can listen to both C1
2020-01-09 17:42:02 +00:00
and T1 telegrams at the same time.
2017-08-09 10:02:42 +00:00
2018-03-05 11:21:55 +00:00
# Usage examples
2017-09-02 21:26:57 +00:00
```
wmbusmeters /dev/ttyUSB1:amb8465:c1,t1
```
Simply runs a scan with mode C1 and T1 to search for meters and print the IDs and any detected driver,
2020-09-04 09:31:49 +00:00
for example:
```
2020-09-04 09:36:51 +00:00
Received telegram from: 12345678
2020-09-04 09:31:49 +00:00
manufacturer: (KAM) Kamstrup Energi (0x2c2d)
device type: Cold water meter (0x16)
2020-09-04 09:36:51 +00:00
device ver: 0x1b
device driver: multical21
2020-09-04 09:31:49 +00:00
```
2020-09-04 09:36:51 +00:00
Now listen to this specific meter.
2017-08-31 09:15:12 +00:00
```
wmbusmeters /dev/ttyUSB0:im871a:c1 MyTapWater multical21:c1 12345678 00112233445566778899AABBCCDDEEFF
2017-08-31 09:15:12 +00:00
```
(The Multical21 and other meters use compressed telegrams, which means
that you might have to wait up to 8 telegrams (8*16 seconds) until you
receive a full length telegram which gives all the information needed
to decode the compressed telegrams.)
2019-06-06 15:31:41 +00:00
2017-08-31 09:15:12 +00:00
Example output:
2018-03-05 11:21:55 +00:00
2019-01-27 23:08:47 +00:00
`MyTapWater 12345678 6.388 m3 6.377 m3 0.000 m3/h 8°C 23°C DRY(dry 22-31 days) 2018-03-05 12:02.50`
2018-11-29 21:32:31 +00:00
2019-01-27 23:08:47 +00:00
(Here the multical21 itself, is configured to send target volume, therefore the max flow is 0.000 m3/h.)
2017-08-31 09:15:12 +00:00
Example format json output:
2017-08-09 10:02:42 +00:00
2020-04-03 11:21:21 +00:00
`wmbusmeters --format=json /dev/ttyUSB0:im871a MyTapWater multical21 12345678 00112233445566778899AABBCCDDEEFF MyHeater multical302 22222222 00112233445566778899AABBCCDDEEFF`
2017-08-09 10:00:11 +00:00
2019-01-27 23:08:47 +00:00
`{"media":"cold water","meter":"multical21","name":"MyTapWater","id":"12345678","total_m3":6.388,"target_m3":6.377,"max_flow_m3h":0.000,"flow_temperature":8,"external_temperature":23,"current_status":"DRY","time_dry":"22-31 days","time_reversed":"","time_leaking":"","time_bursting":"","timestamp":"2018-02-08T09:07:22Z"}`
2018-03-05 11:14:23 +00:00
2018-11-02 18:20:52 +00:00
`{"media":"heat","meter":"multical302","name":"MyHeater","id":"22222222","total_kwh":0.000,"total_volume_m3":0.000,"current_kw":"0.000","timestamp":"2018-02-08T09:07:22Z"}`
2018-03-05 11:14:23 +00:00
Example format fields output and use rtlsdr dongle with rtlwmbus tuned to 868.9MHz instead of the
default 868.95MHz.
2018-03-05 11:21:55 +00:00
2020-02-06 18:06:53 +00:00
`wmbusmeters --format=fields rtlwmbus:868.9M GreenhouseWater multical21 33333333 NOKEY`
2018-03-05 11:14:23 +00:00
2019-01-27 23:08:47 +00:00
`GreenhouseTapWater;33333333;9999.099;77.712;0.000;11;31;;2018-03-05 12:10.24`
2020-05-09 21:43:30 +00:00
You can select a subset of all available fields:
`wmbusmeters --format=fields --selectfields=id,total_m3 /dev/ttyUSB0:im871a GreenhouseWater multical21 33333333 NOKEY`
`33333333;9999.099`
You can list all available fields for the meter by adding `--listfields` to the command line.
Eaxmple of using the shell command to publish to MQTT:
2020-04-03 11:21:21 +00:00
`wmbusmeters --shell='HOME=/home/you mosquitto_pub -h localhost -t water -m "$METER_JSON"' /dev/ttyUSB0:im871a GreenhouseWater multical21 33333333 NOKEY`
Eaxmple of using the shell command to inject data into postgresql database:
2020-04-03 11:21:21 +00:00
`wmbusmeters --shell="psql waterreadings -c \"insert into readings values ('\$METER_ID',\$METER_TOTAL_M3,'\$METER_TIMESTAMP') \" " /dev/ttyUSB0:amb8465 MyColdWater multical21 12345678 NOKEY`
2018-11-02 18:08:56 +00:00
You can have multiple shell commands and they will be executed in the order you gave them on the commandline.
Note that to single quotes around the command is necessary to pass the env variable names into wmbusmeters.
2020-05-09 21:43:30 +00:00
To list the shell env variables available for your meter, add --listenvs to the commandline:
`wmbusmeters --listenvs /dev/ttyUSB1:cul Water iperl 12345678 NOKEY`
2019-03-12 19:50:05 +00:00
which outputs:
```
Environment variables provided to shell for meter iperl:
METER_JSON
METER_TYPE
METER_ID
METER_TOTAL_M3
METER_MAX_FLOW_M3H
METER_TIMESTAMP
```
(If you have supplied --json_floor=5 then you will also see METER_floor in the list)
Note that the METER_TIMESTAMP and the timestamp in the json output, is in UTC format, this is not your localtime.
However the hr and fields output will print your localtime.
2019-05-21 13:36:57 +00:00
You can add `shell=commandline` to a meter file stored in wmbusmeters.d, then this meter will use
this shell command instead of the command stored in wmbusmeters.conf.
You can use `--debug` to get both verbose output and the actual data bytes sent back and forth with the wmbus usb dongle.
2020-02-06 18:06:53 +00:00
If the meter does not use encryption of its meter data, then enter NOKEY on the command line.
2018-03-05 11:21:55 +00:00
2020-04-03 11:21:21 +00:00
`wmbusmeters --format=json --meterfiles /dev/ttyUSB0:im871a MyTapWater multical21 12345678 NOKEY`
2018-03-05 11:21:55 +00:00
2019-12-03 20:06:11 +00:00
If you have a Kamstrup meters and you have received a KEM file and its password from your supplier, then you can use [utils/kem-import.py](utils/kem-import.py) utility to extract meter information from that file (including the AES key) and to create corresponding meter files in wmbusmetrs' config directory.
2018-12-28 15:07:24 +00:00
2018-03-05 11:21:55 +00:00
You can run wmbusmeters with --logtelegrams to get log output that can be placed in a simulation.txt
2020-04-03 11:21:21 +00:00
file. You can then run wmbusmeter and instead of an usb device, you provide the simulationt.xt
2018-03-05 11:21:55 +00:00
file as argument. See test.sh for more info.
2019-06-11 17:12:01 +00:00
If you do not specify any meters on the command line, then wmbusmeters
will listen and print the header information of any telegram it hears.
2020-04-21 16:07:46 +00:00
# Builds and runs on GNU/Linux MacOSX (with recent XCode), and FreeBSD
2018-03-05 11:21:55 +00:00
`make && make test`
Binary generated: `./build/wmbusmeters`
2019-03-12 19:37:25 +00:00
`make HOST=arm` to cross compile from GNU/Linux to Raspberry PI.
2017-08-09 10:02:42 +00:00
2017-08-31 09:15:12 +00:00
Binary generated: `./build_arm/wmbusmeters`
2017-08-09 10:00:11 +00:00
2017-08-31 09:15:12 +00:00
`make DEBUG=true`
2017-08-09 10:02:42 +00:00
2017-08-31 09:15:12 +00:00
Binary generated: `./build_debug/wmbusmeters`
2017-08-09 10:00:11 +00:00
2020-04-21 16:07:46 +00:00
Debug builds only work on FreeBSD if the compiler is LLVM. If your system default compiler is gcc, set `CXX=clang++` to the build environment to force LLVM to be used.
2017-08-31 09:15:12 +00:00
`make DEBUG=true HOST=arm`
2017-08-09 10:02:42 +00:00
2017-08-31 09:15:12 +00:00
Binary generated: `./build_arm_debug/wmbusmeters`
2017-08-09 10:02:42 +00:00
`make HOST=arm dist`
(Work in progress...)
Binary generated: `./wmbusmeters_0.8_armhf.deb`
2017-09-02 21:26:57 +00:00
# System configuration
2019-03-22 06:31:25 +00:00
`make install` installs the files:
2017-09-02 21:26:57 +00:00
2019-03-22 06:31:25 +00:00
`/etc/wmbusmeters.conf`
`/usr/bin/wmbusmeters`
`/usr/sbin/wmbusmetersd`
`/etc/systemd/system/wmbusmeters.service`
`/etc/logrotate.d/wmbusmeters`
creates these directories:
`/etc/wmbusmeters.d`
`/var/log/wmbusmeters/meter_readings`
and adds the user `wmbusmeters` with no login account.
2020-02-06 18:23:58 +00:00
# Common problems
If the daemon has started then the wmbus device will be taken and you cannot start wmbusmeters manually.
To run manually, first make sure the daemon is stopped `sudo stop wmbusmeters@-dev-im871a_0.server`
if this hangs, then do `sudo killall -9 wmbusmetersd` and/or `sudo killall -9 wmbusmeters`.
If you are using rtl_sdr/rtl_wmbus and you want to stop the daemon, do
`sudo stop wmbusmeters@-dev-rtlsdr_3.server` followed by `sudo killall -9 rtl_sdr`.
2020-06-30 09:01:34 +00:00
## How to receive telegrams over longer distances.
I only have personal experience of the im871a,amb8465 and an rtlsdr
compatible dongle. The commercial dongles (im871a,amb8464) receive
well despite having tiny antennas inside the dongle. However the
reception range is limited by walls and you must definitely get quite
close to the meter if it is mounted underground in a concrete tube.
The rtlsdr/rtl-wmbus solution seems to work for a lot of users, but it
does use more cpu-power since it decodes the radio traffic in
software. Range seems to be similar to the other dongles, despite the
antenna being much larger.
At least one professional collector use the same commercial dongles,
but the versions with an external antenna connector, into which they
attach a radio amplifier for the proper frequency, and then a larger
antennna. This makes it possible to receive telegrams from meters
underground and over larger distances.
2020-06-30 07:50:07 +00:00
## Non-standard baud rate set for AMB8465 USB stick
2020-06-30 07:50:07 +00:00
Wmbusmeters expects the serial baud rate for the AMB8465 USB stick to be 9600 8n1.
If you have used another tool and changed the baud rate to something else
you need to restore the baud rate to 9600 8n1. You can do that with that other tool,
or you can try wmbusmeters-admin and select `Reset wmbus receives`
this command try all potential baud rates and send the factory reset command.
Then you have to unplug and reinsert the dongle.
If you like to send the bytes manually, the correct bytes are:
* Factory reset of the settings: `0xFF1100EE`
2020-06-30 07:50:07 +00:00
* Reset the stick to apply the factory defaults: `0xFF0500FA` this is not necessary if you unplug and reinsert the dongle.
## WMB13U-868, WMB14UE-868 USB sticks
These dongles do not seem to work with Linux, perhaps problems with the usb2serial pl2303 driver?
2020-03-07 20:12:09 +00:00
# Docker
2020-03-13 09:55:13 +00:00
Experimental docker containers are available here: https://hub.docker.com/r/weetmuts/wmbusmeters
2020-02-06 18:23:58 +00:00
# Source code
The source code is modular and it should be relatively straightforward to add more receivers and meters.
2017-08-09 10:00:11 +00:00
Read for example the text file: HowToAddaNewMeter.txt
2019-05-04 20:39:45 +00:00
# Caveat
If you do not get proper readings from the meters with non-standard protocols. apator162, mkradio3, vario451
then you have to open an issue here and help out by logging a lot of messages and reverse engineer them
even more..... :-/
# Good free documents on the wireless mbus protocol standard EN 13757:
2017-08-09 10:02:42 +00:00
https://oms-group.org/
2017-08-09 10:00:11 +00:00
2018-04-01 06:54:53 +00:00
There is also a lot of wmbus protocol implementation details that
are missing. They will be added to the program as we figure out
how the meters send their data.