Attribut 'jsonMap' zeigt merkwürdiges Verhalten

Begonnen von fhem_olsi, 23 Mai 2024, 18:18:42

Vorheriges Thema - Nächstes Thema

fhem_olsi

Hallo!
Das Attribut "jsonMap" stellt mich (wieder einmal) vor Rätsel:
Ich habe ein Device SML_Reader, das mit dieser readingList-Definition:
DL/SML_Reader/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }folgende Werte liefert:
LK13BE_Amperage_L1_curr        1.09    2024-05-23 17:09:08
LK13BE_Amperage_L2_curr        0.39    2024-05-23 17:09:08
LK13BE_Amperage_L3_curr        0.22    2024-05-23 17:09:08
LK13BE_HZ                    50.00    2024-05-23 17:09:08
LK13BE_Power_L1_curr        183        2024-05-23 17:09:08
LK13BE_Power_L2_curr        47        2024-05-23 17:09:08
LK13BE_Power_L3_curr        33        2024-05-23 17:09:08
LK13BE_Power_curr            282        2024-05-23 17:09:08
LK13BE_Power_total_in        5470.9    2024-05-23 17:09:08
LK13BE_Power_total_out        0.0        2024-05-23 17:09:08
LK13BE_Volt_L1_curr            236.4    2024-05-23 17:09:08
LK13BE_Volt_L2_curr            238.3    2024-05-23 17:09:08
LK13BE_Volt_L3_curr            236.0    2024-05-23 17:09:08
LK13BE_phase_angle_l2_l1    241.5    2024-05-23 17:09:08
LK13BE_phase_angle_l3_l1    119.5    2024-05-23 17:09:08
LK13BE_phase_angle_p1        337.8    2024-05-23 17:09:08
LK13BE_phase_angle_p2        309.3    2024-05-23 17:09:08
LK13BE_phase_angle_p3        335.4    2024-05-23 17:09:08
Time                        2024-05-23T17:09:08    2024-05-23 17:09:08
phase1                        201        2024-05-23 17:09:08
Das versuche ich einzuschränken mit dem Attribut für "jsonMap"
LK13BE_Power_L1_curr:pwr1 LK13BE_Power_L2_curr:pwr2 LK13BE_Power_L3_curr:pwr3Das klappt auch; es erscheinen jetzt nur folgende Readings:
pwr1 193 2024-05-23 18:23:08
pwr2 19 2024-05-23 18:23:08
pwr3 39 2024-05-23 18:23:08
Aber wenn ich folgende Definition des Attributes "jsonMap"
LK13BE_Power_L1_curr:pwr1 \
LK13BE_Power_L2_curr:pwr2 \
LK13BE_Power_L3_curr:pwr3
verwende, fehlt das Reading für L2; es wird nur folgendes ausgegeben:
pwr1    206    2024-05-23 18:27:08
pwr3    120    2024-05-23 18:27:08

Was passiert da, das ich nicht verstehe?

Gruß
Wolfgang


TomLee

ZitatAber wenn ich folgende Definition des Attributes "jsonMap"

LK13BE_Power_L1_curr:pwr1 \
LK13BE_Power_L2_curr:pwr2 \
LK13BE_Power_L3_curr:pwr3

Hallo,

die Hilfe sagt:
Zitatspace or newline separated list of oldReading:newReading pairs.

Beides kombinieren (Leerzeichen und newline), wie Du es machst, geht nicht. Kann ich bei mir nachvollziehen.

Gruß

Thomas



fhem_olsi

OK, danke Thomas.
Habe die "Spaces" entfernt und erhalte jetzt folgendes Bild:
pwr1_ 499 2024-05-23 19:09:08
pwr2_ 19 2024-05-23 19:09:08
pwr3 173 2024-05-23 19:09:08
Es erscheinen jetzt tatsächlich 3 Einträge.
Allerdings enthalten die beiden ersten am Ende noch ein UnderScore-Zeichen!???

Ganz schön zickig, das FHEM das!
Fehler-Toleranz gleich Null, was Spaces etc. anbelangt...

Gruß
Wolfgang

TomLee

ZitatGanz schön zickig, das FHEM das!

Du nimmst Änderungen an der fhem.cfg vor, nur so kann ich mir deine gezeigte Definition erklären und darum das zickige Verhalten. Über attr jsonMap  im Device hättest das gar nicht ohne weiteres im Attribut eingetragen bekommen.

ZitatAllerdings enthalten die beiden ersten am Ende noch ein UnderScore-Zeichen!???

Zeig halt jetzt mal ein komplettes List, mit dem besagten, vermuteten Hintergrund ist der Spielraum für Spekulationen sehr groß.

fhem_olsi

ZitatDu nimmst Änderungen an der fhem.cfg vor, nur so kann ich mir deine gezeigte Definition erklären und darum das zickige Verhalten. Über attr jsonMap  im Device hättest das gar nicht ohne weiteres im Attribut eingetragen bekommen.
Da irrst Du! Alle Änderungen bzw. Einträge habe ich innerhalb der Web-Oberfläche vorgenommen!!!


ZitatZeig halt jetzt mal ein komplettes List, mit dem besagten, vermuteten Hintergrund ist der Spielraum für Spekulationen sehr groß.

Ok, hier schau:
[code]define SML_Reader MQTT2_DEVICE
attr SML_Reader icon virtualbox-alt
attr SML_Reader jsonMap LK13BE_Power_L1_curr:pwr1\\
LK13BE_Power_L2_curr:pwr2\\
LK13BE_Power_L3_curr:pwr3
attr SML_Reader readingList DL/SML_Reader/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP,,'pwr') }
attr SML_Reader room EnergieRaum
attr SML_Reader stateFormat {\
"Energy: "\
.ReadingsVal($name,"LK13BE_Power_total_in",0)." kWh"\
.", Power: "\
.ReadingsVal($name,"LK13BE_Power_curr",0)." ("\
\
.ReadingsVal($name,"pwr1",0).", "\
.ReadingsVal($name,"pwr2",0).", "\
.ReadingsVal($name,"pwr3",0).") W"\
}
#   FUUID      65c4e698-f33f-c887-3ca9-a7c9eda7e499a557
#   IODev      mqt_w10
#   LASTInputDev mqt_w10
#   MSGCNT     13666
#   NAME       SML_Reader
#   NR         743
#   STATE      Energy: 0 kWh, Power: 0 (0, 0, 39) W
#   TYPE       MQTT2_DEVICE
#   eventCount 13666
#   mqt_w10_MSGCNT 13666
#   mqt_w10_TIME 2024-05-23 19:56:07
#   JSONMAP:
#     LK13BE_Power_L1_curr pwr1\
#     LK13BE_Power_L2_curr pwr2\
#     LK13BE_Power_L3_curr pwr3
#   OLDREADINGS:
#   READINGS:
#     2024-05-23 19:56:07   pwr1_           505
#     2024-05-23 19:56:07   pwr2_           102
#     2024-05-23 19:56:07   pwr3            39
#
setstate SML_Reader Energy: 0 kWh, Power: 0 (0, 0, 39) W
setstate SML_Reader 2024-05-23 19:56:07 pwr1_ 505
setstate SML_Reader 2024-05-23 19:56:07 pwr2_ 102
setstate SML_Reader 2024-05-23 19:56:07 pwr3 39

ZitatGanz schön zickig, das FHEM das!
Damit meinte ich, daß die Programmierer 'mal "ltrim", "rtrim" und "trim" hätten anwenden können...

Gruß
Wolfgang

TomLee

#5
attr SML_Reader jsonMap LK13BE_Power_L1_curr:pwr1\\
LK13BE_Power_L2_curr:pwr2\\
LK13BE_Power_L3_curr:pwr3

Wie hast das gemacht die zwei \ (newline) da hinzubekommen ? Über den "Raw-Editor" ?

fhem_olsi

ZitatWie hast das gemacht die zwei \ (newline) da hinzubekommen ? Über den "Raw-Editor" ?
Ok, alles klar; ich hatte von Hand im Editor des WebEnds die BackSlashes eingegeben. Jetzt habe ich sie mal weggemacht - und jetzt stimmt das Bild.

Das hake ich jetzt (für mich) unter dem Kapitel "zickig" ab; FHEm ist eben extrem gewöhnungsbedürftig hinsichtlich Leerzeichen, Kommata, Semikola, Slashes, und, und und.
Da könnte man dem unbedarften Benutzer etwas entgegengekommen: Trim (s.o.) einsetzen, "\\" -> "\" usw.
Ein hartes Brot ist da zu kauen...

Wolfgang