Hallo ! Ich bin ziemlich sehr neu hier und möchte mit der Heizungssteuerung beginnen. Nach langem Lesen und Suchen habe ich schon einiges geschafft (HM-Produkte mit FHEM verbinden, peeren u.ä.). Nun geht es aber ins Eingemachte und ich muss etwas "programmieren". Es gibt ja schöne (aber leider etwas veraltete) Beispiele in der Kategorie "Examples", nur steht in den Beispielen nicht dabei wo (in welche Datei) die verschiedensten Einträge hin gehören.
Also z.B. der untenstehende Block aus https://wiki.fhem.de/wiki/Heizungskontrolle_Einfach_mit_HomeMatic_HM-CC-VD (https://wiki.fhem.de/wiki/Heizungskontrolle_Einfach_mit_HomeMatic_HM-CC-VD)
# Dummy-Schalter fuer Heizungssteuerung im DG
define DG.HeizungOnOff dummy
attr DG.HeizungOnOff room DG.Flur
attr DG.HeizungOnOff webCmd toggle:on:off:statusRequest
define FileLog_DG.HeizungOnOff FileLog /opt/fhem/log/DG.HeizungOnOff-%Y-%m.log DG.HeizungOnOff
attr FileLog_DG.HeizungOnOff logtype text
attr FileLog_DG.HeizungOnOff room DG.Flur
define SVG_FileLog_DG.HeizungOnOff SVG FileLog_DG.HeizungOnOff:GasthermeOnOff:CURRENT
müssen in der Befehlszeile von FHEM angegeben werden und finden sich dann in fhem.cfg wieder. Richtig ?
Und wohin gehört dieser Block ?
# "ValvePosition" auswerten, weil "state" auch nichtnumerische Werte
# wie z.B. "set_..." annehmen kann.
# Anders als bei FHT und im Wiki steht das %-Zeichen mit Blank getrennt
# vom Wert, also müssen 2 Zeichen am Ende abgeschnitten werden.
# Bei "model=HM-CC-TC" erhält man jeden Wert mehrfach. Deshalb HM-CC-VD.
# Erst bei "$ventil > 16" von Wärmebedarf ausgehen, da Errorposition 15 % ist.
define n_heizung notify n_heizung {\
my $brauche_waerme=0;;\
my $ventile_im_leerlauf=0;;\
my $ventile_mit_bedarf=0;;\
my $heizung_status=ReadingsVal("DG.HeizungOnOff","state","off");;\
my @thermostat = devspec2array("model=HM-CC-VD");;\
foreach(@thermostat) {\
my $ventil=ReadingsVal($_, "ValvePosition", "101 %");;\
$ventil=substr($ventil, 0, (length($ventil)-2));;\
Log(3,"HKE - Ventilöffnung: " . $_ . " " . $ventil);;\
if ($ventil > 16) {\
$brauche_waerme=1;;\
$ventile_mit_bedarf++;;\
}\
if ($ventil < 8) {\
$ventile_im_leerlauf++;;\
}\
}\
if ($brauche_waerme != 0) {\
Log(3,"HKE - Wärme benötigt. Vorheriger Heizungsstatus: " . $heizung_status);;\
Log(3,"HKE - " . $ventile_mit_bedarf . " Heizkörper von " . @thermostat . " melden Bedarf (> 16 % Öffnung)");;\
fhem("set DG.HeizungOnOff on") if ($heizung_status ne "on")\
}\
else {\
if ($ventile_im_leerlauf == @thermostat) {\
Log(3,"HKE - Keine Wärme (mehr) benötigt. Vorheriger Heizungsstatus: " . $heizung_status);;\
fhem("set DG.HeizungOnOff off") if ($heizung_status eq "on")\
}\
else {\
Log(3,"HKE - Heizbedarf: " . $ventile_im_leerlauf . " von " . @thermostat . " Ventile stehen bei 0 %.");;\
}\
}\
}
nach 99_myUtils ? Oder auch irgendwie nach fhem.cfg (evtl mit include) ? Ich habe auch andere Beispiele und Codeschnipsel angesehen ohne darauf zu kommen. Und im WIKI bin ich auch nicht fündig geworden (oder habe es schlicht überlesen). Gib es hier irgend eine Anleitung was wo hingehört, wie zu bearbeiten und im schlimmsten Fall wieder zu löschen (schwerer Programmierfehler) ?
Danke im Voraus !
Das oberste gibst Du ganz normal in FHEMWEB ein. Also die Befehle wohl gemerkt, nicht die Kommentare.
Das unterste auch. Das ist ein Notify. Hier musst aber etwas tricksen.
define n_heizung notify a b
erst so und dann auf das DEF drücken. Danach a b löschen und den unteren Text eingeben. ABER!!! Backslash weg und doppelte Semikolons weg - nur ein einfaches lassen.
(Zu spät, aber da schon fertig):
Hallo,
beides gehört in fhem.cfg, wobei zusammenhängende Codeblöcke am besten über "raw definition" einzutragen gehen (öffnet sich beim Klick unten bei jedem Device; die Befehle müssen dann nichts mit dem Device zu tun haben, über as man dahin gekommen ist).
Kurze Erklärung:
Es handelt sich um "define"-Anweisungen, auch wenn der 2. Block etwas länger ist und optisch anders aussieht: Das ist ein Ausschnitt aus der fhem.cfg, der direkt aus der Datei kopiert wurde und nicht über einen entsprechenden (internen) Editor, daher muß man das noch editieren wie von Cooltux angemerkt.
Man sollte aber NIEMALS die fhem.cfg direkt editieren - Ausnahmen: Notfälle und Experten, die wissen was sie tun.
Also: gewöhn es dir gleich "richtig" an, für Übersicht sorgen Räume und etwas Übung mit "list" in Verbindung mit regex und FILTER (siehe Einsteigerdoku).
Gruß, Beta-User
Danke !! Hat mir mal sehr weitergeholfen, werde das dann morgen mal angehen !
Zitat von: Beta-User am 03 Januar 2018, 14:28:25
wobei zusammenhängende Codeblöcke am besten über "raw definition" einzutragen gehen
noch besser geht es per telnet :)