Hauptmenü

DOIF neue Features (Sleep-Alternative)

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

Vorheriges Thema - Nächstes Thema

Ellert

Für mich sieht es so aus, als würden [lgtv] und [inesa] oder [andre] abwechselnd ihre Readings erneuern.

Wenn Du die Zeiteinschränkungen heraus nimmst, kannst Du das sofort beobachten.

ZitatNachdem ich das hier mit den neuen Features hier gelesen hatte habe ich einige
Doif neu angepaßt.
Ich sehe gerade nicht welches neue Feature Du eingebaut hast? Mehrere Komandos in einem DOIF-Zweig waren schon vorher möglich.
Wie sah das DOIF aus bevor, Du es umgebaut hast?

inesa394

Damit meinte ich wie im ersten Thread hier beschrieben ein sleep mit einzubauen zwischen den kommandos was vorher so nicht möglich war.
Außerdem hatte es vorher ohne sleep funktioniert.
Werde das mit den Readings mal checken ob sie ihren
Status ständig ändern wie du schreibst
Inesa

Ralli

Hallo Damian,

noch eine Frage zum wait bei dem neuen Feature der aneinandergereihten Kommandos:

1,1,1,1

bedeutet, dass die Wartezeit vor Ausführung der jeweiligen Kommandos immer zum vorherigen Kommando bezogen wird und nicht auf den Auslösezeitpunkt, gell?

Also cmd_1_1 wird eine Sekunde nach Trigger gestartet, cmd_1_2 eine Sekunde nach cmd_1_1, cmd_1_3 eine Sekunde nach cmd_1_2 und nicht alle cmd_1_x eine Sekunde nach Trigger, oder?
Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250824) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Damian

Zitat von: Ralli am 16 August 2015, 11:47:57
Hallo Damian,

noch eine Frage zum wait bei dem neuen Feature der aneinandergereihten Kommandos:

1,1,1,1

bedeutet, dass die Wartezeit vor Ausführung der jeweiligen Kommandos immer zum vorherigen Kommando bezogen wird und nicht auf den Auslösezeitpunkt, gell?

Also cmd_1_1 wird eine Sekunde nach Trigger gestartet, cmd_1_2 eine Sekunde nach cmd_1_1, cmd_1_3 eine Sekunde nach cmd_1_2 und nicht alle cmd_1_x eine Sekunde nach Trigger, oder?

Ja.

Gruß

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

Flexstarr

@Damian: ist die 98_DOIF.pm Version in diesem Thread jetzt eigentlich die, die mittlerweile auch via normalem fhem Update reinkommt?
FHEM 5.8 @RPi2
CUL433, CUL868, JeeLink, Hamony Hub, Hue Bridge, ELV EnergieAmpel, IT Steckdosen, mehrere Homematic Teile..

Ralli

Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250824) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Amenophis86

Fragt mich nicht wieso, aber habe heute in geistiger Umnachtung ein FHEM Update gemacht. Hatte vergessen, dass SourceFrog irgendwie noch Probleme macht. Also hat es mir erst mal 2 meiner DOIF Bedingungen beim Neustart raus geworfen, weil diese angeblich Fehlerhaft waren. Dann habe ich das neuster DOIF Modul hier aus dem Thread runtergeladen, mittels Filezilla auf den PI geschoben und wieder einen restart gemacht. Allerdings zeigt er mir immer noch an, dass meine DOIF Befehle fehlerhaft seien. Habe dann das Modul über "restart 98_DOIF" versucht nochmal neu zu laden und es kam folgender Fehler:

Zitat
Too many arguments for main::DOIF_SetSleepTimer at ./FHEM/98_DOIF.pm line 727, near "1)"
Too many arguments for main::DOIF_cmd at ./FHEM/98_DOIF.pm line 728, near "$event)"
Too many arguments for main::DOIF_SetSleepTimer at ./FHEM/98_DOIF.pm line 763, near "$timerNr)"
Too many arguments for main::DOIF_cmd at ./FHEM/98_DOIF.pm line 764, near "$event)"
Too many arguments for main::DOIF_SetSleepTimer at ./FHEM/98_DOIF.pm line 776, near "$timerNr)"
Too many arguments for main::DOIF_cmd at ./FHEM/98_DOIF.pm line 777, near "$event) "
Too many arguments for main::DOIF_cmd at ./FHEM/98_DOIF.pm line 1156, near "})"

Die DOIF Fehler, welche er mir ankreidet sind, dass man mehrer Befehle nicht mehr in verschiedenen Klammern auflisten kann. Dies ist allerdings für den Waittimer nötig. Vor dem Update hat es auch noch Problemlos funktioniert. Werde jetzt das Backup, welches ich gott sei Dank noch hatte, wieder einspielen und hoffen, dass der Fehler dann weg ist. Aber dachte mir, dass die o.g. Fehlermeldugn für Damian vll interessant sein könnt.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Damian

#112
Zitat von: Amenophis86 am 18 August 2015, 14:42:26
Fragt mich nicht wieso, aber habe heute in geistiger Umnachtung ein FHEM Update gemacht. Hatte vergessen, dass SourceFrog irgendwie noch Probleme macht. Also hat es mir erst mal 2 meiner DOIF Bedingungen beim Neustart raus geworfen, weil diese angeblich Fehlerhaft waren. Dann habe ich das neuster DOIF Modul hier aus dem Thread runtergeladen, mittels Filezilla auf den PI geschoben und wieder einen restart gemacht. Allerdings zeigt er mir immer noch an, dass meine DOIF Befehle fehlerhaft seien. Habe dann das Modul über "restart 98_DOIF" versucht nochmal neu zu laden und es kam folgender Fehler:

Die DOIF Fehler, welche er mir ankreidet sind, dass man mehrer Befehle nicht mehr in verschiedenen Klammern auflisten kann. Dies ist allerdings für den Waittimer nötig. Vor dem Update hat es auch noch Problemlos funktioniert. Werde jetzt das Backup, welches ich gott sei Dank noch hatte, wieder einspielen und hoffen, dass der Fehler dann weg ist. Aber dachte mir, dass die o.g. Fehlermeldugn für Damian vll interessant sein könnt.

Das hat weniger etwas mit deinen Definitionen zu tun, als viel mehr mit geänderten internen Funktionen. Daher  das neue Modul nie zur Laufzeit laden, sondern System runterfahren, Modul kopieren und wieder hochfahren.

Gruß

Damian


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

All-Ex

Die neue Version ist bei mir nun seit einigen Tagen im Einsatz und sowohl die bisherigen DOIFs als auch die neuen Funktionen funktionieren einwandfrei  :)

Durch die neuen Befehlsfolgen ( (set lamp1 on)(set lamp2 on) ) in Verbindung mit wait und den Wochentag über einen Dummy ( [[begin]-[end]|[Wochentag]] ) konnte ich einiges vereinfachen und übersichtlicher gestalten.

Vielen Dank !

mfeske

Zitat von: Damian am 10 August 2015, 21:08:50
Was geht nicht? Du musst deine Aussage konkretisieren und am besten ein Fehlverhalten mit einem list deines Moduls belegen, sonst kann ich mit der Aussage "geht nicht" nichts anfangen.

Hallo Damian,

sorry für die unvollständige Beschreibung. Ich hatte mir ein DOIF gebaut um mit einem Taster die Rolläden zur Hälfte herunter zu fahren. Das hatte auch schon mal funktioniert. Jetzt geht es nicht mehr die Rolläden werden über dieses DOIF nicht mehr angesteuert :-(
Internals:
   DEF        ([taster_rolladen_down:?on]) (set gong_MP3 playTone 008, set Rolladen01 on, sleep 6; set Rolladen01 on, set Rolladen02 on, sleep 5; set Rolladen02 on)
   NAME       rolladen_kurz_down_doif
   NR         373
   NTFY_ORDER 50-rolladen_kurz_down_doif
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-08-10 09:42:51   Device          taster_rolladen_down
     2015-08-09 22:21:29   cmd_event       taster_rolladen_down
     2015-08-09 22:21:29   cmd_nr          1
     2015-08-22 15:06:02   e_taster_rolladen_down_events on
     2015-08-09 22:21:29   state           cmd_1
   Condition:
     0          EventDoIf('taster_rolladen_down',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on')
   Devices:
     0           taster_rolladen_down
     all         taster_rolladen_down
   Do:
     0          set gong_MP3 playTone 008, set Rolladen01 on, sleep 6; set Rolladen01 on, set Rolladen02 on, sleep 5; set Rolladen02 on
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev taster_rolladen_down
     triggerEvents:
       on
   Internals:
   Itimer:
   Readings:
   State:
   Trigger:
     all         taster_rolladen_down
Attributes:
   room       Wohnzimmer
Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)

Damian

Zitat von: mfeske am 22 August 2015, 15:09:00
Hallo Damian,

sorry für die unvollständige Beschreibung. Ich hatte mir ein DOIF gebaut um mit einem Taster die Rolläden zur Hälfte herunter zu fahren. Das hatte auch schon mal funktioniert. Jetzt geht es nicht mehr die Rolläden werden über dieses DOIF nicht mehr angesteuert :-(
Internals:
   DEF        ([taster_rolladen_down:?on]) (set gong_MP3 playTone 008, set Rolladen01 on, sleep 6; set Rolladen01 on, set Rolladen02 on, sleep 5; set Rolladen02 on)
   NAME       rolladen_kurz_down_doif
   NR         373
   NTFY_ORDER 50-rolladen_kurz_down_doif
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-08-10 09:42:51   Device          taster_rolladen_down
     2015-08-09 22:21:29   cmd_event       taster_rolladen_down
     2015-08-09 22:21:29   cmd_nr          1
     2015-08-22 15:06:02   e_taster_rolladen_down_events on
     2015-08-09 22:21:29   state           cmd_1
   Condition:
     0          EventDoIf('taster_rolladen_down',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on')
   Devices:
     0           taster_rolladen_down
     all         taster_rolladen_down
   Do:
     0          set gong_MP3 playTone 008, set Rolladen01 on, sleep 6; set Rolladen01 on, set Rolladen02 on, sleep 5; set Rolladen02 on
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev taster_rolladen_down
     triggerEvents:
       on
   Internals:
   Itimer:
   Readings:
   State:
   Trigger:
     all         taster_rolladen_down
Attributes:
   room       Wohnzimmer


Mit einer Bedingung ohne "do always" konnte es auch vorher nur einmal funktioniert haben. Es funktioniert also alles wie programmiert.

Gruß

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

dominik

Ich bin gerade dabei meinen Perl Code nach und nach mit DOIF umzusetzen, da das Teil wirklich genial ist!!
Nun bin ich bei einem Punkt angelangt, wo ich irritiert bin wieso das nicht funktioniert.

Folgende Problem:
Ich habe einen Saugroboter (walle ;) ) den ich mit IR Befehlen starte und stoppe. Da ich nicht mit der IR LED am RPi ständig hinter dem Ding her bin, möchte ich beim Stoppen für 5 Minuten alle 10 Sekunden den IR "go home" Befehl senden. Hier meine Implementierung, die leider nur einmal funktioniert, danach reagiert es nicht mehr.

define DI_wallestop DOIF ([walle:state] eq "KEY_HOME") (set walle KEY_HOME)
attr DI_wallestop do always
attr DI_wallestop repeatsame 30
attr DI_wallestop room AutoZeitschaltuhr
attr DI_wallestop wait 10


Wenn ich nun einmal KEY_HOME setze, so läuft es super 30x durch und sendet den IR Befehl alle 10s. Setze ich danach nochmals KEY_HOME, so tut sich nichts mehr. cmd_counter steht auf 30 - muss ich das selbst irgendwie auf 0 zurück setzen?
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Damian

Zitat von: dominik am 23 August 2015, 19:03:18
Ich bin gerade dabei meinen Perl Code nach und nach mit DOIF umzusetzen, da das Teil wirklich genial ist!!
Nun bin ich bei einem Punkt angelangt, wo ich irritiert bin wieso das nicht funktioniert.

Folgende Problem:
Ich habe einen Saugroboter (walle ;) ) den ich mit IR Befehlen starte und stoppe. Da ich nicht mit der IR LED am RPi ständig hinter dem Ding her bin, möchte ich beim Stoppen für 5 Minuten alle 10 Sekunden den IR "go home" Befehl senden. Hier meine Implementierung, die leider nur einmal funktioniert, danach reagiert es nicht mehr.

define DI_wallestop DOIF ([walle:state] eq "KEY_HOME") (set walle KEY_HOME)
attr DI_wallestop do always
attr DI_wallestop repeatsame 30
attr DI_wallestop room AutoZeitschaltuhr
attr DI_wallestop wait 10


Wenn ich nun einmal KEY_HOME setze, so läuft es super 30x durch und sendet den IR Befehl alle 10s. Setze ich danach nochmals KEY_HOME, so tut sich nichts mehr. cmd_counter steht auf 30 - muss ich das selbst irgendwie auf 0 zurück setzen?

Du hast das Attribut repeatsame falsch verstanden. Es wird nichts automatisch wiederholt - es bedeutet einfach, dass bei einem Trigger die gleiche Bedingung bis zu 30 mal wiederholt wird - repeatsame impliziert do always. Zurückgesetzt wird der Counter, wenn eine andere Bedingung mit DOELSEIF oder DOELSE kommt, diese hast du aber nicht definiert.

Gruß

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

dominik

Das erklärt meinen Denkfehler. Danke!

So funktioniert es nun:
define DI_wallestop DOIF ([walle:state] eq "KEY_HOME") (set walle KEY_HOME) DOELSEIF ([walle:state:sec] < 10) ()
attr DI_wallestop repeatsame 30
attr DI_wallestop room AutoZeitschaltuhr
attr DI_wallestop wait 10


Wusste nicht was ich da beim DOELSEIF abfragen soll, daher diese komische Abfrage.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

mfeske

#119
Hallo Damian,

so:
Internals:
   DEF        ([taster_rolladen_down:?on]) (set gong_MP3 playTone 008, set Rolladen01 on, sleep 6; set Rolladen01 on, set Rolladen02 on, sleep 5; set Rolladen02 on)
   NAME       rolladen_kurz_down_doif
   NR         373
   NTFY_ORDER 50-rolladen_kurz_down_doif
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-08-24 17:55:51   cmd_event       taster_rolladen_down
     2015-08-24 17:55:51   cmd_nr          1
     2015-08-24 17:55:50   e_taster_rolladen_down_events on
     2015-08-24 17:55:51   state           cmd_1
   Condition:
     0          EventDoIf('taster_rolladen_down',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on')
   Devices:
     0           taster_rolladen_down
     all         taster_rolladen_down
   Do:
     0          set gong_MP3 playTone 008, set Rolladen01 on, sleep 6; set Rolladen01 on, set Rolladen02 on, sleep 5; set Rolladen02 on
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev taster_rolladen_down
     triggerEvents:
       on
   Internals:
   Itimer:
   Readings:
   State:
   Timerfunc:
   Trigger:
     all         taster_rolladen_down
Attributes:
   do         always
   room       Wohnzimmer


funktioniert es jetzt auch, wenn auch leider nicht ganz zuverlässig, was aber bestimmt an anderen Sachen liegt. Manchmal fahren beide Rolläden zur gleichen Zeit komplett runter manchmal klappt es das beide nur zur Hälfte runterfahren.
Der Plan war ja:
Fahre Rolladen01 runter
warte 6 sec
stoppe Rolladen01
Fahre Rolladen02 runter
warte 5 sec
stoppe Rolladen02

eigentlich ist es doch schon komisch, das beide zur gleichen Zeit runterfahren?
Wie würde den der Umbau von sleep auf wait aussehen und wie stelle ich über die weboberfläche fest,welche 98_DOIF.pm verwendet wird?

Gruß
Micha
Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)