Hallo Miteinander,
sitze schon seit Tagen und komme nicht weiter:
Tasmota SP111, Mosquitto läuft, ich kann mit FHEM 5.5 den Schalter KG_Licht bedienen und eine Änderung des Schaltzustandes am Tasmota per tcp wird auch in FHEM dargestellt.
define Mosquitto MQTT 127.0.0.1:1883
define KG_Licht MQTT_DEVICE
attr KG_Licht IODev Mosquitto
attr KG_Licht devStateIcon ON:switch_on_k:OFF OFF:switch_off_k:ON
attr KG_Licht publishSet ON OFF cmnd/S25/KG/SP111/Licht/POWER
attr KG_Licht room MQTT
attr KG_Licht stateFormat state
attr KG_Licht subscribeReading_Sensor tele/S25/KG/SP111/Licht/SENSOR
attr KG_Licht subscribeReading_state stat/S25/KG/SP111/Licht/POWER
define KG_Licht_power dummy
define KG_Licht_power_act notify KG_Licht {\
my $st= Value("KG_Licht:Sensor");;\
fhem ("set KG_Licht_power $st");;\
}
attr KG_Licht_power room MQTT
Jetzt versuche ich das KG_Licht:Sensor auszugeben, welches auch unter KG_Licht zu sehen ist:
Readings
Licht
ON
2019-12-11 19:09:27
Sensor
{"Time":"2019-12-12T09:54:21","ENERGY":{"TotalStartTime":"2019-12-10T19:20:05","Total":0.280,"Yesterday":0.252,"Today":0.026,"Period":5,"Power":59,"ApparentPower":62,"ReactivePower":19,"Factor":0.95,"Voltage":231,"Current":0.267}}
2019-12-12 09:54:22
Status
1
2019-12-11 16:34:56
state
ON
2019-12-12 09:35:02
transmission-state
incoming publish received
Aber das klappt so nicht, KG_Licht:Sensor liefert nicht die Daten aus dem Reading Sensor.
Gibt es denn eine Möglichkeit an den Sensor String zu kommen? Ich würde gerne den String aufbrechen mit split und die Power auslesen.
Meine Versuche mit Json haben alle nicht geklappt.
Bin für jeden Hinweis dankbar!
Für diese Aufgabenstellung könnte man expandJSON einsetzen ...
leg mal ein expandJSON Device an:
defmod ejSENSOR expandJSON KG_Licht:Sensor:.\{.*\}
wenn ich das device anlege bekomme ich:
Unknown command defmod, try help. Please define ejSENSOR first
wenn ich es mit define probiere
define ejSENSOR expandJSON KG_Licht:Sensor:.\{.*\}
kommt
Unknown module expandJSON Please define ejSENSOR first
wenn ich diesen Weg gehen wollte, müsste ich vermutlich das FHEM updaten. Aber funktioniert dann noch meine 99_Utils.pm? Da ist eine Telnet-Anbindung für existierende Sensoren dran.
Gibt es noch eine ander Möglichkeit? An sich läuft es ja unter FHEM 5.5, ich müsste nur irgendwie an diesen String rankommen.
Vielen Dank im Voraus!
Eigene Änderungen macht man deshalb in einer eigenen 99_myUtils, die wird bei einem Update nicht überschrieben.
Ansonsten wüsste ich nicht, warum das JSON Objekt nicht im Reading ,,Sensor" vorhanden wäre.
Gesendet von iPhone mit Tapatalk
Na ja, seit 5.5 hat sich einiges geändert. Kommt halt drauf an, wie das Coding in der myUtils ist...
Was spricht dagegen, dem Pi3 (lt. Signatur) eine SD-Karte mit aktuellem FHEM zu spendieren und es auszuprobieren?
Was JSON angeht, würde ich dann aber gleich empfehlen, mal einen Blick auf die MQTT2_.*-Module zu werfen. JSON auspacken ist damit (genauer: mit json2nameValue()) viel einfacher (auch was die Benennung der Readings und das Rausfiltern von Unnötigem angeht usw.).
danke, mit 5.9 schaut das reading nun so aus
Readings
ENERGY_ApparentPower
61
2019-12-12 15:16:59
ENERGY_Current
0.263
2019-12-12 15:16:59
ENERGY_Factor
0.96
2019-12-12 15:16:59
ENERGY_Period
5
2019-12-12 15:16:59
ENERGY_Power
58
2019-12-12 15:16:59
ENERGY_ReactivePower
18
2019-12-12 15:16:59
ENERGY_Today
0.021
2019-12-12 15:16:59
ENERGY_Total
0.274
2019-12-12 15:16:59
ENERGY_TotalStartTime
2019-12-10T19:20:05
2019-12-12 15:16:59
ENERGY_Voltage
232
2019-12-12 15:16:59
ENERGY_Yesterday
0.252
2019-12-12 15:16:59
Sensor
{"Time":"2019-12-12T15:16:58","ENERGY":{"TotalStartTime":"2019-12-10T19:20:05","Total":0.274,"Yesterday":0.252,"Today":0.021,"Period":5,"Power":58,"ApparentPower":61,"ReactivePower":18,"Factor":0.96,"Voltage":232,"Current":0.263}}
2019-12-12 15:16:59
Time
2019-12-12T15:16:58
2019-12-12 15:16:59
state
ON
2019-12-12 15:02:23
transmission-state
incoming publish received
2019-12-12 15:16:59
aber wie bekomme ich nun z.B. ENERGY_Voltage auf der Konsole angezeigt, bzw. eine dummy zugeordnet den ich dann ausgeben kann?
Besten Dank im Vorraus !!
Abfrage ist ReadingsVal(), zur Anzeige als eigenes Device in FHEMWEB: ReadingsProxy?
Gibt aber viele Möglichkeiten, z.B. wurde stateFormat+devStateIcon ziemlich aufgebohrt und kann auch Text/Symbole aus mehreren Readings anzeigen...
Vielleicht steigst du nach der Zeit einfach mal wieder in die Einsteigerliteratur ein? (Ich empfehle auch gerne den "Rahmen" der commandref: https://fhem.de/commandref_modular_DE.html (https://fhem.de/commandref_modular_DE.html)).
Als Einstieg in die Frontend-Gestaltung mit FHEMWEB evtl. https://wiki.fhem.de/wiki/DeviceOverview_anpassen? (https://wiki.fhem.de/wiki/DeviceOverview_anpassen?)
Vielleicht erklärst du etwas besser, nach was du eigentlich suchst bzw. was der Plan ist...
Ansonsten: Schön, dass das update scheinbar so reibungslos geklappt hat.
Aus der Hüfte geschossen attr ejSENSOR stateFormat ENERGY_Voltage
Oder meinst Du was ganz anderes?
Danke, der:
attr ejSENSOR stateFormat ENERGY_Voltage
gibt Fehlermeldung
ejSENSOR: unknown attribute stateFormat
Also ich will die ENERGY_Voltage auf im room MQTT als Zahlenwert darstellen.
Einen dummy kann ich im Room MQTT darstellen. Also war meine Überlegung, den Inhalt des ENERGY_Voltage in ein dummy zu schreiben.
Den funktionierenden Schalter zum Schalten der Tasmota Steckdose habe ich bereits, das ging mit Hilfe der FHEM-postings ganz gut. Aber die Ausgabe des Readings, da komme ich nicht weiter.
Besten Dank im Vorraus!
besten Dank für Eure Zeit und Unterstützung.
Nochmal: Entweder ReadingsProxy als separates Device (nicht Dummy) oder einfach stateFormat in der neuen Fassung verwenden (am MQTT_DEVICE). Damit bekommt man neben dem klickbaren on/off-Schalter auch noch den (formatierten) Zahlenwert dargestellt...
Weitere Alternative: readingsGroup.
Danke, ja, das mit dem stateFormat dirkt am device würde mir sehr gut gefallen.
momentan schaut das bei mir so aus:
attr KG_Licht stateFormat state
und die reeadings
Readings
ENERGY_ApparentPower
61
2019-12-12 16:31:59
ENERGY_Current
0.266
2019-12-12 16:31:59
ENERGY_Factor
0.94
2019-12-12 16:31:59
ENERGY_Period
5
2019-12-12 16:31:59
ENERGY_Power
57
2019-12-12 16:31:59
ENERGY_ReactivePower
21
2019-12-12 16:31:59
ENERGY_Today
0.094
2019-12-12 16:31:59
ENERGY_Total
0.347
2019-12-12 16:31:59
ENERGY_TotalStartTime
2019-12-10T19:20:05
2019-12-12 16:31:59
ENERGY_Voltage
231
2019-12-12 16:31:59
ENERGY_Yesterday
0.252
2019-12-12 16:31:59
Sensor
{"Time":"2019-12-12T16:32:00","ENERGY":{"TotalStartTime":"2019-12-10T19:20:05","Total":0.347,"Yesterday":0.252,"Today":0.094,"Period":5,"Power":57,"ApparentPower":61,"ReactivePower":21,"Factor":0.94,"Voltage":231,"Current":0.266}}
2019-12-12 16:31:59
Time
2019-12-12T16:32:00
2019-12-12 16:31:59
state
ON
2019-12-12 15:02:23
transmission-state
incoming publish received
2019-12-12 16:31:59
bitte, wie müsste ich das erweitern? Ich habe schon vorher damit einiges probiert, leider ohne Erfolg.
esten Dank im Voraus!
Versuch's mal mit einem Zeilenumbruch ;) :
attr KG_Licht stateFormat state\
ENERGY_Voltage V
(Für die Bearbeitung im Attribut via FHEMWEB bzw. zum RAW-Import! Bitte cfg-Editieren einstellen, falls du das aus früheren Zeiten noch gewohnt sein solltest...)
super Danke, das funktioniert prima.
Eine letzte Frage:
Ein Schaltwechsel der Steckdose wird über das state sofort erkannt, aber die ENERGY_Voltage kommt asynchron alle 5min, da würde ich gerne über ein notify die Steckdose abfragen nach den Sensorwerten:
define act_KG_Licht KG_Licht:state {\
my $pl= GetFileFromURL("http://192.168.1.177/cs?status8",1,,,0);;\
}
das ergibt aber die Fehlermeldung:
Unknown module KG_Licht:state
ist das irgendwie lösbar?
Danke im Voraus !
Mindestens zwei Fehler: da fehlt die Angabe, dass es ein notify sein soll, zum anderen ist "state" speziell (braucht ein Attribut) und zu guter Letzt gehe ich davon aus, dass du state nur indirekt setzt (via userReading), was vermutlich auch noch weitere Schwierigkeiten verursacht.
Und dann finde ich es noch suboptimal, dasselbe über mehrere Wege zu machen; bin nicht der Tasmota-Spezialist, aber vermutlich kann man via MQTT auch versuchen, das Teil zu einer Aktualisierung aufzufordern... (müßte als publish-Befehl über das IO gehen).
ABER: Ich komme nochmal zurück auf das bereits geschriebene: Da fehlen mMn. viele Grundlagen, und es macht wenig Sinn, das hier 1:1 zu besprechen; bitte vorab mal aktuelle Grundlagendoku wälzen...
Vielen Dank für die Hilfe.
Und an den fehlenden Grundlagen werde ich arbeiten :-))
Warum nutzt Du nicht einfach das command ,,teleperiod" auf dem Tasmota Device. Damit kannst Du einstellen, wie oft Du den Wert haben willst.
Gesendet von iPhone mit Tapatalk
stimmt, das habe ich inzwischen auch so gemacht und auf 10 gesetzt :-))
Super und Danke an Alle !!