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)

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Antwort per Email an