Hauptmenü

DOIF: Triggerproblem

Begonnen von Spartacus, 23 Februar 2015, 20:57:40

Vorheriges Thema - Nächstes Thema

flurin

Zitat von: Spartacus am 24 Februar 2015, 21:36:34
Hallo zusammen,
dann funktioniert der Ansatz nicht! Das heißt, die "bis"-Zeit kann nicht beim Trigger auf die "Start"-Zeit berechnet werden! Ich hatte gehofft, es gäbe eine Lösung für dieses Problem!
Schade!

Christian

Du könntest auch mit zwei DOIF versuchen.

Mit dem ersten DOIF ([06:30]) ... könntest Du die Endzeit berechnen und in ein Dummy speichern.
Mit dem zweiten DOIF die Endzeit vom Dummy benutzen.

Ich komme heute nicht mehr dazu aber ich schaue es mir morgen noch mal an.

Gruss
flurin

Spartacus

#16
Hi Damian,
verstehe ich noch nicht ganz!
Bsp.
Einschaltzeit 16:30 Uhr
([16:30-{OffTimeLicht("16:30")}]) set Licht on

würde dann mit dem Trigger auf die Einschaltzeit "16:30" auch gleichzeitig die SUB OffTimeLicht aufgerufen und die aktuelle Ausschaltzeit berechnet?

Bei diesem Aufruf
([16:30-{OffTimeLicht()}]) set Licht on hinkt die Ausschaltzeit immer hinterher und wird nur beim initialisieren korrekt berechnet.

Oder wie meinst Du das?

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 von: Spartacus am 24 Februar 2015, 22:04:34
Hi Damian,
verstehe ich noch nicht ganz!
Bsp.
Einschaltzeit 16:30 Uhr
([16:30-{OffTimeLicht("16:30")}]) set Licht on

würde dann mit dem Trigger auf die Einschaltzeit "16:30" auch gleichzeitig die SUB OffTimeLicht aufgerufen und die aktuelle Ausschaltzeit berechnet?

Bei diesem Aufruf
([16:30-{OffTimeLicht()}]) set Licht on hinkt die Ausschaltzeit immer hinterher und wird nur beim initialisieren korrekt berechnet.

Oder wie meinst Du das?

Christian
OffTimeLicht wird beim Initialisieren des Moduls aufgerufen und immer dann, wenn die errechnete Zeit (hier Ausschaltzeit) zuschlägt. Wenn das nicht ausreicht, gäbe es die Möglichkeit über modify zum Einschaltzeitpunkt, die Ausschaltzeit berechnen zu lassen, siehe:

http://forum.fhem.de/index.php/topic,23833.msg256172.html#msg256172

Gruß

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

Spartacus

Hallo Damian,
Danke, schaue ich mir noch mal genauer an! Wie am Anfang des Threads beschrieben, reicht es nicht, die Zeit beim Trigger auf die Ausschaltzeit zu berechnen.

@flurin
Danke auch Dir für Deine Unterstützung ! Ich versuche mal parallel eine andere Lösung zu bauen. Vielleicht ist ja weekday-timer eine Option!

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

flurin

Hi Christian

Eine Zwischenlösung für Dein Problem.

Ansatz: DOIF mit einer Perl-Funktion definieren.

in fhem.cfg eintragen oder noch besser im Eingabefeld eingeben:

define di_define_DOIF DOIF ([06:30]) ( { define_DOIF("di_test_lamp","06:30") } )
attr di_define_DOIF group DOIF


Bei define_DOIF wird der Name des DOIF und die Startzeit übergeben.

99_myUtils.pm: Code copy/paste

sub define_DOIF($$)
{
  my ($doif,$start_time) = @_;
 
  my $end_time = OffTimeLicht();
 
  if (defined($defs{$doif} )) {
    fhem("delete $doif");
  }
  fhem("define $doif DOIF ([$start_time-$end_time]) (set flex_lamp on) DOELSE (set flex_lamp off)");
  fhem("attr $doif group DOIF");
}


define_DOIF entsprechend ändern/ausbauen.

OffTimeLicht() ist Deine ursprüngliche Perl-Funktion.

TODO: define mit modify ersetzen.

Gruss
flurin

Spartacus

Hallo flurin,
ganz lieben Dank für Deine Lösung. Sobald ich daheim bin, werde ich es ausprobieren. Der Code ist ziemlich komplex geworden, für so eine "einfache" Anforderung.

Du schreibst, "Zwischenlösung" was genau meinst Du damit?
Ich werde berichten,
Danke und Gruß,
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

flurin

Zitat von: Spartacus am 25 Februar 2015, 16:13:16
Hallo flurin,
ganz lieben Dank für Deine Lösung. Sobald ich daheim bin, werde ich es ausprobieren. Der Code ist ziemlich komplex geworden, für so eine "einfache" Anforderung.

Du schreibst, "Zwischenlösung" was genau meinst Du damit?

Eine einfachere Lösung sehe ich mit 3 (So-Do, Fr-Sa und Silvester) DOIF's, end_time wäre dann fix: 22:00, 23:00 und 02:30.

Zwischenlösung, weil mir das tägliche "delete/define" nicht gefällt. Aber eine Optimierung würde den Code noch mehr aufblasen.

Gruss
flurin

Spartacus

Hallo flurin,
ok, verstanden! Ich versuche gerade noch den Vorschlag von Damian mit dem modify aufzugreifen. Demnach soll das beim Einschalten die Ausschaltzeit in meiner Funktion aufrufen und dann aktualisieren. Aber diese Lösung habe ich noch nicht durchblickt...
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

Spartacus

Moin,
Das mit dem Modify habe ich nicht hingekriegt! Habe ich irgendwie nicht durchblickt! Braucht man da auch zwei DOIFs?
Werde als Fallback dann auf die 3 DOIFs ausweichen, so wie flurin vorgeschlagen hat!
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

Spartacus

Moin,
Das mit dem Modify habe ich nicht hingekriegt! Habe ich irgendwie nicht durchblickt! Braucht man da auch zwei DOIFs?
Werde als Fallback dann auf die 3 DOIFs ausweichen, so wie flurin vorgeschlagen hat!
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 von: Spartacus am 26 Februar 2015, 22:35:55
Moin,
Das mit dem Modify habe ich nicht hingekriegt! Habe ich irgendwie nicht durchblickt! Braucht man da auch zwei DOIFs?
Werde als Fallback dann auf die 3 DOIFs ausweichen, so wie flurin vorgeschlagen hat!
Christian

Modify brauchst du nicht mehr, siehe Nachbarthread: Schalten mit indirekten Zeitangaben

Gruß

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

Spartacus

Wahnsinn!
Das ist ja ein Service! Da guckt man mal einen Tag nicht in den DOIF-Bereich und schon hat Damian was gebaut!
Danke,
Werde ich morgen testen!
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