FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: rallye am 03 Januar 2018, 14:17:08

Titel: Welche "Befehle" in welcher Datei ?
Beitrag von: rallye am 03 Januar 2018, 14:17:08
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 !
Titel: Antw:Welche "Befehle" in welcher Datei ?
Beitrag von: CoolTux am 03 Januar 2018, 14:23:10
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.
Titel: Antw:Welche "Befehle" in welcher Datei ?
Beitrag von: Beta-User am 03 Januar 2018, 14:28:25
(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
Titel: Antw:Welche "Befehle" in welcher Datei ?
Beitrag von: rallye am 03 Januar 2018, 17:34:21
Danke !! Hat mir mal sehr weitergeholfen, werde das dann morgen mal angehen !
Titel: Antw:Welche "Befehle" in welcher Datei ?
Beitrag von: betateilchen am 04 Januar 2018, 20:59:16
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 :)