Habe den Titel geändert, weil der Eintrag eine andere Wende genommen hat. RainerHallo,
ich habe seit einer Woche fhem installiert und drei HomeMatic Devices. Ohne Heimautomatisierung-mit-fhem.pdf wäre ich sehr aufgeschmissen gewesen. Die meiste Zeit hat mich ein Problem mit overload gekostet. Dann konnte ich mich um das Programmieren von Abläufen kümmern. Dabei vermisste ich eine Art Programmersguide und Referenz. Am liebsten im PDF Format.
Hier sind die Punkte die mich Nerven gekostet haben (trotz Fhem Wiki, Forum und Google Suche) und bei denen ich auch noch Verständnisprobleme habe. Und dies trotz Technik und Programmerkentnissen:
- Syntax und Abfrageformen für die einzelnen Variablem und Funktionen und deren zusammenspiel. z.B.
define sabotage_chk notify .*:[Ss]abotage.* { if("%" !~ m/off/) { \
FBMail('name@@gmx.ch',' @ SabotageError %',' @ SabotageError %');;\
if ( Value("Alarmanlage") eq "on") {fhem("trigger Alarm @_ist_%")};;\
Log 3, "@: SabotageError %";; \
} \
}
- Wie und wo brauche ich .*
- @ und %; habe mittlerweile nach langen suchen gefunden, dass @ % ersetzt sind durch $NAME und $VALUE
- Wie frage ich Statien ab.
Einiges habe ich dann im Wiki, für mich gut versteckt, gefunden. Vieleicht reicht es schon das Wiki als erweiterses oder seperates Heimautomatisierung-mit-fhem.pdf zur Verfügung zu stellen. In einem PDF mit Inhaltsverzeichnis komme ich bessser zurecht, speziell kann man darin mit find arbeiten was im Wiki nicht geht.
Bitte betrachtet dies nicht als Kritik, sondern als Anregung Fhem weiter zu entwickeln.
Danke und mit freundlichen Grüßen Rainer
Hallo Rainer,
wenn Du Hinweise zum Eintsieger-pdf hast, gerne her damit. Am liebsten fertig geschrieben Absätze, die ich gern ins pdf aufnehme.
Viel Spaß und Erfolg mit fhem,
Uli
@R_Fhem:
Zitatspeziell kann man darin mit find arbeiten was im Wiki nicht geht.
Welche Art von "Find" fehlt Dir denn im Wiki?
Peter
Peter,
ich meine damit eine Suche im Wiki. z.B Suche nach Sabotage, oder If, oder was immer ich gerade suche und eine Beschreibung benötige. Innerhalb eines Wiki Artikels kann ich such(mit Strf+f) aber nicht über das gesammte wiki. Oder habe ich da irgendetwas übersehen?
Gruß Rainer
Sieht das oben rechts im Wiki bei Dir nicht so aus:
Hallo Peter,
Ja,Ja, manchmal ist man blind.
Danke Rainer
Hallo Uli,
hier ein Beitrag zu "Ein Einblick in die Konfigurationsdatei fhem.cfg":
Besonderheiten der fhem.cfgDie Darstellung zwischen Weboberfläche und der Datei fhem.cfg weichen etwas voneinander ab:
- Das ; der Weboberfläche ist inder fhem.cfg ;;
- Ein \ am Ender der Zeile in der fhem.cfg bedeutetFortsetzung des Befehls in der nächsten Zeile
Anmerkung: Ein \ am Ende der letzten Zeile einer Definition/Funktion führt dazu, dass diese nicht ausgeführt wird. Siehe im Forum http://forum.fhem.de/index.php/topic,17614.msg116331.html#msg116331 (http://forum.fhem.de/index.php/topic,17614.msg116331.html#msg116331).
Weitere Beiträge folgen bei Gelegenheit.
Gruß Rainer
ZitatEin \ am Ende der letzten Zeile einer Definition/Funktion führt dazu, dass diese nicht ausgeführt wird.
Bevor diese Aussage Verbreitung findet: das fuehrt "nur" dazu, dass die naechste Zeile in der fhem.cfg zum aktuellen hinzugefuegt wird. Wenn die aktuelle Definition dadurch nicht mehr korrekt ist, dann wird sie natuerlich auch nicht ausgefuehrt, und im Log sollte eine passende Fehlermeldung auftauchen. Oder auch: das ist Sinn und Zweck vom \, und nichts besonderes.
Hallo,
ich habe das
ZitatAnmerkung: Ein \ am Ende der letzten Zeile einer Definition/Funktion führt dazu, dass diese nicht ausgeführt wird. Siehe im Forum http://forum.fhem.de/index.php/topic,17614.msg116331.html#msg116331.
geschrieben, weil ich ein riesen Problem damit hatte. Mein Code sah so aus:
.....
define Fenster_Kontakt_Notify notify Fenster_Kontakt_.* {\
fhem("set TestState_B $NAME: event: $EVENT");;\
\
if ("$EVENT" eq "closed") {\
fhem("set TestState_A $NAME: ZU");;}\
if ("$EVENT" eq "open") {\
fhem("set TestState_A $NAME: AUF");;}\
if ("$EVENT" eq "off") {\
fhem("set TestState_C $NAME S $EVENT");;}\
}\
# Comment"
.....
Dies bedeutet, das ich eine Fortsetzung mit einer Leerzeile gemacht habe. Dies müsste eigentlich arbeiten. Leider wurde diese Define nicht ausgeführt und ich habe auch keine Fehlermeldung gesehen.
Ich gehe doch richtig in der Annahme, das der obige Code OK sein sollte, da ich ja eine leere Zeile dort habe???
Ich bestehe nicht auf der Anmerkung, die wichtige informationen sind für mich das \ und die ;;. Allerdings wüsste ich gerne was richtig ist.
Gruß Rainer
Das oben abgebildete notify (per copy&paste erzeugt) wird bei mir ohne Probleme definiert und auch per "trigger Fenster_Kontakt_Notify" ausgefuehrt, und meldet dann was von "Please define TestState_B first"
-> Ich sehe immer noch weder das Problem noch eine Merkwuerdigkeit.
Hallo,
sorry für die Verwirrung. Bei mir tritt der Fehler auf. Jedoch nicht in dem von mir genommenen Beispiel. Ich hatte dies gewählt weil es mir beim Beschreiben des Problems als erstes unter die Nase kam.
Hier mein event log mit und ohne \ sowie das enscheidende und zum Fehler führende Stück code:
Eventlog ohne \ bei sabotage:
Events:
2013-12-22 10:11:25.740 HMLAN hmUSB cond: ok
2013-12-22 10:11:25.740 HMLAN hmUSB Xmit-Events: ok:1
2013-12-22 10:11:25.740 HMLAN hmUSB prot_ok: last
2013-12-22 10:11:29.496 CUL_HM Fenster_Kontakt_01 Activity: alive
2013-12-22 10:11:29.500 CUL_HM ActionDetector alive:1 dead:0 unkn:0 off:0
2013-12-22 10:11:29.507 CUL_HM Thermostat_Wohnzimmer Activity: alive
2013-12-22 10:11:29.510 CUL_HM ActionDetector alive:2 dead:0 unkn:0 off:0
2013-12-22 10:11:41.399 dummy TestState Fenster_Kontakt_01: ZU
2013-12-22 10:11:41.403 CUL_HM Fenster_Kontakt_01 closed
2013-12-22 10:11:41.403 CUL_HM Fenster_Kontakt_01 contact: closed (to hmUSB)
2013-12-22 10:11:42.105 dummy TestState Fenster_Kontakt_01: ZU
2013-12-22 10:11:42.112 CUL_HM Fenster_Kontakt_01 alive: yes
2013-12-22 10:11:42.112 CUL_HM Fenster_Kontakt_01 battery: ok
2013-12-22 10:11:42.112 CUL_HM Fenster_Kontakt_01 sabotageError: off
2013-12-22 10:11:42.112 CUL_HM Fenster_Kontakt_01 closed
2013-12-22 10:11:42.112 CUL_HM Fenster_Kontakt_01 contact: closed (to hmUSB)
2013-12-22 10:11:43.257 dummy TestState Fenster_Kontakt_01: ZU
2013-12-22 10:11:43.266 CUL_HM Fenster_Kontakt_01 alive: yes
2013-12-22 10:11:43.266 CUL_HM Fenster_Kontakt_01 battery: ok
2013-12-22 10:11:43.266 CUL_HM Fenster_Kontakt_01 sabotageError: on
2013-12-22 10:11:43.266 CUL_HM Fenster_Kontakt_01 closed
2013-12-22 10:11:43.266 CUL_HM Fenster_Kontakt_01 contact: closed (to hmUSB)
2013-12-22 10:11:43.895 dummy TestState Fenster_Kontakt_01: AUF
2013-12-22 10:11:43.899 CUL_HM Fenster_Kontakt_01 open
2013-12-22 10:11:43.899 CUL_HM Fenster_Kontakt_01 contact: open (to hmUSB)
Hier mit \ am Ende von sabotage:
Events:
2013-12-22 10:09:09.132 CUL_HM Fenster_Kontakt_01 Activity: alive
2013-12-22 10:09:09.136 CUL_HM ActionDetector alive:1 dead:0 unkn:0 off:0
2013-12-22 10:09:09.140 CUL_HM Thermostat_Wohnzimmer Activity: alive
2013-12-22 10:09:09.142 CUL_HM ActionDetector alive:2 dead:0 unkn:0 off:0
2013-12-22 10:09:35.380 dummy TestState Fenster_Kontakt_01: ZU
2013-12-22 10:09:35.383 CUL_HM Fenster_Kontakt_01 closed
2013-12-22 10:09:35.383 CUL_HM Fenster_Kontakt_01 contact: closed (to hmUSB)
2013-12-22 10:09:36.499 dummy TestState Fenster_Kontakt_01: ZU
2013-12-22 10:09:36.503 dummy TestState_C Fenster_Kontakt_01: sabotageError: off
2013-12-22 10:09:36.503 dummy TestState_C TestState_C: Fenster_Kontakt_01: sabotageError: off
2013-12-22 10:09:36.507 CUL_HM Fenster_Kontakt_01 alive: yes
2013-12-22 10:09:36.507 CUL_HM Fenster_Kontakt_01 battery: ok
2013-12-22 10:09:36.507 CUL_HM Fenster_Kontakt_01 sabotageError: off
2013-12-22 10:09:36.507 CUL_HM Fenster_Kontakt_01 closed
2013-12-22 10:09:36.507 CUL_HM Fenster_Kontakt_01 contact: closed (to hmUSB)
2013-12-22 10:09:37.522 dummy TestState Fenster_Kontakt_01: ZU
2013-12-22 10:09:37.526 dummy TestState_C Fenster_Kontakt_01: sabotageError: on
2013-12-22 10:09:37.526 dummy TestState_C TestState_C: Fenster_Kontakt_01: sabotageError: on
2013-12-22 10:09:37.528 CUL_HM Fenster_Kontakt_01 alive: yes
2013-12-22 10:09:37.528 CUL_HM Fenster_Kontakt_01 battery: ok
2013-12-22 10:09:37.528 CUL_HM Fenster_Kontakt_01 sabotageError: on
2013-12-22 10:09:37.528 CUL_HM Fenster_Kontakt_01 closed
2013-12-22 10:09:37.528 CUL_HM Fenster_Kontakt_01 contact: closed (to hmUSB)
2013-12-22 10:09:38.388 dummy TestState Fenster_Kontakt_01: AUF
2013-12-22 10:09:38.390 CUL_HM Fenster_Kontakt_01 open
2013-12-22 10:09:38.390 CUL_HM Fenster_Kontakt_01 contact: open (to hmUSB)
Hier ein größerer Auszug von meiner fhem.cfg mit Kommentar wo ich den Fehler ein und ausschalte:
# Sabotage Alarm
define sabotage_chk notify .*sabotage.* { \
\
fhem("set TestState_C $NAME: $EVENT ");;\
\
}\ # dieser Kommentar ist nur zur Erklärung und nicht in meiner fhem.cfgmit dem \ habe ich keine Meldung, entferne ich diesen funktionert es
define sabotage_chk_2 notify Fenster_Kontakt_01 { \
\
if ("$EVENT" eq "sabotage") {\
fhem("set TestState_D $NAME: $EVENT");;}\
\
}
define Fenster_Kontakt_Notify notify Fenster_Kontakt_.* {\
fhem("set TestState_B $NAME: event: $EVENT");;\
\
if ("$EVENT" eq "closed") {\
fhem("set TestState_A $NAME: ZU");;}\
if ("$EVENT" eq "open") {\
fhem("set TestState_A $NAME: AUF");;}\
if ("$EVENT" eq "off") {\
fhem("set TestState_C $NAME S $EVENT");;}\
}\
#define Fenster_Kontakt_Notify notify Fenster_Kontakt_01 { if ("$EVENT" eq "closed") fhem("set TestState_A $NAME: ZU");; if ("$EVENT" eq "open")
Ich habe den \ am Ende des notify bei .*sabotage.* und Fenster_Kontakt eingefügt. .*sabotage.* bringt keine Funktion, der Fenster_Kontakt funktioniert.
Zur Sicherheit hier auch mein log von dem heutigen Test:
2013.12.22 10:05:18.350 1: Including fhem.cfg
2013.12.22 10:05:18.512 1: HMLAN_Parse: hmUSB new condition disconnected
2013.12.22 10:05:18.514 1: HMLAN_Parse: hmUSB new condition init
2013.12.22 10:05:18.546 1: Including ./log/fhem.save
2013.12.22 10:06:47.627 1: Including fhem.cfg
2013.12.22 10:06:47.789 1: HMLAN_Parse: hmUSB new condition disconnected
2013.12.22 10:06:47.791 1: HMLAN_Parse: hmUSB new condition init
2013.12.22 10:06:47.816 1: Including ./log/fhem.save
2013.12.22 10:08:58.823 1: Including fhem.cfg
2013.12.22 10:08:58.983 1: HMLAN_Parse: hmUSB new condition disconnected
2013.12.22 10:08:58.984 1: HMLAN_Parse: hmUSB new condition init
2013.12.22 10:08:58.998 1: Including ./log/fhem.save
2013.12.22 10:09:03.949 1: Including fhem.cfg
2013.12.22 10:09:04.113 1: HMLAN_Parse: hmUSB new condition disconnected
2013.12.22 10:09:04.114 1: HMLAN_Parse: hmUSB new condition init
2013.12.22 10:09:04.128 1: Including ./log/fhem.save
2013.12.22 10:11:20.238 1: Including fhem.cfg
2013.12.22 10:11:20.399 1: HMLAN_Parse: hmUSB new condition disconnected
2013.12.22 10:11:20.401 1: HMLAN_Parse: hmUSB new condition init
2013.12.22 10:11:20.425 1: Including ./log/fhem.save
2013.12.22 10:11:24.294 1: Including fhem.cfg
2013.12.22 10:11:24.462 1: HMLAN_Parse: hmUSB new condition disconnected
2013.12.22 10:11:24.464 1: HMLAN_Parse: hmUSB new condition init
2013.12.22 10:11:24.488 1: Including ./log/fhem.save
2013.12.22 10:13:30.772 1: Including fhem.cfg
2013.12.22 10:13:30.935 1: HMLAN_Parse: hmUSB new condition disconnected
2013.12.22 10:13:30.937 1: HMLAN_Parse: hmUSB new condition init
2013.12.22 10:13:30.962 1: Including ./log/fhem.save
2013.12.22 10:13:33.378 1: Including fhem.cfg
2013.12.22 10:13:33.543 1: HMLAN_Parse: hmUSB new condition disconnected
2013.12.22 10:13:33.545 1: HMLAN_Parse: hmUSB new condition init
2013.12.22 10:13:33.570 1: Including ./log/fhem.save
Es wäre schön dieses Problem zu finden.
Danke und Gruß Rainer
ZitatJedoch nicht in dem von mir genommenen Beispiel
Das war unhoeflich, da es meine Zeit verschwendet hat.
Wenn ich das abgebildete fhem.cfg-Ausschnitt bei mir per copy&paste einfuege, dann funktionieren beide notifies. Mit oder ohne Kommentar, bzw. mit oder ohne \ in der letzten Zeile. Weitere Ideen, wie es "kaputt" ausschauen koennte, habe ich nicht.
Hallo,
nochmal Sorry, ich war davon ausgegangen, dass der Fehler immer auftritt. Da es bei Dir nicht der Fall ist verstehe ich im Moment auch nicht was bei mir los ist.
Könnte es daran liegen, dass ich Ubuntu benutze?
Das es bei mir Auftritt ist durch das eventlog doch unumstritten?
Wenn keine weiteren Ideen , dann sollen wir den Fall ruhen lassen. Vielleicht findet sich was durch Zufall.
Gruß Rainer
P.S. Kann man den Titel ändern? Der führt zu unötigen Aufrufen, da sich es sich hauptsächlich um ein Problem dreht und nicht um einen Programmersguide.
Hallo,
ZitatP.S. Kann man den Titel ändern?
Ja. Kansnt sogar du machen.
Ersten Beitrag <Ändern> und den Titel bearbeiten.
Grüße