[vz-users] Anleitung: VZLogger als MQTT-Subscriber

Bernd Kisters bernd.kisters at schmithof.de
So Dez 17 00:25:38 CET 2023


Geschafft :-) Vielen Dank in die Runde.
Anbei meine funktionierende MQTT Konfig. Wichtig waren hier die 
Identiefier- und Format-Zeile, da nur ein Wert geliefert wird.
{
              "enabled": true,
              "allowskip": true,
              "interval": 30,
              "aggtime": -1,
              "aggfixedinterval": false,
              "protocol": "exec",
              "command": "mosquitto_sub -h 192.168.5.69 -p 32777 -C 1 -t 
evcc/warp2/meter/values  | jq -r '.power'",
              //"command": "/home/pi/mosquitto_sub.sh",
              "format": "",
              "channel":
              {
                  "api": "volkszaehler",
                  "uuid": "799c25f0-9b2f-11ee-9e4b-15d68bad4b80",
                  "middleware" : "http://localhost/middleware.php",
                  "identifier": "",
                  "aggmode": "none",
              }
}

On 17.12.2023 00:17, Maik Weidemann wrote:
> Ja klar... :-)
>
> Du bekommst über die exec-Abfrage keinen Identifier mitgeliefert. 
> Daher musst du den Identifier auf dem Channel löschen: "identifier": "",
>
> Viele Grüße
> Maik
>
>
>
> Am 17.12.23 um 00:12 schrieb Bernd Kisters:
>> komplette vzlogger.conf:
>>
>> {
>>     // General settings
>>     "verbosity": 15,         // log verbosity (0=log_alert, 
>> 1=log_error, 3=log_warning, 5=log_info, 10=log_debug, 15=log_finest)
>>     "log": "/var/log/vzlogger/vzlogger.log", // log file, optional
>>     "retry": 30,            // http retry delay in seconds
>>
>>     // Build-in HTTP server
>>     "local": {
>>         "enabled": false,   // enable local HTTPd for serving live 
>> readings
>>         "port": 8080,       // TCP port for local HTTPd
>>         "index": true,      // provide index listing of available 
>> channels if no UUID was requested
>>         "timeout": 30,      // timeout for long polling comet 
>> requests in seconds (0 disables comet)
>>         "buffer": -1        // 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)
>>     },
>>
>>         "meters" : [{                            /* Strom 
>> Ferraris-Meter */
>>              "enabled" : true,
>>              "protocol" : "s0",
>>              "device" : "/dev/ttyUSB0",
>>              "aggtime" : -1,
>>              "aggfixedinterval" : false,
>>              "channel" : {
>>                            "uuid": 
>> "5a50f240-6861-11e6-93a2-ebf973f48426",
>>                            "middleware" : 
>> "http://localhost/middleware.php",
>>                            "identifier": "Impulse",
>>                            "aggmode" : "none"
>>                          }
>>            },{                            /* Gas Meter */
>>              "enabled" : true,
>>              "protocol" : "s0",
>>              "device" : "/dev/ttyUSB1",
>>              "aggtime" : -1,
>>              "aggfixedinterval" : false,
>>              "channel" : {
>>                            "uuid": 
>> "9e966320-888b-11e6-b2b7-fb7e92405315",
>>                            "middleware" : 
>> "http://localhost/middleware.php",
>>                            "identifier": "Impulse",
>>                            "aggmode" : "none"
>>                          }
>>            },
>>         {
>>              "enabled": true,
>>              "allowskip": true,
>>              "interval": 30,
>>              "aggtime": -1,
>>              "aggfixedinterval": false,
>>              "channel": [
>>                {
>>                  "api": "volkszaehler",
>>                  "uuid": "799c25f0-9b2f-11ee-9e4b-15d68bad4b80",
>>                  "middleware" : "http://localhost/middleware.php",
>>                  "identifier": "Power",
>>                  "aggmode": "none",
>> //                 "duplicates": 0
>>                }
>>               ],
>>               "protocol": "exec",
>>               "command": "mosquitto_sub -h 192.168.5.69 -p 32777 -C 1 
>> -t evcc/warp2/meter/values  | jq -r '.power'",
>>               //"command": "/home/pi/mosquitto_sub.sh",
>>               "format": ""
>>          }
>>       ]
>> }
>>
>>
>> On 17.12.2023 00:09, Maik Weidemann wrote:
>>> Hallo Bernd,
>>>
>>> schreibe doch nochmal deine aktuelle Konfiguration.
>>> Normalerweise sollte noch ein [chXX] nach dem [mtr2] Eintrag kommen. 
>>> Loglevel 15 hast du sicher schon aktive.
>>>
>>> Grüße
>>> Maik
>>>
>>>
>>> Am 16.12.23 um 23:49 schrieb Bernd Kisters:
>>>> Einträge im Log sehen inzwischen gut aus. Werte werden aber nicht 
>>>> der middleware übergeben. Wie kann ich feststellen warum das nicht 
>>>> passiert?
>>>>
>>>> [Dec 16 23:37:56][exec] MeterExec::read: Calling 'mosquitto_sub -h 
>>>> 192.168.5.69 -p 32777 -C 1 -t evcc/warp2/meter/values  | jq -r 
>>>> '.power''
>>>> [Dec 16 23:37:56][exec] MeterExec::read: Closing process 
>>>> 'mosquitto_sub -h 192.168.5.69 -p 32777 -C 1 -t 
>>>> evcc/warp2/meter/values  | jq -r '.power''
>>>> [Dec 16 23:37:56][mtr2] Got 1 new readings from meter:
>>>> [Dec 16 23:37:56][mtr2] Reading: id=/StringIdentifier: value=2.34 
>>>> ts=1702766276817
>>>> [Dec 16 23:37:56][mtr2] waiting 30 seconds before next reading
>>>>
>>>>
>>>> On 16.12.2023 22:29, Tobias Baumann wrote:
>>>>> Hallo Bernd
>>>>>
>>>>>
>>>>> es fehlt der identifier , dein sh produziert string: null
>>>>>
>>>>> gleichzeitig timestamp -1 geht auch nicht , hinweis diesen kann 
>>>>> man auch weglassen dann nimt vzlogger die von sich selber
>>>>>
>>>>>
>>>>> Am 16.12.2023 um 20:14 schrieb Maik Weidemann:
>>>>>> Hallo Bernd,
>>>>>>
>>>>>>> [Dec 16 19:14:47][mtr2] Got 1 new readings from meter: 
>>>>>> Hier hat er doch einen Wert gelesen, dass ist schon ein 
>>>>>> Fortschritt gegenüber deinen Ursprungspost. Der hatte er Null new 
>>>>>> readings.
>>>>>>
>>>>>> Hast du noch ein Format in deiner Konfig jetzt drin? mach dort 
>>>>>> doch jetzt nur einen leeren String "". Du lieferst ja nur eine Zahl.
>>>>>>
>>>>>> Viele Grüße
>>>>>> Maik
>>>>>>
>>>>>> Am 16.12.23 um 19:17 schrieb Bernd Kisters:
>>>>>>> Über script erhalte ich ähnliche Ergebnisse im Log.
>>>>>>>
>>>>>>> [Dec 16 19:14:47][exec] MeterExec::read: Calling 
>>>>>>> '/home/pi/mosquitto_sub.sh'
>>>>>>> [Dec 16 19:14:47][exec] MeterExec::read: Reading line: '2.46'
>>>>>>> [Dec 16 19:14:47][exec] MeterExec::read: string: <null>, value: 
>>>>>>> 2.460000, timestamp: -1.000000
>>>>>>> [Dec 16 19:14:47][exec] MeterExec::read: Closing process 
>>>>>>> '/home/pi/mosquitto_sub.sh'
>>>>>>> [Dec 16 19:14:47][mtr2] Got 1 new readings from meter:
>>>>>>> [Dec 16 19:14:47][mtr2] Reading: id=<null>/StringIdentifier: 
>>>>>>> value=2.46 ts=1702750487103
>>>>>>> [Dec 16 19:14:47][mtr2] waiting 30 seconds before next reading
>>>>>>>
>>>>>>> Wer ist jetzt über Script auf 2 Stellen gerundet. Hat aber 
>>>>>>> keinen Effekt.
>>>>>>> Ich habe keine Ahnung was es noch bedarf, dass die Werte auch in 
>>>>>>> die DB geschrieben werden.
>>>>>>>
>>>>>>> On 16.12.2023 18:28, Stefan Bauer wrote:
>>>>>>>> Evtl liegt es auch an dem Hochkomma in dem Kommando…
>>>>>>>> Ich würde das mqtt Kommando in ein Script speichern und dann im 
>>>>>>>> vzlogger nur das Script aufrufen. Wenn es mehrfach benötigt 
>>>>>>>> wird, dann IP-Adresse und Abrufwert als Parameter übergeben…
>>>>>>>>
>>>>>>>> Von meinem iPad gesendet
>>>>>>>>
>>>>>>>>> Am 16.12.2023 um 14:24 schrieb Rupert Schöttler 
>>>>>>>>> <rupert.schoettler at gmx.de>:
>>>>>>>>>
>>>>>>>>> Hi Bernd,
>>>>>>>>>
>>>>>>>>>> Am 16.12.23 um 13:24 schrieb Bernd Kisters:
>>>>>>>>>> die Antwort nach dem Aufruf
>>>>>>>>>>      mosquitto_sub -h 192.168.5.69 -p 32777 -C 1 -t
>>>>>>>>>> evcc/warp2/meter/values  | jq -r '.power'
>>>>>>>>>> erfolgt unmittelbar. Die Ausgabe ist dann der z.B. Wert 
>>>>>>>>>> 2.4136343
>>>>>>>>>>
>>>>>>>>>> Wie kann ich mit dem "Format = $v" die Nachkommestellen auf 2
>>>>>>>>>> reduzieren?`
>>>>>>>>>
>>>>>>>>> Ich glaube zwar nicht, dass die Nachkommastellen das Problem 
>>>>>>>>> sind, aber
>>>>>>>>> mir fallen spontan diese beiden Möglichkeiten ein:
>>>>>>>>>
>>>>>>>>> 1. Die Quelle liefert sie gleich "richtig" an den MQTT-Kanal.
>>>>>>>>>
>>>>>>>>> 2. Du machst einen weiteren Pipe-Befehl | nach bc oder einem 
>>>>>>>>> ähnlichen
>>>>>>>>> Programm, das runden kann. Suchmaschinen oder ChatGPT helfen 
>>>>>>>>> Dir für die
>>>>>>>>> genaue Syntax.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Vielleicht magst Du aber erst mal testen, ob ein exec-Befehl wie
>>>>>>>>>
>>>>>>>>> echo 2.41
>>>>>>>>>
>>>>>>>>> erfolgreich eingelesen wird. Vielleicht liegt's ja auch am 
>>>>>>>>> Dezimal-Punkt
>>>>>>>>> statt Komma oder was ganz anderem.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Viel Erfolg wünscht
>>>>>>>>>
>>>>>>>>> Rupert
>>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>



Mehr Informationen über die Mailingliste volkszaehler-users