Autor Thema: [gelöst] DOIF Wildcard für Device  (Gelesen 3160 mal)

Offline MikeRoxx

  • Full Member
  • ***
  • Beiträge: 115
[gelöst] DOIF Wildcard für Device
« am: 04 März 2017, 11:41:04 »
Hallo zusammen,

ich bin gerade am verzweifeln. Ich habe mehrere Fensterkontakte die ich über ein DOIF abfrage.
Das funktioniert auch soweit. Ich suche aber die passende Syntax für eine Wildcard im Devicename. Das Wort "Fensterkontakt" kommt im jeden Devicename vor.
Etwas wie .*_Fensterkontakt.* leider Funktioniert das hier nicht richtig oder ich sehe den Wald vor Bäumen nicht. Kann mich bitte jemand in die richtige Richtung stubsen.

Vielen Dank,

Gruß
Mike


([wz_Fensterkontakt_Esszimmer:contact] eq "open (to vccu)") (set HomeBot message Fenster im {(AttrVal("$DEVICE","alias","$DEVICE"))} ist offen)
DOELSEIF
([wz_Fensterkontakt_Esszimmer:contact] eq "closed (to vccu)") (set HomeBot message Fenster im {(AttrVal("$DEVICE","alias","$DEVICE"))} ist zu)

DOELSEIF
([wz_Fensterkontakt_1:contact] eq "open (to vccu)") (set HomeBot message Fenster im Wohnzimmer ist offen)
DOELSEIF
([wz_Fensterkontakt_1:contact] eq "closed (to vccu)") (set HomeBot message Fenster im Wohnzimmer ist zu)

DOELSEIF
([bd_Fensterkontakt:contact] eq "open (to vccu)")(set HomeBot message Fenster im Bad ist offen)
DOELSEIF
([bd_Fensterkontakt:contact] eq "closed (to vccu)")(set HomeBot message Fenster im Bad ist zu)


« Letzte Änderung: 04 März 2017, 12:44:29 von MikeRoxx »
Proxmox mit FHEM und Debmatic auf Deb. Buster
HM / HmIP / FS20

Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8812
Antw:DOIF Wildcard für Device
« Antwort #1 am: 04 März 2017, 11:56:39 »
Hallo zusammen,

ich bin gerade am verzweifeln. Ich habe mehrere Fensterkontakte die ich über ein DOIF abfrage.
Das funktioniert auch soweit. Ich suche aber die passende Syntax für eine Wildcard im Devicename. Das Wort "Fensterkontakt" kommt im jeden Devicename vor.
Etwas wie .*_Fensterkontakt.* leider Funktioniert das hier nicht richtig oder ich sehe den Wald vor Bäumen nicht. Kann mich bitte jemand in die richtige Richtung stubsen.

Vielen Dank,

Gruß
Mike


([wz_Fensterkontakt_Esszimmer:contact] eq "open (to vccu)") (set HomeBot message Fenster im {(AttrVal("$DEVICE","alias","$DEVICE"))} ist offen)
DOELSEIF
([wz_Fensterkontakt_Esszimmer:contact] eq "closed (to vccu)") (set HomeBot message Fenster im {(AttrVal("$DEVICE","alias","$DEVICE"))} ist zu)

DOELSEIF
([wz_Fensterkontakt_1:contact] eq "open (to vccu)") (set HomeBot message Fenster im Wohnzimmer ist offen)
DOELSEIF
([wz_Fensterkontakt_1:contact] eq "closed (to vccu)") (set HomeBot message Fenster im Wohnzimmer ist zu)

DOELSEIF
([bd_Fensterkontakt:contact] eq "open (to vccu)")(set HomeBot message Fenster im Bad ist offen)
DOELSEIF
([bd_Fensterkontakt:contact] eq "closed (to vccu)")(set HomeBot message Fenster im Bad ist zu)

Wildcards im Devicenamen geht nur bei Ereignisabfragen und nicht bei Readingabfragen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ArduPino

  • Gast
Antw:DOIF Wildcard für Device
« Antwort #2 am: 04 März 2017, 12:17:25 »
Was ist denn der unterschied zu dem hier:

define di_test_schaltung DOIF (["^1HM_T:on"]) (set 1TEST_E4 on)

Das habe ich gerade hier gefunden. Ich selber benutze auch was ähnliches, aber da sind noch Variablen wie $DEVICE dabei, weil das bei mir auch nicht ging.
Hier werden doch auch alle Geräte die mit "1HM_T" anfangen berücksichtigt.

Ich hab immer meine Probleme mir dem Ereignis und Readings...ist das nicht das gleiche? Die Ereignisse werden doch in die Readings geschrieben?


Gesendet von meinem Wileyfox Swift mit Tapatalk


Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8812
Antw:DOIF Wildcard für Device
« Antwort #3 am: 04 März 2017, 12:22:33 »
[wz_Fensterkontakt_Esszimmer:contact] das ist eine Readingabfrage - sie liefert den Inhalt eines Readings

["wz_Fensterkontakt_Esszimmer:contact"] ist ein Ereignistrigger - der kann nur wahr oder nicht wahr sein und nur den kannst du generalisieren in der Form:

["wz_Fensterkontakt_:contact"]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ArduPino

  • Gast
Antw:DOIF Wildcard für Device
« Antwort #4 am: 04 März 2017, 12:32:11 »
(["^CUL_TX_:humidity"] and [$DEVICE:humidity] > 69) (set Feuchtigkeit_hoch on) DOELSE (set Feuchtigkeit_hoch off)

Und das hier? Das habe ich mal hier aus dem Forum bekommen. Das sind doch Readings, wenn ich verschiedene Werte habe und wie hier vergleiche?

Gesendet von meinem Wileyfox Swift mit Tapatalk

Offline MikeRoxx

  • Full Member
  • ***
  • Beiträge: 115
Antw:DOIF Wildcard für Device
« Antwort #5 am: 04 März 2017, 12:42:15 »
Danke Damian und    ArduPino,

jetzt funktioniert es mit 2 Zeilen:

(["Fensterkontakt:open"]) (set HomeBot message {(AttrVal("$DEVICE","alias","$DEVICE"))} ist offen)
DOELSEIF
(["Fensterkontakt:close"]) (set HomeBot message {(AttrVal("$DEVICE","alias","$DEVICE"))} ist zu)

Hier auch noch einmal die Erklärung, die habe ich wohl übersehen:
https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung

Zitat
["FS"] triggert auf alle Devices, die "FS" im Namen beinhalten
["^FS"] triggert auf alle Devices, die mit "FS" im Namen anfangen
["FS:temp"] triggert auf alle Devices, die "FS" im Namen und "temp" im Event beinhalten
([":^temp"]) triggert auf beliebige Devices, die im Event mit "temp" beginnen
(["^FS$:^temp$"] triggert auf Devices, die genau "FS" heißen und im Event genau "temp" vorkommt
[""] triggert auf alles
Proxmox mit FHEM und Debmatic auf Deb. Buster
HM / HmIP / FS20

Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8812
Antw:DOIF Wildcard für Device
« Antwort #6 am: 04 März 2017, 13:06:54 »
(["^CUL_TX_:humidity"] and [$DEVICE:humidity] > 69) (set Feuchtigkeit_hoch on) DOELSE (set Feuchtigkeit_hoch off)

Und das hier? Das habe ich mal hier aus dem Forum bekommen. Das sind doch Readings, wenn ich verschiedene Werte habe und wie hier vergleiche?

Gesendet von meinem Wileyfox Swift mit Tapatalk

[$DEVICE:humidity] das ist ein Reading ohne regex

(["^CUL_TX_:humidity"]  das ist kein Reading mit regex
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline Klinki

  • Full Member
  • ***
  • Beiträge: 200
Antw:[gelöst] DOIF Wildcard für Device
« Antwort #7 am: 17 September 2021, 11:48:11 »
Hi,

Ich bin auch etwas ratlos. Ich will für eine Gruppe von Devices eine Meldung auslösen, wenn ein Reading ein bestimmtes Alter überschritten hat. Da ich mit ReadingsAge und einem Wildcard-Device nicht weitergekommen bin, habe ich über ReadingsWatcher eine Überwachung eingerichtet welche den Wert des Readings "_letzteMeldung" den String "???" setzt.
Nun will ich mit Doif dieses Reading abfragen und eine Meldung generieren falls es den Wert "???" hat.


Hier der Versuch mit ReadingsAge für ein einzelnes Device:
( ReadingsAge("TTN_Wassermelder_1","_letzteMeldung",2) > 3) (set Signalbot send Alarm)
- funktioniert

( ReadingsAge("","_letzteMeldung",2) > 3) (set Signalbot send Alarm)
- funktioniert nicht

( ReadingsAge("^TTN","_letzteMeldung",2) > 3) (set Signalbot send Alarm)
- funktioniert nicht

Und der Versuch mit readingsWatcher:
([ "^TTN:_letzteMeldung"] eq "???") (set Signalbot send Alarm)
- funktioniert nicht

([ ":_letzteMeldung"] eq "???") (set Signalbot send Alarm)
- funktioniert nicht

Problem ist, glaube ich, dass mit der Wildcard-Nutzung nur auf Events reagiert wird und nicht auf den Wert eines Readings.
Was ich aber gerne hätte ist das Alter eines Readings mit einer Wildcard im Devicenamen.

Gruß
klinki

Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8812
Antw:[gelöst] DOIF Wildcard für Device
« Antwort #8 am: 17 September 2021, 14:26:15 »
Problem ist, glaube ich, dass mit der Wildcard-Nutzung nur auf Events reagiert wird und nicht auf den Wert eines Readings.
Was ich aber gerne hätte ist das Alter eines Readings mit einer Wildcard im Devicenamen

Dann willst du ja nicht das Alter eines Readings, sondern vieler. Denn Wildcard würden ja mehrere selektieren. Das geht natürlich bei ReadingsAge nicht.

Was du probieren kannst:

DOIF (["^TTN:_letzteMeldung"] and ReadingsAge($device,"_letzteMeldung",2) > 3) (set Signalbot send Alarm)

Oder evtl. über Aggregation lösen: https://fhem.de/commandref_DE.html#DOIF_aggregation
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline Klinki

  • Full Member
  • ***
  • Beiträge: 200
Antw:[gelöst] DOIF Wildcard für Device
« Antwort #9 am: 22 September 2021, 09:02:44 »
Danke Für Deine Tipps.

Über die Doif-Aggregation habe ich es leider auch nicht hinbekommen.

Ich arbeite jetzt mit dem Reading, welches von ReadingsWatcher nach Timeout auf "???" gesetzt wird. Alle fraglichen Devices habe ich in einer Struktur (structure) zusammengefasst. Diese fasst besagtes Reading "_letzteMeldung" zusammen und hat enweder den Wert "undefined", oder, wenn eines der Devices "???" im Reading hat, den Wert "???".

Den Status der Struktur per Doif auszuwerten und nen Alarm abzusetzen ist ja dann kein Problem.
Ob mein Ansatz nun tatsächlich sinnvoller ist als einfach ein DoIf auf jeden Wassermelder einzustellen - keine Ahnung...