smartVISU visu.js uzsu mit Bedingung?

Begonnen von Hans Franz, 21 Februar 2015, 13:43:04

Vorheriges Thema - Nächstes Thema

Hans Franz

Hallo,
Um mich etwas einzuarbeiten habe ich versucht in der visu.js der uzsu eine Condition mitzugeben.

--- visu.js 2015-02-21 12:00:12.948726807 +0100
+++ visu.js.patched 2015-02-21 12:04:04.000000000 +0100
@@ -255,10 +255,16 @@
         var template = "";
         // tabelle der zeileneinträge abschliessen
         template += "<\/table>";
+        template += "<table style = 'border: 0'> <tr> <td> <form> <fieldset data-mini='true'> ";
+        // hier Bedingung für gesamte uzsu
+        template += //"<div data-role='controlgroup' data-type='horizontal' data-inline='true' >"+
+        "<tr><td><\/td><td> Bedingung<\/td><tr>"+
+        "<tr><td><\/td><td><input type='text' data-clear-btn='false' style = 'width:300px' id='uzsuCondition'"+
+        "<\/td><\/tr>";
         // hier der activierungsbutton für die gesamte uzsu
-        template += "<table style = 'border: 0'> <tr> <td> <form> <fieldset data-mini='true'> " +
-        "<input type='checkbox' id='uzsuGeneralActive'> <label for='uzsuGeneralActive'>UZSU Activate<\/label>" +
-        "<\/fieldset><\/form> <\/td>";
+        template += "<tr><td> <div data-role='controlgroup' data-type='horizontal' data-inline='true' >"+
+        "<input type='checkbox' id='uzsuGeneralActive'><label for='uzsuGeneralActive'>UZSU Activate<\/label><\/td>"+
+        "<\/fieldset><\/form><\/td>";
         // jetzt kommen noch die buttons in der basisleiste mit rein
         template += "<td> <div data-role='controlgroup' data-type='horizontal' data-inline='true' data-mini='true'>";
                 template += "<div data-role = 'button' id = 'uzsuAddTableRow'> Add Entry <\/div>";
@@ -294,7 +300,8 @@
         var weekDays =['MO','TU','WE','TH','FR','SA','SU'];
         // jetzt wird die tabelle befüllt
         // allgemeiner Status, bitte nich mit attr, sondern mit prop, siehe https://github.com/jquery/jquery-mobile/issues/5587
-        $('#uzsuGeneralActive').prop('checked',response.active).checkboxradio("refresh");       
+        $('#uzsuGeneralActive').prop('checked',response.active).checkboxradio("refresh");
+        $('#uzsuCondition').val(response.condition.replace(/__/g,' '));
         // auswahl format
         switch(customFormat[0]){
                 case '0':
@@ -417,6 +424,7 @@
         // bitte darauf achten, dass das zurückspielen exakt dem der anzeige enspricht.
         // gesamthafte aktivierung
         response.active = $('#uzsuGeneralActive').is(':checked');
+        response.condition = $('#uzsuCondition').val();
         // dispatcher für format
         switch(customFormat[0]){
                 case '0':
@@ -470,7 +478,9 @@
         }
         // über json interface / treiber herausschreiben
         if(saveSmarthome){
-                io.write(item, {active : response.active, list : response.list });
+            var fhemcondition = response.condition;
+                fhemcondition = fhemcondition.replace(/ /g,'__');
+                io.write(item, {active : response.active, condition : fhemcondition, list : response.list});
         }
}
// steuerung des Popups
@@ -537,7 +547,7 @@
         $(this).data('uzsu', response[0]);
     }
     else {
-        $(this).data('uzsu', { active: true, list: [] });
+        $(this).data('uzsu', { active: true, list: [], condition: '' });
         }
});
// als zweites der handler für die callbacks des click events


Die kommt auch in der UZSU_execute richtig an, wird dort aber nach dem ersten Leerzeichen, ohne die es in einer Bedingung ja nicht geht, abgeschnitten.
Meine Lösung mit dem Replacement von " " durch "__" scheint mir nicht nur suboptimal sondern sieht allzusehr nach Bastellösung aus, da in der UZSU_execute noch zurückgewandelt werden muss.
Wie macht man so etwas elegant? Den ganzen json-String in Anführungszeichen zu setzen ist mir leider nicht gelungen.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

bgewehr

Hallo, Hans,

an den Bedingungen denke ich auch schon einige Wochen herum.

Ich hätte aber gern pro Zeile die Möglichkeit, Bedingungen zu setzen. Dann aber muss man wieder pro Zeile einzelne WDT erzeugen, weil der ja nur eine Bedingung für alle UZSU-Zeilen kann. Ich hätte gern eine Möglichkeit, Feiertage und Ferientage mit einzubeziehen oder Türgriffsensoren usw.

Lass das bitte noch etwas reifen, wir müssen erst klären, ob das weiterhin mit dem smarthome.py-UZSU identisch erfolgen kann, oder ob wir forken müssen für fhem. Bisher haben wir versucht, das zu vermeiden...

Schau mal hier:
https://github.com/mworion/uzsu_widget/issues/13
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

Hans Franz

Hallo Bernd,

Kein Thema :).
Mir ging es eigentlich auch nur darum, mich mal an js heranzuwagen. Bedingungen kann man ja auch in z.B. myUtils definieren.
Das git von mworion hatte ich vor einigen Tagen gesehen (und beschämt zu Boden geschaut: an Kompatibilität hatte ich nicht gedacht).
Bin gespannt, wie's weitergeht. Super Job, den du hier machst.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

bgewehr

FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

bgewehr

So, MWorion hat nun die V 3.99 responsive im GitHub.

Siehe ISSUE 13: https://github.com/mworion/uzsu_widget/issues/13

Wir müssen nun feststellen, welche Conditions wir genau brauchen.

Auf jeden Fall müsste die Funktion UZSU_Execute dann so angepasst werden, dass sie bei gegebenen Bedingungen pro Zeile der UZSU einen eigenen WDT erzeugt, weil der ja nur EINE Condition haben kann und nicht pro Profil eine...

Bitte sagt mir Eure Meinung, welche Ausprägungen die Conditions haben müssen, dann leite ich das an MWORION weiter.

Wollt Ihr einen einfachen Perl-String für die Condition oder lieber ein Device Comp Value - Tripel?

Danke und Gruß
Bernd
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

dev0

Ich würde einen Perl String vorziehen, da beim Triple eh nur der Komparator über die GUI auszuwählen wäre, Device und Value muss man sowieso eintippen.

bgewehr

Ich habe MWorion jetzt vorgeschlagen, es wie abgebildet zu machen.

Im FHEM Code kann dann unterschieden werden: wenn nur das erste Texfeld gefüllt ist, dann als Perl evaluieren, sonst Device comp value.
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

dev0


bgewehr

#8
So, es ist soweit!

Mit dem aktuellen responsive_dev branch ist es MWORION gelungen, einen separaten Designtype 2 für fhem speziell mit einigen Features auszurüsten:

1. Die aktiven Variablen $we und !$we können nun an Stelle der Mo Di Mi Tagesreihe benutzt werden, um Schaltvorgänge auch von holidays und Feiertagen abhängig zu wählen. Sie werden im Designtype 2 immer zusätzlich angeboten.

2. In den expert-Einstellungen jeder Zeitreihe kann nun über eine Kombination aus fhemDevice, Vergleichsoperator und Wert oder aber über einen Perl String im Feld fhemDevice eine Bedingung formuliert werden, die dem WDT zugeordnet wird. Daraus folgt auch, dass nun wieder für jede Zeile (mit conditions) ein eigener WDT erstellt werden muss.

Nun ist die uzsu_execute in der 99_fronthem_utils.pm entsprechend anzupassen. Ich mach mich mal dran...

Um vom neuen Designtype Gebrauch zu machen, müsst Ihr in smartVISU den Designtype 2 mittels 2 im vierten Parameter ansteuern:

                    {{ visu.uzsu_icon(id~'UZSU', gad_uzsu, '', 2, '', '', 'bool', 'an:on,aus:off' ) }}


Das Ergebnis sieht dann so aus:
(https://forum.fhem.de/index.php?action=dlattach;topic=34140.0;attach=48526;image)
(siehe Bild-Anhang)

und liefert folgenden JSON pro Zeile:

{
"list": [{
"timeOffset": "5",
"rrule": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR",
"timeMin": "20:45",
"active": true,
"holiday": {
"weekend": false,
"work": false,
},
"sun": null,
"condition": {
"conditionActive": true,
"conditionType": "=",
"conditionValue": "Value",
"conditionDevicePerl": "FhemDevice"
},
"time": "20:45<sunrise+5m<21:45",
"timeMax": "21:45",
"event": "sunrise",
"timeCron": "",
"value": "0"
}],
"active": true
}


Ihr könnt Euch das git holen mit:

sudo git clone -b responsive_develop https://github.com/mworion/uzsu_widget.git UZSU_dev
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

bgewehr

FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

dev0

Zitat von: bgewehr am 16 März 2016, 22:35:36
Einwände?
In keinster Weise Einwände, im Gegenteil: ich finde es toll, dass und wie Du das Widget mit Michael weiterentwickelst!
Sag Bescheid, wenn ich Dich irgendwie unterstützen kann.

bgewehr

Eine Frage fällt mir ein: sollen wir grundsätzlich wieder einen WDT pro Zeile erstellen oder nur für diejenigen, die eine Condition haben? Das eine ist etwas einfacher als das Andere... Was meint Ihr?
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

dev0

Ich halte die WDT pro Zeile Variante für einfacher und durchschaubarer.

bgewehr

Dann fange ich mal so an. Bezeichnung: WDT_device-01_UZSU
Room UZSU
Group Device
ok?
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

dev0