Individualisierbare Zeitsteuerung bei den Jalousien

Begonnen von FunkOdyssey, 14 November 2014, 17:59:06

Vorheriges Thema - Nächstes Thema

igami

Habe das überlesen  ::)
Aber du hast recht, ist wesentlich einfacher so.

Grüße
Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

FunkOdyssey

@Igami:
Ist das lauffähiger Code oder eher ein Beispiel?
Ich finde nirgends eine Defintion für di_jal_2.
Und heißt in deinem Beispiel die Jalousien-Structures auch "di_jal"? So heißt doch bereits der Dummy.
Ist das bewusst so gewählt oder nur ein Typo?

Am Rande:
Du hast ja alle Dummys zusammengefasst. Das gefällt mir sehr gut. Aber wie macht man die Werte dann konfigurierbar? In der GUI finde ich dann nichts.

Danke.

igami

Zitat von: Funk.Odyssey am 16 November 2014, 13:05:14
Ist das lauffähiger Code oder eher ein Beispiel?
durch geringe änderungen lauffähig
im ausführenden Teil des di_jal_1 musst du das d_jal durch deine structure ersetzten.

Zitat von: Funk.Odyssey am 16 November 2014, 13:05:14
Ich finde nirgends eine Defintion für di_jal_2.
das di_jal_2 steht doch drin (nach dem Edit...)  :P

Zitat von: Funk.Odyssey am 16 November 2014, 13:05:14
Und heißt in deinem Beispiel die Jalousien-Structures auch "di_jal"? So heißt doch bereits der Dummy.
Ist das bewusst so gewählt oder nur ein Typo?

der dummy heißt d_jal
die DOIFs heißen di_jal

Zitat von: Funk.Odyssey am 16 November 2014, 13:05:14
Am Rande:
Du hast ja alle Dummys zusammengefasst. Das gefällt mir sehr gut. Aber wie macht man die Werte dann konfigurierbar?

attr d_jal webCmd controlMode:doors:workday:weekend:min:max
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

FunkOdyssey

#18

Danke. Das hat mir sehr weitergeholfen.

Meine Frage bzgl. der Namensgebung bezog sich auf folgende Zeilen. Natürlich habe ich hier meine Structures benutzt, aber das "set d_jal" verwirrt ein wenig.

  IF ([d_jal:doors] eq "true")
    (set d_jal withdoors 100)
  ELSE
    (set d_jal withoutdoors 100)


Zitat

attr d_jal webCmd controlMode:doors:workday:weekend:min:max


Jetzt wo ich am Rechner sitze, kann ich es auch konfigurieren. Es lag wohl am iOS, dass ich das nicht übers Tablet erkennen konnte. Dies werde ich später weiter verfolgen.

moonsorrox

#19
ich habe dieses hier mit Interesse verfolgt und frage deshalb, ich finde hier nur diverse Codeschnipsel
wenn ich nur einmal das Dummy eingebe bekomme ich schon jede Menge Fehler mit unbekanntem Kommando, mit den gesamten Code funktioniert das schon gar nicht.

Was ist denn am Code alles als Voraussetzung zu sehen damit ich das erst einmal anschauen kann wie das gesamte Konstrukt aussieht um es für meine Bedürfnisse anzupassen..?

hier mal die Fehler nach Unknown command controlMode:manual,auto, try help.
Unknown command doors:true,false, try help.
Unknown command workday:6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30,10:00, try help.
Unknown command weekend:6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30,10:00, try help.
Unknown command min:16:00,16:30,17:00,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30, try help.
Unknown command max:16:00,16:30,17:00,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30, try help.
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

FunkOdyssey

In den Code-Beispielen ist überall ein Zeilenumbruch enthalten.
Falls du es direkt in der fhem.cfg einfügst, dann hagelt es Fehlermeldungen. Bearbeitet man die DEFs, dann funktioniert das.
Ich habe es in der fhem.cfg eingefügt und überall ein \ am Zeilenende angehangen. Dabei hatte ich auch einige Zeilen übersehen, die für weitere Fehler sorgen.

FunkOdyssey

Hmm. Im Moment stehe ich (mal wieder) ein wenig auf dem Schlauch.
Sobald ich im Reading irgendwelche Werte ändere, springen die anderen Auswahlfelder wieder auf die Default-Werte. Also bei den Uhrzeiten habe ich ständig wieder "06:30" in der Auswahl.

Im Log habe ich dazu noch folgendes:
Zitat
2014.11.16 14:22:19 2: di_jal_2: reading does not exist: [d_jal:workday]
2014.11.16 14:22:19 3: ntfy_setreading return value: Unknown command d_.*, try help.

igami

das d_.* ist mir doppelt ins notify gerutscht, einmal raus nehmen

Der Code ist so formatiert, dass man ihn hier lesen kann, mit Zeilenumbrüchen kopieren und in der Commandozeile in FHEM einfügen kann. Die Zeilenumbrüche werden allerdings nicht in die DEF übernommen
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

FunkOdyssey

#23
Perfekt.




Nun läuft es von der Eingabe her stabiler. Ich hatte noch ein paar fehlerhafte Zeilenumbrüche im Code, die sich auch ein wenig merkwürdig verhalten haben. Mir fehlte ein Leerzeichen vor dem "\". :-)

Ich habe jetzt einige Timer mit dem Min|Max-Zeiten.







stateinitialized2014-11-16 14:38:32
timer_1_c117.11.2014 08:00:00|82014-11-16 14:38:32
timer_2_c116.11.2014 17:00:00|82014-11-16 14:38:32
timer_3_c117.11.2014 10:00:00|72014-11-16 14:38:32
timer_4_c116.11.2014 17:00:00|72014-11-16 14:38:32

Es scheint fast so, als wären die sunset()-Zeiten noch nicht enthalten.




Update:
Irgendetwas ist merkwürdig. Mal stehen die richtigen Sonnenuntergangszeiten drinnen. Dann mal wieder nicht.
Scheinbar werden die Default-Werte in den Timern gespeichert, wenn ich mit die Uhrzeiten ändere.
Und irgendetwas anderes löst sporadisch das Speichern der Sonnenuntergangszeiten aus.
Ich kann es noch nicht 100%ig nachstellen.

Ich möchte, dass die Jalousien in der Woche um 08:00 Uhr hochgehen sollen. Und am Wochenende um 10:00. Runterfahren soll zum Zeitpunkt des Sonnenuntergangs stattfinden.

Irgendwie werden die DOIF-Timer scheinbar durcheinandergewürfelt. Hier habe ich zwar nun die Sonnenuntergangszeit, aber werktags eine falsche Hochfahrzeit.







stateinitialized2014-11-16 14:53:28
timer_1_c117.11.2014 10:00:00|82014-11-16 14:53:28
timer_2_c116.11.2014 16:43:16|82014-11-16 14:53:28
timer_3_c117.11.2014 10:00:00|72014-11-16 14:53:28
timer_4_c116.11.2014 16:43:16|72014-11-16 14:38:32




Der aktuelle Code sieht wie folgt aus:

Zitat
define d_jal dummy
attr d_jal group Jalousiensteuerung
attr d_jal room Automation
attr d_jal setList controlMode:manual,auto \
doors:true,false \
workday:6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30,10:00 \
weekend:6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30,10:00 \
min:16:00,16:30,17:00,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30 \
max:16:00,16:30,17:00,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30
attr d_jal webCmd controlMode:doors:workday:weekend:min:max

define ntfy_setreading notify d_.* \
{ \
if( \
($EVENT ~~ / /) \
and \
($EVENT !~ /: /) \
) \
{fhem("setreading $NAME $EVENT")} \
}
attr ntfy_setreading group Automation
attr ntfy_setreading room Automation

define di_jal_1 DOIF \
( \
   [{ReadingsVal("d_jal","workday","10:00")}-{sunset("REAL",600,ReadingsVal("d_jal","min","16:30"),ReadingsVal("d_jal","max","22:00"))}|8] \
or [{ReadingsVal("d_jal","weekend","10:00")}-{sunset("REAL",600,ReadingsVal("d_jal","min","16:30"),ReadingsVal("d_jal","max","22:00"))}|7] \
) \
  ( \
  IF ([d_jal:doors] eq "true") \
    (set alle_jalousien_mit_tueren 100) \
  ELSE \
    (set alle_jalousien_ohne_tueren 100) \
  ) \
DOELSE \
  ( \
  IF ([d_jal:doors] eq "true") \
    (set alle_jalousien_mit_tueren 0) \
  ELSE \
    (set alle_jalousien_ohne_tueren 0) \
  )
attr di_jal_1 disable 0
attr di_jal_1 group Automation
attr di_jal_1 room Automation


define di_jal_2 DOIF \
([d_jal] eq "controlMode auto") \
  (attr di_jal_1 disable 0) \
DOELSEIF \
([d_jal] eq "controlMode manual") \
  (attr di_jal_1 disable 1) \
DOELSEIF \
(  [d_jal:workday] \
or [d_jal:weekend] \
or [d_jal:min] \
or [d_jal:max] \
) \
  (modify di_jal_1 [di_jal_1:&DEF])
attr di_jal_2 do always
attr di_jal_2 group Automation
attr di_jal_2 room Automation
attr di_jal_2 wait 1:1:1

FunkOdyssey

Jetzt habe ich herausgefunden, warum ich immer wieder die Default-Werte von ReadingsVal im Timer habe.
Sobald ich eine Bearbeiten der fhem.cfg durchführe, werden die Timer teilweise zurückgesetzt.
Sonnenuntergang überlebt, aber meine (eigentlich individualisierten) Hochfahrzeiten (die auch im Dummy noch existieren) fehlen in den Timern.

Puschel74

Hallo,

ZitatSobald ich eine Bearbeiten der fhem.cfg durchführe,
Das ist so, ja.
Nach einem save fhem.cfg liest FHEM die komplette Konfig neu ein daher werden deine Timer wieder auf die Defaultwerte gesetzt.

Warum bearbeitest du die fhem.cfg direkt?
Codes und Geräte lassen sich wunderbar über das jeweilige DEF bearbeiten und sämtliche Timer bleiben davon unberührt.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

FunkOdyssey

So langsam habe ich das verstanden.
Ich muss mir mal etwas ausdenken, wie die Timer einen Neustart überleben.
Im Moment bin ich einfach zu aktiv in Fhem, um alles über die GUI zu machen. :-)

Ich habe den oben - eigentlich bewusst zusammengefassten - Dummy wieder in mehrere Dummys zerlegt. Code-technisch ist das zwar sauberer, aber mit der Gestaltung im Frontend komme ich dann nicht klar. Mir fehlten die Aliase und die bunten Icons.

Puschel74

Hallo,

ZitatIch muss mir mal etwas ausdenken, wie die Timer einen Neustart überleben.
Äh, wozu neu starten  :o

ZitatIm Moment bin ich einfach zu aktiv in Fhem, um alles über die GUI zu machen. :-)
Na denkst du ich mach nichts in meiner Konfig  ???
Naja, nicht direkt - ich mach alles über die FHEM-Oberfläche.
Und ich bin zur Zeit meine Hardware von FS20 auf HM am umstellen - ich hab meine fhem.cfg noch nicht einmal direkt dafür bearbeitet (wozu auch  8) ).
Das mach ich alles bequem über die FHEM-Oberfläche.

Versuch es mal und du wirst sehen du gewöhnst dich schneller dran als du dachtest.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

FunkOdyssey

Wie ich bereits erwähnte, werden die DOIF-Zeiten nach einem FHEM-Neustart (egal warum) immer wieder auf die Default-Werte gesetzt. Die eingestellten Parameter in den Readings werden erst nach einer Änderung ausgelesen und in den Timer genutzt.

Ich bin im Forum über eine Möglichkeit gestolpert, die das möglicherweise gehen soll. Quick&Dirty sieht es folgendermaßen aus:


define ntfy_setreading_auto_jal2 notify global:INITIALIZED \
{ \
if( \
($EVENT ~~ / /) \
and \
($EVENT !~ /: /) \
) \
{fhem("setreading $NAME $EVENT")} \
}


Das funktioniert nur leider nicht. Ich befürchte, dass es nicht reicht, wenn ich einfach nur das Suchmuster ändere, oder?

Hat jemand einen Tipp? Danke.

igami

Zitat von: Funk.Odyssey am 06 Dezember 2014, 12:33:39
Hat jemand einen Tipp? Danke.

Das snippet kommt mir doch bekannt vor ;)
Guck dir mal die Events an auf die das notify reagiert.

Grüße
Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED