NEWS
(gelöst) Jarvis ButtonGroupAction als Temperaturregler
-
Hallo,
ich nutze in Jarvis die ButtonGroupAction, um die Zieltemperatur eines Thermostatventils einzustellen.
Das sieht dann für die Zieltemperatur so aus:Dieses sind die Einstellungen für die Komponenten des Buttons:
und die Datenpunkteigenschaften des Buttons:
Der Anzeigewert ist die Zieltemperatur des Themostats und der Triggerwert ein State mit einer boolschen Variable. darauf regiere ich mit folgendem Blockly:
Man beachte, dass, wenn ich den Zielwert um 0,5 °C erhöhen möchte, die Änderung im Blockly auf + 0,25 oder - 0,25 setzen muss, da der ButtonGroupAction wohl nur als Taster genutzt werden kann und den Wert true oder false immer doppelt setzt.
Meine Frage: kann man das irgendwie eleganter lösen, da diese Lösung manchmal zu unschönen Anzeigen beim Zielwert führt(Zielwerttemperatur blinkert kurz zwischen alten und neuen Zielwert hin und her) bzw. ich den Eindruck habe, dass sie manchmal gar nicht funktioniert(neuer Zielwert wird nicht gesetzt).
Ich hoffe, ich habe alle nötigen Informationen einigermaßen verständlich aufgeführt und freue mich auf Anregungen oder Verbesserungsvorschläge.
viele Grüße
Kymchy -
@kymchy Jarvis setze ich nicht ein. Bei Vis habe ich da einen Slider genutzt, der direkt die Soll-Temperatur in den entsprechenden Datenpunkt schreibt. min/max/step parametrieren den Slider...
Ein "Regler" ist da übrigens nicht, was Du uns da vorgestellt hast, sondern nur die Behandlung der Soll-Temperatur für den Regler. Auch habe ich die Stelle nicht gefunden, wo die "Ist" Temperatur in das Control eingespeist wird.
Die Doppel - Trigger kriegst Du daher, dass das Skript sowohl beim Betätigen, als auch beim Loslassen der Taste feuert. Das kann man vermeiden indem man "ist größer als ..." statt "wurde geändert" verwendet. Da fällt dann das Loslassen heraus, weil der Wert dann kleiner wird ...
-
@martinp Danke für deine Tipps!
Der Taster (ButtonGroupAction) feuert entweder zweimal hintereinander true oder zweimal hintereinander false, je nachdem, welchen Pfeil man anklickt. Ein "wurde geändert" oder "ist größer als" funktioniert daher nicht. In meinem Blokly benutze ich daher "wurde aktualisiert".
Würde ich mit 2 Button arbeiten, wäre es kein Problem, aber man kann in Jarvis, zumindest nicht ohne CSS, 2 Button nebeneinander machen. Bei einer einfachen ButtonAction kann man einstellen, ob er als Schalter oder als Taster fungieren soll und dann über die Datenpunkt Eigenschaften einstellen, dass er immer nur einmal true oder immer nur einmal false feuert. -
@kymchy said in Jarvis ButtonGroupAction als Temperaturregler:
@martinp Danke für deine Tipps!
Der Taster (ButtonGroupAction) feuert entweder zweimal hintereinander true oder zweimal hintereinander false,Das riecht ja fast nach einem Bug im Control ... Könnte man natürlich im Blockly Skript durch eine "Entprellung" abfangen, aber das wäre nach meinem Bauchgefühl herumdoktoren an Symptomen ...
Der zweite Trigger wird ja immer mit einem Abstand von nur wenigen Millisekunden zum ersten eintrudeln - das könnte man durch eine Zeitmessung herausfiltern ... -
Hier kommt er sehr kurz nach dem anderen, praktisch zeitgleich.
Im nächsten Screenshot sogar zeitgleich. Da wird man es vermutlich schwer durch Zeitmessung filtern können:
-
@kymchy Hier meine Idee
- Zeitobjekte sind die Millisekunden seit dem 1.1.1970
- ActualTime und LastTime müssen unter "Variablen" definiert werden, und dann von dort gepickt
-
@martinp Zeitobjekte sind mir schon bekannt, ich verstehe nur noch nicht genau, wie du es damit schaffst, bei jedem Klick auf einen Pfeil ein "true" bzw ein "false" herauszufiltern.
-
@kymchy Wenn das Nachfolge-Signal weniger als 50 ms nach dem Vorgänger-Signal kommt, wird es im "Mache" Zweig behandelt, der "Sonst" Zweig ist für das erste Signal ...
Womöglich muss man da aber genauer ins logging schauen ...
ggfs wird das zweite gleichlautende Signal erst beim Loslassen der Taste ausgelöst, und das Zeitintervall ist damit auch vom Bediener abhängig - wenn der die Taste lange aktiviert hält ....
Wenn z.B. Raus/False immer spätestens 50 ms nach Rein/False kommt, könnte man Rein/False auswerten, und Raus/False mit obigem Skript verwerfen ...
Wenn aber Raus/False erst ausgelöst wird, wenn der Benutzer die Taste wieder "losgelassen" hat, ist die Filterung so nicht möglich...
-
@martinp ok, danke, jetzt hab ichs kapiert. Mit dem iPad ausgelöst, also per Touch, funktioniert dein Script schonmal...
update: auch am PC ausgelöst, wenn ich die Maustaste festhalte.
Es scheint so zu sein, dass 50 ms ausreichen und ein Halten der Taste nicht relevant ist. -
@MartinP das soll mal einer schnallen:
jetzt habe ich folgendes Scipt:
welches meistens funktioniert aber manchmal nicht 0,5 addiert oder abzieht, sondern 0,25...???
-
@kymchy Ist da vielleicht in einem anderen Dashboard noch eine alte Version des Scripts aktiv?
Man könnte ggfs. die Zeitdifferenz-Abfrage oben auf eine Abfrage ">= 50" umkehren, und den Inhalt des "Sonst"-Zweigs mit dem "Mache"-Zweig vertauschen. Nach den Tests kann man dann den "Sonst" Zwei komplett entsorgen - macht die Sache übersichtlicher, wenn man irgendwann wieder draufgucken muss ...
-
@martinp ich glaube, es sind 0,75, aber es könnten meiner Meinung nur 0,5 oder 1 sein.
-
@kymchy Stand "example - State" denn auf einem Vielfachen von 0,5 beim Start des Skriptes, oder hatte einen "unrunden" Wert aus den vorigen Versuchen? Wäre eine ziemlich banale Erklärung ...
-
@martinp said in Jarvis ButtonGroupAction als Temperaturregler:
Man könnte ggfs. die Zeitdifferenz-Abfrage oben auf eine Abfrage ">= 50" umkehren, und den Inhalt des "Sonst"-Zweigs mit dem "Mache"-Zweig vertauschen. Nach den Tests kann man dann den "Sonst" Zwei komplett entsorgen - macht die Sache übersichtlicher, wenn man irgendwann wieder draufgucken muss ...
ja, das hatte ich auch schon überlegt.
Es gibt bei den Komponenten Einstellungen die Option "Taster Impulsdauer". Die steht momentan auf 0. Vielleicht sollte ich die mal hochsetzen. Aber den Wert 0.75 verstehe ich trotzdem überhaupt nicht. -
@martinp es geht ja irgendwann, wenn wieder mal 0,75 addiert/subtrahiert werden wieder auf ein Vielfaches von 0,5, ab dann müsste es funktionieren...
mir ist aufgefallen, dass das mit den 0,75 nur passiert, wenn ich von down auf up wechsele anders herum ist alles gut.
Immer nur auf Up geklickt, addiert es brav immer 0,5, anders herum geht es auch...das soll mal einer begreifen...Also klicke ich ein paar mal auf Up, werden immer 0,5 hinzugezählt. Klicke ich dann auf down, werden 0,5 abgezogen. Gehe ich dann wieder auf up, werden 0,75 addiert...
-
@kymchy Falls Du noch über dem Problem brütest: Ich habe ja immer noch die Vermutung, dass eine alte Version des Scripts irgendwo herumgeistert, getriggert wird und dann zusätzliche 0,25 dazu mogelt....
Eventuell mal ganz zu Anfang des "sonst"-Zweiges den Wert von example_state vor dem Addieren/Subtrahieren von 0,5 loggen lassen
Wenn der Wert beim letzten Verlassen des Skriptes ein Vielfaches von 0,5 war, und beim Betreten dann nicht, wurde er folglich anderweitig verändert ...
-
@martinp Ja, du hattest Recht. Es war die Version, die ich mit deinem ersten Vorschlag(ist größer als) ausgestattet hatte. Dann triggerte die nat. jedes Mal, wenn ich von down auf up gewechselt habe. Manchmal sieht man den Wald vor lauter Bäumen nicht...Vielen Dank nochmal für deine wirklich sehr gute Hilfe!! Jetzt läuft alles prima.
Verstehen tue ich allerdings immer noch nicht, warum der Button jeweils zweimal true oder false feuert. Ich sehe keinen Sinn darin.
Der Vollständigkeit halber jetzt nochmal das fertige Script, so wie es jetzt bei den Thermostaten läuft:
-
@kymchy said in (gelöst) Jarvis ButtonGroupAction als Temperaturregler:
Verstehen tue ich allerdings immer noch nicht, warum der Button jeweils zweimal true oder false feuert. Ich sehe keinen Sinn darin.
Wenn das ein reproduzierbares Verhalten ist, halte ich das für einen Bug ...