Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: Reinerlein am 27 November 2014, 14:17:31
Hallo Damian,

ok, ich dachte das Modul würde sich dabei genauso verhalten wie ein Notify, und nur die Events auswerten, die für das geforderte Reading auftreten...


Was steht denn im Reading recentStateType, wenn eine Bewegung detektiert wird?

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

Reinerlein

Hi Damian,

es wird nicht mit aktualisiert, da bleibt immer "info" drin.
Es wird nur aktualisiert, wenn die "anderen" Informationen geliefert werden, also immer zusammen mit battery und co.

Grüße
Reinerlein

Damian

#782
Zitat von: Reinerlein am 27 November 2014, 17:13:20
Hi Damian,

es wird nicht mit aktualisiert, da bleibt immer "info" drin.
Es wird nur aktualisiert, wenn die "anderen" Informationen geliefert werden, also immer zusammen mit battery und co.

Grüße
Reinerlein

ok.

Ist zwar nicht die eleganteste Lösung, aber sollte funktionieren :

DOIF ((time - time_str2num(ReadingsTimestamp( "aussen_Vorgarten_PIR","motion",0 )) < 5 and [aussen_Vorgarten_PIR]) (....

Trigger, wenn letzte Änderung des Readings innerhalb von 5 Sekunden stattgefunden hat.

Die Idee ist von Nico ein paar Posts zuvor in diesem Thread.

Die ganze Sache ist sowieso etwas gebastelt mit den beiden DOIFs und dem Dummy.

Zukünftig wird ein on-for-timer mit zwei Zeilen mit DOIF definierbar sein, siehe meine todo-Liste.

Wenn dein Notify allerdings zuverlässig funktioniert, dann bleibe einfach dabei.

Gruß

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

Merlin1

Zitat von: Inputsammler am 20 November 2014, 20:40:14
Frage 1:
Ich habe mir die Funktion (def) angelegt
([FBDECT_17:power]<25) (set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01 off, set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 off)

Dieser soll bewirken wenn die Leistung an der Steckdose unter 25 Watt fällt er die 2 Homatic ausschaltet.

Etwas ähnliches habe ich auch vor... jedoch nach einer gewissen Zeit.

Ich habe die LW 12 Wireless LED Lampen. Die sind über eine schaltbare Steckdose angeschlossen.
Das Trafo will ich nicht dauerhaft am Stromnetz lassen.
Wenn ich sie einschalte dauert es also eine Weile bis das Wireless LAN wieder startklar ist.
Also möchte ich die Steckdose abschalten, aber zeitverzögert, wenn die Power z.B. 30 Minunten unter 3 Watt ist.

Also in "Metasprache"...

define Power_Off DOIF ([Strom:Power]<3) "für 30 Minuten") (set Strom_Sw off)

Hat jemand eine Idee?

Reinerlein

Hallo Merlin1,

dafür kannst du das Attribut "wait" am DOIF einstellen. Damit kannst du die Zeitverzögerung in Sekunden einstellen, die *vor* Ausführung des entsprechenden Kommandos gewartet wird.
Wenn innerhalb der Wartezeit die Bedingung für die Ausführung des Kommandos wieder ungültig wird, wird der Timer abgebrochen (und bei Gültigkeit wieder angestartet).

Grüße
Reinerlein

moonsorrox

@Damian
ein Frage ist es generell möglich in einem DOIF eine Zufallssteuerung einzubauen, oder geht das gar nicht.
Ich versuche mich seit gestern daran und habe kein Erfolg, ich kann das DEF abspeichern, aber dann wenn die Zeit gekommen ist kommt immer ein Perl Syntaxfehler
Kann es sein das mir Klammern fehlen..?

zu meinem Vorhaben, ich habe mir ein Dummy erstellt, welches zwischen "Dämmerung" und "Zufall" schalten kann, Dämmerung funktioniert nun schon seit ein paar Tagen nun möchte ich mit dem gleichen Dummy die Schaltung auf "Zufall" laufen lassen und hier einen RandomTimer nutzen


Das ist der Fehler mit dem unten angehängten Code, sagt mir als unerfahrener Perluser leider nichts

perl error in condition: InternalDoIf('Zeitsteuerung','STATE','') eq "Zufall" and * (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06")): syntax error at (eval 674927) line 1, near "* (DOIF_time_once"


Hier der Code aus dem DEF:
( [Zeitsteuerung] eq "Zufall" and * ([{sunset("CIVIL",0,"17:00","22:20")}|12345] or [{sunset("CIVIL",-14900,"12:00","22:20")}|06]))
( set Ladestation 01:05:00 260 500/800 )

Zeiten sind von mir angepasst da ich gerade am testen bin
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Brockmann

Zitat von: moonsorrox am 29 November 2014, 13:06:25
Das ist der Fehler mit dem unten angehängten Code, sagt mir als unerfahrener Perluser leider nichts

perl error in condition: InternalDoIf('Zeitsteuerung','STATE','') eq "Zufall" and * (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06")): syntax error at (eval 674927) line 1, near "* (DOIF_time_once"


Hier der Code aus dem DEF:
( [Zeitsteuerung] eq "Zufall" and * ([{sunset("CIVIL",0,"17:00","22:20")}|12345] or [{sunset("CIVIL",-14900,"12:00","22:20")}|06]))
( set Ladestation 01:05:00 260 500/800 )

Wesentlich ist bei solchen Fehlermeldungen (meist) das was hinter "near" steht, also konkret die Stelle bezeichnet, wo es geknallt hat. Hier das *-Zeichen. Kann es sein, dass Du mit DOIF und at durcheinander kommst? Bei at brauchst Du ein *, bei DOIF nicht...

Wenn Du das weglässt, sollte der Fehler verschwinden. Dafür kommt vermutlich ein anderer, aber der hat mit DOIF dann nichts mehr zu tun.  ;)

moonsorrox

#787
Zitat von: Brockmann am 29 November 2014, 14:33:51
Wesentlich ist bei solchen Fehlermeldungen (meist) das was hinter "near" steht, also konkret die Stelle bezeichnet, wo es geknallt hat. Hier das *-Zeichen. Kann es sein, dass Du mit DOIF und at durcheinander kommst? Bei at brauchst Du ein *, bei DOIF nicht...

Wenn Du das weglässt, sollte der Fehler verschwinden. Dafür kommt vermutlich ein anderer, aber der hat mit DOIF dann nichts mehr zu tun.  ;)
genau diese "*" ohne hatte ich schon probiert, ging aber auch nicht..!
hatte nur auf Funktion getestet... ;) mal schaun was das für ein Fehler dann ist.

EDITH:// hier ist er, ich denke ich kann das mit der Zeit hinten so nicht schreiben.. das da Ladestation steht ist nur zum probieren da ich diese hier neben dem PC habe und so sehen kann ob es funtioniert..!
Fehlermeldung:
set Ladestation 01:05:00 260 500/800 : Unknown argument 01:05:00, choose one of clear:readings,trigger,register,rssi,msgEvents,all getConfig getRegRaw getSerial getVersion inhibit:on,off off on on-for-timer on-till pair peerBulk peerIODev press raw regBulk regSet reset sign:on,off statusRequest toggle unpair
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Brockmann

Zitat von: moonsorrox am 29 November 2014, 14:56:55
genau diese "*" ohne hatte ich schon probiert, ging aber auch nicht..!
Woraus Du nicht schließen solltest, dass das "*" richtig wäre. Immerhin bekommst Du ohne * eine andere Fehlermeldung. Und das hatte ich Dir ja auch angekündigt.

Zitat von: moonsorrox am 29 November 2014, 14:56:55
EDITH:// hier ist er, ich denke ich kann das mit der Zeit hinten so nicht schreiben.. das da Ladestation steht ist nur zum probieren da ich diese hier neben dem PC habe und so sehen kann ob es funtioniert..!
Fehlermeldung:
set Ladestation 01:05:00 260 500/800 : Unknown argument 01:05:00, choose one of clear:readings,trigger,register,rssi,msgEvents,all getConfig getRegRaw getSerial getVersion inhibit:on,off off on on-for-timer on-till pair peerBulk peerIODev press raw regBulk regSet reset sign:on,off statusRequest toggle unpair
Nein, sicher kannst Du das so nicht schreiben. Aber wo soll ich anfangen? Ich vermute, Du möchtest auf diese Weise RandomTimer ins Spiel bringen. Das kann so aber nicht funktionieren. Bitte lies Dir die Commandref zu RandomTimer in aller Ruhe durch und versuche das Konzept zu verstehen. Mit einem set auf einen Schalter wirst Du keinen RandomTimer hinbekommen. Der wird als eigenes Objekt definiert. Darin taucht der zu verwendende Schalter als Parameter auf.
Aber wie ich schon sagte, für den ohnehin schon arg langen DOIF-Thread ist das IMHO völlig off-topic.

fhainz

Zitat von: Damian am 07 September 2014, 18:32:21
Ich plane folgende Erweiterungen des Moduls:

[...]
2) Wiederholung alle X-Sekunden zulassen

Beispiel für Benachrichtigung:

define di_hohe_feuchtigkeit DOIF ([bad:humidity]>70) (set tablet ttsSay Bitte im Badezimmer lüften.)
attr di_hohe_feuchtigkeit wait 300
attr di_hohe_feuchtigkeit do 600

[...]

Gibt es dazu schon was neues?

Grüße

Damian

Zitat von: fhainz am 29 November 2014, 16:35:04
Gibt es dazu schon was neues?

Grüße

... erst in der nächsten Version, wird aber noch etwas dauern - habe etwas anderes zu tun.

Gruß

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

fhainz

Ja kein stress. Ich habs derzeit über einen watchdog laufen. Wollte das ganze nur vereinfachen ;)

Grüße

Damian

Zitat von: fhainz am 29 November 2014, 17:59:53
Ja kein stress. Ich habs derzeit über einen watchdog laufen. Wollte das ganze nur vereinfachen ;)

Grüße

ja, das wird mit der neuen Version von DOIF recht elegant lösbar sein, siehe meine todo-Liste einige Posts zuvor.

Gruß

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

moonsorrox

#793
Zitat von: Brockmann am 29 November 2014, 16:29:30
Und das hatte ich Dir ja auch angekündigt.
jo hast du und ich hatte es ja auch schon probiert und wußte das ein Fehler kommt.. ;)

Zitat von: Brockmann am 29 November 2014, 16:29:30
Bitte lies Dir die Commandref zu RandomTimer in aller Ruhe durch und versuche das Konzept zu verstehen.
ich habe die commandref ständig offen vom DOIF und vom RT  ;) :D
mal schauen was ich damit anfange...! evtl. stelle ich in dem Beleuchtungsthread von mir dann die Frage, denn ich werde sicher wieder hängen, später..!
Wenn das alles mal läuft möchte ich sowieso den gesamten Code posten, damit das nachgebaut werden kann, denn ich habe dazu auch schon 2x eine PM bekommen, konnte aber nur den Code für Dämmerung empfehlen..

Was zumindest funktioniert ist das wenn das Dummy auf Zufall steht geht das Licht auch nicht an, denn ich hatte vorhin vergessen es nach meinen Tests zurück zu stellen auf Dämmerung...
Aber wenn ich dann das Licht manuell einschalte, geht es mit dem DOIF auch nicht aus zu der letzten Uhrzeit heute um 1.15 Uhr ist das richtig so, oder sollte er trotzdem ausschalten.?

Edith:// tja ich habe mal das zweite Beispiel aus dem RT genommen, aber auch hier gibt es einen Sytax Error und ich komme nicht weiter damit  :-\
Leider sind auch die ganzen Beispiele aus dem DOIF in der commandref weg.
war im englischen Teil drin sorry
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

satprofi

#794
Hallo.
Nach heutigem update und anschliesenden shutwdown/restart kam folgende meldung

Dunkelheit_off DOIF: the at function "ReadingsVal("myTwilight","sr_indoor","")" must return a timespec and not <empty string>.: {ReadingsVal("myTwilight","sr_indoor","")}\





define Dunkelheit_off DOIF ([{ReadingsVal("myTwilight","sr_indoor","")}]) (set Dunkelheit off)


was wurde jetzt bei doif geändert?
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram