[gelöst] sunset_el min/max über UI?

Begonnen von SouzA, 26 Juli 2016, 07:43:58

Vorheriges Thema - Nächstes Thema

SouzA

Hallo,

während des einhackens der Rolladensteuerung bin ich auf eine Problematik gestoßen, die mir vielleicht jemand beantworten kann.

Ich habe vor die Rolladen sowohl abhängig von Sonnenaufgang -untergang
define at_wz_Rolladen_ho at *{sunrise(0,"8:00","10:00")} set du_wz_Rolladen_ho_ru_at_sunrise hoch
attr at_wz_Rolladen_ho room Rolladen Settings

sowie manueller Zeitangabe
define du_Rolladen_Zeit_wz_ho dummy
attr du_Rolladen_Zeit_wz_ho alias Hoch:
attr du_Rolladen_Zeit_wz_ho devStateIcon .*:rc_BLANK
attr du_Rolladen_Zeit_wz_ho group WoZi AZi WCs
attr du_Rolladen_Zeit_wz_ho icon icoUhr
attr du_Rolladen_Zeit_wz_ho room Rolladen Settings
attr du_Rolladen_Zeit_wz_ho setList state:time
attr du_Rolladen_Zeit_wz_ho sortby 20
attr du_Rolladen_Zeit_wz_ho webCmd state

fahren zu lassen.

Das bedeutet, dass es am einfachsten währe, wenn man die min/max Werte des Sunrise_el über des Frontend direkt ändern könnte. Meine Versuche sind bisher gescheitert. (Eintragen des dummys in die min/ max-Werte). In der commandref usw finde ich auch nix dazu.
Geht das überhaupt?

Vielen Dank!
Bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

rudolfkoenig

Gehen tut alles, es ist hoechstens etwas Programmieraufwand. Z.Bsp koennte man mit einem notify auf die dummy Aenderung "hoeren" und per modify die at Uhrzeit (d.h das {...} Teil) aendern. Man kann dabei das exec-Teil weglassen, at bahaelt dann das Alte.

eki

Ich verstehe Deine Problematik vielleicht nicht so ganz. Aus meiner Sicht brauchst Du gar keine Dummies. Für die Automatik kann das "at" doch einen Befehl direkt an das Rolladen Device schicken. Für die Manuelle Eingabe kannst Du doch direkt das Rolladen Device hoch/runter schicken. Das geht dann völlig unabhängig voneinander. Generell würde ich Dir, falls Du das Ganze für unterschiedliche Wochentage unterschiedlich machen willst per WeekdayTimer machen (siehe ref).

SouzA

Hallo,

vielen Dank für eure Antworten!

@rudolfkoenig
Hört sich nach dem an, was ich meine.
Den modify hatte ich noch gar nicht auf dem Schirm...
Dazu aber gleich eine Frage oder ich hab gerade echt Bananen auf den Augen: Im Commandref wird der bekannte wert "modified"... also die 19h. Wie mache ich es mit dem modify nicht bekannten Werten (also Werten, die per UI eingegeben wurden)? Und wie sage ich dem modify, welcher Wert der beiden Zeitwerte vom sunrise geändert werden soll? Da wäre ich echt dankbar über einen weiteren Denkanstoß! THX!!

@eki
Eben, es würde unabhängig voneinander funktionieren.
Wenn ich aber eine Zeit für "hoch" nach Sonnenaufgang haben will, habe ich keine andere chance als den sunrise rauszunehmen. Das Rollo würde dann nämlich sonst vor meiner gewünschten Zeit hoch fahren, nämlich zu Sonnenaufgang. Andersrum, wenn die manuelle Zeit-einstellung für hoch dann doch mal vor den Sonnenaufgang gerutscht ist, oder die Jahreszeit es bedingt, was nicht gewünscht ist wegen Sichtschutz, dann sollen die Rollos erst zum Sonnenaufgang hoch fahren.
Wenn ich die Zeit im sunrise_el direkt ändern kann, dann brauche ich nur die min-Zeit ändern und das wars.

Vielen Dank.
Bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Ellert

Alternativ DOIF versuchen, etwa so, mit Schliessfunktion

Oeffen_Dummy für manuelle Zeiteinstellung mit userReading auf {max(sunrise , Value("Oeffnen_Dummy"))}
Schliessen_Dummy für manuelle Zeiteinstellung mit userReading zu {max(sunset , Value("Schliessen_Dummy"))}

([[Oeffnen_Dummy:auf]]) (set Rolladen up)
DOELSEIF ([[Schliessen_Dummy:zu]]) (set Rolladen down)


siehe: http://fhem.de/commandref_DE.html#DOIF und
http://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben

rudolfkoenig

#5
define ntfy1 du_Rolladen_Zeit_wz_ho {fhem 'modify at_wz_Rolladen_ho at *{sunrise(0, '.Value("du_Rolladen_Zeit_wz_ho").',"10:00")'}

Evtl brauchst du einen zweiten dummy fuer die Obergrenze. Oder ich habe das Problem nicht verstanden.

Damian

#6
Zitat von: Ellert am 26 Juli 2016, 19:43:56
Alternativ DOIF versuchen, etwa so, mit Schliessfunktion

Oeffen_Dummy für manuelle Zeiteinstellung mit userReading auf {max(sunrise , Value("Oeffnen_Dummy"))}
Schliessen_Dummy für manuelle Zeiteinstellung mit userReading zu {max(sunset , Value("Schliessen_Dummy"))}

([[Oeffnen_Dummy:auf]]) (set Rolladen up)
DOELSEIF ([[Schliessen_Dummy:zu]]) (set Rolladen down)


siehe: http://fhem.de/commandref_DE.html#DOIF und
http://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben

Habe jetzt in DOIF die Möglichkeit eingebaut in Zeitfunktionen wie sunset oder sunrise (in geschweiften Klammern) Readings oder Stati zu übergeben. Damit lässt sich die Sache, wie folgt abdecken:

([{sunrise(0,"[du_Rolladen_Zeit_wz_ho]","10:00")}]) (set Rolladen up)
DOELSEIF ([{sunrise(0,"[du_Rolladen_Zeit_wz_ru]","22:00")}]) (set Rolladen down)


Eine Änderung der Zeit-Dummys führt, wie gewohnt bei indirekten Zeitangaben, zur Triggerung des Moduls und damit zum Neusetzen der Zeit innerhalb des Moduls.

Ebenso funktioniert damit auch das Rechnen mit Zeiten, z. B.:

([({sunrise(0,"[du_Rolladen_Zeit_wz_ho]","10:00")}+[00:30])]) ...

oder

([({sunrise(0,"[du_Rolladen_Zeit_wz_ho]","10:00")}+rand(3600))]) ...

oder

([({sunrise(0,"[du_Rolladen_Zeit_wz_ho]","10:00")}+[mydummy:zeitverzoegerung])]) ...

Gruß

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

SouzA

Hallo,

Hört sich spannend an.
Bedeutet das, dass man keine at's mehr für sunrise und sunset anlegen muss?

Vielen Dank für deine Arbeit!

Bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Ellert

Zitat von: SouzA am 27 Juli 2016, 09:12:24
Hallo,

Hört sich spannend an.
Bedeutet das, dass man keine at's mehr für sunrise und sunset anlegen muss?

Vielen Dank für deine Arbeit!

Bis denn
SouzA
Ja, DOIF vereint schon länger notify, at und IF und bietet durch Selbsttriggerung die Möglichkeit einen "Endlichen Automaten" zu realisieren.

SouzA

Hallo,

ROCKT!  ;D

Naja, so sieht der code nun aus:
#Die Rollos gehen frühestens um 16:00h und spätestens zur im UI eingestellten Zeit runter. Dazwischen mit dem Sonnenuntergang.
#Funktioniert nur, wenn berücksichtigung Sunset auf "an" und Automatik "an" gewählt ist!
([*{sunset(0,"16:00","[du_Rolladen_Zeit_wz_ru]")}] and [du_Rolladen_wz_sunset] eq "an" and [du_Rolladen_wz_wc_auto] eq "an") (set wz_Rolladen_haupt A0, set azi_Rolladen Zu)
#
#Die Rollos gehen nur zur im UI eingestellten Zeit runter.
#Funktioniert nur, wenn berücksichtigung Sunset auf "aus" und Automatik "an" gewählt ist!
DOELSEIF ([[du_Rolladen_Zeit_wz_ru]|0123456]) and [du_Rolladen_wz_sunset] eq "aus" and [du_Rolladen_wz_wc_auto] eq "an") (set wz_Rolladen_haupt A0, set azi_Rolladen Zu)
#
#Die Rollos gehen frühestens zur im UI eingestellten Zeit und spätestens um 12Uhr hoch. Dazwischen mit dem Sonnenaufgang.
#Funktioniert nur, wenn berücksichtigung Sunrise auf "an" und Automatik "an" gewählt ist!
DOELSEIF (([[*{sunrise(0,"[du_Rolladen_Zeit_wz_ho]","12:00")}]|8] or [[*{sunrise(0,"[du_Rolladen_Zeit_wz_ho_we]","12:00")}]|7]) and [du_Rolladen_wz_sunrise] eq "an" and [du_Rolladen_wz_wc_auto] eq "an") (set wz_Rolladen_haupt AI, set azi_Rolladen Auf)
#
#Die Rollos gehen nur zur im UI eingestellten Zeit hoch.
#Funktioniert nur, wenn berücksichtigung Sunset auf "aus" und Automatik "an" gewählt ist!
DOELSEIF (([[du_Rolladen_Zeit_wz_ho]|8] or [[du_Rolladen_Zeit_wz_ho_we]|7]) and [du_Rolladen_wz_sunrise] eq "aus" and [du_Rolladen_wz_wc_auto] eq "an") (set wz_Rolladen_haupt AI, set azi_Rolladen Auf)
DOELSE


Müsste dann so passen. Oder?

Vielen Dank!
Bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Ellert

#10
Kommentare mit ## einleiten, die * gehören nicht ins DOIF.

Hier sind die fetten [] zuviel
Zitat[[*{sunrise(0,"[du_Rolladen_Zeit_wz_ho]","12:00")}]|8]

Und Du benötigst das Modul von dort: https://forum.fhem.de/index.php/topic,55785.msg473737.html#msg473737 und shutdown restart; reload wird nicht reichen vermute ich.


FunkOdyssey

Ich persönlich würde es noch ein wenig "hübscher" formatieren. Ist aber geschmackssache. Außerdem war im zweiten CMD noch eine geschlossene Klammer zuviel:

## Die Rollos gehen frühestens um 16:00h und spätestens zur im UI eingestellten Zeit runter. Dazwischen mit dem Sonnenuntergang.
## Funktioniert nur, wenn berücksichtigung Sunset auf "an" und Automatik "an" gewählt ist!
(
[{sunset(0,"16:00","[du_Rolladen_Zeit_wz_ru]")}] and
[du_Rolladen_wz_sunset] eq "an" and
[du_Rolladen_wz_wc_auto] eq "an"
)
(
set wz_Rolladen_haupt A0,
set azi_Rolladen Zu
)

## Die Rollos gehen nur zur im UI eingestellten Zeit runter.
## Funktioniert nur, wenn berücksichtigung Sunset auf "aus" und Automatik "an" gewählt ist!
DOELSEIF
(
[[du_Rolladen_Zeit_wz_ru]|0123456] and
[du_Rolladen_wz_sunset] eq "aus" and
[du_Rolladen_wz_wc_auto] eq "an"
)
(
set wz_Rolladen_haupt A0,
set azi_Rolladen Zu
)

## Die Rollos gehen frühestens zur im UI eingestellten Zeit und spätestens um 12Uhr hoch. Dazwischen mit dem Sonnenaufgang.
## Funktioniert nur, wenn berücksichtigung Sunrise auf "an" und Automatik "an" gewählt ist!
DOELSEIF
(
(
[[{sunrise(0,"[du_Rolladen_Zeit_wz_ho]","12:00")}]|8] or
[[{sunrise(0,"[du_Rolladen_Zeit_wz_ho_we]","12:00")}]|7]
) and
[du_Rolladen_wz_sunrise] eq "an" and
[du_Rolladen_wz_wc_auto] eq "an"
)
(
set wz_Rolladen_haupt AI,
set azi_Rolladen Auf
)

## Die Rollos gehen nur zur im UI eingestellten Zeit hoch.
##Funktioniert nur, wenn berücksichtigung Sunset auf "aus" und Automatik "an" gewählt ist!
DOELSEIF
(
(
[[du_Rolladen_Zeit_wz_ho]|8] or
[[du_Rolladen_Zeit_wz_ho_we]|7]
) and
[du_Rolladen_wz_sunrise] eq "aus" and
[du_Rolladen_wz_wc_auto] eq "an"
)
(
set wz_Rolladen_haupt AI,
set azi_Rolladen Auf
)

DOELSE


Update: Ich habe mal stumpf alle * entfernt. Ungetestet.

Ellert

Dann möchte ich noch auf den verbesserten, eingebauten Editor mit Syntaxprüfung uvm. hinweisen: https://forum.fhem.de/index.php/topic,45373.0.html

FunkOdyssey

Zitat von: Ellert am 27 Juli 2016, 10:53:32
Dann möchte ich noch auf den verbesserten, eingebauten Editor mit Syntaxprüfung uvm. hinweisen: https://forum.fhem.de/index.php/topic,45373.0.html

Bezog sich das auf meine Formatierung? Habe ich denn etwas falsch gemacht? Ich nutze selbstverständlich codemirror. Aber autom. Einrücken funktioniert damit leider nicht. :-)

Ellert

@FunkOdyssey:
Nee, das war nur ein allgemeiner Hinweis für den TE, der codemirror ist per default ja nicht eingeschaltet.

ZitatAber autom. Einrücken funktioniert damit leider nicht

Die manuelle Einrückung wird automatisch in der nächsten Zeile fortgesetzt. Es ist eine Halbautomatik  ;)