Autor Thema: [98_JsonMod.pm] Bug? Multiples Ersetzen und Umrechnen von Werten  (Gelesen 218 mal)

Offline bstaeheli

  • New Member
  • *
  • Beiträge: 15
Das Umrechnen von von Werten direkt beim Parsen des JSONs ist richtig toll. Nur leider funktioniert das bei mir nur beim Auslesen unseres myPV AC Thor 9s' nur beim ersten Mal, alle nachfolgenden Definitionen im readingList werden ignoriert, resp. die Verarbeitung wird gestoppt.

In diesem Fall wird nur temp2 als reading dargestellt, von temp1 und currentIP fehlt jede Spur. Ist das vielleicht ein Bug? Kann das jemand nachstellen?

Device definition:
defmod UG.tk.XX.ACThorDataTest JsonMod http://nn.xx.zz.yy/data.jsn
attr UG.tk.XX.ACThorDataTest event-on-change-reading .*
attr UG.tk.XX.ACThorDataTest interval */2 * * * *
attr UG.tk.XX.ACThorDataTest readingList single((jsonPath('$.temp2') / 10), 'temp2', 'N/A');;\
single((jsonPath('$.temp1') / 10), 'temp1', 'N/A');;\
single(jsonPath('$.cur_ip'), 'currentIP', 'N/A');;
attr UG.tk.XX.ACThorDataTest room UG Technikkeller
attr UG.tk.XX.ACThorDataTest timestamp-on-change-reading .*
attr UG.tk.XX.ACThorDataTest update-on-start 1

setstate UG.tk.XX.ACThorDataTest 2872 W | 93.3 °C / 75.3 °C
setstate UG.tk.XX.ACThorDataTest 2021-07-20 14:07:52 .computedReadings temp2
setstate UG.tk.XX.ACThorDataTest 2021-07-20 14:07:52 temp2 86.5

das json sieht folgendermassen aus:
{
"device":"ACTHOR",
"acthor9s":2,
"fwversion":"a0020410",
...
"temp1":857,
"temp2":865,
"temp3":786,
"temp4":729,
..
"cur_ip":"nn.xx.yy.zz",
...
}

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5923
ja, kann ich nachstellen und sieht wie ein Bug aus.
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5923
Muss ich untersuchen, ist nichts offensichtliches, leider wohl auch nicht trivial. Mit * oder + funktionierts. Kannst Du Dir 'ne andere Heizung kaufen?
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5923
ja blöd. Gibt ein offenens ticket dazu, ist auch erst 14 Jahre alt: https://rt.cpan.org/Public/Bug/Display.html?id=30883

Für den Fall dass die neue Heizung keine Option ist. Kannste warten? Die fixen das bestimmt :(
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5923
fixed.

kosmetische Idee noch, falls Du das nicht ohnehin auf dem Zettel hast. Du kannst vor das jsonPath noch ein sprintf setzen damit die Nullstellen stimmen, falls es Ganzzahlen sind. Ist nur für optisch...

Ungetestet so:
single(sprintf('%.1f °C', jsonPath('$.temp1') / 10), 'temp1', 'N/A');
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline bstaeheli

  • New Member
  • *
  • Beiträge: 15
[98_JsonMod.pm] Bug? Multiples Ersetzen und Umrechnen von Werten
« Antwort #5 am: 22 Juli 2021, 17:00:46 »
@herrmannj, super, vielen Dank für die schnelle Rückmeldung!

Zum Glück kann ich eine 10er Division auch mit einer Multiplikation erreichen, ist günstiger als ne neue Heizung  ;D

single((jsonPath('$.temp2') * 0.1), 'temp2', 'N/A');
single((jsonPath('$.temp1') * 0.1), 'temp1', 'N/A');

funktioniert wie gewünscht.

Merci für den Hint mit der Formatierung, ist in meinem Fall nicht notwendig, ich möchte gerne die Daten im DBLogger speichern, da habe ich lieber "reine" Zahlen. Die schöne Formatierung mache ich im stateformat

Liebe Grüsse aus der Schweiz, Boris

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5923
Der bug mit Division ist aber beseitigt.

Grüße aus Hamburg in die Schweiz
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

 

decade-submarginal