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?!
Ist denn die Menge (300ml) immer variabel?
Wenn ja, woher kommt die Mengenangabe?
Gruß
Dan
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?
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.
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.
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
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.
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.
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)
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...
Ja, hast wohl recht betateilchen ;)
Darum hab ich das ja auch im Anfängerforum gepostet :D
Werd gleich mal alles ausprobieren.
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.
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
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?
Zitat von: FireFlyer am 20 Januar 2017, 21:32:17
Ihr wollt mich doch falsch verstehen
Du verspielst langsam meinen Gutmütigkeitsvorrat...
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?
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 :)
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.
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?