Hallo zusammen,
ich habe folgendes konfiguriert und zwar aktiviert man den dummy "Licht_Intervall", so werden mehrere Lichter mit Pause dazwischen ein- und ausgeschaltet.
Eine Beispielkonfiguration :
define Licht_Intervall dummy
attr Licht_Intervall eventMap /on:Activ/off:Inactiv/
attr Licht_Intervall room xy
attr Licht_Intervall webCmd on:off
define Licht_an_aus notify Licht_Intervall { if ( Value ("Licht_Intervall") eq "Activ" ) { fhem ("set Wohnzimmer_Licht on-for-timer 20;; sleep 10;;\
set Arbeitszimmer_Licht on-for-timer 20;; sleep 10;; set Kueche_Licht on") } else { fhem("set Wohnzimmer_Licht off;; set Arbeitszimmer_Licht off;;\
set Kueche_Licht off")}}
Meine Frage ist nun, wie kann ich das ausschalten bzw. unterbrechen?
Momentan ist es so, dass wenn man bei "Licht_Intervall" auf "off" klickt, dann gehen die Lichter kurz aus aber weil die sleep-Prozesse noch laufen. gehen die Lichet nach sleep 10 sek. wieder an !
Ich wäre sehr dankbar, wenn mir jemand helfen könnte .
Gruß
Max
ich würde das blinken anders lösen ....
define blinker at +*00:00:40 set Wohnzimmer_Licht on-for-timer 20
und mit
set blinker active
bzw
set blinker inactve
wird es aus und eingeschaltet
Danke für deine Antwort !
Das Unterbrechen mit set blinker Inactiv finktioniert leider nicht oder ich wende das nicht richtig an !
Wenn man auf "off" klickt, passiert gar nichts, das Intervall läuft weiter.
So sieht der Code aus :
define Licht_on_off notify Licht_Intervall { if (Value ("Licht_Intervall") eq "Activ")\
{ fhem ("define blinker at +*00:00:20 set Wohnzimmer_Licht on-for-timer 10")} else { fhem ("set blinker Inactiv")}}
Danke und Gruß
max
geht den set blinker active/inactive aus der Kommandozeile oben im Browser?
nein das geht nicht !
Zitat von: maxxim am 16 Juni 2015, 15:39:50
nein das geht nicht !
ok und was bekommst Du für eine Meldung?
Was steht im Logfile?
nach dem define vom AT muss die Lampe schon einmal blinken - tut sie das auch?
Nur noch einmal kurz wegen der Logik
1. AT definieren --> Blinker für Lampe XY ist im System hinterlegt und rennt auch sofort los !!!
2. set ... inactive --> schaltet den Blinker ab
3. set ... active --> schaltet den Blinker ein
für 1) brauchst Du keine weiteren if oder so
if brauchst Du dann nur für 2) und 3)
und ganz wichtig Inactive ist nicht inactive und auch nicht Inaktiv
Also die Fehlermeldung in der Logfile lautet : no set implemented for blinker.
Ich habe jetzt ein einfaches Beispiel und zwar nach dem Aktivieren vom "Licht_Intervall" geht das Licht an und erst nach 30 sek. wird es
wieder ausgeschaltet (das funktioniert). Wenn ich aber innerhalb von 30 sek. beim "Licht_Intervall" auf off klicke, um das Ganze zu unterbrechen, müsste der Befehl set blinker inactive abgeschickt werden und der Vorgang müsste abgebrochen werden, und das passiert leider nicht :
define Licht_on_off notify Licht_Intervall { if (Value ("Licht_Intervall") eq "Activ")
{ fhem ("set Wohnzimmer_Licht on;; define blinker at +00:00:30 set Wohnzimmer_Licht off")} else { fhem ("set blinker inactive")}}
Ist der Code falsch ?
Noch ein Beispiel, alle 10 sek. bleibt das Licht für 30 sek. an und das funktioniert auch nur das Unterbrechen nicht !
define Licht_on_off notify Licht_Intervall { if (Value ("Licht_Intervall") eq "Activ")
{ fhem ("define blinker at +*00:00:10 set Wohn on-for-timer 30")} else { fhem ("set blinker inactive")}}
Danke und Gruß
max
Hallo maxxim
Solche Fälle habe ich mit DOIF umgesetzt:
define du_count dummy
define di_step DOIF ([Licht_Intervall:?Activ]) (set Wohnzimmer_Licht on-for-timer 20, setreading du_count state 1)
DOELSEIF ([?Licht_Intervall] eq "Activ" and [du_count] == 1) (set Arbeitszimmer_Licht on-for-timer 20, setreading du_count state 2)
DOELSEIF ([?Licht_Intervall] eq "Activ" and [du_count] == 2) (set Kueche_Licht on, setreading du_count state 0)
attr di_step wait 0:10:10
Der erste Befehl wird sofort ausgeführt, der 2. und 3. nach 10 Sek. Pause.
Die Befehle werden nur ausgeführt, solange Licht_Intervall=Activ ist.
Gruss
flurin
define blinker at +*00:00:40 set Wohnzimmer_Licht on-for-timer 20
set blinker inactive
define Licht_on_off notify Licht_Intervall { if (Value ("Licht_Intervall") eq "Activ") { fhem ("set blinker active")} else { fhem ("set blinker inactive")}}
so sollte es eigentlich gehen
Zeile 1 --> blinker definieren
Zeile 2 --> blinker inactive schalten
Zeile 3 --> Ein oder ausschalten
wenn dieses nicht gehen sollte, kannst Du auch das Attribut disable benutzen
attr blinker disable 0
attr blinker disable 1
Hallo flurin,
vielen Danke für deine Antwort !
Es tut sich leider nichts, der erste Befehl wird auch nicht ausgeführt.
In der Logfile steht folgendes :
di_step: reading does not exist: [Licht_Intervall:?Activ]
Gruß
max
Zitat von: maxxim am 16 Juni 2015, 22:06:19
Hallo flurin,
vielen Danke für deine Antwort !
Es tut sich leider nichts, der erste Befehl wird auch nicht ausgeführt.
In der Logfile steht folgendes :
di_step: reading does not exist: [Licht_Intervall:?Activ]
Gruß
max
Seltsam, bei mir geht es.
Du hast doch noch dein dummy wie oben definiert?
define Licht_Intervall dummy
attr Licht_Intervall eventMap /on:Activ/off:Inactiv/
attr Licht_Intervall room xy
attr Licht_Intervall webCmd on:off
ja, es ist alles genauso eingegeben !
Zitat von: maxxim am 16 Juni 2015, 22:20:11
ja, es ist alles genauso eingegeben !
Hast du die neuste DOIF Version?
version DOIF
Evtl. "shutdown restart" ausführen
Sorry, aber wie finde ich die Version heraus ?
"shutdown restart" hat leider nicht geholfen !
Zitat von: maxxim am 16 Juni 2015, 22:37:55
Sorry, aber wie finde ich die Version heraus ?
Ergänze zuerst dein Dummy mit setList on off:
define Licht_Intervall dummy
attr Licht_Intervall eventMap /on:Activ/off:Inactiv/
attr Licht_Intervall room xy
attr Licht_Intervall webCmd on:off
attr Licht_Intervall setList on off
Im Eingabefeld eingeben:
version DOIF
Anzeige:
# $Id: 98_DOIF.pm 8432 2015-04-13 19:34:11Z damian-s $
Ich habe deshalb gefragt, weil ich das schon bereits im Eingabefeld eingegeben hatte und es zeigt nichts an ???
Aber in der ersten Zeile von 98_DOIF.pm steht :
$Id: 98_DOIF.pm 6848 2014-11-01 11:43:38Z damian-s $
Zitat von: maxxim am 16 Juni 2015, 22:45:44
Ich habe deshalb gefragt, weil ich das schon bereits im Eingabefeld eingegeben hatte und es zeigt nichts an ???
Komisch! Probier mit:
version
dann sollten alle Module angezeigt werden.
Zitat von: maxxim am 16 Juni 2015, 22:45:44
Ich habe deshalb gefragt, weil ich das schon bereits im Eingabefeld eingegeben hatte und es zeigt nichts an ???
Aber in der ersten Zeile von 98_DOIF.pm steht :
$Id: 98_DOIF.pm 6848 2014-11-01 11:43:38Z damian-s $
Okey, das ist uralt! Führe ein Update aus!
Es ist zum heulen ...
Dauernd timeout !
Global global http://fhem.de/fhemupdate/CHANGED: Select timeout/error:
FHEM läuft auf einem Raspberry.
Zitat von: maxxim am 16 Juni 2015, 23:04:59
Es ist zum heulen ...
Dauernd timeout !
Global global http://fhem.de/fhemupdate/CHANGED: Select timeout/error:
FHEM läuft auf einem Raspberry.
Ein Update wird einfach durch Eingabe von "update" im Eingabefeld ausgeführt:
update
und dein Raspberry muss mit dem Internet verbunden sein.
Also update wurde dauern abgebrochen aber update FHEM/98_DOIF.pm hat geklappt :)
Es ist jetzt die neuset Version installiert.
Aber es klappt leider nocht nicht !
Danke für Deine Geduld !
Zitat von: maxxim am 16 Juni 2015, 23:21:39
Also update wurde dauern abgebrochen aber update FHEM/98_DOIF.pm hat geklappt :)
Es ist jetzt die neuset Version installiert.
Aber es klappt leider nocht nicht !
Danke für Deine Geduld !
Es ist schon wichtig, dass alle Module auf dem neusten Stand sind.
Versuch es nochmals.
Wenn du soweit bist, dann poste folgende Lists
list Licht_Intervall
und
list di_step
Gute Nacht :)
Hallo wuppi68,
die ersten zwei Zeilen werden automatisch beim Abspeichern gelöscht :
define blinker at +*00:00:40 set Wohnzimmer_Licht on-for-timer 20
set blinker inactive
Gruß
max
Zitat von: maxxim am 17 Juni 2015, 08:44:54
Hallo wuppi68,
die ersten zwei Zeilen werden automatisch beim Abspeichern gelöscht :
define blinker at +*00:00:40 set Wohnzimmer_Licht on-for-timer 20
set blinker inactive
Gruß
max
mach mal aus dem +* ein *+ ... könnte funktionieren
Zitat von: maxxim am 17 Juni 2015, 09:01:50
- Die Lichter gehen alle sofort an.
Bei wait 00:01:00 ist ja logisch! 01 = 1 Sekunde, 00 = 0 Sekunden! Siehe auch Commandref.
Oben habe ich es so angegeben:
attr di_step wait 0:10:10
Wir kommen schneller weiter, wenn du das Beispiel vorläufig nicht änderst.
Zitat von: maxxim am 17 Juni 2015, 09:01:50
- Das Wohnzimmer-Licht (Wohn) geht nicht nach 20 sek. aus, es bleibt an obwohl auf der FHEM-Seite das Icon für Wohnzimmer-Licht dunkel wird.
Grundsätzlich sollten die Geräte-Definitionen bzw. -Eigenschaften stimmen.
Unterstützt dein Gerät on-for-timer?
Teste den Befehl bem Eingabefeld:
set Arbeit on-for-timer 20
Zitat von: maxxim am 17 Juni 2015, 09:01:50
- Das Unterbrechen mit einem Klick auf "off" bei "Licht_Intervall" funktioniert auch nicht.
Bei den kurzen Pausen war es vermutlich nicht möglich, es richtig zu testen. Bei mir funktioniert Licht_Intervall.
Die Reihenfolge erfolgt einmal, so habe ich deine Angaben verstanden. Wenn du eine endlose Wiederholung brauchst, dann muss die "Schaltung" erweitert werden. Aber erst, wenn das aktuelle DOIF bei dir grundsätzlich funktioniert.
Gruss
flurin
Hallo flurin,
sorry, ich habe einiges ausprobiert und am Ende aus Versehen eine falsche Kopie eingefügt....
Könntest du mir vielleicht kurz erklären, was attr di_step wait 00:10:00 bewirkt ?
Danke und Gruß
max
Zitat von: maxxim am 17 Juni 2015, 13:39:47
Könntest du mir vielleicht kurz erklären, was attr di_step wait 00:10:00 bewirkt ?
Es steht eigentlich in Commandref:
Zitat
Verzögerungen
Verzögerungen für die Ausführung von Kommandos werden pro Kommando über das Attribut "wait" definiert. Syntax:
attr <Modulname> wait <Sekunden für das erste Kommando>:<Sekunden für das zweite Kommando>:...
Für Kommandos ohne Verzögerung werden Sekundenangaben ausgelassen oder auf Null gesetzt. Die Verzögerungen werden nur auf Events angewandt und nicht auf Zeitsteuerung. Eine bereits ausgelöste Verzögerung wird zurückgesetzt, wenn während der Wartezeit ein anders Kommando, ausgelöst durch ein neues Ereignis, ausgeführt werden soll.
attr di_step wait 0:10:10
Das DOIF hat 3 Befehle (cmd_1, cmd_2 und cmd_3). cmd_1 wird ohne, cmd_2 mit 10 Sek. und cmd_3 mit 10 Sek. Verzögerung ausgeführt.
Mit dem DOIF wird eine "Schrittsteuerung" realisiert. Zu jedem Schritt (step) wird eine Verzögerung mittels Attribut "wait" zugeordnet. du_count ist eine Hilfsvariable, um die Schritte zu zählen und bewirkt, dass nur ein DOIF/DOELSEIF Zweig sequenziell ausgeführt wird.
Hallo flurin,
vielen Danke für deine super Erklärung !
Also der Code funktioniert soweit aber aus irgendeinem Grund gibt es nach ein paar Durchläufen immer wieder Aussätzer, d.h. es passiert einfach nichts mehr und dann entferne ich den Code (oder auskommentieren), abspeichern, wieder den Code einfügen und dann läuft alles wieder einwandfrei bis zum nächsten Ausfall, ich habe das jetz mehrere Male ausprobiert. Im Logfile steht auch nichts...
Die Steckdosen kann ich jederzeit ein und ausschalten (set Wohn on oder set Arbeit on-for-timer 20) also an den Steckdosen oder Verbindung liegt es nicht.
Hier ist der Code : (aus set kueche on habe ich set kueche on-for-timer 20 gemacht)
define Licht_Intervall dummy
attr Licht_Intervall eventMap /on:Activ/off:Inactiv/
attr Licht_Intervall room xy
attr Licht_Intervall setList on off
attr Licht_Intervall webCmd on:off
define du_count dummy
define di_step DOIF ([Licht_Intervall:?Activ]) (set Wohn on-for-timer 20, setreading du_count state 1) DOELSEIF ([?Licht_Intervall] eq "Activ" and [du_count] == 1) (set Arbeit on-for-timer 20, setreading du_count state 2) DOELSEIF ([?Licht_Intervall] eq "Activ" and [du_count] == 2) (set Kueche on-for-timer 20, setreading du_count state 0)
attr di_step wait 0:10:10
Sehr seltsam !
Gruß
max
Zitat von: maxxim am 17 Juni 2015, 20:16:56
Also der Code funktioniert soweit aber aus irgendeinem Grund gibt es nach ein paar Durchläufen immer wieder Aussätzer, d.h. es passiert einfach nichts mehr und dann entferne ich den Code (oder auskommentieren), abspeichern, wieder den Code einfügen und dann läuft alles wieder einwandfrei bis zum nächsten Ausfall, ich habe das jetz mehrere Male ausprobiert. Im Logfile steht auch nichts...
Den Fehler kann ich nicht reproduzieren. Ich werde die Schaltung auf meinem System zyklisch laufen lassen.
Evtl. finden wir auch einen Freiwilligen, der das DOIF testet.
Gruss
flurin
Edit:
Versuch es mit diesem wait:
attr di_step wait 1:10:10
Also eine Verzögerung von 1 Sek. bei cmd_1