Hallo,
habe ein Problem mit der Übersichtlichkeit in cfg-Dateien.
Ich möchte verschiedene Befehle einmalig 5min nach Start von fhem ausführen lassen. Damit das ganze übersichtlich bleibt, habe ich es in einer cfg-Datei strukturiert. per include wird die Datei nun in fhem eingebunden.
# Sound-Einstellung für alle Sonoskomponenten
#
# wird 5min verzögert ausgeführt
#
define a5 at +00:05:00 \
#
# Bad, Play 1
#
set Sonos_Bad Volume 5;;\
set Sonos_Bad Treble 10;;\
set Sonos_Bad Bass 3;;\
set Sonos_Bad Balance 0;;\
set Sonos_Bad Loudness 1;;
#
Leider klappt das nicht. Wenn ich die Kommentare zwischen Define und dem 1. set weglasse, läuft es! Wo liegt das Problem? Oder wie kann man es übersichtlich machen. Die Liste ist in Wahrheit um Einiges länger...
djhans.
Und wo ist das notify, welches auf global:INITIALICED (so ähnlich, kann grad nicht nachsehen) dein definiertes a5 auslöst?
Die fhem.cfg ist keine autoexec.bat, die der Reihe nach alles ausführt was drinn steht.
Wenn du was definierst, musst dich auch drum kümmern das es irgendwann ausgeführt wird :)
Hallo,
Zitathabe ein Problem mit der Übersichtlichkeit in cfg-Dateien.
FHEM hat damit aber kein Problem.
2 Möglichkeiten:
1. Finger weg von der fhem.cfg - FHEM schreibt die Codes schon richtig dort rein.
oder
2. In der fhem.cfg rumfuhrwerken und sich dann aber bitte selbst drum kümmern wenn was nicht klappt.
FHEM benötigt keine Kommentarzeilen - es kann die Codes auch ohne Kommentare interpretieren und ausführen.
Wenn du wirklich Kommentare verwenden willst dann kopier dir die fhem.cfg - streu deine Kommentare ein und druck dir das Ergebniss aus oder speicher dir die Datei dann auf dem Rechner ab.
Ach ja. Wenn du schon in der fhem.cfg "programmierst" dann musst du auch die FHEM-internen Vorgaben kennen und dich daran halten.
Welche das sind?
Keine Ahnung - ich lass FHEM selbst in seiner fhem.cfg rumschreiben.
Ich mach alles über das FHEMWEB.
Warum?
Weil FHEM schon weiss was es wo abspeichert und mir der Aufbau und das Aussehen der fhem.cfg egal sind.
Grüsse
Als kleiner "Denkanstoß"
define a5 at +00:05:00 \
#
Du beendest Zeile 1 mit "\" aber in der nächsten Zeile nicht (würde auch nichts bringen). Überlege Dir bitte, was das "\" macht ...
Hallo,
sicherlich wird fhem das korrekt wegschreiben... Aber irgendwann will man wissen, was man mal vor Monaten programmiert hat und da sind Kommentare schon hilfreich. Ich kann mir nicht vorstellen, dass jemand nach einem halben Jahr noch durch seine Konfiguration steigt, wenn die nicht kommentiert ist. Das muss doch gehen?
define a5 at +00:05:00 \
# \
funktioniert auch nicht... Die Syntax ist falsch, sagt fhem..oder braucht man für Kommentare auch ein ; ?
djhans
djhans.
innerhalb eines defines funktionieren keine Kommentare.
jedes device hat ein comment attribut. damit kannst du kommentare ohne files zu editieren.
gruss
andre
es geht aber nicht um einen Kommentar beim Device 8)
der einmal kram gehört in ein notify auf global:INITIALIZED und das ist ein device.
wenn es im notify zu unübersichtlich wird gehört es in mehrere. das sind wider devices. oder vom notify wird etwas in myUtils aufgerufen und da kann man wieder kommentieren so viel man will.
gruss
andre
ja. Aber eine der vom TE gestellten Fragen war doch eindeutig,
warum seine jetzige Lösung nicht funktioniert.
Zitat von: djhans am 31 Januar 2014, 12:14:52Leider klappt das nicht. Wenn ich die Kommentare zwischen Define und dem 1. set weglasse, läuft es! Wo liegt das Problem?
und darauf ist die Antwort: Weil in defines keine Kommentare funktionieren.
Was Du ihm jetzt beschreibst, ist die Antwort auf seinen zweiten Fragenkomplex:
Zitat von: djhans am 31 Januar 2014, 12:14:52Oder wie kann man es übersichtlich machen.
und da könnte ich mir vorstellen, dass diese Antwort nicht wirklich ausführlich genug ist, um wirklich weiterzuhelfen.
Davon abgesehen kann es durchaus auch Anwendungsfälle geben, in denen man eine Ausführung wirklich erst fünf Minuten nach dem FHEM Start haben möchte. Man sollte also in einem solchen Fall ein notify auf global:INITIALIZED definieren, das wiederum ein at definiert, das sich auf den Zeitpunkt INITIALIZED+5min bezieht 8)
Hallo Kollegen,
ich verstehe nur Bahnhof!
Eigentlich dachte ich, dass mein Problemchen trivial ist, scheint aber nicht zu sein. Deshalb noch einmal ein Erklärungsversuch mit der Bitte um einen Lösungsvorschlag. Das mit den Kommentaren im define habe ich jetzt verstanden. Ist zwar blöd, aber nicht zu ändern.
Betateilchen hat mein Problem erkannt. Das Sonos System benötigt nach dem fhem Start eine gewisse Zeit, bis es initialisiert ist. Danach möchte ich alle Komponeten mit entprechenden Parametern laden. Also eine Reihe von set Sonos_Bad Volume 3, set Sonos_Schlazimmer Volume 10, etc..-Befehlen.
habe dazu eine Sonos_Sound.cfg gebaut, die ich testweise aus dem Webinterface mit include "Sonos_Sound.cfg" aufgerufen habe. Der Code define a5 at +00:05:00....usw. (siehe oben) funktioniert und nach 5 min wurden die Parameter in das Sonos System geschrieben.
Nun dachte ich halt, man ruft einfach den include aus der fhem.cfg auf und beim Start von fhem ist dann alles prima! Aber das funzt nicht! habe verstanden, dass man einen notify benötigt, der den Code dann ausführt. Aber so richtig komme ich nicht weiter...
Nochmals Danke für Eure unendliche Geduld,
Christian.
Hallo,
Zitatdass jemand nach einem halben Jahr noch durch seine Konfiguration steigt, wenn die nicht kommentiert ist.
Wenn at oder notify mit a5 benannt werden ist kalr das da niemand mehr durchblickt.
Das schöne an FHEM ist aber das man den at (oder notify oder Geräten) sinnige und sprechende Namen geben kann.
Ein
define Sonos_initialized at +00:05:00 ...
sagt einem sicher auch nach 2 Jahren noch worum es geht.
Ein notify auf global:INITIALIZED sollte sich allerdings im Forum mithilfe der Suchfunktion finden lassen.
Wenn dir notify nichts sagt würde ich vorschlagen mal das Einsteiger.pdf, die commandref und die Suchfunktion im Forum zu bemühen.
Grüsse
Hallo,
sicher! BEvor die Klamotten irgendwann mal produktiv werden, kriegen sie auch vernünftige Namen. Das ist ein TEst um zu prüfen, was geht und was nicht geht!
Die Dokus zu Notify habe ich bestimmt schon 10 x gelesen, aber offenbar bin ich zu blöd für fhem. notify auf global:INITIALIZED fine ich auch nix zu.
ICh finde es wirklich toll,dass es Leute gibt, die sich bereit erklären einigen DAUs das fhem zu erklären, aber ich habe ein wenig den Eindruck, dass ihr Experten Euch nicht in die DAUs hineinversetzten könnt. Mir fehlen in den Dokus die Zusammenhänge und auch zur Syntax wird nicht viel erklärt. Warum kommt da ein Semikolon hin oder warum geht der Kommentar da gerade nicht. Wann kommt die runde Klammer, wann die Geschweifte...also wenn man gerade mit fhem anfängt is das nicht ganz einfach zu verstehen.
"fhem.cfg ist keine autoexec.bat" habe ich hier gelesen.. OK. das mag sein, aber wie funktioniert es dann?
Egal!
Ich fürchte, fhem ist eher etwas für Programmierprofis und nichts für einfache Anwender, die schnell mal ein paar Lampen schalten möchten. Es ist einfach zu komplex. Wenn man nicht der Profi ist, dann muss man wohl doch auf kommerzielle Produkte wie Loxone zurückgreifen um zum Ziel zu kommen.
Bitte nicht falsch verstehen, ich finde fhem toll! Aber offenbar nichts für mich, ic durchschaue es einfach nicht....
djhans.
Na, du sollst ja was lernen dabei. Außerdem ist auch der Anfängerbereich kein Schnellimbiss, der dir dein Wunschmenü kocht. Aber du bekommst hier die Rezepte dafür ;)
Warum die fhem.cfg nicht die autoexec.bat ist:
Selbige wurde bekanntlich beim Start von MS-Dos Zeile für Zeile abgearbeitet, die Befehle jeweils ausgeführt.
Das ist bei der fhem.cfg nicht der Fall.
Die wird beim Start eingelesen. Aber nicht alles, was an Befehlen drinnen steht, wird auch sofort ausgeführt.
define WieAuchImmerDeineRoutineHeissensoll notify global:INITIALIZED set...
Dies bewirkt, dass nach dem Hochfahren (das ist das global:INITIALIZED) ein Befehl ausgeführt wird. Da kommt dein at dann hinten dazu.
Du musst fhem also sagen, dass nach dem Hochfahren was zu tun ist. Dies macht das notify...
für die cfg gibt es keine Schönheitspreise!
Besser über das frontend arbeiten. Dort sind Kommentare möglich, zum sortieren gibt es Gruppen und Räume (inkl hidden). Das manuelle bearbeiten der cfg löst keine Probleme sondern schafft welche.
vg
Jörg
Hallo Rice,
super! Besten Dank für die Erklärung. Jetzt bin ich ein Stückchen weiter. Das sind Grundlagen und Zusammenhänge die man wissen muss. Davon gibt es sicherlich eine ganze Reihe. Gibt es kein zusammenhängendes Werk, wo diese Dinge beschrieben sind?
Lernen kann man nur, wenn man Übungsmaterial und Bücher hat, in denen die Dinge beschrieben sind. Natürlich erwarte ich hier keine fertigen Lösungen, ich will halt die Grundlagen begreifen.
Vor 10 Jahren habe ich einen Teil meiner Haussteuerung über die CControl von Conrad verwirklicht. Auch da musste ich mich erst reindenken, aber die Syntax des ProgrammCodes war deutlich besser zu lesen und zu verstehen. Das funktioniert bei fhem nicht mehr und das macht die Sache so schwer für mich..
Das viel zitierte "http://fhem.de/Heimautomatisierung-mit-fhem.pdf" ist sicherlich eine Pflichtlektüre, aber erklärt m.E. nicht die Grundlagen und geht nicht weit geneug auf die Syntax des Codes ein.
Ich habe bislang noch keinen einzigen Aktor den ich ansteuern kann, sondern spiele derzeit mit Fritzbox, Dreambox und Sonos um zu verstehen, wie hier programmiert wird. Eigentlich wollte ich anfangen Raum für Raum mit enocean auszustatten, aber ich bin mir nicht mehr sicher, ob das wirklich zum Erfolg führt, denn ich kriege es noch nicht mal hin, ein Script zu schreiben, was den Sonos nach meinen Vorstellungen ansteuert....
Also: Welche Werke der fhem-Literatur soll ich mir am Besten reinziehen? Oder sollte ich doch besser erst mit einem Schalter und einer Lampe anfangen....
Und was ist mit perl! Ist das die Vorraussetzung ùm fhem zu vestehen?
Danke und Gruß,
Christian
Hallo,
tja, ausser das Einsteiger.pdf (bald in einer überarbeiteten Version) Wiki, commandref und Forum gibt es (noch) nichts.
Insbesondere keine Bücher in denen beschrieben wird wie FHEM "funktioniert".
Über kurz oder lang wirst du aber über ein "Grundlagenbuch für Perl" nicht umhin kommen.
Grüße
Konfig und Code zu strukturieren ist m.E. sinnvoll und erstrebenswert.
Probiere es so rum:
# Sound-Einstellung für alle Sonoskomponenten
#
# wird 5min verzögert ausgeführt
#
# Bad, Play 1
#
define a5 at +00:05:00 \
set Sonos_Bad Volume 5;;\
set Sonos_Bad Treble 10;;\
set Sonos_Bad Bass 3;;\
set Sonos_Bad Balance 0;;\
set Sonos_Bad Loudness 1;;
#
oder verpacke das ganze in Funktionen, z.B. in 99_mySonosUtils.pm
# Sound-Einstellung für alle Sonoskomponenten
#
# wird 5min verzögert ausgeführt
#
# Bad, Play 1
#
define a5 at +00:05:00 {InitSonos()}
in 99_mySonosUtils.pm (analog zu 99_myUtils.pm erstellen) kannst Du dann Funktionen mit Kommentaren erstellen:
sub InitSonos()
{
#
# Bad, Play 1
#
{fhem("set Sonos_Bad Volume 5")}
{fhem("set Sonos_Bad Treble 10")}
{fhem("set Sonos_Bad Bass 3")}
{fhem("set Sonos_Bad Balance 0")}
{fhem("set Sonos_Bad Loudness 1")}
#
# usw.
}
Es gibt sicherlich noch andere Varianten. Keine Ahnung, ob o.g. eine gute ist. So mache ich es.
Grüße,
Merhan
Hallo,
wenn du das ganze jetzt noch mit Code-Tags versehen könntest würde auch jeder auf den ersten Blick sehen was Code und was normaler Text ist.
Danke.
Grüße
Zitat von: Puschel74 am 31 Januar 2014, 17:41:16
Hallo,
wenn du das ganze jetzt noch mit Code-Tags versehen könntest würde auch jeder auf den ersten Blick sehen was Code und was normaler Text ist.
Danke.
Grüße
Wieder was gelernt. Danke.
Hallo,
nochmals herzlich Dank an alle für die Anregungen. Ich habe jetzt auch etwas gelernt und es hat sogar funktioniert! :)
global:INITIALIZED define a1 at +00:05:00 set Sonos_Bad Play
als Befehl im Webinterface abgesetzt, die Config gespeichert, fhem neu gestartet und nach 5min ging der Sonos im Bad an....
das ist doch das, was ich wollte. Jetzt muss ich halt noch die Funktionen bauen..
@puschel:
kannst Du ein Buch zu Perl empfehlen?
djhans.
Hallo,
Zitat@puschel:
kannst Du ein Buch zu Perl empfehlen?
Leider nicht - ich hab meines in der Firma liegen und jetzt bereits zum Glück Wochenende.
Aber nach Eingabe von "Perl Buch" in das Suchfeld hab ich 21 Treffer bekommen.
Grüße
Bearbeiten im Frontend bedeuted: im Raum das device anklicken und dann auf "Def". Alle Änderungen durchführen und schließlich sichern.
Habe ich anfangs auch nichr geblickt!
Huhu,
vier cents :)
- Perl-Buch: "Einführung in Perl", Schwarz, Phoenix, Foy - O'Reilly-Verlag, ISBN 978-3-89721-887-1. Für ein Sachbuch seeehr unterhaltsam geschrieben. In Perl MUSS man sich m.E. ein wenig einarbeiten - ich hab ungefähr ein drittel gelesen und dann floorplan.pm zusammengeschustert :)
- Auch in regexp muss man sich einarbeiten, siehe zB http://www.troubleshooters.com/codecorn/littperl/perlreg.htm
- Config strukturieren: Ich bin mittlerweile komplett vom Bearbeiten der cfg mittels Editor weg. Geräte (auch virtuelle wie at/notify) neu anlegen durch absetzen des define-Befehls via Kommandofeld des Webfrontends, Ändern von Attributen etc über den Detailscreen im Webfrontend, und ab und zu via Kommandofeld "save". Ich kriege damit alles hin was ich brauche, kann autocreate ohne Ärger benutzen und habe keinen Stress mit rereadconfig oder zerquirlten includes. Alle notifies, die mehr als 2 Zeilen Code brauchen, packe ich in Routinen in 99_myUtils.pm . Wie der Inhalt der fhem.cfg aussieht ist mir wurscht - die Windows-Registry kümmert mich ja auch nicht.
Ist aber alles Geschmackssache.
- Zum _technischen_ Einstieg in fhem gibt es http://www.fhemwiki.de/wiki/DevelopmentModuleIntro - das ist aber auch wieder nix für den geneigten Poweruser, sondern wendet sich eher an den, der Module erstellen will und dazu die internen technischen Strukturen und Mechanismen von fhem verstehen muss. Also das andere Extrem zum Einsteiger-pdf. Dazwischen gibt es m.W. noch nix.
- Für ein Heranführen an fhem in Kombi mit Perl-Befehlen über das hinaus, was bersits im Einsteieger-pdf steht, fehlt mir noch ein schlüssiges Konzept, denn die Erwartung des Lesers orientiert sich m.E. immer an seiner eigenen zu bewältigenden Aufgabenstellung. Da diese Ausfgabenstellungen sooo unterschiedlich sind, ist mir noch nicht eingefallen, wie man das sinnvoll aufbauen kann. Wäre dann die nächste Erweiterung des Einteiger-pdf - Und irgendwann ist für mich dann der Aufwand auch ehrlich gesagt so groß, dass ich das mal kostenpflichtig machen müsste. Jetzt kommt erst mal ne Version mit Erweiterungen um HomeStatus/Anwesenheitserkennung, Heizungssteuerung, Multimedia, Ansatz zu http-Steuerung und erweiterter Erklärung zur FHEMWEB-Konfiguration. Weiterhin kostenlos :)
So long,
Gruß, Uli
Hallo,
vielen Dank für die Tipps. Dann werde ich mir das Buch mal besorgen....
Ich möchte hier noch mal ausdrücklich sagen, dass ich es absolut klasse finde, dass es Leute gibt, die Ihre Projekte der Allgemeinheit kostenlos zur Verfügung stellen und dafür auch noch Hilfestellung geben!
Ich finde das fhem Projekt super und hoffe, dass eines Tages der Groschen bei mir fällt und ich fhem richtig nutzen kann.... :-)
Danke und Gruß,
Christian
Hallo,
ich noch einmal! Ich habe immer noch keine gute Idee, wie ich das umsetze.
define Sonos_Init notify global:INITIALIZED define Init_Sonos_Sound at +00:05:00 include Sonos/Sonos_Sound.cfg\
bewirkt, dass nach 5min die Datei Sonos_Sound geladen wird. Der Inhalt dieser Datei soll dann eigentlich direkt abgearbeitet werden. Aber wie stelle ich das an, ohne ein weiteres define? Die Set-Sonos-Befehle gibt es eben erst nach einer gewissen Zeit.
Ich brauche noch einmal einen Tipp!
#
#
# Wohnzimmer, Connect:Amp, SUB
#
define Sound_Wohnzimmer at +00:00:30 \
set Sonos_Wohnzimmer Volume 5;;\
set Sonos_Wohnzimmer Treble 10;;\
set Sonos_Wohnzimmer Bass 5;;\
set Sonos_Wohnzimmer Balance 0;;\
set Sonos_Wohnzimmer Loudness 1;;\
#
# Schlafzimmer, 2 x Play 1, Stereopaar
#
define Sound_Schlafzimmer at +00:00:30 \
set Sonos_Schlafzimmer Volume 3;;\
set Sonos_Schlafzimmer Treble 10;;\
set Sonos_Schlafzimmer Bass 3;;\
set Sonos_Schlafzimmer Balance 0;;\
set Sonos_Schlafzimmer Loudness 1;;\
#
Danke,
djhans
Hi,
bis zum notify um dem at ist alles richtig. Nur um alles in der Welt, warum dann eine cfg laden (die dann nochmal ein at erstellen soll ???) ? ;-)
Die cfg direkt zu bearbeiten ist eine ganz schlechte Idee, gewöhn Dir das blos gleich wieder ab. Erstelle ein at im web interface - da kommt dann alles rein was Du jetzt über Deine include machen möchtest.
Später (!) kannst Du dann komplexere Dinge in eine 99_..Utils auslagern.
vg
Jörg
Hi,
danke, aber das Problem ist, dass ich innerhalb des defines keine Kommentare verwenden kann und es dann zu unübersichtlich wird...
djhans
Zitat von: djhans am 03 Februar 2014, 22:04:55
Hi,das Problem ist, dass ich innerhalb des defines keine Kommentare verwenden kann
das ist eigentlich kein Problem, weil man die defines normalerweise in der Form, wie sie eingegeben wurden, ohnehin nie wieder zu Gesicht bekommt.
Merke: Nur Anfänger schauen in die fhem.cfg - aber diese Zwangsneurose geht irgendwann vorbei, spätestens, wenn man die Nutzlosigkeit dieses Unterfangens verstanden hat. 8)
Zitatdanke, aber das Problem ist, dass ich innerhalb des defines keine Kommentare verwenden kann und es dann zu unübersichtlich wird...
wie Du möchtest ;-)
Vielleicht möchtest Du ja trotzdem mal einen Blick auf die Attribute dort werfen: room, group, alias und comment.
ZitatMerke: Nur Anfänger schauen in die fhem.cfg - aber diese Zwangsneurose geht irgendwann vorbei, spätestens, wenn man die Nutzlosigkeit dieses Unterfangens verstanden hat. 8)
<- gaaanz genau 8)
vg
jörg
Hallo,
....bin ja auch noch Anfänger! Aber ich merke, dass ich immer seltener in diese Datei schaue.... :)
Habe es jetzt mit myUtils gemacht. Geht auch!
Danke und schönen Abend noch,
Christian.