GithubHelp home page GithubHelp logo

schwaneberg / pymeterreader Goto Github PK

View Code? Open in Web Editor NEW
10.0 10.0 3.0 181 KB

A flexible and easy to configure service to collect and forward readings from smart meters and other sensors. It supports the Volkszaehler middleware and can be used as a replacement of vzlogger.

License: BSD 2-Clause "Simplified" License

Python 99.92% Shell 0.08%
meters sensors volkszaehler

pymeterreader's People

Contributors

schwaneberg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

pymeterreader's Issues

thanks!

Just wanted to leave a word of appreciation! You project significantly simplifies the setup to monitor the house holds power consumption. SML parsing of our Holley DTZ541-ZEBA works out of the box. The integrated metrics endpoint allows prometheus to directly scrape the data. I really appreciate that I don't have to install and setup the volkszaehler stack.

Thanks!

Erorr while starting pymeterreader-wizard

Traceback (most recent call last):
  File "/usr/local/bin/pymeterreader-wizard", line 5, in <module>
    from pymeterreader.wizard.ncui import Wizard
  File "/usr/local/lib/python3.9/dist-packages/pymeterreader/wizard/ncui.py", line 12, in <module>
    from cursesmenu import CursesMenu
  File "/usr/local/lib/python3.9/dist-packages/cursesmenu/__init__.py", line 1, in <module>
    from . import items
  File "/usr/local/lib/python3.9/dist-packages/cursesmenu/items/__init__.py", line 2, in <module>
    from .exit_item import ExitItem
  File "/usr/local/lib/python3.9/dist-packages/cursesmenu/items/exit_item.py", line 5, in <module>
    from cursesmenu.curses_menu import CursesMenu
  File "/usr/local/lib/python3.9/dist-packages/cursesmenu/curses_menu.py", line 12, in <module>
    from deprecated import deprecated
ModuleNotFoundError: No module named 'deprecated'

vzlogger mini webserver

vzlogger has a "mini webserver" which outputs the basic data as JSON. See documentation:
https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#local

The config in /etc/vzlogger.json looks like this:

    // Build-in HTTP server
    "local": {
        "enabled": true,   // enable local HTTPd for serving live readings
        "port": 8088,       // TCP port for local HTTPd
        "index": true,      // provide index listing of available channels if no UUID was requested
        "timeout": 0,      // timeout for long polling comet requests in seconds (0 disables comet)
        "buffer": 0        // HTTPd buffer configuration for serving readings, default -1
                            //   >0: number of seconds of readings to serve
                            //   <0: number of tuples to server per channel (e.g. -3 will serve 3 tuples)
    },

The output looks like this:

image

{ "version": "0.8.0", "generator": "vzlogger", "data": [ { "uuid": "6836dd20-00d5-11e0-bab1-856ed5f959ae", "last": 1674163666444, "interval": -1, "protocol": "sml", "tuples": [ [ 1674163654443, 14219936.660600001 ] ] }, { "uuid": "6836dd20-00d5-11e0-bab1-856ed5f959af", "last": 1674163666444, "interval": -1, "protocol": "sml", "tuples": [ [ 1674163654443, 15875850.842700001 ] ] }, { "uuid": "6836dd20-00d5-11e0-bab1-856ed5f959ad", "last": 1674163666444, "interval": -1, "protocol": "sml", "tuples": [ [ 1674163654443, 474.74000000000001 ] ] }, { "uuid": "6836dd20-00d5-11e0-bab1-856ed5f959be", "last": 1674163666271, "interval": -1, "protocol": "sml", "tuples": [ [ 1674163654270, 22365376.540800001 ] ] }, { "uuid": "6836dd20-00d5-11e0-bab1-856ed5f959bf", "last": 0, "interval": -1, "protocol": "sml" }, { "uuid": "6836dd20-00d5-11e0-bab1-856ed5f959bd", "last": 1674163666271, "interval": -1, "protocol": "sml", "tuples": [ [ 1674163654270, 2.2250738585072014e-308 ] ] } ] }

In this case I have 6 UUIDs with values. Values starting with 1674 are unix timestamps in milliseconds.

It would be awesome to also have this JSON output in pymeterreader, then I could replace the existing vzlogger, and additionally have data for Prometheus/Grafana (which I currently don't have, because vzlogger does not output data in OpenMetrics format ๐Ÿ˜„).

For vzlogger integration in EVCC it would be nice if the JSON is outputted when calling the URL "/", and the OpenMetrics data should be outputted when calling "/metrics", which is the de-facto standard for OpenMetrics, see:
https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md

This endpoint SHOULD be called "/metrics"

It would be really great to see the JSON output, then it's a true replacement for vzlogger! ๐Ÿ‘

Error while starting pymeterreader-wizard

Hello,

getting this error while starting the wizard.

$ sudo pymeterreader-wizard
Detecting meters...
ERROR:pymeterreader.device_lib.serial_reader:Uncaught Exception while tyring to detect SML Meter! Please report this to the developers.
Traceback (most recent call last):
  File "/usr/local/bin/pymeterreader-wizard", line 10, in <module>
    sys.exit(Wizard())
  File "/usr/local/lib/python3.7/dist-packages/pymeterreader/wizard/ncui.py", line 32, in __init__
    self.meters = detect()
  File "/usr/local/lib/python3.7/dist-packages/pymeterreader/wizard/detector.py", line 14, in detect
    devices.extend(SmlReader.detect())
  File "/usr/local/lib/python3.7/dist-packages/pymeterreader/device_lib/meter_sml.py", line 82, in detect
    return SmlReader("loop://")._detect_serial_devices(**kwargs)
  File "/usr/local/lib/python3.7/dist-packages/pymeterreader/device_lib/serial_reader.py", line 90, in _detect_serial_devices
    device = serial_reader_implementation._discover()
  File "/usr/local/lib/python3.7/dist-packages/pymeterreader/device_lib/meter_sml.py", line 88, in _discover
    sample = self.fetch()
  File "/usr/local/lib/python3.7/dist-packages/pymeterreader/device_lib/base.py", line 83, in fetch
    sample = self._fetch_untracked()
  File "/usr/local/lib/python3.7/dist-packages/pymeterreader/device_lib/meter_sml.py", line 50, in _fetch_untracked
    serial_port.read_until(expected=self.__START_SEQ)
TypeError: read_until() got an unexpected keyword argument 'expected'

Raspberry Pi 3 Model B Rev 1.2
Raspbian GNU/Linux 10 (buster)
Linux vzlogger 4.19.97-v7+ #1294 SMP Thu Jan 30 13:15:58 GMT 2020 armv7l GNU/Linux

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.