<html><head></head><body><div style="font-family: Verdana;font-size: 12.0px;"><div>Hallo!</div>

<div> </div>

<div>zunächst herzlichen Dank für die zahlreichen Rückmeldungen. Ich habe mich für ein shell script & exec-Meter entschieden. Das scheint mir doch etwas eleganter als mein aktuelles Phyton-Skript. NodeRed ist eine Option für demnächst, wenn ich bzgl. Heim-Automatisierung weiter bin. Für die aktuelle Anwendung scheue ich die Einarbeitung.</div>

<div> </div>

<div>Es ist mir gelungen ein shell script zu erstellen, das aus der von CURL gelieferten JSON-payload des Shelly das gewünschte Datum im Format "$t : $i = $v" ausgibt.</div>

<div> </div>

<div>Nur leider mag vzlogger das nicht ausführen:</div>

<div> </div>

<div style="margin-left: 40px;"><em>[Feb 27 20:20:05][main] log level is 3<br/>
[Feb 27 20:20:05][exec] MeterExec::open: MeterExec protocol cannot be run with root privileges!<br/>
[Feb 27 20:20:05][exec]                  If you really want this, compile vzlogger with:<br/>
[Feb 27 20:20:05][exec]                  'cmake -D METEREXEC_ROOTACCESS=true .'<br/>
[Feb 27 20:20:05][mtr2] Cannot open meter<br/>
[Feb 27 20:20:05]       Skipping meter mtr2</em></div>

<div> </div>

<div>Die Meter-Konfiguration in vzlogger.conf:</div>

<div> </div>

<div><em>    {<br/>
      "enabled": true,<br/>
      "allowskip": true,<br/>
      "interval": 10,<br/>
      "protocol": "exec",<br/>
      "command": "/usr/local/bin/getShelly.sh 192.168.178.52 status power",<br/>
      "format": "$t: $i = $v",<br/>
      "channels": [<br/>
        {<br/>
          "api": "volkszaehler",<br/>
          "uuid": "603d9180-9588-11ec-a4c3-47171fde272b",<br/>
          "identifier": "power",<br/>
          "middleware": "http://localhost/middleware.php",<br/>
          "duplicates": 0<br/>
        }<br/>
      ],<br/>
    },</em></div>

<div> </div>

<div>Das aufgerufene shell scricpt hat den owner "root". Wie bekomme ich denn das Problem nun gelöst?</div>

<div> </div>

<div>Grüße</div>

<div> </div>

<div>Micha</div>

<div> </div>

<div> </div>

<div> </div>

<div> 
<div> 
<div name="quote" style="margin:10px 5px 5px 10px; padding: 10px 0 10px 10px; border-left:2px solid #C3D9E5; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<div style="margin:0 0 10px 0;"><b>Gesendet:</b> Freitag, 25. Februar 2022 um 13:07 Uhr<br/>
<b>Von:</b> spam@stefan-bauer.net<br/>
<b>An:</b> "volkszaehler.org - users" <volkszaehler-users@demo.volkszaehler.org><br/>
<b>Betreff:</b> Re: [vz-users] Leistungsdaten vom Shelly an VZ-DB senden</div>

<div name="quoted-content">
<div style="font-size: 10.0pt;">
<p>Hallo Micha.</p>

<p> </p>

<p>So sieht bei mir die Config im vzlogger aus, allerdings auch mit übernahme des timestamps aus dem Device:</p>

<p><em>    {</em><br/>
<em>    "enabled": true,</em><br/>
<em>    "allowskip": true,</em><br/>
<em>    "protocol": "exec",</em><br/>
<em>    "command": "/usr/local/bin/tasmota.sh 192.168.178.229 Total Voltage",</em><br/>
<em>    "format": "$t: $i = $v",</em><br/>
<em>    "interval": 10,</em><br/>
<em>    "channels":  [</em><br/>
<em>        {</em><br/>
<em>            "uuid": "07a68c90-4fb6-11ec-8f4d-57cd63a6d62b",</em><br/>
<em>            "identifier": "Total",</em><br/>
<em>            "duplicates": 300,</em><br/>
<em>            "middleware": "http://localhost/middleware.php"</em><br/>
<em>        },</em><br/>
<em>        {</em><br/>
<em>            "uuid": "42a55370-4fb6-11ec-be3f-c7e1228d05e9",</em><br/>
<em>            "identifier": "Voltage",</em><br/>
<em>            "duplicates": 300,</em><br/>
<em>            "middleware": "http://localhost/middleware.php"</em><br/>
<em>        }]</em><br/>
<em>    },</em></p>

<p> </p>

<p>Und hier das aufgerufene Skript:</p>

<p><em>#!/bin/bash</em><br/>
<em>set -u</em><br/>
<em>set -e</em><br/>
<br/>
<em>HOSTNAME="$1"</em><br/>
<em>shift</em><br/>
<em>READINGS_ARR=( "$@" )</em><br/>
<br/>
<em>timestamp=$(date +%s)</em><br/>
<br/>
<em>#Define the string value</em><br/>
<em>text=`curl --silent --connect-timeout 15 -m 60 -s http://$HOSTNAME/cm?cmnd=status%208`</em><br/>
<br/>
<em>for KEY in "${READINGS_ARR[@]}"; do</em><br/>
<em>   value=0</em><br/>
<em>   value=$(echo "$text" | jq .StatusSNS.ENERGY.$KEY)</em><br/>
<em>   if [ !  -z  $value  ];</em><br/>
<em>   then</em><br/>
<em>      printf "%d: %s = %s\\n" "$timestamp" "$KEY" "$value"</em><br/>
<em>   else</em><br/>
<em>      print "No Reading"</em><br/>
<em>      exit 1</em><br/>
<em>   fi</em><br/>
<em>done</em><br/>
<br/>
<em>exit 0</em></p>

<p> </p>

<p>Evtl. hilft es Dir weiter. Perfekt ist es bestimmt nicht, aber funktioniert bei mir gut ;-)</p>

<p> </p>

<p>Gruß</p>

<p>Stefan</p>

<p> </p>

<p>Am 25.02.2022 07:14, schrieb Michael Hartmann:</p>

<blockquote style="padding: 0 0.4em;border-left: rgb(16,16,255) 2.0px solid;margin: 0;">
<div style="font-family: Verdana;font-size: 12.0px;">
<div> </div>

<div>
<div>Hallo Stefan,</div>

<div> </div>

<div>danke für den Hinweis das vzlogger auch nur als MQTT Client agieren kann. Deine Vorgehensweise via exec aus vzlogger ist ja analog zu der von Matthias. Ich bin nicht sicher ob ich das hinbekomme. Was ich dazu gestern abend im Wiki gelesen habe erschien mir sehr kompliziert. Magst du mal ein Beispiel aus deiner vzlogger.conf senden?</div>

<div> </div>

<div>Den timestamp aus vzlogger und die Pufferfunktion bekommt man nur mittels Abfrage mittels exec. Dann speichert vzlogger das Datum mit timestamp der Abfrage zwischen - korekt?</div>

<div> </div>

<div>Da middleware und vzlogger bei mir auf dem selben Raspi laufen werden beide aber nur zeitgleich nicht erreichbar sein.</div>

<div> </div>

<div>Grüße</div>

<div> </div>

<div>Micha</div>

<div> 
<div style="margin: 10.0px 5.0px 5.0px 10.0px;padding: 10.0px 0 10.0px 10.0px;border-left: 2.0px solid rgb(195,217,229);">
<div style="margin: 0 0 10.0px 0;"><strong>Gesendet:</strong> Donnerstag, 24. Februar 2022 um 21:53 Uhr<br/>
<strong>Von:</strong> "Stefan Bauer" <spam@stefan-bauer.net><br/>
<strong>An:</strong> "volkszaehler.org - users" <volkszaehler-users@demo.volkszaehler.org><br/>
<strong>Betreff:</strong> Re: [vz-users] Leistungsdaten vom Shelly an VZ-DB senden</div>

<div>
<div>Nein, der vzlogger ist kein MQTT Client, sondern kann auch nur die Daten via MQTT versenden.
<div>Ich habe etliche Tasmota-Sensoren, von denen ich auch die „Zählerstände“ auslese. Ich mache das jedoch mittels exec-Kommando aus dem vzlogger raus. Ich persönlich halte es hierbei für besser, wenn der Timestamp vom vzlogger genutzt wird. Ist damit für alle Geräte gleich und sollte die middleware mal nicht erreichbar sein, werden die Daten mit korrektem Timestamp gepuffert…</div>

<div> </div>

<div>Stefan<br/>
 
<div>Von meinem iPad gesendet</div>

<div> 
<blockquote style="padding: 0 0.4em;border-left: rgb(16,16,255) 2.0px solid;margin: 0;">Am 24.02.2022 um 20:01 schrieb Michael Hartmann <hartmann-micha@web.de>:<br/>
 </blockquote>
</div>

<blockquote style="padding: 0 0.4em;border-left: rgb(16,16,255) 2.0px solid;margin: 0;">
<div>Hallo,<br/>
<br/>
das sieht interessant aus, aber auch kompliziert (der http-Request). Ich schau mir dein Beispiel an. Evtl. verstehe ich es und kann es auf meine Anwendung übertragen.<br/>
<br/>
NodeRed (MQTT ?) wäre auch ein Weg. Ich habe verstanden, das vzlogger als MQTT client Daten von einem entsprechenden Server abrufen kann. Bzgl. Haus-Automation bin ich aber noch ganz am Anfang. Daher macht das ggf. später Sinn.<br/>
<br/>
Grüße<br/>
<br/>
Micha<br/>
 
<div class="gmail_quote">Am 24. Februar 2022 18:56:24 MEZ schrieb "Matthias Schütze" <matthias.schuetze@web.de>:
<blockquote class="gmail_quote" style="margin: 0.0pt 0.0pt 0.0pt 0.8ex;border-left: 1.0px solid rgb(204,204,204);padding-left: 1.0ex;">
<pre class="k9mail">Hallo,

bei mir werden solcherart JSON Ausgaben über ein "exec-Meter" mit dem vzlogger
ausgelesen. Als Beispiel hier die Ausgabe meines Fronius-Wechselrichters. Auszug
aus der meters-Konfiguration in /etc/vzlogger.conf:

{
            "enabled": true,
            "allowskip": true,
            "protocol": "exec",
            "command": "curl -s 'http://fronius/solar_api/v1/GetPowerFlowRealtimeData.fcgi' | jq . | sed -n 's/[^A-Z0-9.:;_-]//gi;s/:/ = /;/SOC/p;/P_Akku/p;/P_PV/p;/P_Grid/p;/P_Load/p'",
            "format": "$i = $v",
            "interval": 30,
            "aggtime": -1,
            "channels":  [
                {
                    "api": "volkszaehler",
                    "uuid": "29a2c6a0-08bb-11eb-90ee-XXXXXXXXXXXX",
                    "identifier": "SOC",
                    "middleware": "http://localhost/volkszaehler.org/htdocs/middleware.php",
               }, {
                    "api": "volkszaehler",
                    "uuid": "6e2b7280-08e2-11eb-a17d-XXXXXXXXXXXX",
                    "identifier": "P_Akku",
                    "middleware": "http://localhost/volkszaehler.org/htdocs/middleware.php",
               }, {
                    "api": "volkszaehler",
                    "uuid": "cafffec0-08e2-11eb-98e9-XXXXXXXXXXXXX",
                    "identifier": "P_Grid",
                    "middleware": "http://localhost/volkszaehler.org/htdocs/middleware.php",
               }, {
                    "api": "volkszaehler",
                    "uuid": "fb2d5140-0d1d-11eb-9783-XXXXXXXXXXX",
                    "identifier": "P_Load",
                    "middleware": "http://localhost/volkszaehler.org/htdocs/middleware.php",
               }, {
                    "api": "volkszaehler",
                    "uuid": "dc944600-08e3-11eb-a00b-XXXXXXXXXXX",
                    "identifier": "P_PV",
                    "middleware": "http://localhost/volkszaehler.org/htdocs/middleware.php",
                }

           ]
        }

Die curl-Ausgabe liefert die JSON-Daten,
jq formatiert diese
und mit sed wird jongliert, um das Format "Identifier = Value" (also "$i = $v") für
die gewünschten Werte zu erhalten.
Es ist nicht zu erkennen, dass dies den Raspi irgendwie überfordern würde.

Gruß
Matthias




Am Donnerstag, 24. Februar 2022, 17:27:35 CET schrieb Michael Hartmann:
</pre>

<blockquote class="gmail_quote" style="margin: 0.0pt 0.0pt 1.0ex 0.8ex;border-left: 1.0px solid rgb(114,159,207);padding-left: 1.0ex;">Hallo,<br/>
<br/>
<br/>
<br/>
ich nutze einen Shelly 1PM um die von einem Lüftungsgerät (KWL) aufgenommene<br/>
Leistung zu messen. Dazu habe ich ein Phyton-Skript das mir via http-Request<br/>
die Leistungsdaten vom Shelly abholt, indem es die JSON payload auswertet.<br/>
<br/>
<br/>
<br/>
Das Skript führe ich jede Minute via Cronjob aus. Das ist bzgl. Auflösung<br/>
für die weitgehend konstante Leistungsaufnahme der KWL ausreichend. Wäre per<br/>
Cronjob ja auch nicht schneller machbar.<br/>
<br/>
<br/>
<br/>
Ist das minütliche Ausführen des Cronjobs bzgl. Performance für einen Raspi<br/>
3B+ ok?<br/>
<br/>
Neben den Leistungsdatum kann ich vom Shelly noch den UNIX-Timestamp dazu<br/>
bekommen. Macht es Sinn das Leistungsdatum inkl. Timestamp an die Middleware<br/>
zu senden. Aktuell lasse ich die Middleware den Timestamp dazu anlegen.<br/>
<br/>
<br/>
<br/>
Grüße<br/>
<br/>
<br/>
<br/>
Micha<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
 </blockquote>
<br/>
<br/>
<br/>
<br/>
 </blockquote>
</div>

<div>
<div class="k9mail-signature">--<br/>
Diese Nachricht wurde von meinem Android-Gerät mit K-9 Mail gesendet.</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>

<p> </p>
</div>
</div>
</div>
</div>
</div></div></body></html>