DOIF neue Features (Sleep-Alternative)

Begonnen von Damian, 12 Juli 2015, 21:17:52

Vorheriges Thema - Nächstes Thema

FunkOdyssey

Hmm, stimmt. Jetzt muss ich dann nur noch wissen, was ich überhaupt will. :-)
Danke für den Tipp.

Damian

Zitat von: FunkOdyssey am 15 Juli 2015, 17:24:32
Hmm, stimmt. Jetzt muss ich dann nur noch wissen, was ich überhaupt will. :-)
Danke für den Tipp.

ja, es gibt beliebig viele Möglichkeiten den Zufall zu definieren. Und dafür macht es wenig Sinn beliebige Syntax zu erfinden, denn die muss man erst mal lernen. Rechnen mit Grundrechenarten sollten dagegen die meisten beherrschen.

Hier ein Beispiel: Jede Stunden mit einer maximalen Verzögerung von 15 Minuten in Schritten von einer Minute:

define di_lampe DOIF ([08:00-18:00] and [([:00]+int(rand(15))*60)])
    (set lampe on)
DOELSE
    (set lampe off)


Und auch dafür müsste man erst mal eine Syntax sich ausdenken, bis der Nächste einen neuen Wunsch äußert. In dieser Zeit zaubere ich dir einen neuen Einzeiler in der Bedingung mit etwas plus, minus, mal und geteilt, der den Zufalls-Wunsch realisiert. ;)

Gruß

Damian


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

FunkOdyssey

Hi Damian, es tut mir leid, dass ich diesen Thread hier mit dem Zufallsthema zweckentfremde, aber ich muss zu deiner Idee leider noch einmal nachfragen.

Unabhängig davon, ob das Zeitraster statisch ist oder über eine Zufallsfunktion generiert wird; es spring afaik nie in den DOELSE-Teil. Darüber bin ich auch bereits bei der Steuerung meiner Zirkulationspumpe (anderes Thema) gestolpert.

Wenn ich zum Testen, den folgenden Code nehme, bleibt er immer bei CMD_1 stehen:


([+:02])
    (set dummydev on)
DOELSE
    (set dummydev off)


Ich würde in den letzten DOIF-Beispielen ungerne mit "on-for-timer" oder ähnliches arbeiten.

Stehe ich irgendwie auf dem Schlauch? Und könntest du mir einen Wink mit dem Zaunpfahl geben? Danke. :-)

Damian

Zitat von: FunkOdyssey am 16 Juli 2015, 08:50:30
Hi Damian, es tut mir leid, dass ich diesen Thread hier mit dem Zufallsthema zweckentfremde, aber ich muss zu deiner Idee leider noch einmal nachfragen.

Unabhängig davon, ob das Zeitraster statisch ist oder über eine Zufallsfunktion generiert wird; es spring afaik nie in den DOELSE-Teil. Darüber bin ich auch bereits bei der Steuerung meiner Zirkulationspumpe (anderes Thema) gestolpert.

Wenn ich zum Testen, den folgenden Code nehme, bleibt er immer bei CMD_1 stehen:


([+:02])
    (set dummydev on)
DOELSE
    (set dummydev off)


Ich würde in den letzten DOIF-Beispielen ungerne mit "on-for-timer" oder ähnliches arbeiten.

Stehe ich irgendwie auf dem Schlauch? Und könntest du mir einen Wink mit dem Zaunpfahl geben? Danke. :-)

Getriggert wird hier immer alle 2 Minuten und die Bedingung ist dann wahr. Wann soll deiner Meinung der DOELSE-Fall kommen. Es gibt hier keinen Trigger, bei dem die Bedingung nicht wahr wird, also kann DOELSE-Fall in dieser Konstruktion nie zum Zuge kommen.


Gruß

Damian

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

FunkOdyssey

Ja, ich weiß. Darauf wollte ich hinaus.
Dann wäre eine Zufallsschaltung ja leider doch nicht umsetzbar.
Wenn ich "on-for-timer" oder ähnliches im Ausführungsteil nutze, dann laufe ich Gefahr, dass die Ausschaltzeit sich mit der neuen Einschaltzeit überschneidet.

Damian

Zitat von: FunkOdyssey am 16 Juli 2015, 09:21:12
Ja, ich weiß. Darauf wollte ich hinaus.
Dann wäre eine Zufallsschaltung ja leider doch nicht umsetzbar.
Wenn ich "on-for-timer" oder ähnliches im Ausführungsteil nutze, dann laufe ich Gefahr, dass die Ausschaltzeit sich mit der neuen Einschaltzeit überschneidet.

Ich weiß nicht, was du genau vorhast, aber "zufällig" kann man etwas einschalten, aber auch ausschalten. Es hängt auch davon ab, wie ich schon geschrieben habe, wie man den "Zufall" definiert. So kann man eine Überschneidung ausschließen. Bei Überschneidung dürfte sich die on-Dauer verlängern - wäre je nach Anwendungsfall auch nicht tragisch.

Gruß

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

Icinger

Dann musst du das on-for-timer halt so setzen, dass es maximal bis zur nächsten Einschaltzeit läuft.

Also wenn du zB mit max. 15 Minuten verschiebung arbeitest, darfs halt nur maximal 44 Minuten laufen.
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

MarkusN

So, habe das Modul mal installiert. Das erste was mir aufgefallen ist war folgender Eintrag im Log (war vorher noch nicht da):

2015.07.17 18:42:49 1: PERL WARNING: Argument "" isn't numeric in addition (+) at ./FHEM/98_DOIF.pm line 550.
2015.07.17 18:38:24 1: PERL WARNING: Use of uninitialized value in split at ./FHEM/98_DOIF.pm line 1011.


Ansonsten habe ich mal die Schaltung über einen Bewegungsmelder mit dem wait umgesetzt, und was soll ich sagen, es funktioniert!

Damian

Zitat von: MarkusN am 17 Juli 2015, 19:36:44
So, habe das Modul mal installiert. Das erste was mir aufgefallen ist war folgender Eintrag im Log (war vorher noch nicht da):

2015.07.17 18:42:49 1: PERL WARNING: Argument "" isn't numeric in addition (+) at ./FHEM/98_DOIF.pm line 550.
2015.07.17 18:38:24 1: PERL WARNING: Use of uninitialized value in split at ./FHEM/98_DOIF.pm line 1011.


Ansonsten habe ich mal die Schaltung über einen Bewegungsmelder mit dem wait umgesetzt, und was soll ich sagen, es funktioniert!

Wird mit der nächsten Version korrigiert.

Gruß

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

Fritz!Maxi

Hi,


ich teste gerade das neue Feature für meine Rollladensteuerung. Ich habe aber zu den wait Einträgen noch eine Verständnisfrage.


Ich möchte an Arbeitstagen den Rollladen_Kueche um 6:20 hochfahren lassen, WZ_Links und WZ_Rechts 15 Sekunden später und WZ_Mitte 30 Sekunden später. An Nicht-Arbeitstagen soll das Ganze erst um 8:00 beginnen, dann aber mit den gleichen Versätzen. Passt das so wie in meinem Beispiel oder ist für die wait Einträge immer 6:20 die Referenzzeit?

DOIF ([?Rollladensteuerung] eq "off" and [6:20|8])
   (set Rollladen_Kueche on)
   (set Rollladen_WZ_Links on)
   (set Rollladen_WZ_Rechts on)
   (set Rollladen_WZ_Mitte on)
  DOELSE ([8:00|7])
   (set Rollladen_Kueche on)
   (set Rollladen_WZ_Links on)
   (set Rollladen_WZ_Rechts on)
   (set Rollladen_WZ_Mitte on)

attr <device> do resetwait
attr <device> wait 0,15,15,30:0,15,15,30


Viele Grüße,
Christoph

FHEM im Debian Container uaf QNAP, diverse Homematic Komponenten

Damian

Zitat von: Fritz!Maxi am 22 Juli 2015, 22:42:34
Hi,


ich teste gerade das neue Feature für meine Rollladensteuerung. Ich habe aber zu den wait Einträgen noch eine Verständnisfrage.


Ich möchte an Arbeitstagen den Rollladen_Kueche um 6:20 hochfahren lassen, WZ_Links und WZ_Rechts 15 Sekunden später und WZ_Mitte 30 Sekunden später. An Nicht-Arbeitstagen soll das Ganze erst um 8:00 beginnen, dann aber mit den gleichen Versätzen. Passt das so wie in meinem Beispiel oder ist für die wait Einträge immer 6:20 die Referenzzeit?

DOIF ([?Rollladensteuerung] eq "off" and [6:20|8])
   (set Rollladen_Kueche on)
   (set Rollladen_WZ_Links on)
   (set Rollladen_WZ_Rechts on)
   (set Rollladen_WZ_Mitte on)
  DOELSE ([8:00|7])
   (set Rollladen_Kueche on)
   (set Rollladen_WZ_Links on)
   (set Rollladen_WZ_Rechts on)
   (set Rollladen_WZ_Mitte on)

attr <device> do resetwait
attr <device> wait 0,15,15,30:0,15,15,30


Viele Grüße,
Christoph

Bei Zeittriggerung war eine Verzögerung per wait bisher nicht möglich. Diese Einschränkung wirkt sich leider auch auf die neue Funktionalität. Das werde ich in einer kommenden Version ändern. Solange musst du dich gedulden.

Grundsätzlich ist die Zeitspanne immer auf den vorherigen Befehl bezogen (entsprechend einem sleep).

Gruß

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

Fritz!Maxi

Ab morgen sind bei uns Ferien, da gilt sowieso nur $we  ;)
Vielen Dank erst mal, da warte ich mit Freuden auf die neue Version!
FHEM im Debian Container uaf QNAP, diverse Homematic Komponenten

Damian

Zitat von: Fritz!Maxi am 22 Juli 2015, 23:13:02
Ab morgen sind bei uns Ferien, da gilt sowieso nur $we  ;)
Vielen Dank erst mal, da warte ich mit Freuden auf die neue Version!

Ich habe gerade Blödsinn erzählt. Ich habe es gerade mal mit Zeiten getestet - es funktioniert. Offenbar habe ich mehr programmiert als ich noch weiß ;)

Gruß

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

Fritz!Maxi

Zitat von: Damian am 22 Juli 2015, 23:16:47
Ich habe gerade Blödsinn erzählt. Ich habe es gerade mal mit Zeiten getestet - es funktioniert. Offenbar habe ich mehr programmiert als ich noch weiß ;)

Gruß

Damian
Perfekt, dann kann ich ja alle meine komplizierten notifies und ats umstellen.
Vielen Dank!
FHEM im Debian Container uaf QNAP, diverse Homematic Komponenten

Damian

Zitat von: Fritz!Maxi am 22 Juli 2015, 23:26:20
Perfekt, dann kann ich ja alle meine komplizierten notifiies und ats umstellen.
Vielen Dank!

ja und gut testen bevor ich diese Version einchecke, wenn denn svn wieder läuft.

Gruß

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