Hauptmenü

Einfache Timer Funktion

Begonnen von zgadgeter, 02 September 2013, 21:14:29

Vorheriges Thema - Nächstes Thema

Zrrronggg!

ZitatUnd, richtig verstanden habe ich weder das eine noch das andere

Dann will ich's mal kurz versuchen:

Zitatdefine pumpean at +*00:30:00 set PoolPump on ; define pumpeaus at +00:15:00 set PoolPump off

define pumpean ->  (irgendeine Event definieren, das was machen soll. Es wurde "pumpean" genannt, könnte aber auch "Flunz" heissen
at ->  das Event soll zu bestimmten Zeiten ausgelöst werden
+*  -> und zwar in xy Minuten von jetzt an (+) und dann immer wieder  im selben  (*) Intervall
00:30:00 -> 0 Stunden, 30 Minuten, 0 Sekunden

Damit ist geklärt unter welchen Bedingungen die "pumpean" genannten Aktion ausgeführt werden soll. Jetzt kommt WAS ausgeführt werden soll, mehre auszuführende Kommandos werden durch ein Semikolon getrennt,

 set PoolPump on  -> schalte den Aktor mit dem Namen PoolPump auf "on"
; -> Trenner zum nächsten Kommando

Und jetzt kommt der Trick, als nächstes Kommando legen wir ERNEUT ein Event an, das zeitlich ausgelöst wird:
define pumpeaus ->  (irgendeine Event definieren, das was machen soll. Es wurde "pumpeuas" genannt, könnte aber auch "Blonz" heissen
at ->  das Event soll zu bestimmten Zeiten ausgelöst werden
+  -> und zwar in xy Minuten von jetzt an (+) und dann nicht mehr.
00:15:00 -> 0 Stunden, 15 Minuten, null Sekunden

Damit ist geklärt unter welchen Bedingungen die "pumpeaus" genannten Aktion ausgeführt werden soll. Jetzt kommt WAS ausgeführt werden soll:

 set PoolPump off  -> schalte den Aktor mit dem Namen PoolPump auf "off"

Da pumpeaus nur einmal ausgeführt werden soll wird es danach gelöscht... aber 15 Minuten später vom immer wieder ausgeführten pumpeon wieder angelegt.





FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Zrrronggg!

ZitatIch war lange genug in der Entwicklungshilfe tätig, um zu erkennen, dass Du keinen blassen Schimmer davon hast, wovon Du hier redest.

Och mönsch Betateilchen, das ist doch kein Diskussionsstil. Anstatt dich mit dem Sachthema zu befassen, greifst du mich persönlich an.

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

betateilchen

Ich hab Dich nicht angegriffen.
DU hast hier mit hinkenden Vergleichen angefangen, die nichts mit dem Sachthema zu tun haben.
Und darauf hab ich einfach keine Lust.

Ich bin hier raus. Ich lasse mir von Dir nicht meinen versuchten Lösungsweg kaputtschreiben, nur weil Du meine Systematik nicht erkennst und Dich zum wiederholten Mal hier im Forum daran aufgeilst, dass ich ein paar nicht unbedingt notwendige Klammern setze, um Dinge auf diesem Weg zu verdeutlichen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: zgadgeter schrieb am Di, 03 September 2013 11:50"Niete" ist kein schönes Wort :).

schöner als "Vollpfosten", oder?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

zgadgeter

Zitat von: betateilchen schrieb am Di, 03 September 2013 13:19
Zitat von: zgadgeter schrieb am Di, 03 September 2013 11:50"Niete" ist kein schönes Wort :).

schöner als "Vollpfosten", oder?
Stimmt.
Ich hoffe, obwohl sich wegen meiner Frage die Diskussion so ausgebreitet hat, ich trotzdem noch auf euch Beide mich verlassen kann mir zu helfen!
Nochmals, danke alle!

PS: und, wenn ihr beide, oder auch einer von euch, am Donnerstag an dem Koelner treffen teilnimmt, spendiere ich jedem ein Bier, oder Cola, egal.
:)
NUC FHEM mit vielen Intertechno/FS20/Flamingo schalter
und Busware CUL und nanoCUL

Zrrronggg!

ZitatNiete ... Vollpfosten ...  keinen blassen Schimmer

Zitatkaputtschreiben ... aufgeilen.

Betateilchen: Wir sind nur unterschiedlicher Auffassung wie man Leuten helfen kann/sollte. Das ist weder ein Grund hier komplett hinzuschmeissen, noch mich persönlich anzugreifen.
Letzteres ist nicht schlimm, ich kann das verkraften.

Aber hinwerfen ... das fände ich schade.

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

PeMue

Hallo Jungs,

auch ich bin einer, der es noch nicht so recht "blickt" - obwohl ich schon Programmiererfahrung habe (allerdings nicht in Perl und noch weniger in fhem).

Es ist toll, dass sich Leute Zeit nehmen, anderen zu helfen. Dass da unterschiedliche Ansätze vorhanden sind, Dinge zu erklären, ist auch klar. Aber ich finde, jeder sollte die Meinung des Anderen respektieren und persönliche Angriffe sein lassen ...

Ich persönlich präferiere den Ansatz, erst mal den Algorithmus aufzuschreiben, z.B:
- mach jetzt die Pumpe an
- warte 15 min. und schalte dann die Pumpe aus
- warte 15 min.
- wiederhole das solange, bis ich was anderes sage
oder
- schalte jetzt alle 30 min. die Pumpe an
- schalte nach 15 min. und danach alle 30 min. die Pumpe aus

Je nach dem, wie man den Algorithmus formuliert, wird auch die Realisierung unterschiedlich sein, wenngleich das Ergebnis (Pumpe für 15 min. an, dann Pumpe für 15 min aus) dasselbe ist. Aber eben mit besserer oder schlechterer Codierung ...

Für mich wäre viel interessanter, zu wissen:
- wann die {} kommen (sage ich damit in der Kommandozeile, dass jetzt eine Perl Funktion kommt?)
- wann kann ich die Befehle (wie z.B. set RPILCD01 backlight 0) ohne Klammer eintippen? ist das dann eine fhem Funktion?

Sprich, mir ist die Unterscheidung: was ist Perl und was ist fhem nicht ganz klar (steht mit Sicherheit irgendwo, ich habe es nur nicht parat). Wenn dies geklärt ist, und ein bisschen Programmiererfahrung vorhanden ist, kommt der Rest in Verbindung mit der commandref vermutlich relativ schnell alleine ...

So long.

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Zrrronggg!

Da hatte ich im Forum hier schonmal eine kleines Tutorial eingetippt, aber leider finde ich den Beitrag nicht mehr.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

zgadgeter

Zitat von: betateilchen schrieb am Mo, 02 September 2013 21:52
Zitat von: zgadgeter schrieb am Mo, 02 September 2013 21:39Stimmt. Sorry, mein Fehler. Ich wollte ja jeweils 15 minuten an, minuten aus.

dann muss es "vorne" +*00:30 und "hinten" +00:15 heißen

ZitatUnknown command fhem("define, try help.
Unknown command }, try help.

hast Du Dich irgendwo vertippt? Mach doch mal ein List von Deiner Definition und poste die hier

Also, auch mit den Risiko das ich hier wieder eine Diskussion starte.....
Habe heute Abend nachgesehen ob das alles funktioniert (define pumpean at +*00:30:00 set PoolPump on ; define pumpeaus at +00:15:00 set PoolPump off).
Laut Log hat fhem das alles gut an und ausgemacht.
Nur, anscheinend da es ein IT schalter/Dose ist, reicht die Reichweite nicht aus bis hinten am Garten. Schade, da es eine Gartensteckdose ist.
So, habe jetzt eine FS20 dran gehängt. Kann diese per manuell über fhem an/aus machen, also Reichweite kein Problem. Also funktioniert.
Jetzt dachte ich das ich die kompliziertere Variante probiere, manuell eingetippt! Also kein copy/paste.

define pumpean at +*00:30:00 { fhem("set PoolPump on"); fhem("define pumpeaus at +00:15 set PoolPump off"); }

bekomme immer noch den Fehler:
Unknown command fhem("define, try help.
Unknown command }, try help.

Hier mal ein Auszug aus meiner config. Hat da jemand einen Rat?

#changed definition of the cul_em device. was previously: define CUL_EM_2 CUL_EM 2
define CUL_EM_2 CUL_EM 2 75 900 0.21
attr CUL_EM_2 room utility
define FileLog_CUL_EM_2 FileLog ./log/CUL_EM_2-%Y.log CUL_EM_2:CNT.*
attr FileLog_CUL_EM_2 logtype power8:Power,text
attr FileLog_CUL_EM_2 room CUL_EM
define weblink_CUL_EM_2 SVG FileLog_CUL_EM_2:power8:CURRENT
attr weblink_CUL_EM_2 label "CUL_EM_2 Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr weblink_CUL_EM_2 room Plots
define poolpump FS20 1b1b 00
attr poolpump room garden
define FileLog_poolpump FileLog ./log/poolpump-%Y.log poolpump
attr FileLog_poolpump logtype text
attr FileLog_poolpump room FS20
define FS20_1b1b01 FS20 1b1b 01
attr FS20_1b1b01 room FS20
define FileLog_FS20_1b1b01 FileLog ./log/FS20_1b1b01-%Y.log FS20_1b1b01
attr FileLog_FS20_1b1b01 logtype text
attr FileLog_FS20_1b1b01 room FS20
define wl_0 SVG FileLog_CUL_EM_2:power8:CURRENT
NUC FHEM mit vielen Intertechno/FS20/Flamingo schalter
und Busware CUL und nanoCUL

Zrrronggg!

Ich habe für den Garten einen IT-Repeater, funktioniert ganz gut. Siehe:

http://www.fhemwiki.de/wiki/ITV-100_Repeater

ZitatJetzt dachte ich das ich die kompliziertere Variante probiere, manuell eingetippt! Also kein copy/paste.

define pumpean at +*00:30:00 { fhem("set PoolPump on"); fhem("define pumpeaus at +00:15 set PoolPump off"); }

bekomme immer noch den Fehler:
Unknown command fhem("define, try help.
Unknown command }, try help.

Ich glaube ja ehrlich gesagt, dass Betateilchen ein Semikolon vergessen hat. Innerhalb geschweifter Klammern müssten Semikolons escaped werden. (ein einzelnes Semikolon fasst Perl als Teil eines Befehls auf, durch verdoppeln teillt man Perl mit, dass in Wirkichkeit das Semikolon als Befehlstrenner gemeint ist)

Ich glaube

define pumpean at +*00:30:00 { fhem("set PoolPump on");; fhem("define pumpeaus at +00:15 set PoolPump off") ;;}

könnte gehen.

Ich bin mir aber nicht ganz sicher, weil ich - da hat Betateilchen recht - seine Systemtik nicht komplett verstehe. Speziell die letzten beiden Semikolon am Ende kann man echt weglassen, denn das Semikolon trennt einzelne Befehle. Da nach dem Letzten aber kein weiterer Befehl mehr kommt den man abtrennen müsste, gehts auch ohne.

Selbst wenn man alle FHEM Befehle auch ohne eigentliche Notwendigkeit in Perl einkapselt wäre die naheligende Schreibweise eigentlich:

define pumpean at +*00:30:00 { fhem("set PoolPump on ;; define pumpeaus at +00:15 set PoolPump off")}

Diese Schreibweise wäre für mich noch nachvollziehbar, weil man irgendwelche IF-Abfragen leicht hinzufügen könnte, z.b.:

define pumpean at +*00:30:00 { if (isday()) { fhem("set PoolPump on ;; define pumpeaus at +00:15 set PoolPump off") } }

(Das ganze nur am tagsüber machen, nicht nachts)

Hier wäre tatsächlich der Vorteil für den Anfänger, dass bedingte und unbedingte Kommandos gleich aussehen, die Anzahl der Semikolon gleich ist und man leicht durch ergänzen oder wegschneiden der Bedingungsebene rumprobieren kann (Trotzdem ich immer noch glaube, dass es das Verständnis für die Notwendigkeit der diversen Klammerung nicht fördert).


Betateilchen geht aber noch einen Schritt weiter, klammert jeden Befehl einzeln ein und setzt noch mal die Übergabe an Fhem davor.  Er findet das übersichtlicher ... dem kann ich nicht mehr folgen. Ich glaube, dass das verwirrt. Es ist jedenfalls recht weit vom funktional notwendigem Code entfernt.






FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

zgadgeter

Hmmm, das letztere hat fhem jetzt akzeptiert...mal beobachten...und verstehen!
danke!
NUC FHEM mit vielen Intertechno/FS20/Flamingo schalter
und Busware CUL und nanoCUL

zgadgeter

Zitat von: Zrrronggg! schrieb am Di, 03 September 2013 22:15Ich habe für den Garten einen IT-Repeater, funktioniert ganz gut. Siehe:

http://www.fhemwiki.de/wiki/ITV-100_Repeater
Ich habe ja einige IT Geraete, werde aber so langsam auf FS usw. umsteigen. Danke!
NUC FHEM mit vielen Intertechno/FS20/Flamingo schalter
und Busware CUL und nanoCUL

Zrrronggg!

Ich benutze beides. IT ist eben billig und wenn's reicht nehm ich das.

Hier habe ich noch mal einen älteren Post von mir gefunden

http://forum.fhem.de/index.php?t=msg&goto=74940&rid=33&srch=%3B+muss+escaped+werden#msg_74940

in dem ich die Klammern und wann sie nötig sind und wann das Semikolon verdoppelt werden muss erläutert hatte.

(Gefolgt von einem bisschen Rumgejaule und Gejammere über die u.a. von Betateilchen propagierte schreibweise.
Den Teil könnt ihr dann ja überspringen.)
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

zgadgeter

Alle Rolladen Steuerungen bei mir sind IT, und fhem kann sie (fast) im ganzen Haus steuern. Nur am Ende des Gartens (ca. 20 m) ist es scheinbar zu weit.
FS20 funktioniert da ohen Problem...ist leider nur keine Aussensteckdose, kann also nicht da bleiben...
NUC FHEM mit vielen Intertechno/FS20/Flamingo schalter
und Busware CUL und nanoCUL

der-Lolo

Tolle und rege diskussion hier - ich finde gerade durch die Diskussion hat nun sicher jeder mitleser ein bisschen an knowhow gewonnen...
Ich habe mich gestern mit einer ähnlichen Thematik rumgeärgert um das vom Bewegungsmelder angeschaltete licht wieder abzuschalten.

Mir bleibt aber noch ne frage - kostet es Performance wenn man nicht umher kommt Perl einzubinden?
Ich meine nämlich festgestellt zu haben das der vom Bewegungsmelder gesendete on Befehl länger brauch das licht anzuschalten wenn er über Perl abgearbeitet wird...