DOIF neue Features: Generalisierung, $DEVICE, $EVENT, Attribut notexist

Begonnen von Damian, 28 Dezember 2015, 22:06:42

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: Per am 01 Januar 2018, 20:34:46
Klar ;), aber immerhin liegt der "DOIF-Interpreter" drüber.
Ist genau dann ein Problem, wenn:doppelte hier nicht gehen, aber einfache oder Slashs eine Fehlermeldung
DOIF: wrong filter Regex: /[^\:]*
im Editor erzeugen.

OK. Man muss natürlich wissen, was gehört noch zum DOIF-Interpreter und was wird an Perl-Interpreter weitergegeben.

Man kann allgemein sagen, alles was in eckigen Klammern ist, wird in erster Linie vom DOIF-Interpreter verarbeitet - auch die doppelten Anführungszeichen, daher gelten hier nicht unbedingt die Perl-Regeln. Sachen in geschweiften Klammern gehören der Perl-Welt - meistens ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Aber was verwende ich jetzt? Oder muss ich das in der cfg. ändern, weil der Editor das falsch erkennt?

Damian

Zitat von: Per am 01 Januar 2018, 20:58:38
Aber was verwende ich jetzt? Oder muss ich das in der cfg. ändern, weil der Editor das falsch erkennt?

DOIF (["FS":"[^\:]*: (\d*)",0] > 12) (set bla {("$EVENT" =~ /[^\:]*: (\d*)/;$1)})

So wie ich geschrieben habe: eckige Klammern DOIF-Syntax, hier sind Anführungszeichen, wie in der Commandref beschrieben angesagt. In geschweiften Klammern: Perl-Syntax mit allen Feinheiten von Perl und das sind ja bekanntlich einige ;)


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Sorry, mein Fehler. Dort wars ja ok. Außer man nimmt "[^\:]*: (-?\d+(\.\d+)?)".
Hier (in Bedingung)
(("$EVENT" =~ "[^\:]*: (\d*)") < 100)
kommt:
timer_01_c01    error: Wrong timespec ^\:: either HH:MM:SS or {perlcode}
/ oder '  bringen keine Besserung.

Damian

Zitat von: Per am 01 Januar 2018, 21:37:18
Sorry, mein Fehler. Dort wars ja ok. Außer man nimmt "[^\:]*: (-?\d+(\.\d+)?)".
Hier (in Bedingung)
(("$EVENT" =~ "[^\:]*: (\d*)") < 100)
kommt:
timer_01_c01    error: Wrong timespec ^\:: either HH:MM:SS or {perlcode}
/ oder '  bringen keine Besserung.

In der Bedingung funktioniert das nicht, sondern nur so, wie ich es zuvor definiert habe, statt "FS" musst du deine Trigger-Regex angeben.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Zitat von: Damian am 01 Januar 2018, 21:43:22statt "FS" musst du deine Trigger-Regex angeben.
Also 2x das Selbe. Wenn das keine Probleme ($DEVICE,$EVENT,Performance) gibt, soll es mich nicht stören.

Damian

Zitat von: Per am 01 Januar 2018, 21:46:47
Also 2x das Selbe. Wenn das keine Probleme ($DEVICE,$EVENT,Performance) gibt, soll es mich nicht stören.

Natürlich sind das Ressourcenfresser, wenn man den Trigger nicht genau spezifiziert. Daher möglichst genau angeben, was triggern soll - das gilt für alle Eventhandler.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Zitat von: Per am 01 Januar 2018, 20:34:46
Klar ;), aber immerhin liegt der "DOIF-Interpreter" drüber.
Ist genau dann ein Problem, wenn:doppelte hier nicht gehen, aber einfache oder Slashs eine Fehlermeldung
DOIF: wrong filter Regex: /[^\:]*
im Editor erzeugen.
ZitatIst genau dann ein Problem, wenn:

Ab dort, konnte ich Deiner Argumentation nicht mehr folgen.

Per

Zitat von: Damian am 05 Januar 2016, 15:01:28Es sind z. Zt. übrigens nur 5 % der gesamten Commandref
Wie ist eigentlich der Stand jetzt?

Damian

Zitat von: Per am 04 April 2018, 11:18:29
Wie ist eigentlich der Stand jetzt?

Das kannst du selbst überprüfen. Die Commandref wird sicherlich immer weiter wachsen, ich versuche den Anteil gleich zu halten, Stichwort: uiTable, Perl-Modus ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chq

Hallo,

kann mir jmd. bzgl. der Funktion den Unterschied zwischen

["^steuerung$:^b1:.push"]

und

["^steuerung$:^b1:.push$"]

erklären?

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

Damian

Zitat von: chq am 11 April 2019, 12:14:33
Hallo,

kann mir jmd. bzgl. der Funktion den Unterschied zwischen

["^steuerung$:^b1:.push"]

und

["^steuerung$:^b1:.push$"]

erklären?

Gruß Chris

Im ersten Fall darf noch etwas nach "push" kommen, beim zweiten nicht, da muss der Ausdruck mit "push" enden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

fireball

Hi,

kurze Frage, ich überleg schon die ganze Zeit finde aber keine wirkliche Lösung... 
Ich nutze folgendes DOIF
([16:00-22:00] and [BM_Garage04:luminance] < 100) (set Aussenbeleuchtung on-for-timer 7200) DOELSE (set Aussenbeleuchtung off)

Das funktioniert auch soweit, aber es wirft einen kleinen Fehler und zwar folgenden:

2020.05.13 20:42:02 1: PERL WARNING: Argument "4906.7 Lux" isn't numeric in numeric lt (<) at (eval 691106) line 1.
2020.05.13 20:42:02 3: eval: doif_Aussenlicht_Timer: warning in condition c01

Der Grund ist ja, das das Event:
2020-05-14 15:54:42 ZWave BM_Garage04 luminance: 4653.4 Lux
keine Zahl ist.

Kann ich in der Bedingung schon irgendwie nur auf den ersten Teil des Events, quasi EVENTPART0 zugreifen?
Dann wäre es sauberer... FHEM versteht es trotzdem, aber es muss ja auch richtig sein...

VG
René


JoeALLb

FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

fireball

hehe, danke, hätte ich in der Referenz einen Block weiter gelesen da stands dann, aber ich bin da schon über alle Bsp. geflogen, ich habe den Wald echt nicht mehr gesehen :)
Sollte gehen, die Meldung im Log ist weg.
VG