event-min-interval nach letztem fhem.pl Update Syntaxfehler

Begonnen von flo_fhem, 02 August 2022, 22:36:14

Vorheriges Thema - Nächstes Thema

flo_fhem

Hallo,

das letzte Update das ich eingespielt habe lässt den bisherigen mehrzeiligen Syntax bei event-min-intervall nicht mehr zu, da auf isNumeric geprüft wird.

Beispiel aus meiner bisherigen fhem.cfg:

attr heizung event-min-interval Aussentemperatur:300,\\
,Betriebsstunden_Heizkreis:3600,\\
,Betriebsstunden_Umschaltventil_Heizen_WW:3600,\\
,Betriebsstunden_Umwaelzpumpe:3600,\\
,Betriebsstunden_Verdichter_Stufe_1:3600,\\
,Betriebsstunden_Verdichter_Stufe_2:3600,\\
,Betriebsstunden_Verdichter_Stufe_3:3600,\\
,Betriebsstunden_Verdichter_Stufe_4:3600,\\
,Betriebsstunden_Verdichter_Stufe_5:3600,\\
,Einschaltungen_Verdichter:3600,\\
,Einstellung_Betriebsart:3600,\\
,Einstellung_Heizkennlinie_Neigung:3600,\\
,Einstellung_Heizkennlinie_Niveau:3600,\\
,Einstellung_Hysterese_Speicher_Heizung:3600,\\
,Einstellung_Hysterese_Speicher_Warmwasser:3600,\\
,Einstellung_Kuehlkennlinie_Neigung:3600,\\
,Einstellung_Kuehlkennlinie_Niveau:3600,\\
,Einstellung_Raumtemperatur:300,\\
,Einstellung_Temperatur_Warmwasser:300,\\
,Frequenz_Kompressor:300,\\
,Status_Einmal_Warmwasser:300,\\
,Status_Pumpe_Heizkreis:300,\\
,Status_Pumpe_Sekundaer:300,\\
,Status_Pumpe_WW_Zirkulation:300,\\
,Status_Umschaltventil_Heizen_WW:300,\\
,Temperatur_CCT:300,\\
,Temperatur_HST:300,\\
,Temperatur_ICT:300,\\
,Temperatur_OAT:300,\\
,Temperatur_OMT:300,\\
,Temperatur_Ruecklauf_Sekundaerkreis:300,\\
,Temperatur_Speicher_Warmwasser:300,\\
,Temperatur_Vorlauf_Kuehlkreis:300,\\
,Temperatur_Vorlauf_Regelung_Soll:300,\\
,Temperatur_Vorlauf_Sekundaerkreis:300,\\
,Power_Grundlast:300,\\
,status:3600,\\
,Power_Warmwasserbereitung:3600,\\
,Power_Heisswasserbereitung:3600,\\
,Power_Heizen:3600,\\
,Power_Kuehlen:3600,\\
,Power_Standby:3600


Für event-on-change-reading funktioniert diese Notation weiterhin.

Die Ursache ist denke ich hier versteckt:


diff /opt/fhem/restoreDir/update/2022-07-30/fhem.pl /opt/fhem/fhem.pl
22c22
< # $Id: fhem.pl 26115 2022-06-04 09:50:00Z rudolfkoenig $
---
> # $Id: fhem.pl 26248 2022-07-19 11:20:41Z rudolfkoenig $
280c280
< my $cvsid = '$Id: fhem.pl 26115 2022-06-04 09:50:00Z rudolfkoenig $';
---
> my $cvsid = '$Id: fhem.pl 26248 2022-07-19 11:20:41Z rudolfkoenig $';
410c410,411
<   "event-min-interval"         => { s=>",", c=>".attrminint", r=>":.*" },
---
>   "event-min-interval"         => { s=>",", c=>".attrminint", r=>":.*",
>                                     isNum=>1 },
1362,1363c1363
<           Log 1, "devspec2array $name: $@";
<           stacktrace();
---
>           warn "devspec2array $name: $@"; #128362
3157a3158,3162
>           if($ra{$attrName}{isNum}) {
>             my @va = split(":", $v);
>             return "attr $sdev $attrName $v: argument is not a number"
>                 if(!defined($va[1]) || !looks_like_number($va[1]));
>           }


Auf die Frage warum ich das mehrzeilig definiere - weil bei der Menge der Attribute die Anzeige extrem in die Breite gezogen wird und sehr unübersichtlich wird.

Falls es dafür eine andere Möglichkeit gibt die einzelnen Attribute beim event-min-intervall untereinander darzustellen wäre ich für einen Tipp sehr dankbar.

Viele Grüße
Flo

frank

warum hast du jeweils ein komma vor und nach dem "zeilenumbruch"?
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

flo_fhem

Hallo,

das weiß ich leider nicht mehr warum ich das so gemacht habe - sicherlich irgendwo im Forum abgekuckt. Das lief jetzt schon seit einigen Jahren so, und tut es auch noch bei anderen Attributen, wie zB event-on-change-reading.
Ich hatte beim Update das Log nicht genau genug beobachtet, da wurde beim starten das Attribut ja mit Syntaxfehler angemeckert - also selber schuld :-)
Mit dem nächsten Save ist es dann aus der Config gelöscht worden.

Wie dem auch sei, den Hack hatte ich damals mit Sicherheit nur gemacht weil mehrzeilige Eingaben in FHEMWEB vor ein paaar Jahren nicht möglich waren. Vorhin hab ich festgestellt das dies jetzt (und vermutlich schon länger?) problemlos geht.
Von daher kann ich meine Frage einer Lösung selbst beantworten - einfach mit NL mehrzeilig in fhemweb das Attribut belegen, und gut ist.
Den Rest der noch so ist stell ich dann auch noch um, ich gehe davon aus das mit irgendeinem der nächsten Updates die Syntaxprüfung von eventmin-intervall auf event-on-change-reading usw. Anwendung finden wird.

flo_fhem

Zu früh gefreut, die fhem gui nimmt zwar beim Attribut auch newlines und gibt keinen Fehler aus, jedoch funktioniert das nicht wie gewünscht, es wird dann weiterhin nur bei jedem event-on-change-reading ein Ereignis protokolliert - die Plots sehen entsprechend zerhackt aus.

Habs jetzt erstmal wieder einzeilig gemacht (das Device ist im Browser jetzt 5 Seiten breit), schau nach dem Urlaub nochmal - falls bis dahin jemand ne Idee hat sehr gerne.

Anbei nochmal als Screenshot, hoffe damit ist gut verständlich was mein Problem ist.


rabehd

Macht es nicht mehr Sinn hier mit Wildcard zu arbeiten?

Dieser extreme Einsatz von event-min-interval würde mich am Grundprinzip zweifeln lassen. Ich brauche das fast nie, auch nicht für Plots. Selbst wenn ein Sensor für Tage tot ist, wird die Linie durchgezogen.
Auch funktionierende Lösungen kann man hinterfragen.

Sany

@flo_fhem

das wäre zwar nicht ganz Dein Wunsch (Einträge untereinander), aber vielleicht hilft es beim editieren etc.
Du kannst im genutzen WEB Device das Attribut widgetOverride nutzen, um damit alle möglichen Eingabefelder anzupassen. Ich habe das bei mir z.B. so:
Zitatcomment:textField-long,90 widgetOverride:textField-long,90 readingList:textField-long,90 setList:textField-long,90 uiTable:textField-long,90 devStateIcon:textField-long,90 column:textField-long,90 event-on-change-reading:textField-long,90 event-min-interval:textField-long,90 ignoreRegexp:textField-long,90
Damit hast Du bei den eingetragenen Feldern nicht nur ein kleines einzeiliges Feld, sondern ein mehrzeiliges Textfeld. Wenn Du codemirror als Editor-unterstützung eingetragen hast mit dem Parameter für Zeilenumbrüche bekommst Du auch bei vielen Einträgen alles in einem Editor-Rahmen angezeigt. Mehrzeilig bei event-min-interval geht auch damit nicht! Alles ab der 2ten Zeile wird ignoriert. Habs gerade ausprobiert.
Die 90 bedeutet Breite des Editor-Rahmens ist 90% des Fensters, default ist 75.

Und zum wirklich ausführlichen Einsatz von event-min-interval deinerseits:
du musst Dir die Attribute event-on-change-reading, event-on-update-reading und event-min-interval als FILTER vorstellen. Ein irgendwie zusätzlicher Event wird NICHT erzeugt. Ich finde einen Helligkeitssensor immer gut zur Erklärung:
Zitatevent-on-change-reading lux
event-min-interval lux:900
und die Annahme, der Sensor sendet so ca alle 5 min einen lux-Wert (=ein Event von Seiten des Sensors), bedeutet:
ändert sich der Luxwert, wird innerhalb fhem ein Event erzeugt, als Trigger für Aktionen oder zum loggen.
Ändert sich der Wert nicht (z.B. wirklich eine längere zeit die gleiche Helligkeit oder eben nachts, weil dunkel (lux=0): der Sensor sendet zwar alle 5min seinen Wert, das Device läßt aber nur alle 900sec so einen Event durch an fhem.
Es hängt also stark davon ab, wie ein Sensor o.Ä. Daten an fhem liefert, ob man nun die attribute nutzt oder evtl. auch nicht.
event-on-update-reading nutze ich nur bei Sensoren, die z.B. bei einem Neustart eine Version übermitteln, um eben diesen Neustart zu erkennen, oder bei zigbee-Tastern, wenn man die vernünftig auswerten will, da die bei kurzem Druck immer den gleichen Wert liefern.
Einfachster Weg zu vernünftigen Einstellungen:
ohne die Attribute den Event-monitor mir Filter auf das Device laufen lassen, bis möglichst alles mal gesendet wurde. Dann auswerten, wie oft Daten kommen. Nur die Werte, die gelogged werden oder per notify/DOIF etc. ausgewertet werden, mit event-on-change-reading durchlassen, kann man bei sehr vielen Events auch noch mit einer threshold versehen, event-min-interval wenn längere Zeit gleiche readings zu erwarten sind, man aber trotdem "Lebenszeichen" erkennen möchte.




Gruß


Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....