Werte addieren in index.html

Begonnen von NewMatic, 03 Januar 2018, 08:58:46

Vorheriges Thema - Nächstes Thema

NewMatic

Hallo,

als kompletter html Anfänger muss ich wieder einmal lästig sein:
Ich bin gerade am Basteln für meine Jalousiesteuerung (siehe ui1.jpeg und ui2.jpeg) Der Anstoß für das Circle Menu kommt aus diesem forum (danke haeksler an dieser Stelle)
Ruft man z.b: "^"-Button auf macht er derzeit:
set wz_JalousieFenster pctSlat 25

Also er stellt die Lamellen der Jalousie auf 25°. Soweit so gut. Mein Problem/Anliegen ist nun folgendes:
Bei erneuten klick macht er wieder das gleiche also nichts, sollten die Lamellen schon auf 25° stehen. Ich möchte aber gerne dass er wieder um 25° erhöht also in diesem Fall auf 50° einstellt.
Ich müsste also den aktuellen pctSlat des Aktors auslesen und dann meine 25° dazu addieren.
ich hab leider wenig Ahnung von HTML.
Vielleicht ist ja jemand so nett und kann mir ein Beispiel beschreiben.
Hier mein aktueller Code für die Steuerung:

<div class="cell">
<div data-type="label" class="cell wider">Jalousie WZ Fenster</div>
<div data-type="slider" data-device="wz_JalousieFenster" data-get="STATE" data-min="0"  data-max="100" data-on='(on|closed|down)' data-off='(open|off)' data-value=true   class="negated"></div>
<div data-type="circlemenu" data-direction="right-half" data-circle-radius="90" data-item-diameter="67" class="circlemenu right-space top-space-3x" style="font-size:130%">
<ul class="menu">
<li> <div data-type="push" data-icon="fa-bars"></div></li>
  <li> <div data-type="push" data-device="wz_JalousieFenster" data-icon="fa-angle-double-up" data-set-on="off"></div></li>
  <li> <div data-type="push" data-device="wz_JalousieFenster" data-icon="fa-angle-up"  data-set-on="pctSlat 25"></div></li>
  <li> <div data-type="push" data-device="wz_JalousieFenster" data-icon="fa-minus"  data-set-on="stop"></div></li>
  <li> <div data-type="push" data-device="wz_JalousieFenster" data-icon="fa-angle-down" data-set-on="down 25"></div></li>
  <li> <div data-type="push" data-device="wz_JalousieFenster" data-icon="fa-angle-double-down" data-set-on="on"></div></li>
</ul>
</div>
</div>


Vielen Dank für jegliche Hilfe und ein gutes neues Jahr 2018!

Tobi

KernSani

Moin Tobi,


ohne dass ich mir das jetzt im Detail angesehen habe:
1.) Unterstützt deine Jalousie das Verschieben um einen Prozentwert, oder - wie dargestellt - nur auf einen pct-Wert?
2.) Insgesamt ist die Frage wahrscheinlich besser im TabletUI-Unterforum aufgehoben (Verschieben-Button ganz unten links)

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

NewMatic

Hallo Oli,

danke für deine Rückmeldung, habe den Thread direkt verschoben :)

@1.) nein ich denke ich kann nur starre Werte eingeben und nicht "um" prozent verstellen. Ich habe den  HM-LC-Ja1PBU-FM im Einsatz. Dieser kann dieze zwei Methoden meines Wissens nach:
set wz_JalousieFenster pctSlat 25
und das hier (fahre auf 50 prozent und stelle Lamellen auf 25% Neigung):
set wz_JalousieFenster pctLvlSlat 50 25

Danke Tobi!

NewMatic

#3
das hier ist ja die zeile für den push-button der mir derzeit auf starre 25% Lamellen einstellt:
<li> <div data-type="push" data-device="wz_JalousieFenster" data-icon="fa-angle-up"  data-set-on="pctSlat 25"></div></li>

Mein Gedankengang wäre jetz anstatt data-set-on="pctSlat 25" sowas in der Art (wie man es genau schreibt, weiß ich halt leider nicht):
data-set-on="pctSlat <GetReading(pctSlat)> + 25"

LG Tobi

abc2006

Als Idee: vielleicht geht's als Workaround mit einem UserReading (ungetestet)

Beispiel:
reading wz_JalousieFenster:uiMovePercent wird gesetzt von dem UI auf ^^ "25"
userReading uiCalcPosition:uiMovePercent.* {ReadingsVal($name","uiMovePercent",0)+ReadingsVal($name","totalPosition",0)}
userReading totalPosition:uiCalcPosition.* {my $val = ReadingsVal($Name,"uiCalcPosition",0); fhem"set wz_JalousieFenster pctLvlSlat $val"); $val;}

Grüße,
Stephan

FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

NewMatic

Hi Stephan,

ich kann leider als Anfänger deiner Antwort nicht ganz folgen...
Die userReadings die du da geschrieben hast, gehören nicht in die index.html oder?

LG Stefan

Gunther

userreadings hast Du in Deinem Device

Alternativ kannst Du Dir natürlich eine Logik in FHEM aufbauen.
Z. B. einen Dummy für das Drücken des Buttons.
Darauf lässt Du ein DOIF laufen, welches pro Betätigung einen Wert (z. B. 25) dazu addiert und nach kurzer Zeit wieder initialisiert.
Zusätzlich lässt Du dann mit dem neuen Wert Dein set device pctSlat [Dummywert] ausführen.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

abc2006

Hi,
die userReadings würde ich in dem RolladenDevice anlegen.

Funktion sollte die gleiche werden wie mit einem zusätzlichen DOIF, allerdings ohne den Overhead eines zusätzlichen Devices.

https://wiki.fhem.de/wiki/UserReadings

Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

NewMatic

#8
Danke euch zwei für die Tips!
Werd mich mal in das Thema Dummys+DOIF und UserReadings einlesen und ggfs auf euch zurück kommen :)

Bzgl. Dummy ist das Modul Dummy gemeint und nicht das Dummy attribut, oder?

LG Tobi

Gunther

ja genau. Bei meinem Beispiel würdest Du einen Dummy anlegen mit

define DEINDUMMY dummy
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

NewMatic

Hi Gunther,

ja das leuchtet mir noch ein :)
Ist mein Gedankengang mit Dummy und DOIF so realisierbar bzw. der richtige weg?
define MyLamValue dummy
-beim push button Lamellen auf folgendes hinterlegen:
   <li> <div data-type="push" data-device="MyLamValue" data-icon="fa-angle-up"  data-set-on="on"></div></li>
-beim Lamellen down button folgendes hinterlegen:
   <li> <div data-type="push" data-device="MyLamValue" data-icon="fa-angle-up"  data-set-on="off"></div></li>
-DOIF so anlegen:
define myValue DOIF ([MyLamValue:"on"]) (set wz_JalousieFenster:pctslat+25) DOELSE (set wz_JalousieFenster:pctslat-25)


Stimmt das so? Bzw. Geht das mit dem Reading  wz_JalousieFenster:pctslat+25?
DOELSE führt er aus, wenn myLamValue:"off" ist (also der down button gedrückt wird)?
Sorry für die vielen Fragen, aber Dummys und DOIF übersteigen meine Newbie Kentnisse um einiges ^^

Danke für eure Unterstützung!

LG Tobi

sinus61

Der Hinweis auf UserReadings erschiene mir auch einfacher. Jetzt mal ungetestet:

userReading beim Device wz_JalousieFenster

pctSlatSoll {ReadingsVal($NAME,"pctSlat",0)+25}


und dann

data-set-on="pctSlat [wz_JalousieFenster:pctSlatSoll]"

Gunther

Teste mal das Userreading. Wenns nicht klappt schauen wir weiter.
Neben der in meinen Augen nicht funktionierenden Logik hast Du da noch Syntaxfehler drin.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

NewMatic

Hi,

danke sinus für die wirklich einfache erklärung :)
Also das reine auf addieren klappt super :)
Aber ich muss ja auch mit dem down button die JalousieLamellen wieder subtrahieren können.
Es gibt ja nur ein User reading pro Gerät. Hab es wie im angehängten Bild eingestellt. Aber es verhält sich noch etwas komisch.
Hier auch der index.html code:
<div data-type="slider" data-device="wz_JalousieFenster" data-get="STATE" data-min="0"  data-max="100" data-on='(on|closed|down)' data-off='(open|off)' data-value=true   class="negated"></div>
<div data-type="circlemenu" data-direction="right-half" data-circle-radius="90" data-item-diameter="67" class="circlemenu right-space top-space-3x" style="font-size:130%">
    <ul class="menu">
<li> <div data-type="push" data-icon="fa-bars"></div></li>
          <li> <div data-type="push" data-device="wz_JalousieFenster" data-icon="fa-angle-double-up" data-set-on="off"></div></li>
  <li> <div data-type="push" data-device="wz_JalousieFenster" data-icon="fa-angle-up"  data-set-on="pctSlat [wz_JalousieFenster:pctSlatSoll]"></div></li>
          <li> <div data-type="push" data-device="wz_JalousieFenster" data-icon="fa-minus"  data-set-on="stop"></div></li>
  <li> <div data-type="push" data-device="wz_JalousieFenster" data-icon="fa-angle-down" data-set-on="pctSlat [wz_JalousieFenster:pctSlatSollOff]"></div></li>
          <li> <div data-type="push" data-device="wz_JalousieFenster" data-icon="fa-angle-double-down" data-set-on="on"></div></li>
    </ul>
</div>
</div>


Stelle ich die lammelen jetzt drei mal um 25 ° höher ist pctSlat auf 75° was ja ok ist.
Drücke ich dann aber down macht er beim ersten mal nichts, erst beim zweiten Klick stellt er auf 51°... was ich gar nicht verstehen kann? pctSlatSollOff ist zu der Zeit 26? wo kommt die Differenz um 1 her?
Beim nächsten Down Klick passiert dann wieder nichts. Beim 4ten Klick geht dann pctSlat auf 27°? und pctSlatSollOff auf 2?
Hab ich da bei den UserReadings was falsch gemacht? oder was übersehe ich?


Danke viel mals für eure Hilfe!

LG Tobi

sinus61

Wie sind denn die Werte für pctSlatSoll und pctSlatSollOff wenn pctSlat auf 75 gefahren ist?