FHEM > Automatisierung

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

<< < (2/2)

justme1968:

--- Zitat von: HeadCrash schrieb am Do, 18 Juli 2013 22:57 ---Nur leider scheint mir da immer noch ein Stück zu fehlen, sorry falls ich nerve.
--- Ende Zitat ---

noch nicht :)



--- Zitat von: HeadCrash schrieb am Do, 18 Juli 2013 22:57 ---

--- 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 :(
--- Ende Zitat ---

doch. ist es. die syntax ist <device>:<reading>. der doppelpunkt ist das trennzeichen und danach wird intern geparsed. im prinzip gehört alles was nach dem zweiten doppelpunkt im event kommt auch nicht mehr zum reading  namen sondern ist der wert des readings (<device>: <reading>: <wert>).



--- Zitat von: HeadCrash schrieb am Do, 18 Juli 2013 22:57 ---

--- 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.
--- Ende Zitat ---

das matched auf alle events vom 1W_Flur_DS2413. wenn du wirklich auf alles matchen willst kannst du das ':.*' auch weg lassen und nur das <device> hin schreiben.



--- Zitat von: HeadCrash schrieb am Do, 18 Juli 2013 22:57 ---

--- 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.
--- Ende Zitat ---

wie oben schon gesagt: normalerweise verwendest du <device>:<reading> als pattern im notify. also so:
--- Code: ---define test notify 1W_TEST:sensed.A ...
--- Ende Code ---
das matched genau auf das eine reading sensed.A. wenn du dann etwas wertabähngig machen möchtes geht das normalerweise mit perl code (die version von oben den wert mit zu matchen geht wird aber sehr schnell unhandlich wenn es nicht mehr nur um 0 oder 1 geht.) im perl code bekommst du dann in deinem fall mit %EVTPART1. also so etwas:
--- Code: ---define test notify 1W_TEST:sensed.A {
  if( "%EVTPART1" == 1 )
    ...
  } else {
    ...
  }
}
--- Ende Code ---
(sowas am besten erst mal nur mit {} eingeben und dann im web frontend mit klick auf das DEF editieren. das spart sich um das maskieren von ';' und zeilenenden gedanken zu machen.)

je nach anwendung ist sensed vielleicht auch das falsche reading. bei einem DS2406 z.b. gibt es zusätzlich noch ein latch reading. das wird genau ein mal getriggered wenn sich das signal das erste mal ändert und bleibt so lange stehen bis es von hand zurück gesetzt wird.



--- Zitat von: HeadCrash schrieb am Do, 18 Juli 2013 22:57 ---Außerdem scheint mir "laggt" die Abfrage des 1W Busses obwohl ich das interval (Testweise) auf eine Sekunde runtergeschraubt habe.
--- Ende Zitat ---


im owserver ist ein cache timeout konfiguriert. alle anfragen die schneller als dieser timeout rein kommen werden aus dem cache beantwortet und spiegeln nicht den 'realen' wert des 1-wire devices dar. du kannst zwar im prinzip diesen timeout sehr weit runter setzen oder die ungecacheten werte verwenden. da es aber immer eine gewisse zeit braucht die werte aus dem 1-wirte device auszulesen (bei den DS18B20 z.b. etwa eine sekunde um die temperatur zu messen) macht das keinen sinn und du blockiertst damit nur alles.

im übrigen solltest du (je nach devices die bei dir am 1-wire bus hängen) für das OWserver device dsa attribut nonblocking setzen. sonst wird fhem sehr träge wenn du z.b. 10 temperaturen abfragst weil das alleine schon 10 sekunden dauert.

1-wire ist nicht wirklich für echtzeit gedacht.

gruss
  andre

HeadCrash:

--- Zitat von: justme1968 schrieb am Fr, 19 Juli 2013 11:12 ---wenn du dann etwas wertabähngig machen möchtes geht das normalerweise mit perl code
--- Ende Zitat ---


Okay, dann war das der Teil den ich übersehen hatte.

Leider ist bei meinem RasPi gestern das Filesystem (mal wieder) kaputt gegangen (SD-Karten Problemchen). Daher muss ich das 1W erstmal wieder erneut-installieren, das fehlte in meiner Backup SD-Karte.

Aber ich glaub ich weiß jetzt was ich zu tun hab.

Nochmals vielen Dank für die ausführlichen Infos.

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln