FHEM > Automatisierung

Anfänger Frage zu notifiy und 1W (DS2413 und DS2438)

(1/2) > >>

HeadCrash:
Hi,

ich hab einen Raspberry mit COC und daran einen paar 1W Chips. 1W wird per OWFS abgefragt und ist per OWServer/OWDevice in FHEM auch sichtbar.
Der "State" ändert sich auch. Soweit so gut.

Nur wie kann ich jetzt eine Aktion auslösen wenn sich z.B. der Status von "sensed.A" im DS2413 ändert oder "VAD" im DS2438 einen bestimmten Wert erreicht?

Ich dachte da an das "notify" nur wie muss ich den REGEXP befüllen ???

Sowas wie define Test notify 1W_TEST.sensed.A:0 { fhem("set WHATEVER on") } scheint nicht zuklappen.

Im Vorfeld schonmal Danke für alle Tips :)

justme1968:

--- Code: ---define test notify 1W_TEST:sensed.A ...
--- Ende Code ---


gruss
  andre

HeadCrash:
Hi,

jo den hatte ich probiert, der geht. Thx. Hat abba janz wilde Sachen mit mir gemacht :-D.
Aber ich glaube ich verstehe jetzt auch warum. Der Rückgabewert von dem 1W lautet "sensed.A: 1  sensed.B: 1" (wörtlich!) und mein RegEx muss quasi GENAU darauf zugeschnitten werden. Ohne wird die Aktion quasi bei jedem Poll ausgeführt, und das wollen wa ja net.

Sowas wie Port1 = 0 usw. gibts nicht zufällig oder? Bzw. kann man das selber definieren? Dann wäre das notifiy leichter.

Wenn nicht dann wird's heavy. Jetzt nicht wegen der RegEx'e, das bekomme ich hin. Aber ich muss dann ja sicher das ein oder andere Zeichen escapen - oder?
Weil der ":" z.B. wird ja schon verheizt, Oder hab ich mich da jetzt verlaufen, wenn nicht wie escape ich das ":" und die Leerzeichen.

Nochmals Dankeschön :).

justme1968:
also... ganz viele möglichkeiten :)

- wenn du nur bei geänderten werten ein event möchtest -> event-on-change-reading setzen

- schau im event monitor was genau für events kommen. es sollte für jedes reading eins sein. also sensed.A und sensed.B getrennt

- der kombinierte wert ist nicht für ein 'normales' reading sonder für state. das kannst du für notifys normalerweise ignorieren

- du kannst entweder die regex in den notifys so genau wie möglich bauen oder im notify mit if im perl code und %EVENTPART deine reaktion genauer spezifizieren

gruss
  andre

HeadCrash:
Okay, halten wir erstmal fest du hast Ahnung :-) und ich hab ungefähr 25% verstanden :-D.


--- Zitat von: justme1968 schrieb am Do, 18 Juli 2013 21:45 ---
- wenn du nur bei geänderten werten ein event möchtest -> event-on-change-reading setzen

--- Ende Zitat ---

Erledigt. Coole Funktion.


--- Zitat von: justme1968 schrieb am Do, 18 Juli 2013 21:45 ---
- schau im event monitor was genau für events kommen. es sollte für jedes reading eins sein. also sensed.A und sensed.B getrennt

--- Ende Zitat ---

Jupp, das passt.


--- Zitat von: justme1968 schrieb am Do, 18 Juli 2013 21:45 ---
- der kombinierte wert ist nicht für ein 'normales' reading sonder für state. das kannst du für notifys normalerweise ignorieren

--- Ende Zitat ---

Puh, ein Glück.


--- Zitat von: justme1968 schrieb am Do, 18 Juli 2013 21:45 ---
- du kannst entweder die regex in den notifys so genau wie möglich bauen oder im notify mit if im perl code und %EVENTPART deine reaktion genauer spezifizieren

--- Ende Zitat ---

Für den Anfang evtl. mal lieber nicht.


Nur leider scheint mir da immer noch ein Stück zu fehlen, sorry falls ich nerve.


--- Code: ---define Test_Log notify 1W_Flur_DS2413:sensed.A: 0 { Log 3, "@: 1W Test Wert: ".Value("1W_Flur_DS2413") }
--- Ende Code ---

Das kann nich richtig sein, der RegEx wird nach dem letzen ":" abgeschnitten, der Wert (hier "0") ist somit nicht mehr Teil der Prüfung :(


--- Code: ---define Test_Log notify 1W_Flur_DS2413:.* { Log 3, "@: 1W Test Wert: ".Value("1W_Flur_DS2413") }
--- Ende Code ---

Der geht und Dank dem "event-on-change-reading" wird er auch nur noch bei Änderung abgefahren, aber auch hier fehlt mir wieder die Prüfung auf den Wert von sensed.A.


--- Code: ---define Test_Log notify 1W_Flur_DS2413:sensed\.A.*0 { Log 3, "@: 1W Test Wert: ".Value("1W_Flur_DS2413") }
--- Ende Code ---

Der scheint das zu tun was ich möchte, aber das ".*" stört mich persönlich etwas.

Ich glaub ich mach da später weiter. Außerdem scheint mir "laggt" die Abfrage des 1W Busses obwohl ich das interval (Testweise) auf eine Sekunde runtergeschraubt habe.

Vielen Dank für Deine Unterstützung.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln