Ausblick: neues Attribut stateTable/stateTabletUI webCmdDOIF

Begonnen von Damian, 17 Mai 2017, 21:13:39

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: Ellert am 12 Juni 2017, 20:27:17
Ab dieser Komplexität würde ich das mit einer ReadingsGroup lösen, sonst müsste man aus meiner Sicht größere Teile aus FHEMWEB im DOIF doifspezifisch nach bauen und eine doif.js dazu basteln.

Ich habe für das, was geht, die Beschreibung integriert, commandref_join.pl liefert keine Fehler.

Edit:
@Damian
Du könntest ja mal versuchen die TabletUI Widgets als Bezeichner einzubinden, das könnte funktionieren. Es müssen in der Tabelle ja keine Befehle angegeben werden.

ja, vermutlich aber erst in den Ferien
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

#31
Na, ja,

attr di_bla webCmdDOIF "<iframe src="/fhem/www/tablet2/index.html" scrolling="no" height="120" width="220"></iframe>"

dürfte nicht so zeitintensiv sein  ;)

Die Einbindung von iframes funktioniert grundsätzlich, das Beispiel ist etwas zusammenhanglos.

Damian

Zitat von: Ellert am 13 Juni 2017, 08:02:40
Na, ja,

attr di_bla webCmdDOIF "<iframe src="/fhem/www/tablet2/index.html" scrolling="no" height="120" width="220"></iframe>"

dürfte nicht so zeitintensiv sein  ;)

Die Einbindung von iframes funktioniert grundsätzlich, das Beispiel ist etwas zusammenhanglos.

Dass das geht, ist mir schon klar, nur eben mit dem ganzen TabletUI-Overhead und umständlicher html-Konfiguration.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Wenn bei installiertem Tablet-UI im Attribut JavaScripts des FHEMWEB-Gerätes tablet/js/fhem-tablet-ui.js eingetragen wird, kann man FTUI-Widgets auch in dem Attribut webCmdDOIF direkt angeben.

Erst die Definition erzeugen und dann tablet/js/fhem-tablet-ui.js einbinden.

In dem angepasste Beispiel wird das DOIF mit einem switch-Widget direkt geschaltet:
Erst die Definition erzeugen und dann tablet/js/fhem-tablet-ui.js einbinden.

defmod datumsbereich_Labor0 DOIF ([[$SELF:P_bhm,"00:00"]] and [?$SELF:P_byear] == $year and [?$SELF:P_bmon] == $month and [?$SELF:P_bday] == $mday)\
   {Log 1, "Alarmstart"}\
DOELSEIF ([[$SELF:P_ehm,"00:00"]] and [?$SELF:P_eyear] == $year and [?$SELF:P_emon] == $month and [?$SELF:P_eday] == $mday)\
   {Log 1, "Alarmstop"}
attr datumsbereich_Labor0 alias Terminspanne
attr datumsbereich_Labor0 cmdState 1|0
attr datumsbereich_Labor0 group Labor: Datumsbereich von HH:MM dd.mm.yyyy bis HH:MM dd.mm.yyyy ohne datetimepicker Widget
attr datumsbereich_Labor0 icon time_calendar
attr datumsbereich_Labor0 readingList P_bhm P_bday P_bmon P_byear P_ehm P_eday P_emon P_eyear
attr datumsbereich_Labor0 room DOIF_Labor
attr datumsbereich_Labor0 setList P_bhm:time\
P_bday:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 \
P_bmon:slider,1,1,12\
P_byear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026\
P_ehm:time\
P_eday:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31\
P_emon:slider,1,1,12\
P_eyear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026
attr datumsbereich_Labor0 webCmd cmd_1
attr datumsbereich_Labor0 webCmdDOIF "<div data-type="switch" data-icon="fa-rss" data-device='datumsbereich_Labor0' data-get-on="cmd_1" data-get-off="cmd_2" data-set-on="cmd_1" data-set-off="cmd_2""></div>"


Es gibt allerdings Wechselwirkungen zwischen Tablet-UI und FHEMWEB. daher ist diese Lösung noch nicht alltags tauglich.

Damian

Auch nicht schlecht. D. h. jetzt noch ein js basteln, was nur die widgets bedient und einen Preprozessor in DOIF basteln, welcher eine einfache Syntax in webCmdDOIF in den jeweiligen html-Code übersetzt. :)

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Zitat von: Per am 12 Juni 2017, 18:03:19
lässt sich da kein

P_bday:1-31

draus machen?

@Per: Mich stören die Zahlenkolonnen auch.

Mit der anliegenden Datei gibt es ein Widget "selectrange". Die Syntax ist wie beim Slider.

Datei in den Ordner "pgm2" kopieren und Restart durchführen.

Beispiel:

defmod du5 dummy
attr du5 readingList state
attr du5 room 0_Test
attr du5 setList state:selectrange,0,.2,10,1
attr du5 webCmd state

Damian

Zitat von: Ellert am 13 Juni 2017, 21:49:39
@Per: Mich stören die Zahlenkolonnen auch.

Mit der anliegenden Datei gibt es ein Widget "selectrange". Die Syntax ist wie beim Slider.

Datei in den Ordner "pgm2" kopieren und Restart durchführen.

Beispiel:

defmod du5 dummy
attr du5 readingList state
attr du5 room 0_Test
attr du5 setList state:selectrange,0,.2,10,1
attr du5 webCmd state


Vielleicht machst du mal den Vorschlag im FHEMWEB-Board das Script offiziell aufzunehmen, damit alle was davon haben (auch die Nicht-DOIF-Nutzer)


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

#37
Zitat von: Damian am 14 Juni 2017, 13:47:07
Vielleicht machst du mal den Vorschlag im FHEMWEB-Board das Script offiziell aufzunehmen, damit alle was davon haben (auch die Nicht-DOIF-Nutzer)
Das war erstmal eine Übung für mich und noch nicht ganz ausgereift, es soll eigentlich auch eine logarithmische Reihe mit rein.

Ellert

Zitat von: Ellert am 13 Juni 2017, 21:49:39
@Per: Mich stören die Zahlenkolonnen auch.

Mit der anliegenden Datei gibt es ein Widget "selectrange". Die Syntax ist wie beim Slider.

Datei in den Ordner "pgm2" kopieren und Restart durchführen.

Beispiel:

defmod du5 dummy
attr du5 readingList state
attr du5 room 0_Test
attr du5 setList state:selectrange,0,.2,10,1
attr du5 webCmd state


Es ist mit anderen Namen in fhemweb.js integriert, s. https://forum.fhem.de/index.php/topic,73188.0.html

Ellert

#39
Zitat von: Ellert am 13 Juni 2017, 15:24:05
Wenn bei installiertem Tablet-UI im Attribut JavaScripts des FHEMWEB-Gerätes tablet/js/fhem-tablet-ui.js eingetragen wird, kann man FTUI-Widgets auch in dem Attribut webCmdDOIF direkt angeben.

Erst die Definition erzeugen und dann tablet/js/fhem-tablet-ui.js einbinden.

In dem angepasste Beispiel wird das DOIF mit einem switch-Widget direkt geschaltet:
Erst die Definition erzeugen und dann tablet/js/fhem-tablet-ui.js einbinden.

defmod datumsbereich_Labor0 DOIF ([[$SELF:P_bhm,"00:00"]] and [?$SELF:P_byear] == $year and [?$SELF:P_bmon] == $month and [?$SELF:P_bday] == $mday)\
   {Log 1, "Alarmstart"}\
DOELSEIF ([[$SELF:P_ehm,"00:00"]] and [?$SELF:P_eyear] == $year and [?$SELF:P_emon] == $month and [?$SELF:P_eday] == $mday)\
   {Log 1, "Alarmstop"}
attr datumsbereich_Labor0 alias Terminspanne
attr datumsbereich_Labor0 cmdState 1|0
attr datumsbereich_Labor0 group Labor: Datumsbereich von HH:MM dd.mm.yyyy bis HH:MM dd.mm.yyyy ohne datetimepicker Widget
attr datumsbereich_Labor0 icon time_calendar
attr datumsbereich_Labor0 readingList P_bhm P_bday P_bmon P_byear P_ehm P_eday P_emon P_eyear
attr datumsbereich_Labor0 room DOIF_Labor
attr datumsbereich_Labor0 setList P_bhm:time\
P_bday:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 \
P_bmon:slider,1,1,12\
P_byear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026\
P_ehm:time\
P_eday:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31\
P_emon:slider,1,1,12\
P_eyear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026
attr datumsbereich_Labor0 webCmd cmd_1
attr datumsbereich_Labor0 webCmdDOIF "<div data-type="switch" data-icon="fa-rss" data-device='datumsbereich_Labor0' data-get-on="cmd_1" data-get-off="cmd_2" data-set-on="cmd_1" data-set-off="cmd_2""></div>"


Es gibt allerdings Wechselwirkungen zwischen Tablet-UI und FHEMWEB. daher ist diese Lösung noch nicht alltags tauglich.

Mit den angepassten Dateien sind die offensichtlichen Wechselwirkungen beseitigt.

Die Datei fhem-tablet-uidi.js muss in den css-Ordner von Tablet-UI.
Die Datei fhem-tablet-uidi.css muss in den js-Ordner von Tablet-UI.

Im entsprechenden FHEMWEM müssen die Dateien im jeweiligen Attribut (CssFiles, JavaScripts ) registriert werden.

In DOIF wurden doppelte Zeilen geschrieben, das ist bereinigt.

Mit dem Beispiel könnte man ohne Behinderung experimentieren.

defmod tabletDOIF DOIF (#1)\
DOELSEIF (#2)\
DOELSEIF (#3)
attr tabletDOIF readingList schieberegler
attr tabletDOIF room 0_Test
attr tabletDOIF webCmdDOIF "<div data-on-color="red" data-off-color="blue" data-type="switch" data-icon="fa-rss" data-device='tabletDOIF' data-get-on="cmd_1" data-get-off="cmd_2" data-set-on="cmd_1" data-set-off="cmd_2"></div>"|"<div data-type="selector" data-device="tabletDOIF" data-items='["cmd_1","cmd_2","cmd_3"]' data-get="STATE" data-set=""></div>"|"<div><div data-type="slider" data-device='tabletDOIF' data-set='schieberegler' data-get='schieberegler' data-min="10" data-max="90" class="cell" > </div> <div data-device="tabletDOIF" data-get="schieberegler" data-type="label" class="cell">Werte</div></div>"

setstate tabletDOIF cmd_1
setstate tabletDOIF 2017-06-17 09:23:20 .eM off
setstate tabletDOIF 2017-06-17 17:45:05 cmd 1
setstate tabletDOIF 2017-06-17 17:45:05 cmd_event set_cmd_1
setstate tabletDOIF 2017-06-17 17:45:05 cmd_nr 1
setstate tabletDOIF 2017-06-17 17:41:11 schieberegler 52
setstate tabletDOIF 2017-06-17 17:45:05 state cmd_1


Edit: Namen der css und js Datei berichtigt.