Hallo,
ich habe 2 Devices (ESP mit Tasmota) die mir Analogwerte per MQTT an FHEM übermitteln.
Zum einen dieses:
Internals:
FUUID 5da6ce0e-f33f-a358-478f-4c84583c70ac3148
IODev myBroker
NAME Sonoff_Pow_Messung
NR 269
STATE Leistung aktuell: 59.00 Watt <br> Ertrag Heute: 13.691 kWh <br> Ersparnis Heute: 3.63 EUR<br> Ertrag Gesamt: 1635.93 kWh <br> Ersparnis Gesamt: 433.68 EUR
STILLDONETIME 0
TYPE MQTT_DEVICE
READINGS:
2022-03-30 17:04:58 ENERGY_ApparentPower 61
2022-03-30 17:04:58 ENERGY_Current 0.256
2022-03-30 17:04:58 ENERGY_Factor 0.97
2022-03-30 17:04:58 ENERGY_Period 5
2022-03-30 17:04:58 ENERGY_Power 59
2022-03-30 17:04:58 ENERGY_ReactivePower 15
2022-03-30 17:04:58 ENERGY_Today 13.691
2022-03-30 17:04:58 ENERGY_Total 1635.927
2022-03-30 17:04:58 ENERGY_TotalStartTime 2019-01-11T17:25:38
2022-03-30 17:04:58 ENERGY_Voltage 239
2022-03-30 17:04:58 ENERGY_Yesterday 0.672
2022-03-30 17:04:58 Time 1970-01-01T00:40:32
2022-03-30 17:04:58 sensor {"Time":"1970-01-01T00:40:32","ENERGY":{"TotalStartTime":"2019-01-11T17:25:38","Total":1635.927,"Yesterday":0.672,"Today":13.691,"Period":5,"Power":59,"ApparentPower":61,"ReactivePower":15,"Factor":0.97,"Voltage":239,"Current":0.256}}
2022-03-30 16:24:32 state ON
2022-03-30 17:04:58 transmission-state incoming publish received
message_ids:
publishSets:
:
topic cmnd/Sonoff_Pow_Messung/POWER
values:
ON
OFF
sets:
OFF
ON
subscribe:
stat/Sonoff_Pow_Messung/STATUS
tele/Sonoff_Pow_Messung/SENSOR
stat/Sonoff_Pow_Messung/POWER
subscribeExpr:
^stat\/Sonoff_Pow_Messung\/STATUS$
^tele\/Sonoff_Pow_Messung\/SENSOR$
^stat\/Sonoff_Pow_Messung\/POWER$
subscribeQos:
stat/Sonoff_Pow_Messung/POWER 0
stat/Sonoff_Pow_Messung/STATUS 0
tele/Sonoff_Pow_Messung/SENSOR 0
subscribeReadings:
stat/Sonoff_Pow_Messung/POWER:
cmd
name state
stat/Sonoff_Pow_Messung/STATUS:
cmd
name Status
tele/Sonoff_Pow_Messung/SENSOR:
cmd
name sensor
Attributes:
IODev myBroker
devStateIcon ON:FS20.on:OFF OFF:FS20.off:ON
group 2_Solar
publishSet ON OFF cmnd/Sonoff_Pow_Messung/POWER
room Verbrauch
stateFormat {sprintf
("Leistung aktuell: %.2f Watt <br> Ertrag Heute: %.3f kWh <br> Ersparnis Heute: %.2f EUR<br> Ertrag Gesamt: %.2f kWh <br> Ersparnis Gesamt: %.2f EUR" ,
ReadingsVal("Sonoff_Pow_Messung","ENERGY_Power",0),
ReadingsVal("Sonoff_Pow_Messung","ENERGY_Today",0),
ReadingsVal("Sonoff_Pow_Messung","ENERGY_Today",0)*26.51/100,
ReadingsVal("Sonoff_Pow_Messung","ENERGY_Total",0),
ReadingsVal("Sonoff_Pow_Messung","ENERGY_Total",0)*26.51/100,
)
}
subscribeReading_Status stat/Sonoff_Pow_Messung/STATUS
subscribeReading_sensor tele/Sonoff_Pow_Messung/SENSOR
subscribeReading_state stat/Sonoff_Pow_Messung/POWER
userattr subscribeReading_state subscribeReading_status
Dort werden die übermittelten Analogwerte aus dem Reading sensor in einzelne Readings aufgetrennt: Energy_Power / Energy_Current usw.
Das funktioniert auch alles!
Nun wollte ich das gleiche mit dem weiteren Device machen.
Aber das klappt nicht.
Internals:
CFGFN
FUUID 62446ae9-f33f-a358-8e56-8f4087bfe9f9ecea
IODev myBroker
NAME Lesekopf
NR 456
STATE ???
TYPE MQTT_DEVICE
READINGS:
2022-03-30 17:07:31 Verbrauch {"Time":"2022-03-30T16:07:31","Zaehler":{"Meter_Number":"0a014150410100e4ea24","ELZ_PV_1.8.0":39.0,"ELZ_PV_2.8.0":4.0}}
2022-03-30 17:07:31 transmission-state incoming publish received
message_ids:
publishSets:
sets:
subscribe:
tele/Lesekopf/SENSOR
subscribeExpr:
^tele\/Lesekopf\/SENSOR$
subscribeQos:
tele/Lesekopf/SENSOR 0
subscribeReadings:
tele/Lesekopf/SENSOR:
cmd
name Verbrauch
Attributes:
IODev myBroker
room Verbrauch
subscribeReading_Verbrauch tele/Lesekopf/SENSOR
Die Werte kommen zwar im Reading Verbrauch an.
Aber ich würde diese 3 Werte wie Zählernummer, Bezug und Einspeisung gerne als einzelne seperate Readings darstellen.
Und genau an diesem Punkt komme ich nicht weiter und finde keine Lösung.
Verstehe auch nicht, warum es bei meinem anderen Device funktioniert. Kann mich auch nicht erinnern das es da Probleme gab.
Vielen Dank für eure Hilfe.
Grüße
Zitat von: Knallfrosch am 30 März 2022, 17:13:06
Verstehe auch nicht, warum es bei meinem anderen Device funktioniert. Kann mich auch nicht erinnern das es da Probleme gab.
Da du MQTT_DEVICE im Einsatz hast (und nicht MQTT2_DEVICE, in dem das Auspacken von JSON-Payloads automatisch geht), müßte es irgendwo ein expandJSON geben, das diesen Teil
im (für den) anderen Teil übernimmt.
list TYPE=expandJSON
sollte alles vielleicht Passende anzeigen.
Hallo
Zitat
NAME Sonoff_Pow_Messung
subscribeReading_sensor tele/Sonoff_Pow_Messung/SENSOR
Zitat
NAME Lesekopf
subscribeReading_Verbrauch tele/Lesekopf/SENSOR
Mach es so wie Beta-User geschrieben hat. Suche nach expandJSON und passe es an, so dass es auch auf das zweite Device reagiert. Oder, benenne das zweite so um, dass expandJSON auch darauf reagiert. Find ich günstiger.
Hallo,
evtl. könnte mit diese Hilfe schon ausreichen.
list TYPE=expandJSON
ergibt:
Internals:
DEF Sonoff_Pow_Messung.*:.*:.{.*}
FUUID 5da6ce0e-f33f-a358-8bff-e32a53a7442f1eb2
NAME ej3
NOTIFYDEV Sonoff_Pow_Messung.*
NR 270
NTFY_ORDER 50-ej3
STATE 2022-03-30 19:05:28
TYPE expandJSON
s_regexp Sonoff_Pow_Messung.*:.*:.{.*}
t_regexp .*
version 1.13
READINGS:
2022-03-30 16:33:07 state active
helper:
Attributes:
room Verbrauch
Glaube daraus kann ich mir was bauen, dass es dann auch auf das neue Device passt.
Werde ich mir mal morgen in Ruhe anschauen und mich nochmal melden.....entweder mit einer Erfolgsmeldung oder mit neuen Fragen.
Danke euch.
Grüße
Quick and dirty.
Aus Sonoff_Pow_Messung.* wird (Lesekopf|Sonoff_Pow_Messung.*)
Besser ist es aber über eine vernünftige Namenskonvention für die Geräte nachzudenken. Das vereinfacht die Definition.
Zitat von: DetlefR am 30 März 2022, 19:33:01
Quick and dirty.
Aus Sonoff_Pow_Messung.* wird (Lesekopf|Sonoff_Pow_Messung.*)
...das kann aber dazu führen, dass kein NOTIFYDEF ermittelt werden kann... (ungeprüft)
Außerdem ist da eine "unsecaped left brace"... => Perl-upgrade auf 5.32 => crash...?
Sauber und nachhaltig: Umstellung auf MQTT2_DEVICE ;) .
Hallo,
gut das ich hier nochmal reingeschaut habe, bevor ich mit dem basteln angefangen habe.
Also (auch wenn ich nicht so ganz verstehe warum) werde ich zumindest mal das neue Device (den Leskopf am Stromzähler) also MQTT2 definieren.
Das habe ich nun auch soweit gemacht.
Aber ich schaffe es nicht, die Daten mit dem neuen Device zu verbinden:
Viel ist es noch nicht:
Internals:
CFGFN
DEVICETOPIC Zaehler_Lesekopf
FUUID 6245bc75-f33f-a358-ac49-37eb31fb3ed9625c
NAME Zaehler_Lesekopf
NR 613
STATE ???
TYPE MQTT2_DEVICE
Attributes:
room Verbrauch
In dem ursprunglichen MQTT-Device war das ja so gelöst:
subscribeReading_Verbrauch tele/Lesekopf/SENSOR
Dieses Attribut gibt es ja bei MQTT2 nicht mehr.
Beim vermeintlich benötigten Attribut "ReadingsList" um die Werte darstellen zu können komme ich nicht weiter.
Kann mir da bitte jemand weiterhelfen?
Vielen Dank.
Grüße
Vermutlich solltest du "autocreate" am MQTT2_CLIENT (den du vermutlich im Einsatz hast?) anschalten oder einen MQTT2_SERVER auf einem anderen Port definieren und dir das da mal anschauen, was FHEM dann macht. Kann aber sein, dass dich die Fülle erschlägt. Wenn nein, kannst du ja mal das attrTemplate für das "Sammeldevice" (MQTT2_DEVICE) austesten, dann kann es sein, dass relativ viel automatisch so erstellt wird, wie du das brauchst.
Prinzipiell bist du mit readingList auf der richtigen Spur.
Jeder Antwort folgen nochmal 5 neue Fragen. :-)
Aber machen mich auch auf Fehler aufmerksam.
MQTT2 habe ich natürlich noch nicht angelegt. Daran scheitert natürlich auch die "Verbindung" und Übermittlung der Daten. Soweit so klar.
Bisher läuft bei mir alles mit MQTT über den myBroker:
Internals:
DEF 127.0.0.1:1883
DeviceName 127.0.0.1:1883
FD 95
FUUID 5da6ce0e-f33f-a358-0817-d1a1748495b1b84a
NAME myBroker
NOTIFYDEV global
NR 236
NTFY_ORDER 50-myBroker
PARTIAL
STATE opened
TYPE MQTT
buf
msgid 10
ping_received 1
timeout 60
READINGS:
2022-03-31 21:34:14 connection active
2022-03-30 16:33:09 state opened
messages:
Attributes:
room Interface
Kann ich nun einfach einen myBroker2 mit MQTT2 (z.B. Port 188) anlegen und parallel betreiben oder laufe ich Gefahr mir irgendwas durcheinander zu bringen?
Danke
Grüße
Es gibt zur Frage "wie teste ich die MQTT2-Module" bereits einige Threads, die auch über die MQTT-Artikel im Wiki verlinkt sein sollten.
Kurzform:
"MQTT2" kannst du sowohl über einen externen Broker (mit MQTT2_CLIENT) oder über MQTT2_SERVER als IO-Modul haben.
Würde empfehlen, das mit MQTT2_SERVER zu versuchen, aber mit einem Port im "üblichen" Bereich, also z.B. 1884. Dahin muss dann aber auch alles senden, was du testen willst. Hier also die Einstellung auf dem ESP ändern, der im Topic "Sonoff_Pow_Messung" hat.