[gelöst] set Devices ReadingsVal(...)

Begonnen von FHEMAN, 29 August 2016, 00:23:31

Vorheriges Thema - Nächstes Thema

FHEMAN

Oha.. ich hatte es an der gleichen Stelle in der fhem.pl erwartet.
Vielen Dank nochmal, dass Du Dich darum gekümmert hast!

Schönen Abend
Ronny
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

justme1968

genau da sollte es auch sein.

funktioniert es nicht?

welche fhem version hast du? was gibt version aus?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

FHEMAN

Ich sehe um Zeilennummer 1728 nichts von Deiner evalSpecials Anpassung. Das muss dann wohl woanders integriert worden sein?

Server started with 593 defined entities (fhem.pl:12095/2016-08-30 perl:5.020002 os:linux user:fhem pid:17428)

Version gibt aus:
Latest Revision: 12112

File                 Rev   Last Change

fhem.pl              12095 2016-08-30 13:30:50Z rudolfkoenig

Wie komme ich denn zur aktuellen Version?
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

justme1968

es ist nur an eine andere stelle gewandert. es ist drin und geht.

schau in zeile 1569.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

FHEMAN

Ich krieg es in Perl nicht zum Laufen. Kannst Du mir bitte das Usage einmal an einem Beispiel erläutern?
Folgendes funktioniert:

set Rollo.* {(ReadingsVal("$DEV", "oldValue", -1))}

Folgendes funktioniert nicht
fhem("set Rollo.* {(ReadingsVal("$DEV", "oldValue", -1))}");
fhem("set Rollo.* " . ReadingsVal("$DEV", "oldValue", -1));

Nur letzteres bringt mich weiter, da jedes größere Notify zwangsläufig in Perl Code ausartet. Muss ich die Anführungszeichen noch escapen?
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

justme1968

- wenn der code größer wird solltest du es in eine route in 99_myUtils auslagern.
- bei variante 2 musst du darauf achten die " nicht zu verschachteln. also so:fhem("set Rollo.* {(ReadingsVal($DEV, 'oldValue', -1))}");

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

FHEMAN

Zitat von: justme1968 am 11 September 2016, 11:28:05
- wenn der code größer wird solltest du es in eine route in 99_myUtils auslagern.
Die ist schon voll ;)
Aber ehrlich, das hat doch nichts mit dem Problem hier zu tun?

Zitat von: justme1968 am 11 September 2016, 11:28:05
- bei variante 2 musst du darauf achten die " nicht zu verschachteln. also so:fhem("set Rollo.* {(ReadingsVal($DEV, 'oldValue', -1))}");
Das funktioniert nicht. Auch mein testweises Maskieren der Hochkommas hilft nicht:
set Rollo.* {(ReadingsVal(\"$DEV\", \"oldValue\", \"-1\"))}

Fehlermeldung:
Global symbol "$DEV" requires explicit package name at (eval 137519) line 1.

Ich testete die o.g. Aufrufe im CMD Feld.

Gruß
Ronny
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

justme1968

myUtils wird nicht so schnell unübersichtlich wie der code im notify. man kann mehr als ein myUtils file haben :)

sorry. mein fehler. du musst dafür sorgen das das $DEV nicht dann ausgewertet wird wenn der fhem aufruf stattfindet sondern später wenn das set selber ausgeführt wird. also sofhem("set Rollo.* {(ReadingsVal(\$DEV, 'oldValue', -1))}");oderfhem('set Rollo.* {(ReadingsVal($DEV, "oldValue", -1))}');

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

FHEMAN

Ahh, sehr gut. Es funktioniert jetzt. Hab vielen Dank, Andre.

Aufgrund Deines Hinweises mit dem Dollar Zeichen habe ich mein Nur-Hochkomma-Beispiel jetzt auch erfolgreich testen können:

{fhem("set Rollo.* {(ReadingsVal(\"\$DEV\", \"oldValue\", \"-1\"))}")}
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

FHEMAN

Ich vermute, es nimmt kein Ende.. kann es sein, dass der neue Platzhalter im FILTER nicht funktioniert?


set Rollo.*:FILTER=STATE!={(ReadingsVal(\"\$DEV\", \"oldValue\", 10))} 12

liefert

CMD:
Please define Rollo.*:FILTER=STATE!={(ReadingsVal(\"\$DEV\", first
LOG:
2016.09.16 21:33:38 1: devspec2array Rollo.*:FILTER=STATE!={(ReadingsVal(\"\$DEV\",: Unmatched ( in regex; marked by <-- HERE in m/^({( <-- HERE ReadingsVal(\"\$DEV\")$/ at fhem.pl line 1159.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

justme1968

#25
ja. das geht aus zwei drei gründen nicht:

- devspec erlaubt kein perl code

- die devspec werden ausgewertet bevor die set routinen ausgewertet werden.
  d.h. zu diesem zeitpunkt gibt es noch gar kein $DEV das gesetzt sein könnte.

- {(...)} funktioniert nur in den set parametern. nicht in den devspec.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

FHEMAN

Hi Andre,

tatsächlich konnte ich eben nach etlichem Rumprobieren durch Concatenation quasi von hinten durch die Brust mein Rollo steuern:


{fhem("set Rollo.*:FILTER=STATE!=".(ReadingsVal('$DEV', 'oldValue', 10))." ".(ReadingsVal('$DEV', 'oldValue', 10)))}


Schön geht zwar anders (?), aber ich komme damit freudigerweise zum Ziel.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

justme1968

#27
ich glaube nicht das das wirklich macht was du willst.

$DEV ist nicht definiert. das fällt nur nicht auf weil '$DEV' auf grund der einfachen ' nicht interpoliert wird. du versuchst ein reading eines device namens $DEV zu lesen. das gibt es nicht und du bekommst immer den default 10 zurück.

ich weiß ja nicht wie viele rollos du hast und wie wahrscheinlich es ist das sie
gerade auf dem oldvalue stehe. aber ich würde den filter einfach weg lassen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

FHEMAN

#28
Du hast leider recht! Ich kann gerade nicht resümieren, was da vorhin wie ging.
Jedenfalls wird nicht einmal der Defaultwert gelesen bei

{fhem("set Rollo.*:FILTER=STATE!=" . (ReadingsVal('$DEV', 'oldValue', 10)) . " 55")}

Es passiert gar nichts, nicht einmal ein Fehler im Log.
(Edit: Es wird der Default Wert genommen, wie Du schon sagtest)

Aber ich stimme Dir zu, den fehlenden Filter kann ich verschmerzen. Ich wollte einfach nur Funkverkehr und das Klackern in den Tastern reduzieren.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

FHEMAN

Müsste Folgendes nicht auch funktionieren?
{fhem("set LL.* {(OldValue(\"\$DEV\"))}")}
Ich bekomme hier zwar keinen Fehler, aber der STATE meiner Dummies LL1 und LL2 ändert sich nicht.

Gruß
Ronny
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB