FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ArduPino am 24 November 2016, 13:31:49

Titel: [Gelöst] DOIF mehrere Geräte / Devices / Temperaturfühler
Beitrag von: ArduPino am 24 November 2016, 13:31:49
Wie kann ich von mehreren Geräten die Temperatur abfragen und das dann an ein dummy weiterleiten ?


DEF (["^CUL_TX_:humidity"] > 60) (set Feuchtigkeit_hoch on) DOELSE (set Feuchtigkeit_hoch off)


Die Geräte heißen z.B. CUL_TX_113 wobei die Nummer dann immer unterschiedlich ist.
Sobald ich diesen "Platzhalter" ^ verwende, funktioniert es nicht mehr.
Was ist hier falsch ?
Titel: Antw:DOIF mehrere Geräte / Devices / Temperaturfühler
Beitrag von: KölnSolar am 24 November 2016, 13:38:31
nur kurz: probier mal (["CUL_TX.*:humidity"]
Titel: Antw:DOIF mehrere Geräte / Devices / Temperaturfühler
Beitrag von: ArduPino am 24 November 2016, 17:48:34
Geht leider auch nicht.
Habe aber nur "manuell" mit

setreading CUL_TX_113 humidity 66

getestet. Weiß nicht ob das ein Unterschied ist, wenn ich das so setze oder der Sensor mir den Wert übermittelt.
Wenn ich das device genau festlege, funktioniert es aber mit dem setreading.
Später noch mal über den Sensor testen.
Titel: Antw:DOIF mehrere Geräte / Devices / Temperaturfühler
Beitrag von: hschuett am 24 November 2016, 17:58:24
Hallo,
probier es mal ohne die Anführungszeichen
Syntax für Readings:
[<devicename>:<readingname>]

Der Regex Ausdruck .* (-->ein oder mehrere Zeichen am Ende) sollte auf jeden Fall passend sein.

Grüße,
Harald
Titel: Antw:DOIF mehrere Geräte / Devices / Temperaturfühler
Beitrag von: ArduPino am 24 November 2016, 19:32:23
Dann erhalte ich eine Fehlermeldung sobald ich auf modify klicke

di_Feuchtigkeit DOIF: Wrong timespec CUL_TX.*:humidity: either HH:MM:SS or {perlcode}: CUL_TX.*:humidity
Titel: Antw:DOIF mehrere Geräte / Devices / Temperaturfühler
Beitrag von: hschuett am 24 November 2016, 20:11:07
Hast Du die eckigen Klammern gesetzt?
Kannst Du die ganze Device-Definition nochmals hier posten?
[Device:Reading] in eckige Klammern gesetzt sollte klappen...
Titel: Antw:DOIF mehrere Geräte / Devices / Temperaturfühler
Beitrag von: ArduPino am 24 November 2016, 20:33:26
So funktioniert es für ein festes device:

([CUL_TX_113:humidity] > 60) (set Feuchtigkeit_hoch on) DOELSE (set Feuchtigkeit_hoch off)



So erhalte ich die Fehlermeldung:

([CUL_TX_.*:humidity] > 60) (set Feuchtigkeit_hoch on) DOELSE (set Feuchtigkeit_hoch off)



So wird es übernommen, funktioniert aber nicht (ist aber so im Wiki auch enthalten):

(["^CUL_TX_:humidity"] > 60) (set Feuchtigkeit_hoch on) DOELSE (set Feuchtigkeit_hoch off)


Gibts doch nicht...ist doch eine einfache standard Sache  :o
EDIT:
Mache mal ein Update von FHEM.
Das DOIF wurde ja irgendwann angepasst, aber das ist ja schon was länger her.

EDIT:
Nein, daran lag es nicht. Muss vielleicht ein besonderes Attribut gesetzt werden ?
Habe im Wiki etwas von "addStateEvent" gelesen:

"Möchte man eindeutig eine Statusänderung eines Moduls erkennen,..."

Sind die Dinge die man mit DOIF macht nicht immer eindeutig ?

Titel: Antw:DOIF mehrere Geräte / Devices / Temperaturfühler
Beitrag von: hschuett am 24 November 2016, 21:30:55
Die Regex-Ausdrücke prüfen scheinbar grundsätzlich nicht auf die Readings(werte), sondern ausschließlich auf die generierten Events.
Eine Lösung könnte wie folgt klappen:

Prüfung auf passendes Event und dann variable Prüfung auf Reading(wert) des Event-auslösenden Devices:

define ... DOIF (["^CUL_TX_:humidity"] and [$DEVICE:humidity] > 60)

Der Regex prüft, ob es ein passendes Event eines (beliebigen) CUL_TX Devices gibt, die Variable $DEVICE enthält den Namen des Event-auslösenden CUL_TX Devices. Damit kann dann auf das Reading humidity des auslösenden Gerätes geprüft werden ...
Titel: Antw:DOIF mehrere Geräte / Devices / Temperaturfühler
Beitrag von: ArduPino am 24 November 2016, 21:57:28
Hab da irgend wie Verständnisprobleme mit Regex, Readings und Events.
Ein Reading ist doch nur der Eintrag (eben in die Readingsliste) wenn ein Event erzeugt wird ?!?

Aber das hier funktioniert ja auch:

DOIF ([LichtWetter:light] < 4  ) (set Steckdose_B on) DOELSE (set Steckdose_B off)


Vom device "LichtWetter" (Twilight) benutze ich den Lichtwert um eine Steckdose zu schalten, und hier wird ja auch ein Readingseintrag überprüft, und das ist ja nicht mal state.

Werde mal dein Beispiel mal versuchen.

EDIT:
Juhu ! Funktioniert !!!!  ;D ;D
Werde mir das mal so notieren, wird man ja sicher öfter mal brauchen.

ABER: Warum steht das denn ganz anders im Wiki ?
War das früher mal so und wurde geändert ?
Oder liegt das Problem ganz wo anders ?
Dein Beispiel müsste ja dann eigentlich da eingetragen werden, gibt ja sicher auch noch andere die so was machen wollen.
Titel: Antw:DOIF mehrere Geräte / Devices / Temperaturfühler
Beitrag von: hschuett am 24 November 2016, 22:07:29
Soweit ich das verstehe, enthält - aus Sicht des DOIFs - Dein letztes Beispiel keine "unscharfe" Mustersuche (per RegularExpression), sondern - aus Sicht des DOIFs - den konkreten Gerätenamen und den Readingnamen
[<devicename>:<readingname>] bzw. im Beispiel: [LichtWetter:light]
Damit kann das DOIF wohl direkt den Wert des Readings (des einen Geräts) ermitteln.

Ein Regex (Musterssuche) ^CUL_TX.* kann und würde ggf. mehrere (von Namen passende) Geräte & Readingswerte finden/zurückgeben. Vermutlich prüft das DOIF bei Regexausdrücken deshalb nur die (ausgelösten) Events auf vorhandensein. Der Workaround mit der Variablen $DEVICE schränkt (die Rückgabe) dann einen Readingswert eines Geräts ein. Im Zweifel wäre das das jeweilige Gerät, das zuletzt ein passendes Event ausgelöst hat...
Titel: Antw:DOIF mehrere Geräte / Devices / Temperaturfühler
Beitrag von: ArduPino am 24 November 2016, 23:08:39
In der Hilfe steht noch etwas dazu:

Ereignissteuerung über Auswertung von Events
...
Sollen Events verschiedener Devices ausgewertet werden, so lässt sich folgende Syntax anwenden: ["<device regex>:<event regex>"]


Aber egal.
So wie es ist funktioniert es !

Bedanke mich für die Hilfe !!!