Autor Thema: neue Wiki-Seite: DOIF-Automatisierung  (Gelesen 2480 mal)

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8791
neue Wiki-Seite: DOIF-Automatisierung
« am: 14 Juli 2020, 20:43:44 »
Ich habe mal den ersten Aufschlag für eine neue Wiki-Seite gemacht: https://wiki.fhem.de/wiki/DOIF/Automatisierung

Ich habe mit dem Thema Licht begonnen. Die Seite wird von mir in der nächsten Zeit immer wieder verfeinert und erweitert werden.
« Letzte Änderung: 18 Juli 2020, 21:40:42 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8791
Antw:wiki: DOIF-Automatisierung
« Antwort #1 am: 18 Juli 2020, 21:40:19 »
« Letzte Änderung: 19 Juli 2020, 09:22:05 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF
Informativ Informativ x 1 Liste anzeigen

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8791
Antw:neue Wiki-Seite: DOIF-Automatisierung
« Antwort #2 am: 19 Juli 2020, 14:54:32 »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline cwagner

  • Sr. Member
  • ****
  • Beiträge: 670
Antw:neue Wiki-Seite: DOIF-Automatisierung
« Antwort #3 am: 23 Juli 2020, 23:21:04 »
Vielen Dank für das schöne Beispiel der Beschattungssteuerung, das meine zwei leidlich erfolgreichen DOIFs elegant ablösen könnte. Ich sehe aber noch einen ungeregelten Fall im sub shutter_$1: Wenn nämlich der Grenzwert für die Beschattung (in dem Beispiel die Raumtemperatur; in meiner Version die Solarstrahlung) bis zum Ende der eingestellten Zeitspanne überschritten bleibt, bleibt der Rollladen nämlich am Ende der Zeit in Beschattungsposition. Beispiel wäre R_Kinderzimmer1_O. Das Kind würde also den Nachmittag im Halbdunkel verbringen ;-)

Ich würde das mit einem else-Zweig im äußersten if regeln: fhem_set("$4:FILTER=STATE!=off off". Das wird dann einmal am Ende der Zeitspanne gültig und wegen des "Filter" nur an der Aktor gefeuert, wenn der Rollladen nicht hochgezogen ist.

Sehe ich das richtig?
Christian
« Letzte Änderung: 23 Juli 2020, 23:25:12 von cwagner »
Raspi 2B+3B: Raspbian 9.11,Perl v5.28.1, FHEM 5.9. 270 Entities in DbLog  für Heizung mit FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HM (CUL), 1-Wire (FT232RL & DS2480B), EnOcean (TCM EPS3), MQTT2. Im Einsatz u.a. DOIF, PID20, Threshold, OWX NewGen; Micropelt IRTV, Volkszähler

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8791
Antw:neue Wiki-Seite: DOIF-Automatisierung
« Antwort #4 am: 24 Juli 2020, 08:02:35 »
Vielen Dank für das schöne Beispiel der Beschattungssteuerung, das meine zwei leidlich erfolgreichen DOIFs elegant ablösen könnte. Ich sehe aber noch einen ungeregelten Fall im sub shutter_$1: Wenn nämlich der Grenzwert für die Beschattung (in dem Beispiel die Raumtemperatur; in meiner Version die Solarstrahlung) bis zum Ende der eingestellten Zeitspanne überschritten bleibt, bleibt der Rollladen nämlich am Ende der Zeit in Beschattungsposition. Beispiel wäre R_Kinderzimmer1_O. Das Kind würde also den Nachmittag im Halbdunkel verbringen ;-)

Ich würde das mit einem else-Zweig im äußersten if regeln: fhem_set("$4:FILTER=STATE!=off off". Das wird dann einmal am Ende der Zeitspanne gültig und wegen des "Filter" nur an der Aktor gefeuert, wenn der Rollladen nicht hochgezogen ist.

Sehe ich das richtig?
Christian

Es ist eine von vielen Möglichkeiten. Ich habe bei mir den Zweig zum Hochfahren ursprünglich komplett deaktiviert, weil mir das mehrfache Rauf-Runter zu viel war (tut den Rollos auch nicht gut). Ich finde es nicht schlimm, wenn über Nacht die Rollos auf Beschattung stehen. Man kann ja selbst entscheiden, ob sie unten bleiben sollen oder ob man sie manuell hoch fährt, aber das ist natürlich eine persönliche Entscheidung, sie kann bei jedem anders sein.

Alternativ kann man im elsif-Fall den Endzeittrigger zum Hochfahren hinzufügen:


Zitat
elsif ([$2:measured-temp] < 23.5 and [$3] eq "off" and get_Reading("$9") eq "on" or [$8])

Ich habe bei mir letztens noch den Zeitpunkt der Aktion in der Übersicht (uiTable) hinzugefügt.

Zitat
FOR (@{$VAR{sc}},"$_$1"|temp_ring([$_$2:measured-temp])|icon([$_$3:state],"fa_cloud","weather_sun\@yellow")|[$SELF:$_$1.von]|[$SELF:$_$1.bis]|icon([$SELF:$_$1.Status],"fts_shutter_10","fts_shutter_80").substr(::ReadingsTimestamp("$SELF","$_$1.Status",0),11,5)|WID([$SELF:$_$1.aktiv],"select,on,off"))

sieht dann so aus:



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline cwagner

  • Sr. Member
  • ****
  • Beiträge: 670
Antw:neue Wiki-Seite: DOIF-Automatisierung
« Antwort #5 am: 24 Juli 2020, 08:54:56 »




Alternativ kann man im elsif-Fall den Endzeittrigger zum Hochfahren hinzufügen:

Danke für den Fingerzeig: Das ist natürlich viel eleganter.

Die Zahl der der Rauf-Runters will ich über die Hysterese steuern (ich benutzte nicht die Raumtemperatur, sondern einen zentralen Sensor, der näherungsweise die Infrarot-Strahlung, also den Wärmeeintrag der Sonne in den Raum berücksichtigt). Die Uhrzeiteingrenzung sorgt dann dafür, dass nur die Zeiten berücksichtigt werden, in denen die Sonne direkt in den Raum scheint.

Jetzt bin ich noch am Überlegen, wie ich Deine Rollladensteuerung sub shutter {
   my ($value,$color,$type)=@_;
   $color="\@darkorange" if (!defined ($color) or $color eq "");
   if (!defined ($type) or $type == 3) {
return ($value,"","iconRadio,$color,0,fts_shutter_10,70,fts_shutter_50,100,fts_shutter_100","set");
   }
}
anstelle der reinen Zustandsanzeige noch einbaue, um hier auch gleich die manuelle Steuerung zu vereinen.

Christian
Raspi 2B+3B: Raspbian 9.11,Perl v5.28.1, FHEM 5.9. 270 Entities in DbLog  für Heizung mit FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HM (CUL), 1-Wire (FT232RL & DS2480B), EnOcean (TCM EPS3), MQTT2. Im Einsatz u.a. DOIF, PID20, Threshold, OWX NewGen; Micropelt IRTV, Volkszähler

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8791
Antw:neue Wiki-Seite: DOIF-Automatisierung
« Antwort #6 am: 26 Juli 2020, 09:56:09 »



Danke für den Fingerzeig: Das ist natürlich viel eleganter.

Die Zahl der der Rauf-Runters will ich über die Hysterese steuern (ich benutzte nicht die Raumtemperatur, sondern einen zentralen Sensor, der näherungsweise die Infrarot-Strahlung, also den Wärmeeintrag der Sonne in den Raum berücksichtigt). Die Uhrzeiteingrenzung sorgt dann dafür, dass nur die Zeiten berücksichtigt werden, in denen die Sonne direkt in den Raum scheint.

Jetzt bin ich noch am Überlegen, wie ich Deine Rollladensteuerung sub shutter {
   my ($value,$color,$type)=@_;
   $color="\@darkorange" if (!defined ($color) or $color eq "");
   if (!defined ($type) or $type == 3) {
return ($value,"","iconRadio,$color,0,fts_shutter_10,70,fts_shutter_50,100,fts_shutter_100","set");
   }
}
anstelle der reinen Zustandsanzeige noch einbaue, um hier auch gleich die manuelle Steuerung zu vereinen.

Christian

Es kommt darauf an, wie viele Fenster eine Beschattungsszene hat. Da bei mir mehrere Fenster pro Szene vorkommen können, habe ich nur den Status pro Szene eingebaut.

Falls du nur einen Rollladen pro Szene steuerst, kannst du deine Routine mit dem Rollladen (hier: Nr. $_$4) aufrufen. Z. B.

Zitat
FOR (@{$VAR{sc}},"$_$1"|temp_ring([$_$2:measured-temp])|icon([$_$3:state],"fa_cloud","weather_sun\@yellow")|[$SELF:$_$1.von]|[$SELF:$_$1.bis]|shutter([$_$4:pct]) .substr(::ReadingsTimestamp("$SELF","$_$1.Status",0),11,5)|WID([$SELF:$_$1.aktiv],"select,on,off"))

Dann sieht die Sache so aus, wenn ich nur einen Rollladen pro Szene angebe:

P.S. Für diejenigen, die das shutter-Widget nicht kennen - der Rollladen lässt sich über das Anklicken der Icons manuell steuern.
« Letzte Änderung: 26 Juli 2020, 10:06:47 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline Sany

  • Full Member
  • ***
  • Beiträge: 291
Antw:neue Wiki-Seite: DOIF-Automatisierung
« Antwort #7 am: 28 August 2020, 17:07:10 »
Hallo Damian,

es ist mir schon mal gelungen, eine ui_Table mittels template und FOR etc zu erstellen. Ich würds nur gerne besser verstehen und scheitere bei meinen Suchen die richtigen Infos zu finden. Genauer geht es mit um sowas wie
@{$VAR{sc}}, was ja ein array ist, aber diese Schreibweise habe ich bisher nirgends gefunden. Auch ob $VAR etwas bestimmtes in Perl ist oder eine Namensgebung deinerseits?
Ebenso finde ich bei split nix über das q in split (/\| */,   q(Szene|       Daemmerung|  ....
Ich weiß, ist haupsächlich Perl, aber wie gesagt per Suchmaschine hatte ich noch keinen Erfolg.
Vielleicht kannst Du mich da in die richtige Richtung schubsen?

Danke schon mal!
Und mal wieder großes Lob für die Möglichkeiten mit DOIF.

Sany
fhem auf Zotac ZBox nano als LVM unter Proxmox, Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, ZigBee/deConz, Z-Wave  ....

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8791
Antw:neue Wiki-Seite: DOIF-Automatisierung
« Antwort #8 am: 28 August 2020, 18:13:25 »
Hallo Damian,

es ist mir schon mal gelungen, eine ui_Table mittels template und FOR etc zu erstellen. Ich würds nur gerne besser verstehen und scheitere bei meinen Suchen die richtigen Infos zu finden. Genauer geht es mit um sowas wie
@{$VAR{sc}}, was ja ein array ist, aber diese Schreibweise habe ich bisher nirgends gefunden. Auch ob $VAR etwas bestimmtes in Perl ist oder eine Namensgebung deinerseits?
Ebenso finde ich bei split nix über das q in split (/\| */,   q(Szene|       Daemmerung|  ....
Ich weiß, ist haupsächlich Perl, aber wie gesagt per Suchmaschine hatte ich noch keinen Erfolg.
Vielleicht kannst Du mich da in die richtige Richtung schubsen?

Danke schon mal!
Und mal wieder großes Lob für die Möglichkeiten mit DOIF.

Sany

Auf diese Fragen habe ich gewartet :)
Ich werde das noch genauer im Wiki erklären.

Um modulspezifische Variablen zu erzeugen, sogenannte Instanzvariablen, musste ich mir was einfallen lassen.

$VAR wird durch $hash->{var} ersetzt.

aus

@{$VAR{sc}}
wird also

@{$hash->{var}{sc}}
was nichts anderes ist, als ein Array, das über die hash-Variable $hash->{var}{sc} erreichbar ist. Damit ist das Array nur innerhalb des definierten Modules bekannt und kann nicht mit anderen Variablen kollidieren.

Mit dem push-Befehl wird jeweils ein Element ins Array abgelegt. Nun ist das Element, nicht eine einfache Variable, sondern wieder ein Array.

man könnte definieren
push (@{$VAR{sc}},[("Erdgeschoss","Daemmerung2",....)]
da die Angabe der Anführungszeichen lästig ist, habe ich das Array mit den Parametern über den split-Befehl angegeben

split (/\| +/,q(Erdgeschoss| Daemmerung2|.....)) entspricht ("Erdgeschoss","Daemmerung2",....)

Der erste Parameter beim split ist eine Regex-Angabe für die Definition des Trennzeichens, hier also ein | und mindestens ein Leerzeichen, um die einzelnen Angaben zu trennen, das q macht noch Anführungszeichen um die Angaben, damit es eine Zeichenkette für den split-Befehl ist.

Damit erreiche ich, dass ich die einzelnen Angaben ohne Anführungzeichen mit beliebig vielen Leerzeichen ausgerichtet darstellen kann.

Auf diese Weise entsteht ein zweidimensionales Array, auf das man im definierten Modul sowohl im DEF-Bereich als auch im uiTable-Attribut z. B. über den FOR-Befehl zugreifen kann.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline Sany

  • Full Member
  • ***
  • Beiträge: 291
Antw:neue Wiki-Seite: DOIF-Automatisierung
« Antwort #9 am: 29 August 2020, 00:01:32 »
Hallo Damian,

vielen Dank für die Super Erklärung. Das war genau der Blick hinter die Kulissen, der mir bisher gefehlt hat. Ich denke, damit komme ich zurecht. Dann werde ich mal meine Vorhaben angehen.

Ich werde berichten....
fhem auf Zotac ZBox nano als LVM unter Proxmox, Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, ZigBee/deConz, Z-Wave  ....

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8791
Antw:neue Wiki-Seite: DOIF-Automatisierung
« Antwort #10 am: 25 Oktober 2020, 14:54:53 »
Bedingt durch die Jahreszeit rückt die Beschattungssteuerung in den Hintergrund, dafür wird die Heizungsregelung für die kommende Heizperiode wieder interessant. Ich habe zwei neue Automatisierungsbeispiele zur Heizungsregelung im Wiki aufgenommen.

https://wiki.fhem.de/wiki/DOIF/Automatisierung#Zeitgesteuerte_Heizungsregelung_mit_Hilfe_von_Raumthermostaten

Das erste Beispiel ist einfach realisiert, jegliche Änderungen müssen in der Definition des Moduls vorgenommen werden.

https://wiki.fhem.de/wiki/DOIF/Automatisierung#Steuerung_von_Raumthermostaten_f.C3.BCr_mehrere_R.C3.A4ume_ohne_GUI

Das zweite Beispiel ist flexibler, lässt sich einfach erweitern, besitzt ein GUI zur Visualisierung sowie zur Änderung von Zeiten und Vorgabe-Temperaturen.

https://wiki.fhem.de/wiki/DOIF/Automatisierung#Steuerung_von_Raumthermostaten_f.C3.BCr_mehrere_R.C3.A4ume_mit_GUI
« Letzte Änderung: 25 Oktober 2020, 15:53:42 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8791
Antw:neue Wiki-Seite: DOIF-Automatisierung
« Antwort #11 am: 26 Oktober 2020, 19:23:01 »
Vielleicht ist dem einen oder anderen aufgefallen, dass ich im Beispiel der Heizungsregelung eine etwas einfacher Variante der Definition von Arrays genutzt habe als im Beschattungsbeispiel:

statt
push (@{$VAR{sc}},[split (/\| */,q(Bad|                TH_Bad_HM|    Sonne_s|R_Bad|               30|  on|12:00|21:00| off|on))])kann man ebenso definieren:
push (@{$VAR{sc}},[qw(Bad                TH_Bad_HM    Sonne_s R_Bad                30   on 12:00 21:00  off on)])oder noch kürzer:
push (@{$_sc},[qw(Bad                TH_Bad_HM    Sonne_s R_Bad                30   on 12:00 21:00  off on)])denn sowohl @{$VAR{sc}} als auch @{$_sc} wird intern abgebildet auf @{$hash->{var}{sc}}

Ich werde das Beschattungsbeispiel ebenfalls auf die einfachere Definition ändern.

PS

qw(...) funktioniert solange die einzelnen Parameter selbst keine Leerzeichen beinhalten, es handelt sich hierbei um Perlsyntax
« Letzte Änderung: 26 Oktober 2020, 19:32:47 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8791
Antw:neue Wiki-Seite: DOIF-Automatisierung
« Antwort #12 am: 29 Oktober 2020, 09:55:19 »
Da bald die Lichterketten und Tannenbaumbeleuchtungen installiert werden, habe ich die Lichtsteuerung, wie bei der Heizungsregelung, von der Definition her vereinfacht.

https://wiki.fhem.de/wiki/DOIF/Automatisierung#Helligkeitsabh.C3.A4ngige_Zeitsteuerung_f.C3.BCr_mehrere_Szenarien_mit_tabellarischer_.C3.9Cbersicht

Auch bei der Beschattungssteuerung habe ich die split-Befehle herausgenommen.

https://wiki.fhem.de/wiki/DOIF/Automatisierung#Beschattungssteuerung_abh.C3.A4ngig_von_der_Zimmertemperatur_und_Sonneneinstrahlung_f.C3.BCr_mehrere_Szenarien_mit_Visualisierung

Jetzt sollten die unterschiedlichen Steuerungsszenarien von der Definition her vereinheitlicht und hoffentlich etwas einsteigerfreundlicher sein.
« Letzte Änderung: 06 November 2020, 19:12:02 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8791
Antw:neue Wiki-Seite: DOIF-Automatisierung
« Antwort #13 am: 19 Juli 2021, 23:06:03 »
Ich habe meine Licht-Steuerung, die sich in den letzten Monaten bewährt hat, aktualisiert, siehe:

https://wiki.fhem.de/wiki/DOIF/Automatisierung#Helligkeitsabh.C3.A4ngige_Zeitsteuerung_f.C3.BCr_mehrere_Szenarien_mit_tabellarischer_.C3.9Cbersicht
« Letzte Änderung: 19 Juli 2021, 23:11:14 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF