Hi,
ich würde gerne eine ELRO Steckdose schalten, wobei ich die Zeit vorher über ein DropDown Menü auswählen, bzw setzen kann. Die Zeiten hierfür sollten vorgegeben sein, z.B. 20min., 30min., 40min. Nach einem Druck auf "set" oder "setzen" oder dergleichen, soll die Steckdose eingeschalten werden, und nach der, vorher eingestellten Zeit, automatisch wieder ausgeschalten werden.
Es gibt zwar einige Beispiele mit einer Heizungssteuerung, Soll/Istwert-Vergleich, aber richtig schlau werde ich daraus nicht...
Die Steckdose ist derzeit über "IT" (868mhz SCC CUL) bei FHEM eingebunden und funktioniert. Nun fehlt eben "nur" die Zeitvorgabe.
Danke vorab!
Grüße
Hallo,
Funktional habe ich das mal eben für Dich umgesetzt und getestet. Das unten Beschriebene funktioniert grob schonmal.
Aber es geht sicher einfacher und schöner/eleganter
1) Einen Dummy Schalter definieren
define ELRO.on.for.Timer dummy
2) Eine Setlist mit den Zeiten hinzufügen
attr ELRO.on.for.Timer setList 10min 20min 30min 40min 50min 60min
3)
erster Set auf 10min (Hier passiert noch nichts, außer das der Dummy die 10min anzeigt)
set ELRO.on.for.Timer 10min
Und dann geht das sicher etwas eleganter, aber soweit bin ich selbst noch nicht mit dem mächtigen notify und die Syntax von Perl etc. kann ich auch nicht besonders gut.
@ALL (Wäre aber interessiert wie es schöner und einfacher ginge)
4)
Ich würde aus Unwissenheit jetzt 6 notifys erstellen.
Jeweils mit der entsprechenden sot on for timer zeit.
Also so:
define ntfy_ELRO.on.for.Timer.10 notify ELRO.on.for.Timer:10min { fhem ("set ELRO.Switch.Ch1 on-for-timer 600")}
define ntfy_ELRO.on.for.Timer.20 notify ELRO.on.for.Timer:20min { fhem ("set ELRO.Switch.Ch1 on-for-timer 1200")}
define ntfy_ELRO.on.for.Timer.30 notify ELRO.on.for.Timer:30min { fhem ("set ELRO.Switch.Ch1 on-for-timer 1800")}
define ntfy_ELRO.on.for.Timer.40 notify ELRO.on.for.Timer:40min { fhem ("set ELRO.Switch.Ch1 on-for-timer 2400")}
define ntfy_ELRO.on.for.Timer.50 notify ELRO.on.for.Timer:50min { fhem ("set ELRO.Switch.Ch1 on-for-timer 3000")}
define ntfy_ELRO.on.for.Timer.60 notify ELRO.on.for.Timer:60min { fhem ("set ELRO.Switch.Ch1 on-for-timer 3600")}
jetzt ein
set ELRO.on.for.Timer 20min
...und der notify sollte nun von "active" umspingen auf eine Zeit, und der "ELRO.Switch.Ch1" solte für 20 minuten laufen.
Das einzige was ich jetzt noch nicht hinbekommen habe war, diesen Dummy im FLOORPLAN mit drop down anzuzeigen.
@All Wie bekommt man einen Dummy im Floorplan mit drop-down auswahl hin? Braucht man da attribute?
Gruß
der Merlin
Hallo,
Ungetestet:
Zitatch würde aus Unwissenheit jetzt 6 notifys erstellen.
Hätte ich zu meinen Anfangszeiten auch gemacht ;)
Das Event - hier also die Zeit (10min ....) sollte in $EVENT stehen und würde sich mit
einem notify auswerten lassen:
define notify_Elro notify ELRO.on.for.Timer {
if($EVENT eq "10min) {
fhem ("set ELRO.Switch.Ch1 on-for-timer 600");
}
elsif($EVENT eq "20min) {
fhem ("set ELRO.Switch.Ch1 on-for-timer 1200");
}
elsif($EVENT eq "230min) {
fhem ("set ELRO.Switch.Ch1 on-for-timer 1800");
}
....
Aber wie gesagt - ungetestet da ich lieber mit webCmd arbeite anstelle setList.
Ich weiß daher nicht ob das einen Unterschied macht (vermutlich nicht) aber ich bin jetzt zu faul das zu prüfen 8)
Grüße
Hi Puschel,
Danke für den Tip mit $EVENT
Kannte ich noch nicht.
Obwohl es ja nicht mein Thread ist habe ich es mal eben ausprobiert.
Der Vorschlag von dir ging so bei mir nicht.
Ich habe es dann ein wenig angepasst so aus intuition und es ging:
Ich dachte ich hätte irgendwann mal die Syntax gesehen dass da ein :* sein muss (warum und wofür kapier ich sicher nie)
ELRO.on.for.Timer:*
ELRO.on.for.Timer:* {
if($EVENT eq "10min") {
fhem ("set ELRO.Switch.Ch1 on-for-timer 600");
}
elseif($EVENT eq "20min") {
fhem ("set ELRO.Switch.Ch1 on-for-timer 1200");
}
elseif($EVENT eq "30min") {
fhem ("set ELRO.Switch.Ch1 on-for-timer 1800");
}
elseif($EVENT eq "40min") {
fhem ("set ELRO.Switch.Ch1 on-for-timer 2400");
}
elseif($EVENT eq "50min") {
fhem ("set ELRO.Switch.Ch1 on-for-timer 3000");
}
elseif($EVENT eq "60min") {
fhem ("set ELRO.Switch.Ch1 on-for-timer 3600");
}
}
Wie sähe denn die erwähnte webCmd Variante dazu aus?
TANTE EDIT:
Habe es eben selbst rausgefunden (heute läufts :-) )
define ELRO.on.for.Timer2 dummy
attr ELRO.on.for.Timer2 webCmd state
attr ELRO.on.for.Timer2 setList state:10min,20min,30min,40min,50min,60min
Und hast du noch ne Erklärung dafür warum ich im Floorplan den Dummy nicht mit drop-down sehe sondern nur mit der Bezeichnung, obwohl ich angebe, dass es "2 (Name+Icon+Commands)" ist?
TANTE EDIT:
Nachdem man die webCmd Variante genutzt hat, wird der Dummy auch im Floorplan mit einem DropDown angezeigt.
Danke Dir
Hallo,
ja, wie gesagt - ungetestet und zu faul es zu versuchen 8)
Aber du hast es ja geschafft ;)
ZitatIch dachte ich hätte irgendwann mal die Syntax gesehen dass da ein :* sein muss (warum und wofür kapier ich sicher nie)
Wenn dann würd ich .* nehmen - das ist Perl-Regexp.
. (Punkt) = ein beliebiges Zeichen
* = beliebig oft
.* = ein beliebiges Zeichen beliebig oft
Ich hatte sowas schon vermutet.
Es heisst einfach nur:
ELRO.on.for.Timer:.*
Vom Device ELRO.on.for.Timer jedes Event das er sendet.
Bei einem Dummy sind die Events überschaubar - bei einem echten Device hilft der EventMonitor auf das richtige Regexp zu kommen.
Es soll ja nicht alles matchen ;)
webCmd wirst du für den Floorplan nicht gebrauchen können.
attr ELRO.on.for.Timer webCmd 10min:20min:30min:40min:50min:60min
ZitatUnd hast du noch ne Erklärung dafür warum ich im Floorplan
Nö leider nicht - ich verwende keinen Floorplan.
Grüße
Hammer! Vielen Dank für die Mühen!
Habe jetzt den Dummy erstellt und das DropDown Menü wird angezeigt. Wahrscheinlich stehe ich jetzt aber auf dem Schlauch :-\
Wie verknüpfe ich jetzt die ELRO Steckdose mit dem Dummy? setlist kann ich durch die IT Definition (Type) nicht eintragen.
EDIT:
Wer lesen kann...
Muss ja erst das notify erstellen 8). Ich werde erstmal ein weing rumprobieren! Danke nochmals!
Again what learnd ;-)
Danke für die Erklärung
Um es nochmal ganz sicher richtig zu stellen... (für alle nachlesenden)
webCmd im dummy mit dem state etc, wie unten von mir beschrieben hat es dann auch geschafft dass der Dummy mit drop down im Floorplan auftauchte.
Einziger hinweis dann noch, dass der notify im Beispiel noch auf den ersten dummy reagiert. wenn man es also übernehmen will, dann noch den notify anpassen, dass er nun auch auf den dummy 2 reagiert anstatt auf 1
Von mri aus CLOSED
Danke Puschel!
ZitatDanke Puschel!
Gerne - wenn ich nur wüsste wofür :o
Aber wenn es klappt dann ist es ja gut ;)
Zitat von: Humidor am 17 Februar 2015, 20:31:22
Hammer! Vielen Dank für die Mühen!
Habe jetzt den Dummy erstellt und das DropDown Menü wird angezeigt. Wahrscheinlich stehe ich jetzt aber auf dem Schlauch :-\
Wie verknüpfe ich jetzt die ELRO Steckdose mit dem Dummy? setlist kann ich durch die IT Definition (Type) nicht eintragen.
EDIT:
Du verknüpfst nicht im dummy, sondern im notify
Ein Dummy ist nur ein Objekt. Das kann jeden Status haben. du kannst auch
set ELRO.on.for.Timer Humidor
eingeben, dann hat der Dummy den Status Humidor.
Im Notify sagst Du hier, dass der ELRO geschaltet werden soll.
ELRO.on.for.Timer:.* {
if($EVENT eq "10min") {
fhem ("set ELRO.Switch.Ch1 on-for-timer 600");
}
die ELRO Steckdose habe ich in meinem Beispiel einfach "ELRO.Switch.Ch1" genannt gehabt
den Dummy der das Ding schlaten soll hatte ich "ELRO.on.for.Timer" genannt, und
den Notify hatte ich dann quasi "ntfy_ELRO.on.for.Timer" genannt.
Ablauf ist.
wenn du den status des Dummy anders, löst der quasi den notify aus, und im notify wird ein "set ELRO.Switch.Ch1 on-for-timer <zeit in sec>" ausgelöst
Wobei man lieber sagen sollte, dass der notify eher darauf "hört" welchen status der dummy annimmt, und dann reagiert.
TANTE EDIT:
Ich gehe mal davon aus, dass Du den ELRO Aktor bereits schlaten kannst, und nicht noch irgendwo die IT Codes etc berechnen musst bis es läuft.
ZitatIch gehe mal davon aus, dass Du den ELRO Aktor bereits schlaten kannst, und nicht noch irgendwo die IT Codes etc berechnen musst bis es läuft.
Ja, das eigentliche schalten funktioniert bereits wie gewünscht. Habe nun zum einen "IT" als Steckdose, den Dummy und das/den notify definiert. Wenn ich nun die Zeit, z.B. 10min am Dummy auswähle/ändere, passiert an der Steckdose erstmal nichts, das einzige was passiert, ist, dass sich der Status von "active" in die Uhrzeit ändert, als es geändert wurde.
Wenn ich aber "set MEINE_STECKDOSE on-for-timer 10" manuell in die commandozeile eingebe, funktioniert es.
Ich kann es mir nicht erklären:
- "IT" ELRO_10111_A Elro Steckdose erstellt (Schalten funktioniert)
- Dummy ELRO.on.for.Timer erstellt mit setlist state:10min,20min,30min,40min,50min,60min
- Notify notify_Elro erstellt und beschrieben, aber die Steckdose schaltet nicht, es ändert sich nur o.g. Zeitstempel, sobald ich z.b. "10min" oder "20min" auswähle
schau dir mal im Notify den DEF an.
Bei dir steht: (das hatte ich am Anfang so geschrieben, später dann wurde es geändert)
ELRO.on.for.Timer:*
Sollte aber ggf. so sein:
ELRO.on.for.Timer:.*
Da ist nach dem : noch ein . vor dem *
Und dann kommt es sicher noch drauf an wie Du jetzt den Dummy genau definiert hast.
mit setList oder mit webCmd
Denn danach richtet sich auch der Notify wieder.
Könnte aber auch schon durch den . behoben werden...
Der Fehler lag an "elseif". Habe irgendwo zufällig gelesen, dass es in Pearl mit "elsif" beschrieben werden muss. Nachdem ich das geändert hatte, ging es 8) ;D
ZitatDer Fehler lag an "elseif".
Mist - und ich dachte beim coden noch - schreib bloss elsif.
Aber du hast es ja gefunden ;)
Andere Möglichkeit:
Das Attribut webCmd so ändern:
attr <Device> webCmd 10 Min:20 Min:30 Min:
(also zwischen Zeit und Text ein Leerzeichen) und dann diesen Code:
ELRO.on.for.Timer:.* {
my ($Minuten,$Text)=split(/ /,$EVENT);
my $Sekunden=$Minuten*60;
fhem ("set ELRO.Switch.Ch1 on-for-timer $Sekunden");
}
Vorteil:
Weniger Zeilen - zusätzliche Zeiten benötigen keine Extrazeilen mit elsif ;)
Ungetestet daher sicher voller Fehler.
Evtl. muss es auch so heissen:
fhem ("set ELRO.Switch.Ch1 on-for-timer ".$Sekunden);
Grüße
P.S.:
Zitatdass es in Pearl mit "elsif" beschrieben werden muss.
Es heisst Perl sonst versucht noch jemand was zu bestellen ;D
könnt Ihr bitte mal den fertigen Teil hier einstellen ..
ich komm da so leider nicht durch
MFG Harway
;D
Beitrag 9 und 12 sollten dir helfen.