[vz-users] Sensor für Gaszähler verliert Pulse

Rupert Schöttler rupert.schoettler at gmx.de
Sa Okt 8 13:42:29 CEST 2022


Hallo Tilman,

eine echte Erklärung kann ich Dir nicht liefern, aber vielleicht helfen
Dir ja folgende Anregungen.

- Wenn ich das Pythonscript richtig verstehe, produziert es je Aufruf
(alle 60 sec aus vzlogger heraus) 2 Zeilen, weil 2x "print".
Möglicherweise verwirrt das vzlogger.

- Aggmode und duplicates macht in diesem Setting m.E. keinen Sinn. Und
sind es nicht genau die sich wiederholenden 2 und 3 Impulse je Minute,
die verloren gehen??

- Du kannst, ggf. auch einfach zusätzlich (eine weitere UUID
einrichten), die Impulse von Python direkt in die Datenbank schreiben.
So mache ich das gerne: Ohne den vzlogger, einfach per cron irgendein
Script regelmäßig laufen lassen und den Eintrag per HTTP-Aufruf (wget
o.ä.) in die Middleware pushen. Der "Umweg" über vzlogger hat natürlich
den Vorteil der Pufferung, sollte die Middleware mal nicht laufen.

Grüße von Lech und Wertach

Rupert


Am 05.10.22 um 21:23 schrieb Tilman Glötzner:
> Hallo
>
> wie bereits vor kurzen geschrieben, verwende ich einen Kompaßsensor
> zum Detektieren des Magnetes im Gaszähler. Das Zählen der Impulse
> übernimmt ein C-Programm, das die gezählten Impulse über einen Socket
> zur Verfügung stellt. Das unten gezeigte Python-Script holt die
> gezählten Impulse ab und übergibt sie an den Volkszähler, der sie in
> die Datenbank schreibt. Dabei gehen Impulse verloren.
>
> Ich habe nun festgestellt, dass das Pythonscript regelmäßig läuft
> (siehe log in /var/log/syslog). Die Zählerstände landen aber nicht
> alle in der Datenbank.
>
> Woran kann das liegen bzw. wie kann ich das Debuggen?
>
>
> Danke und Gruß
>
> Tilman
>
>
> ================database  ==============
>
> MariaDB [volkszaehler]> select FROM_UNIXTIME(timestamp/1000),timestamp
> as UNIX,value from data where channel_id = 22 AND
> FROM_UNIXTIME(timestamp/1000) > '2022-10-05 19:45:00';
> +-------------------------------+---------------+-------+
> | FROM_UNIXTIME(timestamp/1000) | UNIX          | value |
> +-------------------------------+---------------+-------+
> | 2022-10-05 19:49:40.0000      | 1664992180000 |     0 |
> | 2022-10-05 19:50:41.0000      | 1664992241000 |     2 |
> | 2022-10-05 19:52:48.0000      | 1664992368000 |     3 |
> | 2022-10-05 19:57:54.0000      | 1664992674000 |     2 |
> | 2022-10-05 19:58:55.0000      | 1664992735000 |     1 |
> | 2022-10-05 20:00:58.0000      | 1664992858000 |     2 |
> | 2022-10-05 20:04:02.0000      | 1664993042000 |     1 |
> | 2022-10-05 20:05:03.0000      | 1664993103000 |     2 |
> | 2022-10-05 20:06:04.0000      | 1664993164000 |     1 |
> | 2022-10-05 20:07:05.0000      | 1664993225000 |     0 |
> | 2022-10-05 20:19:21.0000      | 1664993961000 |     0 |
> | 2022-10-05 20:31:45.0000      | 1664994705000 |     0 |
> | 2022-10-05 20:44:01.0000      | 1664995441000 |     0 |
> | 2022-10-05 20:56:15.0000      | 1664996175000 |     0 |
> +-------------------------------+---------------+-------+
>
> ================/var/log/syslog ==============
>
> ct  5 19:50:41 logger /countingmeter.py: 1664992241: Counter = 2;
> TotalCounter = 69
> Oct  5 19:51:43 logger /countingmeter.py: 1664992303: Counter = 2;
> TotalCounter = 71
> Oct  5 19:52:48 logger /countingmeter.py: 1664992368: Counter = 3;
> TotalCounter = 74
> Oct  5 19:53:49 logger /countingmeter.py: 1664992429: Counter = 3;
> TotalCounter = 77
> Oct  5 19:54:51 logger /countingmeter.py: 1664992491: Counter = 3;
> TotalCounter = 80
> Oct  5 19:55:52 logger /countingmeter.py: 1664992552: Counter = 3;
> TotalCounter = 83
> Oct  5 19:56:53 logger /countingmeter.py: 1664992613: Counter = 3;
> TotalCounter = 86
> Oct  5 19:57:54 logger /countingmeter.py: 1664992674: Counter = 2;
> TotalCounter = 88
> Oct  5 19:58:55 logger /countingmeter.py: 1664992735: Counter = 1;
> TotalCounter = 89
> Oct  5 19:59:57 logger /countingmeter.py: 1664992797: Counter = 1;
> TotalCounter = 90
> Oct  5 20:00:01 logger CRON[30553]: (root) CMD (flock -n
> /tmp/flock-vz_aggregate.lock php
> /var/www/volkszaehler.org/bin/aggregate run
>  -m delta -l minute >/dev/null)
> Oct  5 20:00:58 logger /countingmeter.py: 1664992858: Counter = 2;
> TotalCounter = 92
> Oct  5 20:01:01 logger CRON[30939]: (root) CMD (php
> /var/www/volkszaehler.org/bin/aggregate run -m delta -l hour >/dev/null)
> Oct  5 20:01:59 logger /countingmeter.py: 1664992919: Counter = 2;
> TotalCounter = 94
> Oct  5 20:03:01 logger /countingmeter.py: 1664992981: Counter = 2;
> TotalCounter = 96
> Oct  5 20:04:02 logger /countingmeter.py: 1664993042: Counter = 1;
> TotalCounter = 97
> Oct  5 20:05:03 logger /countingmeter.py: 1664993103: Counter = 2;
> TotalCounter = 99
> Oct  5 20:06:04 logger /countingmeter.py: 1664993164: Counter = 1;
> TotalCounter = 100
>
> ============= /etc/vzlogger.conf ===========
>
> .....
>
> {
>         // gas counter via i2c daemon and python script
>          "enabled": true,
>          "allowskip": true,
>          "protocol": "exec",
>          "command": "countingmeter.py",
>          "format": "$t: $i = $v",
>          "interval": 60,
>          "channels": [{
>              "uuid": "3e66af30-3efc-11ed-9625-9f6024cb27ed",
>              "identifier": "Counter",
>              "api": "volkszaehler",
>              "middleware": "http://localhost/middleware.php",
>              "aggmode": "sum",
>              "duplicates": 720
>           }]
>         }
>
> ============= python script ===========
>
> #!/usr/bin/python3
> import datetime
> import socket
> import json
> import syslog
>
> HOST = "127.0.0.1"  # The server's hostname or IP address
> PORT = 8888   # The port used by the server
>
> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>
> s.connect(("127.0.0.1", 8888))
> string = (s.recv(1024).decode('utf-8'))
> #print (string)
>
> data = json.loads(string)
> now = str(int( datetime.datetime.now().timestamp() ))
>
> print(now + ': Counter = ' + str(data["counter"]))
> print(now + ': TotalCounter = ' + str(data["total"]))
> if data["counter"] != 0:
>     message = now + ': Counter = ' + str(data["counter"]) + ';
> TotalCounter = ' + str(data["total"])
>     syslog.syslog(syslog.LOG_DEBUG, message)
>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : smime.p7s
Dateityp    : application/pkcs7-signature
Dateigröße  : 5996 bytes
Beschreibung: S/MIME Cryptographic Signature
URL         : <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20221008/d7c62564/attachment.bin>


Mehr Informationen über die Mailingliste volkszaehler-users