Switch mit data-set-on auf reading?

Begonnen von MarcoE, 23 Februar 2017, 14:53:21

Vorheriges Thema - Nächstes Thema

MarcoE

Hallo,
ich versuche gerade einen switch zu bauen für meinen Heizkörperthermostat. Der Switch soll beim Betätigen den Wert aus Wohnzimmer night-temp (bzw der andere auf day-temp) auslesen und mittels set desired-temp setzen.
In irgendeinem Thread hier habe ich etwas in der Art und Weise gesehen:

<div data-type="switch"
        data-device="Wohnzimmer"
        data-set="desired-temp"
        data-get="desired-temp"
        data-set-on="<Wohnzimmer>:<day-temp>"
        data-get-on="22.0"
        data-lock="desired-temp"
        data-lock-on="22.0"
        data-lock-off="!22.0"
        data-icon="fa-sun-o"
        class="cell top-align"></div>


Das gleiche wäre dann beim data-get-on und beim data-lock-on bzw die Invertierung beim data-lock-off benötigt.
Das ganze wird dann benutzt für zwei switches- einen um die Raumtemperatur (desired-temp) auf die "night-temp" bzw. die "day-temp" zu setzen.

Geht das so? Oder vielleicht so ähnlich?
Der Lock ist leider nötig, damit im eingeschalteten Zustand der Switch nicht betätigt werden kann und dann einen off schickt und die Heizung komplett ausschaltet.

Danke und viele Grüsse,
Marco

jemu75

Hallo Marco, da hatten wir wohl fast zeitgleich die selbe Überlegung. Schau mal hier, was setstate dazu für einen Lösungsansatz hat. https://forum.fhem.de/index.php/topic,67787.0.html

sinus61

data-set-on="[Wohnzimmer:day-temp]"

Das würde im Prinzip funktionieren, aber zumindest bei HM Thermostaten hat das Reading nicht das richtige Format. Da steht dann "21 C" drin, erwartet wird aber "21.0". Vom Prinzip her kann man so aber einen Reading Wert weiterreichen.

MarcoE

#3
Hallo,
super. Das
data-set-on="[Wohnzimmer:day-temp]"
ist genau was ich gesucht habe. Bei FHT80B funktioniert das auch (und ist einfacher als per userreading und notify).
Nur: beim data-set-on geht es aber nicht beim data-get-on (beim data-lock-on habe ich noch nicht getestet).
Schade das wäre dann echt super und trivial gewesen.

Viele Grüsse,
Marco

MarcoE

#4
Hallo,
ich bin endlich mal dazu gekommen an meinem UI weiter zu machen. Allerdings habe ich mit dem switch immer noch so meine Probleme. So funktioniert es:

<div
       data-type="switch"
       data-device="Badezimmer"
       data-set="desired-temp"
       data-get="desired-temp"
       data-set-on="[Badezimmer:day-temp]"
       data-get-on="22.0" data-lock="desired-temp"
       data-lock-on="22.0" data-lock-off="!22.0"
       data-icon="fa-sun-o" >
</div>


Ist aber eben unschön hier die Werte für data-get-on, data-lock-on und data-lock-off tatsächlich als Zahl eintragen zu müssen. Schöner wäre es natürlich so:

<div
       data-type="switch"
       data-device="Badezimmer"
       data-set="desired-temp"
       data-get="desired-temp"
       data-set-on="[Badezimmer:day-temp]"
       data-get-on="[Badezimmer:day-temp]"
       data-lock="desired-temp"
       data-lock-on="[Badezimmer:day-temp]"
       data-lock-off="![Badezimmer:day-temp]"
       data-icon="fa-sun-o" >
</div>


Aber sobald ich in data-get-on statt des Werts den Ausdruck verwende erscheint nicht einmal mehr der switch im UI.
Hat einer von euch eine Idee, was ich da machen könnte? Die Idee dahinter ist es eine andere Art von Thermostat zu haben (siehe Bild)
Oder eben wie im verlinkten Thread per notify (wäre aber einiges aufwändiger daher hoffe ich immer noch auf diesen Weg).


Danke und viele Grüsse,
Marco

setstate

#5
Ich habe eine Update gemacht, jetzt wird das so unterstützt

Eventuell fehlt noch ein

data-get-off="!on"

Damit das selbständige Ausschalten erfolgt

Und es muss

data-lock-off="!on"

heißen. Bedeutet "alles außer der Wert von lock-on"

MarcoE

Hi,
Zitat von: setstate am 04 August 2017, 02:04:08
Ich habe eine Update gemacht, jetzt wird das so unterstützt
Klasse. Ich habe per update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt und shutdown restart das dann auch eingespielt.
Nur leider geht es nicht.
Sobald ich nur den data-get-on vom Wert auf die Variable umstelle lädt auf der ganzen Seite kein einziges Icon mehr (nicht mal mehr die Icons im Homestatus werden geladen). Sobald ich die Änderung wieder rückgängig mache (auf Wert zurück) werden die Icons geladen.
Was kann da schieflaufen?

Danke und viele Grüsse,
Marco

PS hier noch der geht Zustand:

<div
         data-type="switch"
         data-device="Badezimmer"
         data-set="desired-temp"
         data-get="desired-temp"
         data-set-on="[Badezimmer:night-temp]"
         data-get-on="18.0"
         data-lock="desired-temp"
         data-lock-on="18.0"
         data-lock-off="!18.0"
         data-get-off="!18.0"
         data-icon="fa-moon-o"
         class="cell top-align">
</div>


geht nicht:

<div
         data-type="switch"
         data-device="Badezimmer"
         data-set="desired-temp"
         data-get="desired-temp"
         data-set-on="[Badezimmer:night-temp]"
         data-get-on="[Badezimmer:night-temp]"
         data-lock="desired-temp"
         data-lock-on="18.0"
         data-lock-off="!18.0"
         data-get-off="!18.0"
         data-icon="fa-moon-o"
         class="cell top-align">
</div>


setstate

Gibt es Fehlermeldungen in der Web Console?

MarcoE

Das sagt die Console:
Try to init plugin: switch
jquery.min.js:2 jQuery.Deferred exception: Cannot read property 'val' of null TypeError: Cannot read property 'val' of null
    at r.fn.init.$.fn.matchingState (http://zarafa:8083/fhem/ftui_eval/js/fhem-tablet-ui.js:1969:49)
    at HTMLDivElement.<anonymous> (http://zarafa:8083/fhem/ftui_eval/js/widget_famultibutton.js:522:42)
    at Function.each (http://zarafa:8083/fhem/ftui_eval/lib/jquery.min.js:2:2815)
    at r.fn.init.each (http://zarafa:8083/fhem/ftui_eval/lib/jquery.min.js:2:1003)
    at String.<anonymous> (http://zarafa:8083/fhem/ftui_eval/js/widget_famultibutton.js:510:18)
    at Function.each (http://zarafa:8083/fhem/ftui_eval/lib/jquery.min.js:2:2815)
    at Object.update (http://zarafa:8083/fhem/ftui_eval/js/widget_famultibutton.js:508:11)
    at http://zarafa:8083/fhem/ftui_eval/js/fhem-tablet-ui.js:1320:40
    at i (http://zarafa:8083/fhem/ftui_eval/lib/jquery.min.js:2:27983)
    at fireWith (http://zarafa:8083/fhem/ftui_eval/lib/jquery.min.js:2:28749) undefined


Das taucht aber nur auf in der nicht funktionierenden Version. In der anderen sieht die Console gut aus.
Viele Grüsse,
Marco

setstate

Okay, es sieht so aus, als ob der Wert nicht im Cache gefunden wird. Das Abo sollte aber angelegt werden, habe ich extra eingebaut.
Erstelle mal testweise ein Label daneben, was das Reading night-temp anzeigt. Dann müsste der Wert auch für den Switch verfügbar sein.

MarcoE

Wenn ich einfach (im nicht funktionierenden Zustand) ein entsprechendes Label hinzufüge passiert nichts. Nehme ich aber dann den funktionierenden Zustand (mit Wert statt Variable) wird das Label angezeigt. Danach kann ich im switch dann umstellen auf variable statt wert und es funktioniert (auch nachdem ich das label wieder gelöscht habe).

setstate

Durch die Aktion ist der Wert jetzt im Cache. Es war nicht gegeben, welche Widget zuerst dran ist. Vermutlich Switch vor Label. Dadurch trat der Fehler wieder auf.

Ich werde mal zuhause nachschauen, warum das indirekte Reading nicht bekannt ist.

Jojo11

Hallo,

seit dem letzten update (2.6.17) werden bei mir (code seit Monaten unverändert) einige switches und label nicht mehr angezeigt. Alles andere geht noch. Kann das damit zusammenhängen?

Schöne Grüße
Jo

MarcoE

Hi,
Zitat von: setstate am 04 August 2017, 11:38:38
Ich werde mal zuhause nachschauen, warum das indirekte Reading nicht bekannt ist.
konntest du schon herausbekommen, was da schief läuft?

Danke und viele Grüsse,
Marco

setstate

Ich habe keinen Fehler gefunden. Referenzierte Readings erscheinen in der jsonlist Anfrage an FHEM ohne das man Hilfs-Label verbauen muss. Die Anfrage sieht man sehr gut in den Entwicklertools des Browsers unter Netzwerk...