Giter VIP home page Giter VIP logo

gosdm630's Introduction

An HTTP interface to MODBUS smart meters

This project provides a http interface to smart meters with a MODBUS interface. Beside the EASTRON SDM series, the software also supports the Janitza B23 DIN-rail meters. The meters provide all measured values over an RS485 connection. The software reads the measurements and wraps them into a HTTP interface, making it very easy to integrate it into your home automation system. Both a REST-style API and a streaming API are available.

NOTE: gosdm is not longer actively developed and has been archived. The development of gosdm is continued at volkszaehler/mbmd under the name mbmd which stands for ModBus Measurement Daemon. mbmd adds support for additional meters and grid inverters.

Supported Devices

The meters have slightly different capabilities. The EASTRON SDM630 offers a lot of features, while the smaller devices only support basic features. This table gives you an overview (please note: check the manuals for yourself, I could be wrong):

Meter Phases Voltage Current Power Power Factor Total Import Total Export Per-phase Import/Export Line/Neutral THD
SDM120 1 + + + + + + - -
SDM220 1 + + + + + + - -
SDM220 1 + + + + + + - -
SDM530 3 + + + + + + - -
SDM630 v1 3 + + + + + + + +
SDM630 v2 3 + + + + + + + +
Janitza B23-312 3 + + + + + + - -
DZG DVH4013 3 + + - - + + - -
SBC ALE3 3 + + + + + + - -

Please note that voltage, current, power and power factor are always reported for each connected phase.

  • SDM120: Cheap and small (1TE), but communication parameters can only be set over MODBUS, which is currently not supported by this project. You can use e.g. SDM120C to change parameters.
  • SDM220, SDM230: More comfortable (2TE), can be configured using the builtin display and button.
  • SDM530: Very big (7TE) - takes up a lot of space, but all connections are on the underside of the meter.
  • SDM630 v1 and v2, both MID and non-MID. Compact (4TE) and with lots of features. Can be configured for 1P2 (single phase with neutral), 3P3 (three phase without neutral) and 3P4 (three phase with neutral) systems.
  • Janitza B23-312: These meters have a higher update rate than the Eastron devices, but they are more expensive. The -312 variant is the one with a MODBUS interface.
  • DZG DVH4013: This meter does not provide raw phase power measurements and only aggregated import/export measurements. The meter is only partially implemented and not recommended. If you want to use it: By default, the meter communicates using 9600 8E1 (comset 5). The meter ID is derived from the serial number: take the last two numbers of the serial number (top right of the device), e.g. 23, and add one (24). Assume this is a hexadecimal number and convert it to decimal (36). Use this as the meter ID.
  • SBC ALE3: This compact Saia Burgess Controls meter is comparable to the SDM630: two tariffs, both import and export depending on meter version and compact (4TE). It's often used with Viessmann heat pumps.

Some of my test devices have been provided by B+G E-Tech - please consider to buy your meter from them!

Table of Contents

Installation

The installation consists of a hardware and a software part. Make sure you buy/fetch the following things before starting:

  • A supported Modbus/RTU smart meter.
  • A USB RS485 adaptor. I use a homegrown one, please see my USB-ISO-RS485 project
  • Some cables to connect the adapter to the SDM630 (for testing, I use an old speaker cable I had sitting on my workbench, for the permanent installation, a shielded CAT5 cable seems adequate)

Hardware installation

SDM630 in my test setup

First, you should integrate the meter into your fuse box. Please ask a professional to do this for you - I don't want you to hurt yourself! Refer to the meter installation manual on how to do this. You need to set the MODBUS communication parameters to 9600 8N1. After this you need to connect a RS485 adaptor to the meter. This is how I did the wiring:

USB-SDM630 wiring

You can try to use a cheap USB-RS485 adaptor, or you can build your own isolated adaptor. I did my first experiments with a Digitus USB-RS485 adaptor which comes with a handy terminal block. I mounted the bias network directly on the terminal block:

bias network

Since then, I tested various adaptors:

  • Supercheap adaptors from China: No ground connection, one worked fine, another one was unstable
  • Industrial adaptors like the Meilhaus RedCOM USB-COMi-SI or the ADAM 4561 isolate the RS-485 bus from the USB line and work extremely reliable. But they are really expensive.

I started to develop my own isolated adaptor. Please check this link for more information.

Software installation

Using the precompiled binaries

You can use the precompiled releases if you like. Just download the right binary for your platform and unzip.

Installing the software from source

You need a working Golang installation, the dep package management tool and Embed in order to compile your binary. Please install the Go compiler first. Then clone this repository:

git clone https://github.com/gonium/gosdm630.git

If you have make installed you can use the Makefile to install the tools:

$ cd gosdm630
$ make dep
Installing embed tool
Installing dep tool

You can then build the software using the Makefile:

$ make
Generating embedded assets
Generation complete in 109.907612ms
Building for host platform
Created binaries:
sdm630
sdm630
sdm630_logger
sdm630_monitor
sdm_detect

As you can see two sets of binaries are built:

  • bin/sdm630_{...} is the software built for the host platform
  • bin/sdm630_{...}-linux-arm is the same for the Raspberry Pi.

If you want to build for all platforms you can use

$ make release

or, for a single platform like the Raspberry Pi binary, use

$ GOOS=linux GOARCH=arm GOARM=5 make build

Running

Now fire up the software:

$ ./bin/sdm630 --help
NAME:
   sdm - SDM modbus daemon

USAGE:
   sdm630 [global options] command [command options] [arguments...]

COMMANDS:
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --serialadapter value, -s value     path to serial RTU device (default: "/dev/ttyUSB0")
   --comset value, -c value            which communication parameter set to use. Valid sets are
                                         1:  2400 baud, 8N1
                                         2:  9600 baud, 8N1
                                         3: 19200 baud, 8N1
                                         4:  2400 baud, 8E1
                                         5:  9600 baud, 8E1
                                         6: 19200 baud, 8E1
                                            (default: 2)
   --device_list value, -d value       MODBUS device type and ID to query, separated by comma.
                                           Valid types are:
                                           "SDM" for Eastron SDM meters
                                           "JANITZA" for Janitza B-Series DIN-Rail meters
                                           "DZG" for the DZG Metering GmbH DVH4013 DIN-Rail meter
                                           Example: -d JANITZA:1,SDM:22,DZG:23 (default: "SDM:1")
   --unique_id_format value, -f value  Unique ID format.
                                           Example: -f Instrument%d
                                           The %d is replaced by the device ID (default: "Instrument%d")
   --verbose, -v                       print verbose messages
   --url value, -u value               the URL the server should respond on (default: ":8080")
   --broker value, -b value            MQTT: The broker URI. ex: tcp://10.10.1.1:1883
   --topic value, -t value             MQTT: The topic name to/from which to publish/subscribe (optional) (default: "sdm630")
   --user value                        MQTT: The User (optional)
   --password value                    MQTT: The password (optional)
   --clientid value, -i value          MQTT: The ClientID (optional) (default: "sdm630")
   --rate value, -r value              MQTT: The maximum update rate (default 0, i.e. unlimited) (after a push we will ignore more data from same device andchannel for this time) (default: 0)
   --clean, -l                         MQTT: Set Clean Session (default false)
   --qos value, -q value               MQTT: The Quality of Service 0,1,2 (default 0) (default: 0)
   --help, -h                          show help

A typical invocation looks like this:

$ ./bin/sdm630 -s /dev/ttyUSB0 -d janitza:26,sdm:1
2017/01/25 16:34:26 Connecting to RTU via /dev/ttyUSB0
2017/01/25 16:34:26 Starting API at :8080

This call queries a Janitza B23 meter with ID 26 and an Eastron SDM meter at ID 1. It . If you use the -v commandline switch you can see modbus traffic and the current readings on the command line. At http://localhost:8080 you can see an embedded web page that updates itself with the latest values:

realtime view of incoming measurements

Installation on the Raspberry Pi

You simply copy the binary from the bin subdirectory to the RPi and start it. I usually put the binary into /usr/local/bin and rename it to sdm630. The following sytemd unit can be used to start the service (put this into /etc/systemd/system):

[Unit]
Description=SDM630 via HTTP API
After=syslog.target
[Service]
ExecStart=/usr/local/bin/sdm630 -s /dev/ttyAMA0
Restart=always
[Install]
WantedBy=multi-user.target

You might need to adjust the -s parameter depending on where your RS485 adapter is connected. Then, use

# systemctl start sdm630

to test your installation. If you're satisfied use

# systemctl enable sdm630

to start the service at boot time automatically.

WARNING: If you use an FTDI-based USB-RS485 adaptor you might see the Raspberry Pi becoming unreachable after a while. This is most likely not an issue with your RS485-USB adaptor or this software, but because of a bug in the Raspberry Pi kernel. As mentioned there, add the following parameter to your /boot/cmdline.txt:

dwc_otg.speed=1

This switches the internal dwc USB hub of the Raspberry Pi to USB1.1. While this reduces the available USB speed, the device now works reliably.

Detecting connected meters

MODBUS/RTU does not provide a mechanism to discover devices. There is no reliable way to detect all attached devices. The sdm_detect tool attempts to read the L1 voltage from all valid device IDs and reports which one replied correctly:

./bin/sdm_detect
2017/06/21 10:22:34 Starting bus scan
2017/06/21 10:22:35 Device 1: n/a
...
2017/07/27 16:16:39 Device 21: SDM type device found, L1 voltage: 234.86
2017/07/27 16:16:40 Device 22: n/a
2017/07/27 16:16:40 Device 23: n/a
2017/07/27 16:16:40 Device 24: n/a
2017/07/27 16:16:40 Device 25: n/a
2017/07/27 16:16:40 Device 26: Janitza type device found, L1 voltage: 235.10
...
2017/07/27 16:17:25 Device 247: n/a
2017/07/27 16:17:25 Found 2 active devices:
2017/07/27 16:17:25 * slave address 21: type SDM
2017/07/27 16:17:25 * slave address 26: type JANITZA
2017/07/27 16:17:25 WARNING: This lists only the devices that responded to a known L1 voltage request. Devices with different function code definitions might not be detected.

API

Rest API

GoSDM provides a convenient REST API. Supported endpoints are:

  • /last/{ID} current data for device
  • /minuteavg/{ID} averaged data for device
  • /status daemon status

Both device APIs can also be called without the device id to return data for all connected devices.

The "GET /last/{ID}"-call simply returns the last measurements of the device with the Modbus ID {ID}:

$ curl localhost:8080/last/11
{
  "Timestamp": "2017-03-27T15:15:09.243729874+02:00",
  "Unix": 1490620509,
  "ModbusDeviceId": 11,
  "Power": {
    "L1": 0,
    "L2": -45.28234100341797,
    "L3": 0
  },
  "Voltage": {
    "L1": 233.1257781982422,
    "L2": 233.12904357910156,
    "L3": 0
  },
  "Current": {
    "L1": 0,
    "L2": 0.19502629339694977,
    "L3": 0
  },
  "Cosphi": {
    "L1": 1,
    "L2": -0.9995147585868835,
    "L3": 1
  },
  "Import": {
    "L1": 0.16599999368190765,
    "L2": 0.10999999940395355,
    "L3": 0.0010000000474974513
  },
  "TotalImport": 0.2770000100135803,
  "Export": {
    "L1": 0,
    "L2": 0.3019999861717224,
    "L3": 0
  },
  "TotalExport": 0.3019999861717224,
  "THD": {
    "VoltageNeutral": {
      "L1": 0,
      "L2": 0,
      "L3": 0
    },
    "AvgVoltageNeutral": 0
  }
}

The "GET /minuteavg"-call returns the average measurements over the last minute:

$ curl localhost:8080/minuteavg/11
{
  "Timestamp": "2017-03-27T15:19:06.470316939+02:00",
  "Unix": 1490620746,
  "ModbusDeviceId": 11,
  "Power": {
    "L1": 0,
    "L2": -45.333974165794174,
    "L3": 0
  },
  ...
}

Monitoring

The /status endpoint provides the following information:

$ curl http://localhost:8080/status
{
  "Starttime": "2017-01-25T16:35:50.839829945+01:00",
  "UptimeSeconds": 65587.177092186,
  "Goroutines": 11,
  "Memory": {
    "Alloc": 1568344,
    "HeapAlloc": 1568344
  },
  "Modbus": {
    "TotalModbusRequests": 1979122,
    "ModbusRequestRatePerMinute": 1810.5264666764785,
    "TotalModbusErrors": 738,
    "ModbusErrorRatePerMinute": 0.6751319688261972
  },
  "ConfiguredMeters": [
    {
      "Id": 26,
      "Type": "JANITZA",
      "Status": "available"
    }
  ]
}

This is a snapshot of a process running over night, along with the error statistics during that timeframe. The process queries continuously, the cabling is not a shielded, twisted wire but something that I had laying around. With proper cabling the error rate should be lower, though.

Streaming API

GoSDM supports both websockets and long polling to transfer status and meter updates to connected clients.

Data read from the smart meter can be observed by clients in realtime: as soon as a new value is available, you will be notified.

Websocket API

Websocket API is available on /ws. All connected clients receive status and meter updates for all connected meters without further subscription.

Long polling API

NOTE Usage of the long polling API is discouraged for performance reasons. The long polling is only supported with sdm630_http, not with the newer sdm630.

We're using HTTP Long Polling as described in RFC6202 for the data transfer. This essentially means that you can connect to an HTTP endpoint. The server will accept the connection and send you the new values as soon as they are available. Then, you either reconnect or use the same TCP connection for the next request. If you want to get all values, you can do the following:

$ while true; do curl --silent "http://localhost:8080/firehose?timeout=45&category=meterupdates" | jq; done

This requests the last values in a loop with curl and pipes the result through jq. Of course this also closes the connection after each reply, so this is rather costly. In production you can leave the connection intact and reuse it. A resulting reading looks like this:

{
  "events": [
    {
      "timestamp": 1490605909544,
      "category": "all",
      "data": {
        "DeviceId": 12,
        "Value": 0.054999999701976776,
        "IEC61850": "TotkWhExportPhsB",
        "Description": "L2 Export (kWh)",
        "ReadTimestamp": "2017-03-27T11:11:49.544236817+02:00"
      }
    }
  ]
}

Please note that the events structure is formatted by the long polling library we use. The data element contains the information just read from the MODBUS device. Events are emitted as soon as they are received over the serial connection.

In addition, you can also use the firehose to receive status updates:

$ while true; do curl --silent "http://localhost:8080/firehose?timeout=45&category=statusupdate" | jq; done

responds each second with the current status, e.g.

{
  "events": [
    {
      "timestamp": 1501163437772,
      "category": "statusupdate",
      "data": {
        "Starttime": "2017-07-27T10:21:04.790877012+02:00",
        "UptimeSeconds": 10.000907389,
        "Goroutines": 22,
        "Memory": {
          "Alloc": 3605376,
          "HeapAlloc": 3605376
        },
        "Modbus": {
          "TotalModbusRequests": 325,
          "ModbusRequestRatePerMinute": 1943.823619582965,
          "TotalModbusErrors": 0,
          "ModbusErrorRatePerMinute": 0
        },
        "ConfiguredMeters": [
          {
            "Id": 26,
            "Type": "JANITZA",
            "Status": "available"
          }
        ]
      }
    }
  ]
}

Stream Utilities

We provide a simple command line utility to monitor single devices. If you run

$ ./bin/sdm630_monitor -d sdm:23 -u localhost:8080

it will connect to the firehose and print power readings for device 23. Please note that this is all it does, the monitor can serve as a starting point for your own experiments.

If you want to log data in the highest possible resolution you can use the sdm630_logger command:

$ sdm630_logger record -s 120 -f log.db

This will connect to the sdm630 process on localhost and serialize all measurements into log.db. Received values will be cached for 120 seconds and then written in bulk. We use BoltDB for data storage in order to minimize runtime dependencies. You can use the inspect subcommand to get some information about the database:

$ ./bin/sdm630_logger inspect -f log.db
Found 529 records:
* First recorded on 2017-03-22 11:17:39.911271769 +0100 CET
* Last recorded on 2017-03-22 11:39:10.099236381 +0100 CET

If you want to export the dataset to TSV, you can use the export subcommand:

./bin/sdm630_logger export -t log.tsv -f log.db
2017/03/27 11:22:23 Exported 529 records.

The sdm630_logger tool is still under development and lacks certain features:

  • The storage functions are rather inefficient and require a lot of storage.
  • The TSV export currently only exports the power readings.

OpenHAB integration

Please note: The following integration guide was written for OpenHAB 1.8. We currently do not have an OpenHAB 2.x instructions, but would appreciate any contributions.

It is very easy to translate this into OpenHAB items. I run the SDM630 software on a Raspberry Pi with the IP 192.168.1.44. My items look like this:

Group Power_Chart
Number Power_L1 "Strombezug L1 [%.1f W]" <power> (Power, Power_Chart) { http="<[http://192.168.1.44:8080/last/1:60000:JS(SDM630GetL1Power.js)]" }

I'm using the http plugin to call the /last/1 endpoint every 60 seconds. Then, I feed the result into a JSON transform stored in SDM630GetL1Power.js. The contents of transform/SDM630GetL1Power.js looks like this:

JSON.parse(input).Power.L1;

Just repeat these lines for each measurement you want to track. Finally, my sitemap contains the following lines:

Chart item=Power_Chart period=D refresh=1800

This draws a chart of all items in the Power_Chart group.

How does it look like in OpenHAB?

I use OpenHAB 1.8 to record various measurements at home. In the classic ui, this is how one of the graphs looks like:

OpenHAB interface screenshot

Everything is in German, but the "Verlauf Strombezug" graph shows my power consumption for three phases. I have a SDM630 installed in my distribution cabinet. A serial connection links it to a Raspberry Pi (RPi). This is where this piece of software runs and exposes the measurements via a RESTful API. OpenHAB connects to it and stores the values, just as it does with other sensors in my home.

gosdm630's People

Contributors

andig avatar chrostek avatar driemekasten avatar florisvdk avatar gonium avatar thecount avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gosdm630's Issues

GB Build Tool install error on RPi 3

Hi Mathias,
Great work you have done here with SDM630 meter.

I also got the Eastron SDM630-MODBUS +RS485 USB adapter (+,- port ).
USB adapter: http://www.ebay.de/itm/like/201548792231?lpid=106&chn=ps&ul_noapp=true

I am trying too install your code in my Raspberry pi 3. But while trying to install the 'GB build tool' using

"make dep"
command or
"go get github.com/constabulary/gb/..." command,

i encounter the following error:

##############################################################
pi@logger ~ $ cd tmtr/gosdm630

pi@logger ~/tmtr/gosdm630 $ sudo -s
root@logger:/home/pi/tmtr/gosdm630# make dep

make: Warning: File 'Makefile' has modification time 534336 s in the future
Installing GB build tool
github.com/constabulary/gb/internal/untar
/usr/lib/go/src/pkg/github.com/constabulary/gb/internal/untar/untar.go:37: function ends without a return statement
/usr/lib/go/src/pkg/github.com/constabulary/gb/internal/untar/untar.go:53: function ends without a return statement
github.com/constabulary/gb/internal/depfile
/usr/lib/go/src/pkg/github.com/constabulary/gb/internal/depfile/depfile.go:43: undefined: bufio.NewScanner
github.com/constabulary/gb/cmd/gb/internal/match
/usr/lib/go/src/pkg/github.com/constabulary/gb/cmd/gb/internal/match/match.go:76: function ends without a return statement
github.com/constabulary/gb/internal/vendor
/usr/lib/go/src/pkg/github.com/constabulary/gb/internal/vendor/depset.go:92: undefined: build.ImportComment
Makefile:15: recipe for target 'dep' failed
make: *** [dep] Error 2
root@logger:/home/pi/tmtr/gosdm630# exit
#####################################################################

pi@logger ~/tmtr/gosdm630 $ sudo -s
root@logger:/home/pi/tmtr/gosdm630# go get github.com/constabulary/gb/...

github.com/constabulary/gb/internal/untar
/usr/lib/go/src/pkg/github.com/constabulary/gb/internal/untar/untar.go:37: function ends without a return statement
/usr/lib/go/src/pkg/github.com/constabulary/gb/internal/untar/untar.go:53: function ends without a return statement
github.com/constabulary/gb/internal/depfile
/usr/lib/go/src/pkg/github.com/constabulary/gb/internal/depfile/depfile.go:43: undefined: bufio.NewScanner
github.com/constabulary/gb/cmd/gb/internal/match
/usr/lib/go/src/pkg/github.com/constabulary/gb/cmd/gb/internal/match/match.go:76: function ends without a return statement
github.com/constabulary/gb/internal/vendor
/usr/lib/go/src/pkg/github.com/constabulary/gb/internal/vendor/depset.go:92: undefined: build.ImportComment

root@logger:/home/pi/tmtr/gosdm630#

######################################################################

I would be really grateful if you can let me know what may be the problem.

Also for the Hardware side i have connected the RS-485 USB adapter's (+) side to pin 9(A) and (-) side to pin 10(B) of the sdm630-Modbus meter.

And do you think USB adapter which i am using will work without the resistors ?

Thank you so much again for your help.

Frequency logging

Is there any technical reason not to log the line frequency?
A corresponding register is available.

What is the measurement rate/interval of an SDM630?

Run on the same machine with Apache web server

Hi. It's not an issue actually but an important (for me and someone like me) question: how to run sdm630_httpd when I already have Apache server up and running? Both of them use "localhost" served hostname so how can I call sdm630_httpd and not break my local smart home webserver?

Support for Janitza B-Series Smart meter

Add support for the Janitza B-Series. There are two variants of these devices: one supports MBUS, the other one MODBUS/RTU. The documentation can be found here:

German
English

The register documentation starts on page 72 (of the German document). The meter provides no THD measurements.

TODO:

  • Install test device
  • Verify RTU packet with simple test program
  • Create a new scheduler for the device
  • rewrite device configuration code

Add more DVG4013 features

The documentation seems to indicate that this meter supports more registers than currently implemented. It would be great to add those.

I would appreciate if anybody with a corresponding meter would get in contact.

GPIO to switch between RX/TX

As I am a little paranoid I wanted to have a galvanicaly isolated RS485 bus. (The ends in the SDM630 are very close to the hot wires...) I bought the only solution for the Raspberry Pi I could find: https://www.hwhardsoft.de/deutsch/projekte/rs485-shield/
NB: The FTDI seems to break the USB hub on the Raspberry Pi after some time.

The problem is the the auto send/receive control on this board is BS (as it's based on an NE555). I need to have GPIO 18 high for TX and low for RX, respectively.

Could you please add GPIO support for the Raspberry Pi to do this? Unfortunately, I have zero Go experience...

Thanks

raspi cannot read sdm when rs485 is 1st serial

searching some time for that, if you rs485 is the 1st serial in your raspi the kernel / init starts a console on it.
after that no real comminication with sdm is possible.
i had to remove the console serial stuff from /boot/cmdline.txt

Only for the docs

Web frontend looses values if two browsers are open

To reproduce, open two browser windows. Some values are updated in one window, some in the other. They appear to be "stealing" from each other. This is probably related to the golongpoll caching functions.

Divide by zero panic

Happened once now:

May 18 09:53:05 uv sdm[2955]: 2019/05/18 09:53:05 http: panic serving 192.168.0.41:33634: runtime error: invalid memory address or nil pointer dereference
May 18 09:53:05 uv sdm[2955]: goroutine 3830853 [running]:
May 18 09:53:05 uv sdm[2955]: net/http.(*conn).serve.func1(0x25aacc0)
May 18 09:53:05 uv sdm[2955]:         /usr/local/go/src/net/http/server.go:1746 +0x9c
May 18 09:53:05 uv sdm[2955]: panic(0x3853a0, 0x6dc720)
May 18 09:53:05 uv sdm[2955]:         /usr/local/go/src/runtime/panic.go:513 +0x194
May 18 09:53:05 uv sdm[2955]: github.com/gonium/gosdm630.(*Readings).divide(0x0, 0x0, 0x0, 0x0)
May 18 09:53:05 uv sdm[2955]:         /home/pi/gosdm/datagram.go:169 +0x18
May 18 09:53:05 uv sdm[2955]: github.com/gonium/gosdm630.(*ReadingSlice).Average(0x2441b68, 0x3e8, 0x492, 0x5e3fa2b3)
May 18 09:53:05 uv sdm[2955]:         /home/pi/gosdm/datagram.go:286 +0xa8
May 18 09:53:05 uv sdm[2955]: github.com/gonium/gosdm630.(*MeasurementCache).GetMinuteAvg(0x2418100, 0x6f4901, 0x2, 0x8, 0x25aaea0)
May 18 09:53:05 uv sdm[2955]:         /home/pi/gosdm/measurementcache.go:104 +0x110
May 18 09:53:05 uv sdm[2955]: github.com/gonium/gosdm630.MkLastMinuteAvgAllHandler.func1(0x468f50, 0x26cc990, 0x252eb00)
May 18 09:53:05 uv sdm[2955]:         /home/pi/gosdm/http.go:127 +0xbc
May 18 09:53:05 uv sdm[2955]: github.com/gonium/gosdm630.serveJson.func1(0x468f50, 0x26cc990, 0x252eb00)
May 18 09:53:05 uv sdm[2955]:         /home/pi/gosdm/http.go:166 +0xbc
May 18 09:53:05 uv sdm[2955]: net/http.HandlerFunc.ServeHTTP(0x253c188, 0x468f50, 0x26cc990, 0x252eb00)
May 18 09:53:05 uv sdm[2955]:         /usr/local/go/src/net/http/server.go:1964 +0x34
May 18 09:53:05 uv sdm[2955]: github.com/gorilla/mux.(*Router).ServeHTTP(0x251e1c0, 0x468f50, 0x26cc990, 0x252eb00)
May 18 09:53:05 uv sdm[2955]:         /home/pi/.go/pkg/mod/github.com/gorilla/[email protected]/mux.go:162 +0xa8
May 18 09:53:05 uv sdm[2955]: github.com/gorilla/handlers.CompressHandlerLevel.func1(0x468f50, 0x26cc990, 0x252ea00)
May 18 09:53:05 uv sdm[2955]:         /home/pi/.go/pkg/mod/github.com/gorilla/[email protected]/compress.go:146 +0x380
May 18 09:53:05 uv sdm[2955]: net/http.HandlerFunc.ServeHTTP(0x240c250, 0x468f50, 0x26cc990, 0x252ea00)
May 18 09:53:05 uv sdm[2955]:         /usr/local/go/src/net/http/server.go:1964 +0x34
May 18 09:53:05 uv sdm[2955]: net/http.serverHandler.ServeHTTP(0x252e200, 0x468f50, 0x26cc990, 0x252ea00)
May 18 09:53:05 uv sdm[2955]:         /usr/local/go/src/net/http/server.go:2741 +0x74
May 18 09:53:05 uv sdm[2955]: net/http.(*conn).serve(0x25aacc0, 0x469210, 0x24194c0)
May 18 09:53:05 uv sdm[2955]:         /usr/local/go/src/net/http/server.go:1847 +0x58c
May 18 09:53:05 uv sdm[2955]: created by net/http.(*Server).Serve
May 18 09:53:05 uv sdm[2955]:         /usr/local/go/src/net/http/server.go:2851 +0x290

[RFC] performance improvements

On volkszaehler (volkszaehler/vzlogger#272 (comment)) it was mentioned that reading registers one by one is much slower than reading blockwise.

This leads to the following ideas for improving readout performance or lowering load:

  • group device registers into groups that can be read at once
  • refactor the mqtt rate parameter (or add another one) to not limit pushing readings to mqtt but instead defer reading from device if rate is too high (NOTE: this would affect all consumers, not only mqtt)

Wrong values with sdm530

I got an Digitus DA-70157 RS-485 Adapter and a Raspi 1b with volkszรคhler-latest and gosdm630 binary (V.6.0 shown) on an SDM530 Device. It seems to work technically but most of the readings are zero or Totally wrong.
It seems to me sdm630 reaches only the values from L1 an L2 and copies L2 to L3 values.
The total import kwh is doubled, the total Watts shown are L1+L2+L2 because the values on the Meter display are different to what sdm630 shows. I don't know what i can do to fix this. Need Help.
Screenshot_2019-03-16 GoSDM630

Building on RPi fails

Hej! I am trying to build the latest code on a RPi.

The following error I cannot resolve:

Version: 05a7865 2019-05-27_15:01:08
go build -v -ldflags '-X "sdm630.Version=05a7865" -X "sdm630.Commit=05a7865"' ./...
github.com/gonium/gosdm630/meters
# github.com/gonium/gosdm630/meters
meters/measurements.go:164:10: m.String undefined (type *Measurement has no field or method String)
meters/meter.go:91:55: iec.String undefined (type Measurement has no field or method String)
Makefile:20: die Regel fรผr Ziel โ€žbinariesโ€œ scheiterte
make: *** [binaries] Fehler 2

I tried two version of Go (1.11 & 1.12) and use the "make binaries" as golangci-lint seems to be unavailable on Arm.

Any suggestions?
Thanks a lot!

Duplication of ID in Web API

After talking to @TheCount, I merged the pull request #5 conditionally. The pull requests introduces a UniqueID which can be used to identify Modbus Device and the gosdm630 instance. A commandline argument allows a user to specify a prefix. The Modbus ID of the attached device will then be appended to this prefix.

I understand the use case and like the idea of a user-specified "tag" for the gosdm630 instance. But the device ID is also present in the ModbusID field - a client could simply concatenate the two to generate the same information.

For the sake of keeping the API clean: Refactor this later so that the device ID is not appended to the UniqueID. The name of the field should also be changed to InstanceID. This needs to be revisited when @TheCount has more time.

SDM630: timestamp of last change?

If it were physically possible to read the timestamp of last change from the Modbus protocol it would be helpful to include this in the API output. Not the timestamp of the reading but the timestamp of the last meter-internal change.

Enable travis build

Seems this repo has travis-ci config but it's not enabled for pull requests. Would be great to update the project settings.

Building GOSDM630: fs.go:35: undefined: sort.Slice

I get this error when running 'make dep' in the gosdm630 directory my RPi running latest Raspbian:

Installing GB build tool
Installing embed tool

github.com/aprice/embed/loader

../../../gopath/src/github.com/aprice/embed/loader/fs.go:35: undefined: sort.Slice
Makefile:52: recipe for target 'dep' failed
make: *** [dep] Error 2

I have no clue as the Go language is new to me. I did export the GOPATH env variable in my profile.

Guidelines for contributions

We should provide guidelines for contributors. It should be a small document and help people to enjoy contributing.

It should include

  • general goal of the project: lean & mean ;-)
  • how to provide new features (issue first, then pull request)
  • areas where contributions are needed

Binary =/= 0.7.0

The binary from https://github.com/gonium/gosdm630/releases/download/v0.7.0/sdm630-linux-arm.zip recognize himself as 0.6.0:
http://localhost:8080/#about

This installation runs GoSDM630 version 0.6.0 (compiled with go1.11)

Issue #59 seems to be still a thing in this one:

pi@bananapi:~$ mosquitto_sub -h localhost -v -t sdm630/#
sdm630/status disconnected
sdm630/status connected
sdm630/status disconnected
sdm630/status disconnected
sdm630/status disconnected
sdm630/status disconnected
sdm630/status disconnected
sdm630/status disconnected
sdm630/status disconnected
sdm630/status disconnected
sdm630/status disconnected
sdm630/status disconnected

Tool for MODBUS scanning

Create a tool that enumerates all valid MODBUS IDs and attempts to retrieve the L1 voltage from them. Print a list of valid devices and if they respond correctly to the console.

Output formatting broken?

Running from master:

pi@uv:~/gosdm630 $ bin/sdm_detect
2017/10/14 16:15:49 Starting bus scan
2017/10/14 16:15:49 Device 1: SDM type device found, L1 voltage: [%!f(uint8=67) %!f(uint8=98) %!f(uint8=159) %!f(uint8=179)]
2017/10/14 16:15:49 Device 2: SDM type device found, L1 voltage: [%!f(uint8=67) %!f(uint8=98) %!f(uint8=156) %!f(uint8=59)]

The voltages look mal-formatted.

High load on raspberry

I have a raspberry pi3 with two SDM630 attached via USB connector on one bus running at 9600 baud. When the http daemon is running the load is 0.65 when a single browser window is connected load is 1.25.

This seems rather high given that the pi3 is quite capable?

mqtt Power(Watt) total and 1messageblock every 30sec?

Hello,
i have 2 Question about your great v.0.6.0

  1. i use sdm630 with mqtt. imo mqtt stress my rasperry - is it possible to create one messageblock every 30sec or 1min?
  2. i miss WLocPhs total - please can you integrate this in mqtt?

Regards Tim


/Raspi/SDM630/Instrument1/WLocPhsA 115.479
/Raspi/SDM630/Instrument1/WLocPhsB 80.371
/Raspi/SDM630/Instrument1/WLocPhsC 167.294
/Raspi/SDM630/Instrument1/AngLocPhsA 0.717
/Raspi/SDM630/Instrument1/AngLocPhsB 0.538
/Raspi/SDM630/Instrument1/AngLocPhsC 0.988
/Raspi/SDM630/Instrument1/TotkWhImportPhsA 0.329
/Raspi/SDM630/Instrument1/TotkWhImportPhsB 0.548
/Raspi/SDM630/Instrument1/TotkWhImportPhsC 1.156
/Raspi/SDM630/Instrument1/TotkWhImport 2.033

Release 0.6.0 mqtt disconnected

Hi,
i use Release 0.6.0 with mqtt and it works - thanks... !
If i checked mqtt history and i can only find disconnected - i miss "connected"
Thanks!

Pi:~ $ mosquitto_sub -v -t "/Raspi/SDM630/status/#" 
/Raspi/SDM630/status disconnected
/Raspi/SDM630/status disconnected
/Raspi/SDM630/status disconnected
/Raspi/SDM630/status disconnected
/Raspi/SDM630/status disconnected
/Raspi/SDM630/status disconnected

Installation fails on Raspi / Debian stretch

pi@uv:~/gosdm630 $ sudo GOPATH=/usr/lib/go make dep
Installing GB build tool
Installing embed tool
# github.com/aprice/embed/loader
/usr/lib/go-1.7/src/github.com/aprice/embed/loader/fs.go:35: undefined: sort.Slice
Makefile:52: recipe for target 'dep' failed
make: *** [dep] Error 2

Problem building from source

Thanks for gosdm360, trying to build from source.

When building from source ( go version go1.10.4 linux/amd64), it breaks with the following error

github.com/gonium/gosdm630/meters
../meters/measurements.go:126:10: m.String undefined (type *Measurement has no field or method String)
../meters/meter.go:91:55: iec.String undefined (type Measurement has no field or method String)

[RFC] refactor meter opcode definitions

Currently, a lot of code is used to define meter opcodes (query snips). This could be greatly reduced by specifying standard "opcodes" and define its mapping register per meter. The approach could use e.g. simple structures like this:

iec61850  := map[string]string{
	"VolLocPhsA":       "L1 Voltage (V)",
	"VolLocPhsB":       "L2 Voltage (V)",
	"VolLocPhsC":       "L3 Voltage (V)",
	"AmpLocPhsA":       "L1 Current (A)",
	"AmpLocPhsB":       "L2 Current (A)",
	"AmpLocPhsC":       "L3 Current (A)",
	"WLocPhsA":         "L1 Power (W)",
	"WLocPhsB":         "L2 Power (W)",
	"WLocPhsC":         "L3 Power (W)",
	"AngLocPhsA":       "L1 Cosphi",
	"AngLocPhsB":       "L2 Cosphi",
	"AngLocPhsC":       "L3 Cosphi",
	"TotkWhImportPhsA": "L1 Import (kWh)",
	"TotkWhImportPhsB": "L2 Import (kWh)",
	"TotkWhImportPhsC": "L3 Import (kWh)",
	"TotkWhImport":     "Total Import (kWh)",
	"TotkWhExportPhsA": "L1 Export (kWh)",
	"TotkWhExportPhsB": "L2 Export (kWh)",
	"TotkWhExportPhsC": "L3 Export (kWh)",
	"TotkWhExport":     "Total Export (kWh)",
	"ThdVolPhsA":       "L1 Voltage to neutral THD (%)",
	"ThdVolPhsB":       "L2 Voltage to neutral THD (%)",
	"ThdVolPhsC":       "L3 Voltage to neutral THD (%)",
	"ThdVol":           "Average voltage to neutral THD (%)",
	"Freq":             "Frequency of supply voltages",
}
fmt.Println(iec61850)

Meter definitions would look like this:

sdm := map[string]int{
	"L1Voltage":   0x0000,
	"L2Voltage":   0x0002,
	"L3Voltage":   0x0004,
	"L1Current":   0x0006,
	"L2Current":   0x0008,
	"L3Current":   0x000A,
	"L1Power":     0x000C,
	"L2Power":     0x000E,
	"L3Power":     0x0010,
	"L1Import":    0x015a,
	"L2Import":    0x015c,
	"L3Import":    0x015e,
	"TotalImport": 0x0048,
	"L1Export":    0x0160,
	"L2Export":    0x0162,
	"L3Export":    0x0164,
	"TotalExport": 0x004a,
	"L1Cosphi":    0x001e,
	"L2Cosphi":    0x0020,
	"L3Cosphi":    0x0022,
	// "L1THDCurrent":         0x00F0,
	// "L2THDCurrent":         0x00F2,
	// "L3THDCurrent":         0x00F4,
	// "AvgTHDCurrent":        0x00Fa,
	"L1THDVoltageNeutral":  0x00ea,
	"L2THDVoltageNeutral":  0x00ec,
	"L3THDVoltageNeutral":  0x00ee,
	"AvgTHDVoltageNeutral": 0x00F8,
	"Frequency":            0x0046,
}
fmt.Println(sdm)

janitza := map[string]int{
	"L1Voltage":   0x4A38,
	"L2Voltage":   0x4A3A,
	"L3Voltage":   0x4A3C,
	"L1Current":   0x4A44,
	"L2Current":   0x4A46,
	"L3Current":   0x4A48,
	"L1Power":     0x4A4C,
	"L2Power":     0x4A4E,
	"L3Power":     0x4A50,
	"L1Import":    0x4A76,
	"L2Import":    0x4A78,
	"L3Import":    0x4A7A,
	"TotalImport": 0x4A7C,
	"L1Export":    0x4A7E,
	"L2Export":    0x4A80,
	"L3Export":    0x4A82,
	"TotalExport": 0x4A84,
	"L1Cosphi":    0x4A64,
	"L2Cosphi":    0x4A66,
	"L3Cosphi":    0x4A68,
}
fmt.Println(janitza)

Defining all QuerySnips per meter (Produce())would then be a simple matter of iterating over the struct.

I'd prefer to combine this with a single naming regime for opcodes. UI and APIs currently use IEC61850 (e.g. VolLocPhsA ), code internally relies on more speaking names like L1Voltage. My preference would be the latter for UI, API and source code.

If this is only applied to the new sdm630 daemon this could be considered a non-breaking change. Opinions welcome.

since latest commit realtime view not working anymore

i was on a version below 0.5 and all was fine - than i did a git pull and updated to the latest commit's today now my system ist not starting because of the changed -d parameter - i figured this out but i still do not get data in the realtime view - so i tried the sdm detect:

pi@rasp-eg-verteilerkasten ~ $ gosdm630/bin/sdm_detect
2017/10/26 09:05:00 Starting bus scan
2017/10/26 09:05:00 Device 1: SDM type device found, L1 voltage: [%!f(uint8=67) %!f(uint8=102) %!f(uint8=28) %!f(uint8=153)]

this looks already a bit strange?

if i start the http process i receive:

/home/pi/gosdm630/bin/sdm630_httpd -s /dev/rs485 -d sdm:1 -c 2 -f HolliHausGesamt[id-%d]
2017/10/26 08:58:14 Starting API httpd at :8080
2017/10/26 08:59:21 Device 1 failed to respond - retry attempt 1 of 5
2017/10/26 09:03:41 Device 1 failed to respond - retry attempt 1 of 5
2017/10/26 09:03:45 Device 1 failed to respond - retry attempt 1 of 5

if i start in verbose mode it looks like data is received - even if i do my rest call i get data - only the webview is not showing anything?

pi@rasp-eg-verteilerkasten ~ $ /home/pi/gosdm630/bin/sdm630_httpd -s /dev/rs485 -d sdm:1 -c 2 -f HolliHausGesamt[id-%d] -v
2017/10/26 09:12:44 Connecting to RTU via /dev/rs485, 9600 8N1
2017/10/26 09:12:44 Starting API httpd at :8080
2017/10/26 09:12:44 SubscriptionManager: Starting run.
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x00\x00\x00\x02q\xcb"
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 43 67 66 36 f4 69
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x00\x02\x00\x02\xd0\v"
2017/10/26 09:12:44 Creating new eventBuffer for category: meterupdate
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964398 meterupdate DevID: 1, FunCode: 4, Opcode 0: Value: 231.399}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V NaNA NaNW NaNcos | L2: NaNV NaNA NaNW NaNcos | L3: NaNV NaNA NaNW NaNcos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 43 62 80 96 ae 70
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x00\x04\x00\x020\n"
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V NaNA NaNW NaNcos | L2: 226.50V NaNA NaNW NaNcos | L3: NaNV NaNA NaNW NaNcos
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964429 meterupdate DevID: 1, FunCode: 4, Opcode 2: Value: 226.502}.
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 43 65 9f 8b d7 88
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x00\x06\x00\x02\x91\xca"
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V NaNA NaNW NaNcos | L2: 226.50V NaNA NaNW NaNcos | L3: 229.62V NaNA NaNW NaNcos
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964463 meterupdate DevID: 1, FunCode: 4, Opcode 4: Value: 229.623}.
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 41 09 83 03 1e 8b
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x00\b\x00\x02\xf0\t"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964496 meterupdate DevID: 1, FunCode: 4, Opcode 6: Value: 8.594}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A NaNW NaNcos | L2: 226.50V NaNA NaNW NaNcos | L3: 229.62V NaNA NaNW NaNcos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 40 ea 25 7f 94 c0
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x00\n\x00\x02Q\xc9"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964530 meterupdate DevID: 1, FunCode: 4, Opcode 8: Value: 7.317}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A NaNW NaNcos | L2: 226.50V 7.32A NaNW NaNcos | L3: 229.62V NaNA NaNW NaNcos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 40 4d 12 4f 33 07
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x00\f\x00\x02\xb1\xc8"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964564 meterupdate DevID: 1, FunCode: 4, Opcode a: Value: 3.204}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A NaNW NaNcos | L2: 226.50V 7.32A NaNW NaNcos | L3: 229.62V 3.20A NaNW NaNcos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 44 ec cb 81 b9 d1
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x00\x0e\x00\x02\x10\b"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964595 meterupdate DevID: 1, FunCode: 4, Opcode c: Value: 1894.359}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A 1894.36W NaNcos | L2: 226.50V 7.32A NaNW NaNcos | L3: 229.62V 3.20A NaNW NaNcos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 44 bd 58 6b 05 7f
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964628 meterupdate DevID: 1, FunCode: 4, Opcode e: Value: 1514.763}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A 1894.36W NaNcos | L2: 226.50V 7.32A 1514.76W NaNcos | L3: 229.62V 3.20A NaNW NaNcos
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x00\x10\x00\x02p\x0e"
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 43 f3 2a a6 81 29
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x00\x1e\x00\x02\x11\xcd"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964660 meterupdate DevID: 1, FunCode: 4, Opcode 10: Value: 486.333}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A 1894.36W NaNcos | L2: 226.50V 7.32A 1514.76W NaNcos | L3: 229.62V 3.20A 486.33W NaNcos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 3f 73 d9 6b 1c 34
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x00 \x00\x02p\x01"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964697 meterupdate DevID: 1, FunCode: 4, Opcode 1e: Value: 0.953}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W NaNcos | L3: 229.62V 3.20A 486.33W NaNcos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 3f 69 fa 12 e5 21
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x00\"\x00\x02\xd1\xc1"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964733 meterupdate DevID: 1, FunCode: 4, Opcode 20: Value: 0.914}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W NaNcos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 3f 29 36 73 70 1d
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x01Z\x00\x02P$"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964768 meterupdate DevID: 1, FunCode: 4, Opcode 22: Value: 0.661}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 44 ab 44 08 ac 52
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x01\\\x00\x02\xb0%"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964804 meterupdate DevID: 1, FunCode: 4, Opcode 15a: Value: 1370.126}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 45 49 00 14 3f 51
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x01^\x00\x02\x11\xe5"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964840 meterupdate DevID: 1, FunCode: 4, Opcode 15c: Value: 3216.005}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 45 31 1a 8f f5 83
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x00H\x00\x02\xf1\xdd"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964877 meterupdate DevID: 1, FunCode: 4, Opcode 15e: Value: 2833.660}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 45 e7 de 54 06 e0
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x01`\x00\x02p)"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964911 meterupdate DevID: 1, FunCode: 4, Opcode 48: Value: 7419.791}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x01b\x00\x02\xd1\xe9"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964947 meterupdate DevID: 1, FunCode: 4, Opcode 160: Value: 0.000}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:44 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:44 modbus: sending "\x01\x04\x01d\x00\x021\xe8"
2017/10/26 09:12:44 SubscriptionManager: queued event: &{1509001964984 meterupdate DevID: 1, FunCode: 4, Opcode 162: Value: 0.000}.
2017/10/26 09:12:44 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:44+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00J\x00\x02P\x1d"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965021 meterupdate DevID: 1, FunCode: 4, Opcode 164: Value: 0.000}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\xea\x00\x02P?"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965055 meterupdate DevID: 1, FunCode: 4, Opcode 4a: Value: 0.000}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 40 78 53 2c 53 70
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\xec\x00\x02\xb0>"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965092 meterupdate DevID: 1, FunCode: 4, Opcode ea: Value: 3.880}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 40 99 4f 3f 4a 4b
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\xee\x00\x02\x11\xfe"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965128 meterupdate DevID: 1, FunCode: 4, Opcode ec: Value: 4.791}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 40 99 4f 3f 4a 4b
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\xf8\x00\x02\xf0:"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965170 meterupdate DevID: 1, FunCode: 4, Opcode ee: Value: 4.791}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 40 8a bc 6a 3f 41
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\x00\x00\x02q\xcb"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965210 meterupdate DevID: 1, FunCode: 4, Opcode f8: Value: 4.335}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 43 67 66 36 f4 69
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\x02\x00\x02\xd0\v"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965241 meterupdate DevID: 1, FunCode: 4, Opcode 0: Value: 231.399}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
2017/10/26 09:12:45 Creating new eventBuffer for category: statusupdate
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965265 statusupdate {"Starttime":"2017-10-26T09:12:44.259307176+02:00","UptimeSeconds":1.004781308,"Goroutines":12,"Memory":{"Alloc":2251944,"HeapAlloc":2251944},"Modbus":{"TotalModbusRequests":26,"ModbusRequestRatePerMinute":1552.5766528292143,"TotalModbusErrors":0,"ModbusErrorRatePerMinute":0},"ConfiguredMeters":[{"Id":1,"Type":"SDM","Status":"available"}]}
}.
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 43 62 80 96 ae 70
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\x04\x00\x020\n"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965273 meterupdate DevID: 1, FunCode: 4, Opcode 2: Value: 226.502}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 43 65 9f 8b d7 88
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\x06\x00\x02\x91\xca"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965305 meterupdate DevID: 1, FunCode: 4, Opcode 4: Value: 229.623}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 41 09 83 03 1e 8b
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\b\x00\x02\xf0\t"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965340 meterupdate DevID: 1, FunCode: 4, Opcode 6: Value: 8.594}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 40 ea 25 7f 94 c0
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\n\x00\x02Q\xc9"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965373 meterupdate DevID: 1, FunCode: 4, Opcode 8: Value: 7.317}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 40 4d 12 4f 33 07
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\f\x00\x02\xb1\xc8"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965407 meterupdate DevID: 1, FunCode: 4, Opcode a: Value: 3.204}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 44 ec cb 81 b9 d1
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\x0e\x00\x02\x10\b"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965438 meterupdate DevID: 1, FunCode: 4, Opcode c: Value: 1894.359}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1514.76W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 44 bc 5b 12 95 ad
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\x10\x00\x02p\x0e"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965470 meterupdate DevID: 1, FunCode: 4, Opcode e: Value: 1506.846}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 486.33W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 43 f4 02 70 af 76
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\x1e\x00\x02\x11\xcd"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965501 meterupdate DevID: 1, FunCode: 4, Opcode 10: Value: 488.019}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 3f 73 e3 0c 4f 7e
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00 \x00\x02p\x01"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965538 meterupdate DevID: 1, FunCode: 4, Opcode 1e: Value: 0.953}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 3f 69 cc 0f 32 88
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\"\x00\x02\xd1\xc1"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965574 meterupdate DevID: 1, FunCode: 4, Opcode 20: Value: 0.913}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 3f 29 a5 69 9d 26
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x01Z\x00\x02P$"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965611 meterupdate DevID: 1, FunCode: 4, Opcode 22: Value: 0.663}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 44 ab 44 10 ac 58
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x01\\\x00\x02\xb0%"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965648 meterupdate DevID: 1, FunCode: 4, Opcode 15a: Value: 1370.127}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 45 49 00 19 fe 94
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x01^\x00\x02\x11\xe5"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965685 meterupdate DevID: 1, FunCode: 4, Opcode 15c: Value: 3216.006}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 45 31 1a 93 f4 4a
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00H\x00\x02\xf1\xdd"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965721 meterupdate DevID: 1, FunCode: 4, Opcode 15e: Value: 2833.661}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 45 e7 de 5a 87 24
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965754 meterupdate DevID: 1, FunCode: 4, Opcode 48: Value: 7419.794}.
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x01`\x00\x02p)"
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x01b\x00\x02\xd1\xe9"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965791 meterupdate DevID: 1, FunCode: 4, Opcode 160: Value: 0.000}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x01d\x00\x021\xe8"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965828 meterupdate DevID: 1, FunCode: 4, Opcode 162: Value: 0.000}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00J\x00\x02P\x1d"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965864 meterupdate DevID: 1, FunCode: 4, Opcode 164: Value: 0.000}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\xea\x00\x02P?"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965897 meterupdate DevID: 1, FunCode: 4, Opcode 4a: Value: 0.000}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 40 78 53 2c 53 70
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\xec\x00\x02\xb0>"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965934 meterupdate DevID: 1, FunCode: 4, Opcode ea: Value: 3.880}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:45 modbus: received 01 04 04 40 99 4f 3f 4a 4b
RTUClientHandler: 2017/10/26 09:12:45 modbus: sending "\x01\x04\x00\xee\x00\x02\x11\xfe"
2017/10/26 09:12:45 SubscriptionManager: queued event: &{1509001965971 meterupdate DevID: 1, FunCode: 4, Opcode ec: Value: 4.791}.
2017/10/26 09:12:45 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:45+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 40 99 4f 3f 4a 4b
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966013 meterupdate DevID: 1, FunCode: 4, Opcode ee: Value: 4.791}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\xf8\x00\x02\xf0:"
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 40 8a bc 6a 3f 41
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\x00\x00\x02q\xcb"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966053 meterupdate DevID: 1, FunCode: 4, Opcode f8: Value: 4.335}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 43 67 66 36 f4 69
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\x02\x00\x02\xd0\v"
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966084 meterupdate DevID: 1, FunCode: 4, Opcode 0: Value: 231.399}.
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 43 62 80 96 ae 70
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\x04\x00\x020\n"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966117 meterupdate DevID: 1, FunCode: 4, Opcode 2: Value: 226.502}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 43 65 9f 8b d7 88
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\x06\x00\x02\x91\xca"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966164 meterupdate DevID: 1, FunCode: 4, Opcode 4: Value: 229.623}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.59A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 41 0a 0f 70 cb ae
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\b\x00\x02\xf0\t"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966197 meterupdate DevID: 1, FunCode: 4, Opcode 6: Value: 8.629}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1894.36W 0.95cos | L2: 226.50V 7.32A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 40 e9 19 b2 b4 55
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\n\x00\x02Q\xc9"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966231 meterupdate DevID: 1, FunCode: 4, Opcode 8: Value: 7.284}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1894.36W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.20A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 40 4d 42 ed 8e be
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\f\x00\x02\xb1\xc8"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966265 statusupdate {"Starttime":"2017-10-26T09:12:44.259307176+02:00","UptimeSeconds":2.006183716,"Goroutines":12,"Memory":{"Alloc":2318992,"HeapAlloc":2318992},"Modbus":{"TotalModbusRequests":54,"ModbusRequestRatePerMinute":1615.006628834585,"TotalModbusErrors":0,"ModbusErrorRatePerMinute":0},"ConfiguredMeters":[{"Id":1,"Type":"SDM","Status":"available"}]}
}.
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966266 meterupdate DevID: 1, FunCode: 4, Opcode a: Value: 3.207}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1894.36W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 44 ed c6 7b 6c c2
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\x0e\x00\x02\x10\b"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966298 meterupdate DevID: 1, FunCode: 4, Opcode c: Value: 1902.203}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 44 bc 5b 12 95 ad
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\x10\x00\x02p\x0e"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966328 meterupdate DevID: 1, FunCode: 4, Opcode e: Value: 1506.846}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 43 f4 02 70 af 76
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\x1e\x00\x02\x11\xcd"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966361 meterupdate DevID: 1, FunCode: 4, Opcode 10: Value: 488.019}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 3f 73 e3 0c 4f 7e
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00 \x00\x02p\x01"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966396 meterupdate DevID: 1, FunCode: 4, Opcode 1e: Value: 0.953}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 3f 69 cc 0f 32 88
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\"\x00\x02\xd1\xc1"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966432 meterupdate DevID: 1, FunCode: 4, Opcode 20: Value: 0.913}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 3f 29 9c a3 0f 21
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x01Z\x00\x02P$"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966468 meterupdate DevID: 1, FunCode: 4, Opcode 22: Value: 0.663}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 44 ab 44 10 ac 58
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x01\\\x00\x02\xb0%"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966505 meterupdate DevID: 1, FunCode: 4, Opcode 15a: Value: 1370.127}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 45 49 00 19 fe 94
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x01^\x00\x02\x11\xe5"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966542 meterupdate DevID: 1, FunCode: 4, Opcode 15c: Value: 3216.006}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 45 31 1a 93 f4 4a
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00H\x00\x02\xf1\xdd"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966578 meterupdate DevID: 1, FunCode: 4, Opcode 15e: Value: 2833.661}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 45 e7 de 5a 87 24
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x01`\x00\x02p)"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966612 meterupdate DevID: 1, FunCode: 4, Opcode 48: Value: 7419.794}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x01b\x00\x02\xd1\xe9"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966649 meterupdate DevID: 1, FunCode: 4, Opcode 160: Value: 0.000}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x01d\x00\x021\xe8"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966686 meterupdate DevID: 1, FunCode: 4, Opcode 162: Value: 0.000}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00J\x00\x02P\x1d"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966723 meterupdate DevID: 1, FunCode: 4, Opcode 164: Value: 0.000}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\xea\x00\x02P?"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966756 meterupdate DevID: 1, FunCode: 4, Opcode 4a: Value: 0.000}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 40 4a 1e ac c6 4f
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\xec\x00\x02\xb0>"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966793 meterupdate DevID: 1, FunCode: 4, Opcode ea: Value: 3.158}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 3f 7e 89 bb b0 6b
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\xee\x00\x02\x11\xfe"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966830 meterupdate DevID: 1, FunCode: 4, Opcode ec: Value: 0.994}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 3f 7e 89 bb b0 6b
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\xf8\x00\x02\xf0:"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966868 meterupdate DevID: 1, FunCode: 4, Opcode ee: Value: 0.994}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 40 04 e0 8d 26 20
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\x00\x00\x02q\xcb"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966908 meterupdate DevID: 1, FunCode: 4, Opcode f8: Value: 2.076}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 43 67 66 36 f4 69
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\x02\x00\x02\xd0\v"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966939 meterupdate DevID: 1, FunCode: 4, Opcode 0: Value: 231.399}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:46 modbus: received 01 04 04 43 62 80 96 ae 70
RTUClientHandler: 2017/10/26 09:12:46 modbus: sending "\x01\x04\x00\x04\x00\x020\n"
2017/10/26 09:12:46 SubscriptionManager: queued event: &{1509001966972 meterupdate DevID: 1, FunCode: 4, Opcode 2: Value: 226.502}.
2017/10/26 09:12:46 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:46+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 43 65 9f 8b d7 88
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00\x06\x00\x02\x91\xca"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967008 meterupdate DevID: 1, FunCode: 4, Opcode 4: Value: 229.623}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 41 0a 0d c5 0b 79
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00\b\x00\x02\xf0\t"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967042 meterupdate DevID: 1, FunCode: 4, Opcode 6: Value: 8.628}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.28A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 40 e6 97 ac 61 fe
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967076 meterupdate DevID: 1, FunCode: 4, Opcode 8: Value: 7.206}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.21A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00\n\x00\x02Q\xc9"
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 40 4d 33 ae eb 1f
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00\f\x00\x02\xb1\xc8"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967111 meterupdate DevID: 1, FunCode: 4, Opcode a: Value: 3.206}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.20W 0.95cos | L2: 226.50V 7.21A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 44 ed c5 f5 ec 56
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00\x0e\x00\x02\x10\b"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967141 meterupdate DevID: 1, FunCode: 4, Opcode c: Value: 1902.186}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1506.85W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 44 ba 11 2b 82 de
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00\x10\x00\x02p\x0e"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967174 meterupdate DevID: 1, FunCode: 4, Opcode e: Value: 1488.536}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 488.02W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 43 f3 e5 3e d5 73
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00\x1e\x00\x02\x11\xcd"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967206 meterupdate DevID: 1, FunCode: 4, Opcode 10: Value: 487.791}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 3f 73 e5 9b 0d 70
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00 \x00\x02p\x01"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967243 meterupdate DevID: 1, FunCode: 4, Opcode 1e: Value: 0.953}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967266 statusupdate {"Starttime":"2017-10-26T09:12:44.259307176+02:00","UptimeSeconds":3.007066973,"Goroutines":12,"Memory":{"Alloc":2389288,"HeapAlloc":2389288},"Modbus":{"TotalModbusRequests":83,"ModbusRequestRatePerMinute":1656.098798169335,"TotalModbusErrors":0,"ModbusErrorRatePerMinute":0},"ConfiguredMeters":[{"Id":1,"Type":"SDM","Status":"available"}]}
}.
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 3f 69 78 21 c5 94
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00\"\x00\x02\xd1\xc1"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967280 meterupdate DevID: 1, FunCode: 4, Opcode 20: Value: 0.912}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 3f 29 9c a3 0f 21
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x01Z\x00\x02P$"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967317 meterupdate DevID: 1, FunCode: 4, Opcode 22: Value: 0.663}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 44 ab 44 10 ac 58
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x01\\\x00\x02\xb0%"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967355 meterupdate DevID: 1, FunCode: 4, Opcode 15a: Value: 1370.127}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 45 49 00 19 fe 94
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x01^\x00\x02\x11\xe5"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967392 meterupdate DevID: 1, FunCode: 4, Opcode 15c: Value: 3216.006}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 45 31 1a 93 f4 4a
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00H\x00\x02\xf1\xdd"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967429 meterupdate DevID: 1, FunCode: 4, Opcode 15e: Value: 2833.661}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 45 e7 de 5e 86 e7
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x01`\x00\x02p)"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967463 meterupdate DevID: 1, FunCode: 4, Opcode 48: Value: 7419.796}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x01b\x00\x02\xd1\xe9"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967500 meterupdate DevID: 1, FunCode: 4, Opcode 160: Value: 0.000}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x01d\x00\x021\xe8"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967538 meterupdate DevID: 1, FunCode: 4, Opcode 162: Value: 0.000}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00J\x00\x02P\x1d"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967574 meterupdate DevID: 1, FunCode: 4, Opcode 164: Value: 0.000}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 00 00 00 00 fb 84
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00\xea\x00\x02P?"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967608 meterupdate DevID: 1, FunCode: 4, Opcode 4a: Value: 0.000}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 40 4a 1e ac c6 4f
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00\xec\x00\x02\xb0>"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967646 meterupdate DevID: 1, FunCode: 4, Opcode ea: Value: 3.158}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
RTUClientHandler: 2017/10/26 09:12:47 modbus: received 01 04 04 3f 7e 89 bb b0 6b
RTUClientHandler: 2017/10/26 09:12:47 modbus: sending "\x01\x04\x00\xee\x00\x02\x11\xfe"
2017/10/26 09:12:47 SubscriptionManager: queued event: &{1509001967683 meterupdate DevID: 1, FunCode: 4, Opcode ec: Value: 0.994}.
2017/10/26 09:12:47 UniqueId: HolliHausGesamt[id-1] ID: 1 T: 2017-10-26T09:12:47+02:00 - L1: 231.40V 8.63A 1902.19W 0.95cos | L2: 226.50V 7.21A 1488.54W 0.91cos | L3: 229.62V 3.21A 487.79W 0.66cos
^C

any idea?

thanks
holli

Device 9 failed to respond - retry attempt 1 of 5

my SDM is device 9, when starting the webserver i got this every second:

2018/04/04 19:51:15 Device 9 failed to respond - retry attempt 1 of 5
2018/04/04 19:51:15 Device 9 failed to respond - retry attempt 1 of 5
2018/04/04 19:51:16 Device 9 failed to respond - retry attempt 1 of 5
2018/04/04 19:51:16 Device 9 failed to respond - retry attempt 1 of 5
2018/04/04 19:51:17 Device 9 failed to respond - retry attempt 1 of 5
2018/04/04 19:51:18 Device 9 failed to respond - retry attempt 1 of 5
2018/04/04 19:51:18 Device 9 failed to respond - retry attempt 1 of 5

precompiled binary, release 0.5.1
./sdm630_httpd-linux-arm -s /dev/ttyAMA0 -d sdm:9

Any ideas?

regards M.

Control abort conditions

Currently, gosdm aborts after 5 consecutive failures. This is problematic in cases where several meters are connected to the bus, one of the meters fails, but one wants to continue logging data from the remaining meters.

It would therefore be nice if there was a flag/mode that, in case of one failure, would "forward" the scheduler to the next device ID in the hope that this device is still working.

reports zero values on startup

When gosdm starts but has not read out all values from the modbus yet, the JSON entities corresponding to the unread values are zero. This can be confusing because zero might be a valid value. A better choice might be to leave out these entities, or give them a JSON value of null.

ModBus Adaptor error rate

Do you sell any of your homebrewed Modbus USB adaptors. I am running a setup with cheap USB-ones with no ground and get
"Modbus": {
"Requests": 8822,
"RequestsPerMinute": 1643.5757367508729,
"Errors": 61,
"ErrorsPerMinute": 11.364556783246798

Is this a normal number?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.