mqtt2.template: bugs, Fragen, Anregungen

Begonnen von Beta-User, 15 Dezember 2018, 11:44:43

Vorheriges Thema - Nächstes Thema

riker1

Hallo, hätte hier eine Frage.

ich versuche stateFormat für ein Gosundsp1 so anzupassen, das ich
LWT IPADDress
POWER
und die Energiedaten
angezeigt bekomme und auch schalten kann.

das folgende geht so leider nicht. da werden die Werte nicht aufgelöst.
LWT
<a href="http://IPAddress" target="_blank">IPAddress</a>
POWER
{sprintf("aktuell: %.1f W Tag: %.2f kWh Gestern: %.3f kWh Gesamt: %.4f kWh", ReadingsVal($name,"ENERGY_Power","-1"), ReadingsVal($name,"ENERGY_Today","-1"), ReadingsVal($name,"ENERGY_Yesterday","-1"), ReadingsVal($name,"ENERGY_Total","-1"))}


das geht und die Energie Werte werden angezeigt. -> bekomme da aber nicht LWT, IP und Power rein.

LWT
{sprintf("aktuell: %.1f W Tag: %.2f kWh Gestern: %.3f kWh Gesamt: %.4f kWh", ReadingsVal($name,"ENERGY_Power","-1"), ReadingsVal($name,"ENERGY_Today","-1"), ReadingsVal($name,"ENERGY_Yesterday","-1"), ReadingsVal($name,"ENERGY_Total","-1"))}



wenn ich stateFormat so definiere:

{sprintf("aktuell: %.1f W Tag: %.2f kWh Gestern: %.3f kWh Gesamt: %.4f kWh", ReadingsVal($name,"ENERGY_Power","-1"), ReadingsVal($name,"ENERGY_Today","-1"), ReadingsVal($name,"ENERGY_Yesterday","-1"), ReadingsVal($name,"ENERGY_Total","-1"))
LWT
<a href="http://IPAddress" target="_blank">IPAddress</a>
POWER}


kommt die Fehlermeldung:
syntax error at (eval 10829061) line 2, near ")
LWT"

wenn ich es dann so eingebe:


{sprintf("aktuell: %.1f W Tag: %.2f kWh Gestern: %.3f kWh Gesamt: %.4f kWh", ReadingsVal($name,"ENERGY_Power","-1"), ReadingsVal($name,"ENERGY_Today","-1"), ReadingsVal($name,"ENERGY_Yesterday","-1"), ReadingsVal($name,"ENERGY_Total","-1"))
LWT
POWER
<a href="http://IPAddress" target="_blank">IPAddress</a>}

Search pattern not terminated at (eval 10832050) line 4.


und diese Variante:
{sprintf("aktuell: %.1f W Tag: %.2f kWh Gestern: %.3f kWh Gesamt: %.4f kWh", ReadingsVal($name,"ENERGY_Power","-1"), ReadingsVal($name,"ENERGY_Today","-1"), ReadingsVal($name,"ENERGY_Yesterday","-1"), ReadingsVal($name,"ENERGY_Total","-1")),
LWT,
POWER
}

liefert

Bareword "LWT" not allowed while "strict subs" in use at (eval 10830429) line 1.
Bareword "POWER" not allowed while "strict subs" in use at (eval 10830429) line 1.


Danke für die Hilfe, bin leider kein PERL Kenner, ....

VG T
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

87insane

Also entweder du nutzt Perl oder aber so wie es vorgesehen ist. Du mischt aber.

Wenn du state Format in reinform nutzt, kannst du einfach den Namen des reading schreiben so wie bei lwt und es erscheint der Inhalt des readings.
Habe deinen Code nur überflogen aber auch hier macht es Sinn mal zu schauen, wie funktioniert stateformat eigentlich. Dazu auch den Zusammenhang mit devstateicon usw.

Gesendet von meinem LM-G810 mit Tapatalk


Beta-User

Bitte mißbraucht diesen Thread nicht für Basisfragen zu FHEM.

@riker1: Was du suchst ist ReadingsVal() & Co. Bitte dazu die commandref (Perl specials?) bemühen und notfalls dann einen separaten Thread im Anfängerbereich aufmachen.
Es gibt auch ein paar Perl-Beispiel in der attrTemplate-file, wie man das mit den href-Anker lösen kann. Das steht dann aber eher in devStateIcon, denke ich.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

riker1

Zitat von: Beta-User am 14 Mai 2020, 08:40:44
Bitte mißbraucht diesen Thread nicht für Basisfragen zu FHEM.

@riker1: Was du suchst ist ReadingsVal() & Co. Bitte dazu die commandref (Perl specials?) bemühen und notfalls dann einen separaten Thread im Anfängerbereich aufmachen.
Es gibt auch ein paar Perl-Beispiel in der attrTemplate-file, wie man das mit den href-Anker lösen kann. Das steht dann aber eher in devStateIcon, denke ich.

ok danke werde da mal suchen
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

Astrofreak85

Hi,

für den Shelly 3EM gibt es scheinbar noch keine templates?
Ich habs bisher zumindest gepackt die Wh und kWh umzurechnen, analog der anderen Shellys...
Was mir in der Anzeige fehlt sind:
Aktuelle Gesamtleistung
Gesamtverbrauch
ggf. ne Hochrechnung (sofern das realisierbar ist...?)

anbei mal die Readings.... die über MQTT kommen....ggf. hilft das jemanden ;)


Beta-User

Was mehr helfen würde, wäre ein (anonymisiertes) RAW - daraus kann man nämlich leichter attrTemplates basteln...
(Das ist übrigens nicht sooo schwer: hier wäre das 1er-pm als Basis eigentlich schon ganz gut und dann die addons für die Messkanäle dazupacken. Vielleicht magst du das mal versuchen? Was Trends angeht, bin ich aber wenig optimistisch, dass das so einfach zu lösen ist. Evtl. verlinkst du von hier aus zu deinem anderen Thread, dann können ggf. andere dabei helfen (ich habe keine Idee, event aggregator scheint auch nicht das richtige zu sein)).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Astrofreak85

defmod MQTT2_shellyem3_XXX MQTT2_DEVICE shellyem3_XXX
attr MQTT2_shellyem3_XXX IODev myBroker
attr MQTT2_shellyem3_XXX readingList shellyem3_XXX:shellies/shellyem3-XXX/online:.* online\
shellyem3_XXX:shellies/shellyem3-XXX/announce:.* { json2nameValue($EVENT, 'announce_', $JSONMAP) }\
shellyem3_XXX:shellies/shellyem3-XXX/relay/0:.* relay_0\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/0/power:.* emeter_0_power\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/0/pf:.* emeter_0_pf\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/0/current:.* emeter_0_current\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/0/voltage:.* emeter_0_voltage\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/1/power:.* emeter_1_power\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/1/pf:.* emeter_1_pf\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/1/current:.* emeter_1_current\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/1/voltage:.* emeter_1_voltage\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/2/power:.* emeter_2_power\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/2/pf:.* emeter_2_pf\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/2/current:.* emeter_2_current\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/2/voltage:.* emeter_2_voltage\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/0/energy:.* emeter_0_energy\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/0/returned_energy:.* emeter_0_returned_energy\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/0/total:.* emeter_0_total\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/0/total:.* {'emeter_0_kWh' => sprintf("%.2f",$EVENT/60/1000)}\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/0/total_returned:.* emeter_0_total_returned\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/1/energy:.* emeter_1_energy\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/1/returned_energy:.* emeter_1_returned_energy\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/1/total:.* emeter_1_total\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/1/total:.* {'emeter_1_kWh' => sprintf("%.2f",$EVENT/60/1000)}\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/1/total_returned:.* emeter_1_total_returned\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/2/energy:.* emeter_2_energy\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/2/returned_energy:.* emeter_2_returned_energy\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/2/total:.* emeter_2_total\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/2/total:.* {'emeter_2_kWh' => sprintf("%.2f",$EVENT/60/1000)}\
shellyem3_XXX:shellies/shellyem3-XXX/emeter/2/total_returned:.* emeter_2_total_returned
attr MQTT2_shellyem3_XXX room MQTT2_DEVICE

setstate MQTT2_shellyem3_XXX 2020-06-07 23:58:51 announce_fw_ver 20200601-123421/v1.7.0@d7961837
setstate MQTT2_shellyem3_XXX 2020-06-07 23:58:51 announce_id shellyem3-XXX
setstate MQTT2_shellyem3_XXX 2020-06-07 23:58:51 announce_ip 1.1.4.1
setstate MQTT2_shellyem3_XXX 2020-06-07 23:58:51 announce_mac XXX
setstate MQTT2_shellyem3_XXX 2020-06-07 23:58:51 announce_new_fw false
setstate MQTT2_shellyem3_XXX 2020-06-08 11:39:09 emeter_0_current 0.44
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_0_energy 54
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_0_kWh 0.06
setstate MQTT2_shellyem3_XXX 2020-06-08 11:39:09 emeter_0_pf 0.11
setstate MQTT2_shellyem3_XXX 2020-06-08 11:39:09 emeter_0_power 10.94
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_0_returned_energy 0
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_0_total 3535.3
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_0_total_returned 0.0
setstate MQTT2_shellyem3_XXX 2020-06-08 11:39:09 emeter_0_voltage 232.35
setstate MQTT2_shellyem3_XXX 2020-06-08 11:39:09 emeter_1_current 0.70
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_1_energy 372
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_1_kWh 0.08
setstate MQTT2_shellyem3_XXX 2020-06-08 11:39:09 emeter_1_pf 0.45
setstate MQTT2_shellyem3_XXX 2020-06-08 11:39:09 emeter_1_power 73.54
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_1_returned_energy 0
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_1_total 4618.8
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_1_total_returned 0.0
setstate MQTT2_shellyem3_XXX 2020-06-08 11:39:09 emeter_1_voltage 232.54
setstate MQTT2_shellyem3_XXX 2020-06-08 11:39:09 emeter_2_current 0.30
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_2_energy 294
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_2_kWh 0.45
setstate MQTT2_shellyem3_XXX 2020-06-08 11:39:09 emeter_2_pf 0.81
setstate MQTT2_shellyem3_XXX 2020-06-08 11:39:09 emeter_2_power 57.25
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_2_returned_energy 0
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_2_total 26923.1
setstate MQTT2_shellyem3_XXX 2020-06-08 11:35:01 emeter_2_total_returned 8190.0
setstate MQTT2_shellyem3_XXX 2020-06-08 11:39:09 emeter_2_voltage 234.34
setstate MQTT2_shellyem3_XXX 2020-06-07 23:58:51 online true
setstate MQTT2_shellyem3_XXX 2020-06-08 11:39:09 relay_0 off



Der andere Thread: https://forum.fhem.de/index.php/topic,111905.0.html

Beta-User

Den em habe ich jetzt in einer ersten Fassung mit aufgenommen.

Was da noch zu verbessern wäre ist das Thema stateFormat/devStateIcon. Auf Basis der hoffentlich jetzt vorhandenen userReadings sollte das eigentlich eine lösbare Aufgabe sein, das vollends zuzuarbeiten...



Ich habe (u.a. auch) den shelly-2.5 angepaßt (https://forum.fhem.de/index.php/topic,111785.0.html). Da wäre es nicht schlecht, wenn das jemand mal testen würde... (@87insane: das war nicht so trivial, wie du dir das vorgestellt hast, schau mal bitte in den changelog, dann wird das hoffentlich etwas klarer).

Bitte Antworten
- zu dem em möglichst in dem em-Thread und
- zum 2.5 in dem verlinkten Thread oder dem allg. Shelly-Thread (da gibt es ggf. mehr betroffene User).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Astrofreak85

Für den 3EM wurden durch das Template bei mir keine userReadings angelegt..hmm

87insane

Hey und guten Nachmittag,

ich wollte mir mal wünschen. In wie weit das zu implementieren ist, weiß ich nicht bzw. kann ich nicht abschätzen.

Ich würde gerne nach Template Auswahl die Möglichkeit haben, ein Gerät zurück zu setzen. Also quasi auf Zustand wie es ankam. Da die Templates an sich nur etwas hineinschreiben und das ja auch nur change ist, müsste dies doch möglich sein oder?

Ja - natürlich kann man zum testen eine Kopie anlegen usw. Aber gerade für Anfänger scheint mir das eine gute Lösung.

Gruß,
87Insane

rudolfkoenig

Das ist der Wunsch nach "undo", und damit das einigermassen sicher funktioniert, muss man vorher ein save, und nachher ein restore+restart durchfuehren.
Z.Zt. ist mit fhem.cfg nur ein "undo" am Tag moeglich, bei configdb weiss ich nicht.
Ein "Restore" Knopf koennten wir beim nachsten Umbau der Menu-Leiste ueberlegen, um den Vorgang fuer Kommandozeilen-Phobiker zu erleichtern.

87insane

Das ist sogar weiter gedacht! Gute Idee! Danke

Bei den Templates habe ich eher an eine kleine ausgelagerte Datei gedacht die mitläuft sobald attrtemplate..

Beta-User

Ob man den Luxus braucht? (Ich werde niemandem dazu in den Arm fallen, aber z.B. die Optionen, die mir als configDB-User zur Verfügung stünden, nutze ich auch fast nicht...).
Finde aber die Idee von 87insane durchaus charmant und würde mich auch freuen, wenn du (87insane) dazu Code bereitstellst bzw. (nach den ersten Versuchen!) einen neuen Thread anfängst. Würde sogar gleich zwei Varianten anbieten, die allerdings - anders als das einfache vorherige save+shutdown/restart ohne nochmaliges save - Schwierigkeiten mit mehrkanaligen Devices hätten. Alle diese  templates kämen nach general_use, (jedoch nicht als "versteckte").

1. Kopie im laufenden System halten, attrTemplate auf originales Device anwenden, "Rücksichern" durch delete+rename.
Syntax (1. Variante nur via Kommandozeile...):
set <device> attrTemplate makeCopy attrtemplate_name
set <device> attrTemplate recoverFromCopy


2. Kopie als RAW-list ins log-Verzeichnis
set <device> attrTemplate saveRawCopy
set <device> attrTemplate recoverFromRawCopy

Das würde (überschreibend) ein RAW-list ins log-Verzeichnis (Filesystem) packen, Namensgebung: DEVICE_YYYYMMDD.rawdef, und beim "recover" alle Attribute+Readings löschen und dann den RAW-Code drüberklatschen?

Ich denke, ggf. mit etwas Unterstützung von meiner Seite (oder es darf auch jemand anderes coachen) bekommst du, 87insane, das hin ;) . Falls du es nicht angehen willst und sich viele Befürworter finden, die sich ebenfalls nicht in der Lage dazu sehen, mache ich mich notfalls auch selbst dran...?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

moskito

Ich wollte gerade einen Shelly2.5 neu einrichten und musste feststellen, dass das Template in der aktuellen Version von FHEM nicht mehr passt.
Aus dem svn:

name:shelly25_split
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*shellies.*
desc:shelly2.5 using original firmware. <br>NOTE: a second device will be created for the second channel
order:A_11a1
par:DEVNAME;Shelly2 name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,shellies/([^/]*)/, ? $1 : undef }
par:CALLSPEECHRECOGN;Set this to 0 to not set any speech recogn. related attributes;{ 1 }
set DEVICE attrTemplate shelly1_w_energy_meassuring \CALLSPEECHRECOGN=0


In einer alten Version aus meinen Backups:

name:shelly25_split
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*shellies.*
desc:shelly2.5 using original firmware. <br>NOTE: a second device will be created for the second channel
order:A_11a1
par:DEVNAME;Shelly2 name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,shellies/([^/]*)/, ? $1 : undef }
set DEVICE attrTemplate shellyplug


Irgendwas ist da durcheinander...

Gruß
Danny
FHEM auf Intel NUC/Proxmox & Debian 12 + HM-CFG-USB + zigbee2mqtt + Zwave + Enocean

Beta-User

Anders ja, aber: was genau funktioniert nicht?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files