Einfache Angabe von Reading-Values in notify Commands

Begonnen von Markus Bloch, 18 Juni 2015, 23:01:02

Vorheriges Thema - Nächstes Thema

Loredo

Zitat von: rudolfkoenig am 08 April 2017, 15:22:50
Define erlaubt (noch) Doppelpunkt im Namen, das wuerde ich gerne abschaffen. Was sagt ihr dazu: per featurelevel oder rabiat/direkt?


Das dachte ich auch erst, aber eine Zeile darunter wird der Doppelpunkt gesondert als Warnung während des Starts behandelt, um nur keine neuen Devices mehr anlegen zu lassen.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

betateilchen

Zitat von: rudolfkoenig am 08 April 2017, 15:22:50
Define erlaubt (noch) Doppelpunkt im Namen, das wuerde ich gerne abschaffen. Was sagt ihr dazu: per featurelevel oder rabiat/direkt?

Bitte rabiat, aber mit vorheriger Ankündigung eines Stichtags mit entsprechender Vorlaufzeit (4 Wochen?). Es könnte Module geben, die darauf angepaßt werden müssen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Ellert

#77
Wenn es bei der Erweiterung von "set magic" auch um die Vereinheitlichung der Syntax geht und daum, Fragen entgegen zu wirken, die aus der unterschiedlichen Verhaltensweise der Set-Befehle (im notify oder DOIF) entstehen, dann möchte ich anmerken, dass im DOIF auch folgendes funktioniert:

[<Device>:<Reading>|<Internal>:d|"<Regex>":<Output>]

Beispiele aus der Commandref ( https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen ):


[mydevice:myreading:d]
entspricht:
[mydevice:myreading:"(-?\d+(\.\d+)?)"]
entspricht:
[mydevice:myreading:"(-?\d+(\.\d+)?)":$1]
entspricht:
[mydevice:myreading:"(-?\d+(\.\d+)?)":"$1"]
entspricht:
[mydevice:myreading:"(-?\d+(\.\d+)?)":sprintf("%s":$1)]

[mydevice:myreading:"(\d\d):(\d\d):(\d\d)":"hours: $1, minutes $2, seconds: $3"]


im "Output" ist Perl-Code erlaubt, also z.B.

[mydevice:myreading:"(-?\d+(\.\d+)?)":$1 ? $1 : 0]

Es wäre sicherlich benutzerfreundlich, wenn das in jedem set, setreading, ... funktionieren würde.

Edit:
Das [mydevice:myreading:"(-?\d+(\.\d+)?)":$1 ? $1 : 0] funktioniert bei $1 gleich undef nicht.

rudolfkoenig

ZitatDas dachte ich auch erst, aber eine Zeile darunter wird der Doppelpunkt gesondert als Warnung während des Starts behandelt, um nur keine neuen Devices mehr anlegen zu lassen.
Danke fuer den Hinweis, habs uebersehen. Diese Meldung gibt es inzwischen seit 15 Monaten, das reicht -> Habe : fuer define entfernt.

@Ellert: ich verstehe nicht, was "<Regex":<Output> machen soll (filtern will ich ja nicht, nur setzen). Kannst du bitte ein Beispiel mit set machen?

Ellert

Zitat von: rudolfkoenig am 08 April 2017, 19:52:42
Danke fuer den Hinweis, habs uebersehen. Diese Meldung gibt es inzwischen seit 15 Monaten, das reicht -> Habe : fuer define entfernt.

@Ellert: ich verstehe nicht, was "<Regex":<Output> machen soll (filtern will ich ja nicht, nur setzen). Kannst du bitte ein Beispiel mit set machen?

Ein Dummy du hat den Wert Es ist 17:00 Uhr.
set du1 [du:state:"(\d\d:\d\d)":$1]
setzt du1 auf den Wert 17:00.

Ein Dummy du hat den Wert 5 Eier kosten je Stück 13 Cent.
set du1 Summe [du:state:"(\d+).*(\d+)":$1*$2] Cent
setzt du1 auf den Wert Summe 65 Cent.

Regexp ist ein Ausdruck, der auf den Readingwert matched.
Output ist ein Perl-Ausdruck der die Variablen weiterverarbeitet.

rudolfkoenig

Danke, verstanden. Und danke, nein, das ist mir erstmal zu viel.

Loredo

Mir ist gerade aufgefallen, dass ich im Logfile hin und wieder solche Meldungen bekomme:



2017.04.09 14:00:54.147 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 3963.



Beiliegender Patch prüft, ob $d und $n an die *Val() Funktionen übergeben worden sind.
Bei AttrVal() war das für $d sogar schon (ansatzweise) der Fall.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

Ich haette gerne auch die Meinung anderer dazu.
Mein Ziel ist nicht FHEM Warnungsfrei zu machen, nur damit der Benutzer oder Modulautor jeden Unsinn als Parameter uebergeben kann.

justme1968

fhem sollte alles abfangen das zu fehlverhalten oder
abstürzen führen kann.
es sollte meldungen ausgeben für alles das ein endanwender verkonfigurieren kann.

perl warnungen die ein modulentwickler durch falschen aufruf von dokumentierten routinen verursacht sollten nicht angefangen werden wenn es performance einbußen zur folge haben kann. ob man es in anderen fällen abfängt ist geschmacksache. es gehört auf jeden fall im aufrufenden modul repariert.

die routinen hier sind auch für endanwender. auch wenn sie nicht gelesen werden sollte es hier prüfung und sprechende meldungen geben. dann kann man zumindest sagen: schau ins log.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

Zitatauch wenn sie nicht gelesen werden sollte es hier prüfung und sprechende meldungen geben. dann kann man zumindest sagen: schau ins log.
Aber wenn es wie vorgeschlagen geprueft wird, dann gibt es keine Warnung im Log.
Und wenn ich nichts mache, dann gibt es eine Warnung. Ich finde es mit Warnung besser.

Loredo

Dann bitte konsequenterweise auch die vorhandene Prüfung aus AttrVal() entfernen.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

#86
Hallo Rudi,

mit Bezug auf diesen Post würde ich ReplaceSetMagic() gerne noch darum erweitern, dass die Ausgabe auch mit Dezimaltrennzeichen erfolgen kann.
Einen Patch dazu habe ich angehängt, vielleicht schaust du ihn dir ja einmal an. Damit ist es möglich, hinter :r, :i oder :d noch ein m (für mark) zu hängen, optional gefolgt von einer Zahl für die gewünschte Sprache Formatierung.



Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

Siehe meine Frage bzw. Kommentar dazu im verlinkten Thema.

rudolfkoenig

 
ZitatDann bitte konsequenterweise auch die vorhandene Prüfung aus AttrVal() entfernen.
Jawohl!
Habs gemacht. :)

Thorsten Pferdekaemper

Hi,
könnte sich das hier mal jemand anschauen:
https://forum.fhem.de/index.php?topic=70390
Es scheint Warnungen dieser Form zu hageln...

[Mon Apr 10 21:57:25 2017] fhem.pl: Use of uninitialized value $s in pattern match (m//) at fhem.pl line 1677.

...wenn man das ":d" am Ende weglässt. D.h. so etwas hier erzeugt diese Warnung:

[PoolController:Pool_Aussen_Num]

Aber das hier ist ok:

[PoolController:Pool_Aussen_Num:d]

Das soll doch nicht so sein, oder?
Gruß,
   Thorsten
FUIP