Hauptmenü

neues Modul DOIF

Begonnen von Damian, 21 Mai 2014, 15:53:18

Vorheriges Thema - Nächstes Thema

Spartacus

Hallo,
ich habe noch ein Problem mit meiner Gartenbeleuchtung festgestellt. Diese schaltet immer um 16:30 Uhr ein. Sie soll aber erst einschalten, wenn es dunkel ist. Also auf " [state.TW.Tageslicht.dum] eq "dunkel"" triggern.

Muss ich dann vor die Startzeiten ein "?" setzen? Reicht das aus? Die Ausschaltzeit soll dann wieder triggern auf 22:30 und 21:30, bzw. 02:00 Uhr!

(
([?16:30-22:30|56] or
[?16:30-22:30] and  [?hl.01.Feiertag:tomorrow] ne "none" or
[?16:30-21:30|01234] and [?hl.01.Feiertag:tomorrow] eq "none" or
[?16:30-02:00] and [?hl.01.Feiertag] eq "Silvester") and
[state.TW.Tageslicht.dum] eq "dunkel") (set GA.ss.SA.Licht on)
DOELSE (set GA.ss.SA.Licht off)
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Brockmann

Zitat von: Spartacus am 16 Februar 2015, 10:01:28
Muss ich dann vor die Startzeiten ein "?" setzen? Reicht das aus? Die Ausschaltzeit soll dann wieder triggern auf 22:30 und 21:30, bzw. 02:00 Uhr!
Wenn Du ein ? an die Zeitangabe setzt, triggert weder die Anfangs- noch die Endzeit. Dann wirds also nichts mit automatisch ausschalten.

Wenn das DOIF genauso definiert ist wie es hier steht, kann es aber gar nicht sein, dass um 16:30 Uhr getriggert wird, wenn [state.TW.Tageslicht.dum] in dem Moment nicht "dunkel" ist. Das ist ja per AND eindeutige Mitbedingung für alles andere. Ich gehe also davon aus, dass  [state.TW.Tageslicht.dum] um 16:30 Uhr auf "dunkel" steht, sonst kann das beschriebene Verhalten nicht auftreten.

Wie immer wäre es hilfreich, wenn Du ein list des DOIFs in der fraglichen Situation machst und hier anhängst (oder einfach mal selber kritisch draufschaust). Ich würde mir aber erstmal  [state.TW.Tageslicht.dum] näher anschauen und klären, welchen Status dieser Dummy wann hat.

Damian

Zitat von: Spartacus am 16 Februar 2015, 10:01:28
Hallo,
ich habe noch ein Problem mit meiner Gartenbeleuchtung festgestellt. Diese schaltet immer um 16:30 Uhr ein. Sie soll aber erst einschalten, wenn es dunkel ist. Also auf " [state.TW.Tageslicht.dum] eq "dunkel"" triggern.

Muss ich dann vor die Startzeiten ein "?" setzen? Reicht das aus? Die Ausschaltzeit soll dann wieder triggern auf 22:30 und 21:30, bzw. 02:00 Uhr!

(
([?16:30-22:30|56] or
[?16:30-22:30] and  [?hl.01.Feiertag:tomorrow] ne "none" or
[?16:30-21:30|01234] and [?hl.01.Feiertag:tomorrow] eq "none" or
[?16:30-02:00] and [?hl.01.Feiertag] eq "Silvester") and
[state.TW.Tageslicht.dum] eq "dunkel") (set GA.ss.SA.Licht on)
DOELSE (set GA.ss.SA.Licht off)


Wenn er um 16:30 Uhr geschaltet hat, dann muss [state.TW.Tageslicht.dum] "dunkel" gewesen sein, da es als letztes mit and verknüpft ist. Wenn es nicht so wäre, dann wäre der Perl-Interpreter kaputt ;). Das Fragezeichen würde nicht nur das Einschalten, sondern auch das Ausschalten verhindern.

Gruß

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

Spartacus

Hallo,
vielen Dank für die Antworten. Ich checke das heute noch einmal! Ich habe in diesem Zusammenhang aber noch eine andere Frage:
Ich möchte das ganze etwas umschreiben und die Endzeit vorher in einem "if" bestimmen.
Das DOIF soll dann nur das Licht triggern, wenn es dunkel ist und das Reading "SU-30min" < "endTime" ist
([16:30-$endTime] and [state.TW.Tageslicht.dum] eq "dunkel" and (TU_Get_Decrement(ReadingsVal("state.TW.Tageslicht.dum","SU",""), "00:30:00")<$endTime)
(set GA.ss.SA.Licht on)


Die Variable endTime möchte ich im selben DOIF berechnen
{
my $endTime =0
if (hl.01.Feiertag:tomorrow] ne "none" || $wday~=m/[56] ) {
my $endTime = "22:30";;}
elsif ($wday~=m/[01234] and hl.01.Feiertag:tomorrow] eq "none") {
  my $endTime = "21:30";;}
}

kriege es aber nicht kombiniert. Geht das überhaupt, oder muss ich das auslagern.
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

Zitat[16:30-$endTime]

geht nicht, dann eher:

[16:30-{endTime}]

endTime ist dann eine Funktion in myUtils, die deine Endzeit berechnet und als Return-Wert zurückgibt. Aufgerufen wird sie allerdings nur bei der Definition des DOIF-Moduls und wenn die zuvor berechnete Endzeit triggert.

Gruß

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

Damian

#1400
Zitat von: Spartacus am 16 Februar 2015, 16:08:40
Hallo,
vielen Dank für die Antworten. Ich checke das heute noch einmal! Ich habe in diesem Zusammenhang aber noch eine andere Frage:
Ich möchte das ganze etwas umschreiben und die Endzeit vorher in einem "if" bestimmen.
Das DOIF soll dann nur das Licht triggern, wenn es dunkel ist und das Reading "SU-30min" < "endTime" ist
([16:30-$endTime] and [state.TW.Tageslicht.dum] eq "dunkel" and (TU_Get_Decrement(ReadingsVal("state.TW.Tageslicht.dum","SU",""), "00:30:00")<$endTime)
(set GA.ss.SA.Licht on)


Die Variable endTime möchte ich im selben DOIF berechnen
{
my $endTime =0
if (hl.01.Feiertag:tomorrow] ne "none" || $wday~=m/[56] ) {
my $endTime = "22:30";;}
elsif ($wday~=m/[01234] and hl.01.Feiertag:tomorrow] eq "none") {
  my $endTime = "21:30";;}
}

kriege es aber nicht kombiniert. Geht das überhaupt, oder muss ich das auslagern.
Christian

Abgesehen von einigen Fehlern in deinem "Pseudo"-Perl-Code, würde ich es, da du nur zwei Fälle hast, ohne ausgelagerte Funktion lösen:

(([16:30-22:30|7] and [?state.TW.Tageslicht.dum:SU] lt "22:00" or [16:30-21:30|8] and [?state.TW.Tageslicht.dum:SU] lt "21:00")
and [?hl.01.Feiertag:tomorrow] ne "none" and [state.TW.Tageslicht.dum] eq "dunkel")
  (set GA.ss.SA.Licht on)


Gruß

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

Spartacus

Hi Damian,
habe Dir einen Fall unterschlagen, aber auch 3 Fälle würden sicherlich noch funzen!
Kann man die Uhrzeiten so einfach vergleichen? Das würde die Sache deutlich vereinfachen.

Allerdings steht "7" für Sa,So und "8" für Mo.-Fr.
Bei mir läuft das Ganze aber von So-Do und von Fr-Sa. Deshalb halt "01234" und "56" Aber egal, das verkompliziert die Sache nicht so massiv!

Ja, dass mein Pseudo perl noch Fehler hat, habe ich gemerkt. Bis auf das "($wday ==m/[01234]" läuft mein Pseudo-Code jetzt. Wollte es halt vereinfachen und nicht wday ==0 || wday==1...Perl ist halt nicht so mein Ding!
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

earkle

Ich habe es endlich geschafft und lasse mir mehrmals Täglich einen Status per Pushover senden.

Jetzt fehlt mir nur noch die Möglichkeit Zeilenumbrüche einzufügen- im normalen Pushover habe ich das mit " \n " geschafft. Hat da jemand eine Idee wie ich es jetzt schaffe?

define doif_PushoverStatus DOIF ([06:00] or [08:00] or [12:00] or [15:00] or [19:00] or [20:00] or [21:00] or [23:59]) (set pushmsg msg 'Status' 'Aussentemp. Küchenfenster  [Aussentemp:temperature]°C - Aussentemp. Garten [CUL_WS_1:temperature]°C - Heizungspreset [Heizungspresets:state]''' -1 '')

Danke und Gruß

Andreas
Rspberry Pi, Cul, FHEM, Relaiskarte, mehrere DS1820 zur Temperaturmessung, HMS 100 TF, FS20st, FS20 S16

automatisierer

Zitat von: earkle am 16 Februar 2015, 19:37:00
Ich habe es endlich geschafft und lasse mir mehrmals Täglich einen Status per Pushover senden.

Jetzt fehlt mir nur noch die Möglichkeit Zeilenumbrüche einzufügen- im normalen Pushover habe ich das mit " \n " geschafft. Hat da jemand eine Idee wie ich es jetzt schaffe?

define doif_PushoverStatus DOIF ([06:00] or [08:00] or [12:00] or [15:00] or [19:00] or [20:00] or [21:00] or [23:59]) (set pushmsg msg 'Status' 'Aussentemp. Küchenfenster  [Aussentemp:temperature]°C - Aussentemp. Garten [CUL_WS_1:temperature]°C - Heizungspreset [Heizungspresets:state]''' -1 '')

Danke und Gruß

Andreas

Nimm:


%0A


Gruß
Ingo

Spartacus

Hallo,
noch eine Frage:
Ich habe ein Reading, welches mir diese Info liefert.
{'674' => {'Recurrence_Thursday' => 1,'IncludeLinkedZones' => '1','Volume' => '5','Shuffle' => 0,'Recurrence_Wednesday' => 1,'ProgramURI' => 'x-sonosapi-stream:s99166?sid=254&flags=32','Repeat' => 0,'Recurrence_Once' => 0,'StartTime' => '06:00:00','Duration' => '','Recurrence_Sunday' => 0,'Enabled' => '0','Recurrence_Friday' => 1,'Recurrence_Saturday' => 0,'Recurrence_Tuesday' => 1,'RoomUUID' => 'RINCON_B8E9375131E201400','ProgramMetaData' => '<DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"><item id="R:0/0/3" parentID="R:0/0" restricted="true"><dc:title>WDR2 Ruhrgebiet</dc:title><upnp:class>object.item.audioItem.audioBroadcast</upnp:class><desc id="cdudn" nameSpace="urn:schemas-rinconnetworks-com:metadata-1-0/">SA_RINCON65031_</desc></item></DIDL-Lite>','Recurrence_Monday' => 1}}
Ich möchte jetzt in einem DOIF auf die ID (hier 674) und Enable =>'0' triggern. Es können auch mehrere IDs in diesem Reading stehen. Habe mir schon eine SUB gebaut, aber kriege den Trigger mit dem DOIF nicht hin!

[Sonos_Bad:AlarmList] ist das Reading!

sub AlarmEnabled($$) {     
my ($player, $alarmID) = @_;
   my $AlarmState=eval(ReadingsVal('$player', 'AlarmList', '{}'))->{$alarmID}{Enabled};
return $AlarmState;
}

Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Bartimaus

#1405
Guten Morgen,
kann mir bitte jemand sagen, warum heute morgen das Device "Brunnen" aus dieser Bedingung eingeschaltet war ?
([04:50-06:30|0123456] or [09:00-22:00|06]
and ($month> 2 && $month< 10)
and [Brunnen_Master:state] eq "on")
(set Brunnen on)
DOELSE
(set Brunnen off)

Weder war der Status des "Brunnen_Master" auf "on", noch haben wir März.
Und um 06:30 hätte doch wieder ausgeschaltet werden müssen, war aber noch an....
Im Logdevice sehe ich, das alle paar Sekunden ein "on" gesendet wurde, bis LOVF erreicht war.... :-[
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

automatisierer

Das and bindet stärker als or, hab ich mal hier gelesen...



([color=red]([/color][04:50-06:30|0123456] or [09:00-22:00|06][color=red])[/color]
and ($month> 2 && $month< 10)
and [Brunnen_Master:state] eq "on")
(set Brunnen on)
DOELSE
(set Brunnen off)


also die or Bedingungen nochmal extra einklammern.


Ein LIST  vom DOIF ist hilfreich. Wenn schon nicht vom Zustand während der Fehler aufgetreten ist, dann wenigstens vom aktuellen Zustand, so kann man wenigstens die attr usw sehen.

das alle paar Sekunden ein on gesendet wird macht ohne entsprechende attr keinen Sinn, könnte man aber auch im LIST sehen.

und wenn du nen overload am HMLAN hattest, konnte er mit sicherheit den off befehl nicht senden, zumindest wenn der nur einmal gekommen ist.

Gruß
Ingo

Bartimaus

Hi,
danke für die Antwort. Jaja, die liebe Klammersetzung  ::)
Danke für den Hinweis.
Mit dem "list" muss ich beim nächsten Mal dran denken.
Habe die Klammer jetzt mal gesetzt, und probe das ganze an einem Dummy  8)
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

automatisierer

das list wäre dennoch hilfreich, da ja noch das Problem mit dem "alle paar sekunden Befehl wiederholen" besteht.

Bartimaus

Arrgh, ursächlich für das dauernde senden war nicht das DOIF, sondern ein altes Notify...., das hatte ich glatt übersehen
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly