FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: FireFlyer am 20 Januar 2017, 19:17:13

Titel: on-for-timer
Beitrag von: FireFlyer am 20 Januar 2017, 19:17:13
Hallo,

ich möchte mit einer Pumpe 300 ml Flüssigkeit dosieren. Die Pumpe pumpt ca. 3,4 l/h. Da ich das nicht genau weiß, muss ich sie kalibrieren. Im ersten Schritt lasse ich sie 60 Sekunden laufen und messe die Menge: ca 57 ml/Minute. Das ergibt dann eine Laufzeit von 317 Sekunden oder 5:17 Minuten.
Ich würde gerne die Dosiermenge (57 ml/Min) und die 300 ml ins Webfrontend per Zahlenfeld eingeben und FHEM berechnet dann 317 Sekunden und startet dann mit "set Pumpe on-for-timer 317" die Pumpe.
Jetzt zu meinen beiden Problemen:
1. Wie definiere ich ein Dummy, in den in ich Zahlen per Webfrontend eingeben kann?
2. Wie kann ich einen on-for-timer mit Variable (Dummy) starten?
Die Suche hat mir leider nicht weiter geholfen, oder ich hatte die falschen Schlagworte?!
Titel: Antw:on-for-timer
Beitrag von: DeeSPe am 20 Januar 2017, 19:21:55
Ist denn die Menge (300ml) immer variabel?
Wenn ja, woher kommt die Mengenangabe?

Gruß
Dan
Titel: Antw:on-for-timer
Beitrag von: Puschel74 am 20 Januar 2017, 19:45:40
Zitat1. Wie definiere ich ein Dummy, in den in ich Zahlen per Webfrontend eingeben kann?
Äh, versteh ich nicht ganz.
Du weisst nicht wie du einen Dumym definierst oder
du weisst nicht wie du an diesem Dummy Werte eingeben kannst?

Vorschlag: Versuch macht kluch  ;)
define Zeit dummy
Dann kannst du mit
set Zeit 300
schonmal 300 als Zahl in diesen Dummy "Zeit" eintragen.
Achtung! Das set gehört NICHT in die Konfig.
Wenn du den Dummy dann anklickst siehst du das du oben eine Zeile hast mit set Zeit <leeres Feld>
In dieses leere Feld kannst du dann 500 schreiben und auf set klicken ... et voila, der Dummy Zeit hat den Wert 500

So. 1 erledigt (hoffe ich).

Zu 2.
Wann soll den die Pumpe getartet werden?
Wenn du die Zeit im Dummy einstellst?
Zu einer bestimmten Uhrzeit?
Wenn eine andere Bedingung zutrifft?
Titel: Antw:on-for-timer
Beitrag von: FireFlyer am 20 Januar 2017, 20:12:51
Also,
die Pumpe wird ein mal am Tag gestartet. Das funktioniert jetzt auch. (Siehe https://forum.fhem.de/index.php/topic,65285.0.html (https://forum.fhem.de/index.php/topic,65285.0.html))

Klar kann ich die Laufzeit hart codieren, aber da auch andere, die keine Ahnung von FHEM haben, die Menge anpassen können müssen, will ich eine Schaltfläche/Eingabefeld ins Frontend einbauen. Ich habe es nur leider nicht mal geschafft eine Laufzeit variabel hin zu bekommen.

define Zeit dummy
set Zeit:state 317
set Pumpe on-for-timer Zeit


So funktioniert das jedenfalls nicht, aber wie dann?
Hat dies Problem sonst noch niemand gehabt?  :o
Die Suche spuckt jedenfalls nichts aus. Total komisch.
Titel: Antw:on-for-timer
Beitrag von: Puschel74 am 20 Januar 2017, 20:28:39
define Zeit dummy
set Zeit:state 317
set Pumpe on-for-timer Zeit

Das alles hat so (bis auf das define) in der Konfig auch nichts verloren - oder generell, set-Befehle haben in der Konfig nichts zu suchen.

Wenn du bestimmte Zeitbereiche vorgeben willst zwischen denen der User auswählen können soll geht das mit slider recht komfortabel.
Hab ich z.B. für die Giessdauer meiner Bewässerung so gelöst:

define Giessdauer dummy
attr Giessdauer setList state:slider,0,1,30
attr Giessdauer webCmd state


Den Namen kannst du anpassen und das ganze einfach in dein FHEM übernehmen und schauen wie es aussieht.

Wenn die Pumpe einmal am Tag per at gestartet wird dann - ah, ich soll noch einen Beitrag lesen um dann hier zu helfen?
Klar mach ich glatt - ich hab ja Zeit.
Nein Scherz - kannst du die benötigten Infos nicht einfach in EINEM Beitrag zusammentragen (ist zwar für dich etwas mehr zu tun aber he, du willst ja Hilfe).

Edith: Ich vermute das mein angepinnter Beitrag hier im Anfängerbereich auch für dich einen unverständlichen Titel hatte?
ZitatBitte unbedingt vor Eurem ersten Post hier lesen.
Dann klär du mich wenigstens mal bitte auf wie ich den Titel besser wählen kann/soll damit Anfänger auch die benötigten Infos liefern - oder ist der Beitrag einfach nur zu lang/unverständlich/zu schwer geschrieben/was auch immer?
Auch die Helfer helfen in ihrer Freizeit (gratis) - so wie die Hilfesuchenden FHEM in ihrer Freizeit verwenden (wollen).
Daher sollte man als Hilfesuchender den Helfenden mal die benötigten Infos kurz und knapp in einem Beitrag (am besten im ersten Fragebeitrag) liefern damit auch die Helfer nach der Hilfe noch Zeit für ihre Familie haben.
Dafür war eigentlich mein angepinnter Beitrag gedacht.
Titel: Antw:on-for-timer
Beitrag von: betateilchen am 20 Januar 2017, 20:33:27
ich geh mal Popcorn holen und schaue zu, wie lange ihr noch aneinander vorbeiredet :)

set Zeit:state 317

das ist schlichtweg falsche Syntax. Weiter oben wurde das schon richtig gezeigt:

Zitat von: Puschel74
set Zeit 300

Titel: Antw:on-for-timer
Beitrag von: Puschel74 am 20 Januar 2017, 20:40:51
Zitatich geh mal Popcorn holen
Ich werf ne Runde Erdnuss-Flips  ;D
Zitatund schaue zu, wie lange ihr noch aneinander vorbeiredet
Wieso aneinander vorbeireden?
Wenn der TE nicht lesen kann kann ich doch nichts dafür oder erklär ich falsch?
Ich bin ja lernfähig (hoffe ich zumindest) und wenn ich was besser machen/erklären kann dann bitte ich darum mich darauf hinzuweisen wie ich was besser machen kann.
Titel: Antw:on-for-timer
Beitrag von: betateilchen am 20 Januar 2017, 20:46:54

define test dummy
attr test readingList sollmenge,durchfluss
attr test userReadings laufzeit {round(ReadingsVal("test","sollmenge",0)*60/ReadingsVal("test","durchfluss",1),0)}


jetzt kann man mit  "set test sollmenge 300"
und "set test durchfluss 57"

arbeiten und wird im reading "laufzeit" die notwendige Zeit finden.
Diese Laufzeit wird jedesmal aktualisiert, wenn die Sollmenge oder die Durchflussmenge neu gesetzt wird.

Soweit das Prinzip. Den Wert aus dem reading "laufzeit" kann man natürlich dann problemlos für das Setzen irgendeines on-for-timers verwenden.
Titel: Antw:on-for-timer
Beitrag von: FireFlyer am 20 Januar 2017, 20:53:46
Ist mir klar, dass set alleine nicht funktioniert. Entweder set in die Kommandozeile oder in notify verpacken:

define Dosierzeit dummy
define <egal> notify <irgend ein Ereignis> set Dosierzeit 317 #hauptsache, es steht eine Zahl drin, wie und wo ist jetzt egal.
define Timer at *13:50:00 set Pumpe on-for-timer Dosierzeit


Ich bekomme immer "on-for-timer requires a number as argument"

Den Link auf meine erste Frage habe ich gesetzt, weil ich danach gefragt wurde. Das tut für mein set on-for-timer doch keine Rolle.


Mampf, weg ist das Popcorn. Hat gut geschmeckt  8)
Titel: Antw:on-for-timer
Beitrag von: betateilchen am 20 Januar 2017, 21:11:56
Angenommen, Du würdest mein obiges dummy-Device umsetzen, kannst Du beispielsweise so weitermachen:


define Timer at *13:50:00 { my $t = ReadingsVal("test","laufzeit",1); fhem("set Pumpe on-for-timer ".$t) }


Zitat von: FireFlyer am 20 Januar 2017, 20:53:46
Ist mir klar,

ich fürchte, Dir ist noch sehr viel unklar...
Titel: Antw:on-for-timer
Beitrag von: FireFlyer am 20 Januar 2017, 21:17:40
Ja, hast wohl recht betateilchen ;)
Darum hab ich das ja auch im Anfängerforum gepostet :D
Werd gleich mal alles ausprobieren.
Titel: Antw:on-for-timer
Beitrag von: Puschel74 am 20 Januar 2017, 21:21:11
ZitatWerd gleich mal alles ausprobieren.
Im Ernst?
Du hast die Vorschläge noch nichtmal versucht?
Noch nichtmal versucht auszuprobieren - vom verstehen ganz zu schweigen?
Krass - nunja, es wird ja niemand gezwungen zu helfen.
Titel: Antw:on-for-timer
Beitrag von: betateilchen am 20 Januar 2017, 21:29:43
Zitat von: Puschel74 am 20 Januar 2017, 21:21:11
Im Ernst?
Du hast die Vorschläge noch nichtmal versucht?

Verstehst Du jetzt, was ich mit "aneinander vorbeireden" meinte?  :P
Titel: Antw:on-for-timer
Beitrag von: FireFlyer am 20 Januar 2017, 21:32:17
Ihr wollt mich doch falsch verstehen  :o

Jedenfalls funktioniert es.

define Testlauf dummy
attr Testlauf webCmd an
define Test notify Testlauf:an { my $t = ReadingsVal("Dosierzeit","state",1);; fhem("set Pumpe on-for-timer ".$t) }


Musste nur noch ein Leerzeichen hinter on-for-Timer einfügen  ;D

Für
attr Giessdauer setList state:slider,0,1,30
muss ich mir noch etwas besseres einfallen lassen. So gefällt mir das noch nicht.

PS: Wo finde ich die Perl-Geschichte einfach erklärt, damit ich verstehe, was das mit my dem $ und manchmal ! auf sich hat?
Titel: Antw:on-for-timer
Beitrag von: betateilchen am 20 Januar 2017, 21:33:50
Zitat von: FireFlyer am 20 Januar 2017, 21:32:17
Ihr wollt mich doch falsch verstehen

Du verspielst langsam meinen Gutmütigkeitsvorrat...
Titel: Antw:on-for-timer
Beitrag von: FireFlyer am 20 Januar 2017, 21:36:36
du warst nicht gemeint betateilchen! Sorry!


PS: Wo finde ich die Perl-Geschichte einfach erklärt, damit ich verstehe, was das mit my dem $ und manchmal ! auf sich hat?
Titel: Antw:on-for-timer
Beitrag von: Puschel74 am 20 Januar 2017, 21:38:01
Zitat von: betateilchen am 20 Januar 2017, 21:29:43
Verstehst Du jetzt, was ich mit "aneinander vorbeireden" meinte?  :P
Jep - aber sowas von eindeutig.
Danke  :)
Titel: Antw:on-for-timer
Beitrag von: Puschel74 am 20 Januar 2017, 21:39:25
ZitatPS: Wo finde ich die Perl-Geschichte einfach erklärt, damit ich verstehe, was das mit my dem $ und manchmal ! auf sich hat?
Im Internet ? Google sollte helfen oder ein Perl-Buch kann auch hilfreich sein.

Zitatdu warst nicht gemeint betateilchen! Sorry!
Also war ich gemeint?
Keine Angst - ich nehm das nicht persönlich.
Ich kenn dich ja nichtmal - du bist ja derjenige der Hilfe sucht.
Auf meiner Ignor-Liste hast du einen Sonderplatz und ich brauch deine Beiträge nichtmehr lesen.
Titel: Antw:on-for-timer
Beitrag von: FireFlyer am 20 Januar 2017, 23:10:25
Jetzt habe ich aber doch noch eine Frage:
define F1 notify Ventil_Fermenter_1:on|Ventil_Feststoffeintrag:on {if (Value("F1_fuettern") eq "on" && Value("Ventil_Fermenter_1") eq "on" && Value("Ventil_Feststoffeintrag") eq "on") {fhem("set F1_fuettern off;;set Pumpe on-for-timer 5")}
funktioniert, aber wenn ich den letzen Befehl (set Pumpe on-for-timer 5) ersetze durch { my $t = ReadingsVal("Laufzeit_F1","state",1);; fhem("set Pumpe on-for-timer ".$t) }, funktioniert es nicht mehr:
define F1 notify Ventil_Fermenter_1:on|Ventil_Feststoffeintrag:on {if (Value("F1_fuettern") eq "on" && Value("Ventil_Fermenter_1") eq "on" && Value("Ventil_Feststoffeintrag") eq "on") {fhem("set F1_fuettern off;;{ my $t = ReadingsVal("Laufzeit_F1","state",1);; fhem("set Pumpe on-for-timer ".$t) }")}
In Laufzeit_F1 steht, wie lange die Pumpe laufen soll.
einzeln geht es:
define Test notify Testlauf:an { my $t = ReadingsVal("Laufzeit_F1","state",1);; fhem("set Pumpe on-for-timer ".$t) }
funktioniert auch
Wo liegt mein Denkfehler?