FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: maxxim am 15 Juni 2015, 23:56:31

Titel: sleep beenden !
Beitrag von: maxxim am 15 Juni 2015, 23:56:31
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
Titel: Antw:sleep beenden !
Beitrag von: Wuppi68 am 16 Juni 2015, 12:53:49
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
Titel: Antw:sleep beenden !
Beitrag von: maxxim am 16 Juni 2015, 14:45:27
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
Titel: Antw:sleep beenden !
Beitrag von: Wuppi68 am 16 Juni 2015, 15:13:27
geht den set blinker active/inactive aus der Kommandozeile oben im Browser?
Titel: Antw:sleep beenden !
Beitrag von: maxxim am 16 Juni 2015, 15:39:50
nein das geht nicht !
Titel: Antw:sleep beenden !
Beitrag von: Wuppi68 am 16 Juni 2015, 17:05:53
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
Titel: Antw:sleep beenden !
Beitrag von: maxxim am 16 Juni 2015, 20:12:46
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
Titel: Antw:sleep beenden !
Beitrag von: flurin am 16 Juni 2015, 21:08:52
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
Titel: Antw:sleep beenden !
Beitrag von: Wuppi68 am 16 Juni 2015, 21:49:57
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
Titel: Antw:sleep beenden !
Beitrag 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
Titel: Antw:sleep beenden !
Beitrag von: flurin am 16 Juni 2015, 22:16:58
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
Titel: Antw:sleep beenden !
Beitrag von: maxxim am 16 Juni 2015, 22:20:11
ja, es ist alles genauso eingegeben !
Titel: Antw:sleep beenden !
Beitrag von: flurin am 16 Juni 2015, 22:25:57
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
Titel: Antw:sleep beenden !
Beitrag von: maxxim am 16 Juni 2015, 22:37:55
Sorry, aber wie finde ich die Version heraus ?

"shutdown restart"  hat leider nicht geholfen !
Titel: Antw:sleep beenden !
Beitrag von: flurin am 16 Juni 2015, 22:42:27
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 $
Titel: Antw:sleep beenden !
Beitrag 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 $
Titel: Antw:sleep beenden !
Beitrag von: flurin am 16 Juni 2015, 22:50:06
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.
Titel: Antw:sleep beenden !
Beitrag von: flurin am 16 Juni 2015, 22:52:39
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!
Titel: Antw:sleep beenden !
Beitrag 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.

Titel: Antw:sleep beenden !
Beitrag von: flurin am 16 Juni 2015, 23:10:08
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.



Titel: Antw:sleep beenden !
Beitrag 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 !
Titel: Antw:sleep beenden !
Beitrag von: flurin am 16 Juni 2015, 23:26:23
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  :)
Titel: Antw:sleep beenden !
Beitrag 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
Titel: Antw:sleep beenden !
Beitrag von: Wuppi68 am 17 Juni 2015, 09:13:57
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
Titel: Antw:sleep beenden !
Beitrag von: flurin am 17 Juni 2015, 09:54:47
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
Titel: Antw:sleep beenden !
Beitrag von: maxxim am 17 Juni 2015, 13:39:47
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

Titel: Antw:sleep beenden !
Beitrag von: flurin am 17 Juni 2015, 15:05:12
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.
Titel: Antw:sleep beenden !
Beitrag von: maxxim am 17 Juni 2015, 20:16:56
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
Titel: Antw:sleep beenden !
Beitrag von: flurin am 18 Juni 2015, 09:02:05
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