FTUI Widget Switch / ein Device schalten aber ein anderes anzeigen

Begonnen von rasti, 09 März 2018, 21:58:42

Vorheriges Thema - Nächstes Thema

rasti

Hallo,

wie ist die richtige Syntax, wenn ich in Tablet UI beim Switch  Widget (einfacher Schalter) ein DEVICE1
on und off schalten will, aber den on und off Status eines anderen DEVICE2 anzeigen lassen will ?

Das hier
<div data-type="switch" data-device="DEVICE1" data-get="DEVICE2" class="cell" data-icon="fa-bars">
funktioniert jedenfalls nicht...

Viele Grüße
Ralf

OdfFhem

Eigentlich hätte ich gedacht, dass diese Variante funktioniert. Dem ist aber nicht so, da das get-Reading scheinbar nur für die initiale Darstellung verwendet wird.
Ein Schaltvorgang verändert die Darstellung - unabhängig vom eigentlichen get-Reading.
Daher scheidet diese "Lösung" für das gewünschte Szenario wohl aus.

<div data-type="switch"
  data-device="Zeitschalter2"
  data-get="state"
  data-fhem-cmd="{(ReadingsVal('Zeitschalter1','state','undefined') eq 'on')?fhem('set Zeitschalter1 off'):fhem('set Zeitschalter1 on')}"></div>


Der zweite Lösungsvorschlag basiert auf dem symbol-widget, da man hier die volle Kontrolle über die Darstellung behält.

<div data-type="switch"
  data-device="Zeitschalter1"
  data-get="state"></div>
<div data-type="label" data-device="Zeitschalter1" date-get="state" data-pre-text="1:"></div>
<div data-type="label" data-device="Zeitschalter2" date-get="state" data-pre-text="2:"></div>
<div data-type="symbol"
  data-device="Zeitschalter2"
  data-get="state"
  data-states='["on","off"]'
  data-colors='["green","red"]'
  onclick="ftui.setFhemStatus('{(ReadingsVal(&quot;Zeitschalter1&quot;,&quot;state&quot;,&quot;undefined&quot;) eq &quot;on&quot;)?fhem(&quot;set Zeitschalter1 off&quot;):fhem(&quot;set Zeitschalter1 on&quot;)}')"
  data-icon="fa-power-off"></div>


Viele Grüße

rasti

Hallo,

der 2. Vorschlag mit dem Symbol-Widget funktioniert.

Allerdings erscheint dann das Icon nicht wie beim Switch-Widget auf der
grauen bzw. orangefarbenen "runden Hintergrundkreisscheibe"
sondern als "bloßes Icon"...

Viele Grüße
Ralf


sinus61

Hast du es Mal so probiert:


<div data-type="switch" data-device="DEVICE1" data-set="reading" data-get="DEVICE2:reading" class="cell" data-icon="fa-bars">

rasti

Zitat von: sinus61 am 10 März 2018, 15:47:54
Hast du es Mal so probiert:


<div data-type="switch" data-device="DEVICE1" data-set="reading" data-get="DEVICE2:reading" class="cell" data-icon="fa-bars">


Volltreffer. Funktioniert !  Vielen Dank !  :D

Viele Grüße

Ralf

OdfFhem

Hallo,

jetzt war ich doch neugierig und habe die zuletzt vorgeschlagene Variante auch mal ausprobiert.
Es handelt sich dabei ja eigentlich um die 180-Grad-Variante vom ersten Vorschlag.


<div data-type="switch"
  data-device="Zeitschalter1"
  data-cmd="setreading"
  data-set="state"
  data-get="Zeitschalter2:state"
  data-icon="fa-bars"></div>


Und - fast schon erwartet - tritt auch hier das Problem auf, dass der Zustand des anderen Devices nur beim ersten Anzeigen dargestellt wird.
Sobald man via switch-Widget schaltet, interessiert dass get-Reading nicht mehr und die Darstellung verselbstständigt sich.

Jetzt würde mich doch interessieren, ob das nur bei mir so ist?

Viele Grüße

P.S.: Die "runde Hintergrundkreisscheibe" ist auch mit dem symbol-Widget kein Problem ...

setstate

Aber durch das get, wird das Control gesetzt, on oder off. Wenn man drückt, wird der entgegengesetzte Status geschickt: wenn es off ist, dann on und bei vorher on dann off. Man muss also noch eine Entkopplung beim Senden erreichen. Das klappt meiner Meinung nur mit "toggle". data-set-on="toggle" und data-set-off="toggle". Das muss aber vom Device unterstützt werden.

sinus61

Zitat von: OdfFhem am 10 März 2018, 18:21:11

jetzt war ich doch neugierig und habe die zuletzt vorgeschlagene Variante auch mal ausprobiert.

Wenn du data-cmd="setreading" benutzt schaltest du aber eigentlich nicht das Device sondern setzt nur das Reading state. Das muss nicht die gleiche Auswirkung haben wir ein "set Device".

OdfFhem

@sinus61

  <div data-type="switch" data-device="DEVICE1" data-set="reading" data-get="DEVICE2:reading" data-icon="fa-bars"></div>

führt zur Befehlsfolge:   set DEVICE1 reading on   bzw.   set DEVICE1 reading off


  <div data-type="switch" data-device="DEVICE1" data-cmd="setreading" data-set="reading" data-get="DEVICE2:reading" data-icon="fa-bars"></div>

führt zur Befehlsfolge:   setreading DEVICE1 reading on   bzw.   setreading DEVICE1 reading off

Soweit alles verstanden und funktioniert auch wie erwartet.

Anforderung in diesem Beitrag war aber, dass zwar DEVICE1 geschaltet werden sollte, aber der Zustand von DEVICE2 die Anzeige bestimmt.
Betätigt man nun das switch-Widget, verändert diese Aktion bereits die Darstellung des switch-Widget (unabhängig von set bzw. setreading und ohne Berücksichtigung vom Zustand von DEVICE2).

Wird beim Schalten von DEVICE1 nicht auch der Zustand von DEVICE2 in irgendeiner Form verändert - was dann zwangsläufig zu einer neuen Darstellung des switch-Widget führen würde - ist die Anzeige vom switch-Widget falsch,
da sie nicht mehr mit dem Zustand von DEVICE2 übereinstimmt.

Ich hoffe, dass ich das Problem einigermaßen nachvollziehbar darstellen konnte.

Viele Grüße

sinus61

Kommt eben drauf an was man eigentlich machen will. Für mich macht das ganze nur Sinn wenn die beiden Devices irgendwie eine Verbindung haben. Wenn nicht hast du Recht, aber dann ist es irgendwie eine unlogische Bedienmöglichkeit. Aber da mag es ja auch was geben.

twinFHEM

Mag vielleicht ein wenig spät sein, aber hier ist eine Variante mit Push. Geschaltet wird die Device, Darstellung in Abhängigkeit einer anderen Device.

<div data-type="push" data-icon="fa-hot-tub" data-device="SCH_SZ_F_EnO_Thermokon" data-set-on="BI" data-cmd="set" data-get="Heizung:WW-Haupttemperatur" data-get-on="59" data-on-background-color="#80C325" data-on-color="#80C325"></div>