[gelöst] doif/doelseif sunset works, sunrise fails?

Begonnen von varsanyim, 26 März 2019, 11:54:09

Vorheriges Thema - Nächstes Thema

varsanyim

Hallo liebe Smarthomer,

Ich sehe seit 2 Tagen ein Code an, und komme nicht weiter wieso es nicht funktioniert.  (Ich habe sogar das Gefühl, dass ich von lauter Bäume den Wald nicht sehen kann ...)

Code unten ist was ich im DOIF's DEF Teil habe. Beim Sonnenuntergang an, und bei Sonnenaufgang aus sollen die Lichter gehen. Bei Sonnenuntergang war alles am besten (oder so ich dachte), aber heute Morgen habe ich immer noch um sonst gewartet, dass die Lichter ausgehen.

Habt ihr eine Idee was ich falsch gemacht habe?

Vielen Dank,

Martina


([{sunset("REAL", 0, "16:30", "21:00")}]) (
fhem("set group=light:FILTER=a:nightlight=yes on");;
my $date = FmtDateTime(time());;
fhem("set Telegram message nightlight on. $date");;
) DOELSEIF ([{sunrise("REAL", 0, "5:30", "8:00")}]) (
fhem("set group=light:FILTER=a:nightlight=yes off");;
my $date = FmtDateTime(time());;
fhem("set Telegram message nightlight off. $date");;
)

varsanyim

Ergenzung: (latitude und longitute sind gesetzt, aus der Kommandozeile gibt {sunset()} und {sunrise()} richtige Daten zurück)

Otto123

#2
Moin,

ich denke: das DOIF hängt in cmd1 fest. Die Bedingung ändert sich nicht, es wird erst heute Abend wieder getriggert.
Ich würde das als Zeitraum machen -> ([ZeitAbends - ZeitMorgens]) (set Licht on) DOELSE (set Licht off)

Für solche Fälle ist es immer gut nicht in die DEF, sondern in das list zu schauen. Da steht wesentlich mehr drin!

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

varsanyim

Moin Otto,

danke für deine Hilfe! Ich war allerdings so Blind ... ich hätte die Frage direkt anders formulieren müssen :/

Nach dem ich jetzt nach mehreren Kaffee's in dem Mittagspause auf meine Seite ein Blick geworfen habe, sehe ich:
Zitat
error
   
fhem("set group=light:FILTER=a:nightlight=yes off");; my $date = FmtDateTime(time());; fhem("set Telegram message nightlight off. $date");; : Unknown command fhem("set, try help.
   
2019-03-26 06:28:33

Also anscheind wird dem DOELSEIF ausgewertet, aber wieso stirbt es bei dem fhem funktion?! Ich bin leider immer noch nicht Klüger geworden :(

rischbiter123

Moin,
eventuell reicht schon ein Leerzeichen zwischen den Klammern und den Anführungsstrichen.

LG

Andreas
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

Fritz Muster

Ich bin der Meinung Du bist bzgl. FHEM/perl Ebene etwas durcheinander. Und somit passen {} und;; nicht so ganz. Ich denke es müsste ungefähr so lauten

([{sunset("REAL", 0, "16:30", "21:00")}]) (
{fhem("set group=light:FILTER=a:nightlight=yes on");
my $date = FmtDateTime(time());
fhem("set Telegram message nightlight on. $date");}
) DOELSEIF ([{sunrise("REAL", 0, "5:30", "8:00")}]) (
{fhem("set group=light:FILTER=a:nightlight=yes off");
my $date = FmtDateTime(time());
fhem("set Telegram message nightlight off. $date");}
)


Grüße Fritz
RasPi 3B+, Stretch, Fhem 5.9, DBlog SQLite
HMLAN, mapleCUN MAX/WMBus, mapleSduino 868/433/868
HM Sensoren/Aktoren ,Technoline TX 29 DTH-IT, TFA 30.3155WD, MAX!
Hour Counter, Astro, EletricityCounter, Statistics, Charting Frontend, TabletUI, Modbus

varsanyim

Vielen lieben Dank! Das kann gut sein, dass ich mit dem Fhem/Perl ebene durcheinander bin :) Ich werde es heute (bei Sonnenuntergang) testen!

Otto123

Du hast behauptet der Ausführungsteil für cmd1 hat funktioniert!? Ich fand den Code dort höchst merkwürdig, aber bei DOIF würde es mich nicht wundern wenn es funktioniert. Deswegen sage ich zu dem Teil nichts, ich würde es völlig anders machen - aber Du hast behauptet der Teil funktioniert.

Zu meinem Vorschlag stehe ich nach wie vor, ist für mich die logischere Vorgehensweise und eigentlich sowas wie die grundlegenden Funktion von DOIF.
Wobei ich dort gern mit _abs arbeite, weil ich nicht sicher bin ob DOIF die Angabe so versteht wie ein at.

([{sunset_abs("REAL", 0, "16:30", "21:00")} - {sunrise_abs("REAL", 0, "5:30", "8:00")}]) (mach an) DOELSE (mach aus)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

Zitat von: Otto123 am 26 März 2019, 16:14:57
Du hast behauptet der Ausführungsteil für cmd1 hat funktioniert!? Ich fand den Code dort höchst merkwürdig, aber bei DOIF würde es mich nicht wundern wenn es funktioniert. Deswegen sage ich zu dem Teil nichts, ich würde es völlig anders machen - aber Du hast behauptet der Teil funktioniert.

Zu meinem Vorschlag stehe ich nach wie vor, ist für mich die logischere Vorgehensweise und eigentlich sowas wie die grundlegenden Funktion von DOIF.
Wobei ich dort gern mit _abs arbeite, weil ich nicht sicher bin ob DOIF die Angabe so versteht wie ein at.

([{sunset_abs("REAL", 0, "16:30", "21:00")} - {sunrise_abs("REAL", 0, "5:30", "8:00")}]) (mach an) DOELSE (mach aus)

Gruß Otto

Ich habe inzwischen noch mehr "Intelligenz" ins DOIF eingebaut, selbst Zeitfunktionen, die täglich um paar Minuten zunehmen, wie jetzt z. B. sunrise, weil die Tage länger werden, bringen das Modul nicht aus dem Rhythmus - das Modul triggert dennoch erst am nächsten Tag und nicht paar Minuten später. Das gilt im DOIF auch für selbstgeschriebene Zeitfunktionen und nicht nur für sunset oder sunrise.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

varsanyim

Nach @Fritz Muster mich auf die Klammer hingewiesen hat, habe ich die korrigiert, und wurden beide Befehle ausgeführt. (Damit nehme ich die Telegram Nachricht auch heraus :))

@Otto123 weil ich die Klammern durcheinandergebracht haben, hat wahrscheinlich die erste Teil funktioniert bevor ich es gepostet habe ... :/ (ich fing an ohne DOELSEIF...)

Ich bedanke mich für den Alternativen Darstellung der Funktionalität.
Ich kenne noch nicht alle Möglichkeiten bei FHEM und orientiere mich an Beispielen (wenn ich eine finde).


([{sunset("REAL", 0, "16:30", "21:00")}]) ({
fhem("set group=light:FILTER=a:nightlight=yes on");;
fhem("set Telegram message nightlight on.");;
}) DOELSEIF ([{sunrise("REAL", 0, "5:30", "8:00")}]) ({
fhem("set group=light:FILTER=a:nightlight=yes off");;
fhem("set Telegram message nightlight off. ");;
})

Otto123

Moin,

wobei der ganze Kram mit Perl, fhem() und ;; immer noch genauso nützlich ist wie ...  :-[
Es sollte - mit nur FHEM Befehlen - genauso gehen. ;D
(set group=light:FILTER=a:nightlight=yes off , set Telegram message nightlight off.)

Auch mit Zeitangabe wäre es ohne den ganzen Wirr Warr gegangen  :D, kannst Du gern einfach in der FHEM Kommandozeile probieren:set Telegram message nightlight off.{(FmtDateTime(time()))}

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz