Buttons(+Spinner) als Thermostat Ersatz?

Begonnen von MarcoE, 06 Februar 2017, 11:14:13

Vorheriges Thema - Nächstes Thema

MarcoE

Hallo,
irgendwie komme ich als Endnutzer mit den Dials um die Temperatur auszwählen nicht so richtig zurecht (dahinter hängen FHT80b). Ebenso benötige ich die gradgenau Änderung sehr selten. Viel häufiger benötige ich die einfach Umschaltung zwischen Tagestemperatur (day-temp) und Nachttemperatur (night-temp).

Daher war meine Idee statt des "Thermostat" einen "Spinner" einzusetzen (um die selten benötigte Möglichkeit die Temperatur mal genau ändern zu können nicht verloren geht), sowie darunter zwei Buttons zu haben. Einen um auf Nachttemp zu stellen und einen auf Tagtemp. Klasse wäre es auch noch, wenn diese mit der für diesen Raum gültigen Zahl beschriftet wären. Leider gibt es bei den FHT keinen direkten set auf die Tages- oder Nachttemp, sondern nur die Variante über auslesen der Tages- bzw. Nachttemp dann per set desired-temp das Ergebnis zu erreichen.
Wie kann ich das nun elegant per TabletUI lösen? Ich wollte ungern jeden Button mit den Temperaturen direkt bestücken, da dann jede Änderung an mehreren Stellen wäre. Ebenso wie kann ich ein Button damit beschriften?

Oder was habt ihr für Lösungsvorschläge?

Danke,
Marco

drhirn

Spinner dürfte ja kein Problem darstellen, oder? Habe ich auch so gemacht, weil ich - wie du - zu ungeschickt für den "Knob" bin ;).

Beim Rest habe ich das Gefühl, dass ich jetzt gerade etwas sehr kompliziert denke. Aber:
Du machst dir ein Label (oder was auch immer), das die gesetzte Tages-/Nachtemperatur anzeigt.
Und dann baust du dir mit JavaScript den Set-Befehl zusammen.

Ungetestet, könnte aber funktionieren:

<div data-type="label" data-device="FHT80b" data-get="Nachttemp" onClick="ftui.setFhemStatus('set FHT80b desired-temp '+ ftui.getDeviceParameter('FHT80b','Nachttemp').val)" ...>


Bzgl. Button beschriften gab's in einem der letzten Updates eine neue Möglichkeit. Ich hab's aber vergessen und find auf die Schnelle nichts. Aber du könntest ja das Link-Widget verwenden.

Eisix

Hallo,

Meine Thermostate sehen momentan wie im screenshot aus.

Der Spinner setzt einen Dummy mit der Solltemp, du bräuchtest dann einen zweiten für die Nachttemp und ein DOIF um zwischen beiden umzuschalten.
Die untere Temperaturanzeige ist die Isttemp (bei click geht ein Popup mit der TempKurve auf)
Das Icon Heizung zeigt an/aus und erlaubt mir manuell ein/aus zu schalten (Icon sollte ich vielleicht mal tauschen  ;D)

Das ganze ist als template ausgelegt, somit kann ich an einer Stelle alle ändern.

Gruß
Eisix

ChrisK

Da habe ich auch was ähnliches, weil ich genau das gleiche "Problem" mit dem Thermostat-Widget hatte.

- auf der Übersichtsseiten sind die Soll-/Ist-Temperaturen mit der Anzeige, ob die Heizung gerade an ist (Kreis drunter) und einem weekprofile für die Anpassung der Programme
- ein Klick auf das An-/Aus-Symbol öffnet ein Popup, wo man den manuellen Modus aktivieren kann
- wenn der manuelle Modus aktiv ist, dann erscheint auch der spinner, der die desired-temp setzt

Aeroschmelz

Ich habe das auch über ein Template gelöst und dafür eine Kombination aus Beispielen verwendet, die ich hier gefunden habe 😀

@Eisix: sieht wieder super aus, auch die Idee mit dem Popup ist cool, wärst du eventuell so freundlich und würdest den. Code teilen. Danke

tomster

Ich hab es so gelöst:
https://forum.fhem.de/index.php/topic,64369.msg556883.html#msg556883

Unter V2.5 dürfte jedoch das Layout - codeseitig - nicht mehr ganz passen. Es war für mich < 2.5 "the best of both worlds", ist aber z.Zt. noch nicht angepasst. Die Umschaltung der Modi ist zwar nicht verwirklicht, aber deine Idee ist gut! Muss ich bei Gelegenheit mal umsetzten/ anpassen. Geht aber wohl nur mit eigenen CSS-Styles. Ach ja, und entsprechender Zeit...

Eisix

#6
@Aeroschmelz
Meine Version im Anhang. Schick deine auch mal, da sind ja noch ein paar mehr Sachen als bei mir drin.
Popup ist momentan Simplechart bin aber dran das durch einen richtigen Chart zu ersetzen.
Das ganze basiert auf FTUISRV

Hier der Aufruf des Templates

        <li data-row="1" data-col="10" data-sizex="3" data-sizey="3">
                        <header>KÜCHE</header>
                        <?ftui-inc="templates/Thermostat.ftui.part" EINSCHALTTEMP="EinschaltTemp_KUECHE" GRENZWERT="[EinschaltTemp_KUECHE:state]" STELLMOTOR="Heizung_KUECHE" SENSOR="Sensor_KUECHE" LOG="FileLog_Sensor_KUECHE" ?>
        </li>


Im Header des Templates rufe ich noch eine Funktion (calcLIMITS) auf um die Einfärbung der Temperaturanzeige anzupassen (99_myUtils.pm)

##############################################
# Temperature offset for Thermostat spinner
##############################################
sub calcLIMITS($$)
{
        my ($TEMPERATUR, $OFFSET) = @_;
        my $LIMIT = $TEMPERATUR + ($OFFSET);
        return $LIMIT;
}



Gruß
Eisix

Aeroschmelz

Hier mal der Code aus dem eingebundenen Template:


<header>Badezimmer</header>
    <div class="hbox items-top">
         <div class="vbox">   
             <div data-type="label"
              data-device="Hzg_Badezimmer"
              data-get="measured-temp"
              data-limits='[14,18,20]'
              data-colors='["#6699FF","#aa6900","#ad3333"]'
              data-unit="ºC"
              class="bigger thin">
            </div>     
            <div class="hbox items-top">           
                <div class="small">Fenster:</div>
        <div style="margin-top: -6px;font-size: 12.7px !important"
                      data-type="symbol"
            data-device="Fnk_Badezimmer"
                      data-get-on='["Open","Closed"]'
            data-icons='["oa-fts_window_roof_open_2","oa-fts_window_roof"]'
            data-on-colors='["red","green"]'
                      class="small">
                </div>
            </div>                 
         </div>     
         <div class="vbox">
            <div data-type="spinner"
              data-device="Hzg_Badezimmer"
              data-get="desired-temp"
              data-set="desired-temp"
              data-unit="ºC"
              data-icon-left-color="blue"
              data-icon-right-color="red"
              data-step="0.5"
              data-background-color="none"
              data-longdelay="1000"
              class="small valueonly">
            </div>
            <div class="hbox items-space-around top-narrow-2x">             
               <div data-type="symbol"
                   data-device="Hzg_Badezimmer"
                   data-get="battery"
                   data-icons='["oa-measure_battery_100","oa-measure_battery_25"]'
                   data-states='["ok","low"]'
                   data-on-colors='["green","red"]'
                   data-on-background-colors='["#505050","#505050"]'
                   data-background-icon="fa-circle"
                   class="small">
               </div>
               <div data-type="progress"
                   data-device="Hzg_Badezimmer"
                   data-get="actuator_"
                   data-progress-width="100"
                   data-unit="%"
                   style="font-size:160%;">
               </div>                
               <div data-type="switch" 
                  data-device="Hzg_Badezimmer_Boost"
                  data-icon="fa-bolt"
                  data-on-background-color="#ad3333"
                  data-countdown="660"
                  class="small">
          </div>         
                <div data-type="switch"
                   data-device="Hzg_Badezimmer"
                   data-cmd="set"
                   data-get="mode"
                   data-set="mode"
                   data-states='["manual","auto","holiday_short"]'
                   data-set-states='["auto","manual"]'
                   data-icons='["oa-sani_heating_manual","oa-sani_heating_automatic","fa-users"]'
                   data-colors='["#6699FF","#32a054","#ad3333"]'
                   data-background-icon="fa-circle"
                   data-background-colors='["#505050","#505050","#505050"]'
                   class="small">
              </div>
         </div>
    </div>
</div>


Der Boost läuft mit einem DoIf


define Do_BadezimmerBoost DOIF ([?07:00-22:30] and [Hzg_Badezimmer_Boost] eq "on") ({fht_ctrl_at("Hzg_Badezimmer","party-boost","600","20")}) (set Hzg_Badezimmer_Boost off) \
DOELSEIF ([?07:00-22:30] and [Hzg_Badezimmer_Boost] eq "off") ({FHTnominal("Hzg_Badezimmer")})
attr Do_BadezimmerBoost checkReadingEvent 1
attr Do_BadezimmerBoost room System
attr Do_BadezimmerBoost wait 0,660:0


Der Rest steht in der 99_myUtils.pm und ist ebenfalls Code aus dem Forum hier.

00chaos

Hallo zusammen,

ich nutze das Spinner Widget ebenfalls als Ersatz für das Thermostat Widget.
Leider habe ich bei den MAX! Thermostaten das Problem, dass beim Setzen der Temperatur manu oder uto mit übergeben werden muss. Im Thermostat Widget gibt es dafür das Attribut "data-mode", dieses fehlt leider im Spinner Widget.

Gibt es dafür eine andere Lösung?