erste beta - fronthem, smartVISU (closed, Bitte die Anschlussthreads benutzen)

Begonnen von herrmannj, 23 Dezember 2014, 22:36:44

Vorheriges Thema - Nächstes Thema

bgewehr

Ich habe im widget GIT ein basic.hider veröffentlicht, das umschließt einfach ein anderes widget und blendet es aus, wenn das GAD keinen Wert hat. Vielleicht taugt das für Dich was?
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

fhainz


bgewehr

#1997
Sehe ich auch grade. Ich schiebe es hinterher!

@HCS: mit dem neuen Treiber werden meine wischgesten nicht mehr ausgeführt, mit denen ich inzwischen die Seiten wechsle. Console Output später...
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

#1998
Gibt kein widget, das läuft so:

Um den html code, der dynamisch ausgeblendet werden soll, mache ich folgende Klammer:


<div data-item="{{id~gad_name}}" data-widget="basic.hider">
...
</div>


Dann in der widget. js oder sonstwo:


// ----- basic.hider-----------------------------------------------------
$(document).delegate('div[data-widget="basic.hider"]', {
'init': function (event) {
},

'update': function (event, response) {
if (response == '') {
$(this).html("");
//css("visibility", "hidden");
}
}
});


Dann ist das weg, wenn das gad leer ist. Kann man ja variieren!
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

fhainz

Das ist ja noch viel besser! ;D Danke!!

Ich hab es noch ein wenig umgebaut, damit es zwischen 1 gad und einem div/span toggelt.

$(document).delegate('[data-widget="my.elementToggle"]', {
'init': function (event) {
},

'update': function (event, response) {
hideElement = $(this).attr('hide-element');

//console.log("[basic.hider] update '" + this.id + "': response: " + response + ", hideElement: " + hideElement);

if (response == 0 ) {
$(this).css("display", "none");
$(hideElement).css("display", "inline");
}
else {
$(this).css("display", "inline");
$(hideElement).css("display", "none");
}
}
});


- in data-item kommt das GAD das geprüft wird
- in hide-element kommt die klasse/id die getoggelt wird
<span data-item="wz.heizung.desired-new" hide-element=".desired" data-widget="my.elementToggle">{{ basic.float('wz.heizung.desired-new', 'wz.heizung.desired-new', '°C') }}</span>

zB

<span class="desired">{{ basic.float('wz.heizung.desired', 'wz.heizung.desired', '°C') }}</span>
<span class="desired-new" data-item="wz.heizung.desired-new" hide-element=".desired" data-widget="my.elementToggle">{{ basic.float('wz.heizung.desired-new', 'wz.heizung.desired-new', '°C') }}</span>


Somit wird abwechselnd desired und desired-new angezeigt.

Danke für eure Hilfe!!

karl0123

Der neue Treiber tut so weit was er soll. Danke dafür. Eines fällt mir im Vergleich zum alten Treiber auf. Hat man ein rtr Widget und man drückt + oder -, dann wird immer gleich um 2 Steps geändert (reproduzierbar). Auf der gleichen Seite passiert das mit dem "alten" Treiber nicht. Folgendes steht in der Konsole bei loglevel 2:


[io.fhem]: send() data: {"cmd":"item","id":"EG.wz.TC.Wohnzimmer.Climate.set","val":"20.5"}
[io.fhem]: write (gad=EG.wz.TC.Wohnzimmer.Climate.set val=20.0)
[io.fhem]: send() data: {"cmd":"item","id":"EG.wz.TC.Wohnzimmer.Climate.set","val":"20.0"}
[io.fhem]: socket.onmessage: data= {"items":["EG.wz.TC.Wohnzimmer.Climate.set","20.5"],"cmd":"item"}
[io.fhem]: socket.onmessage: data= {"items":["EG.wz.TC.Wohnzimmer.Climate.set","20.0"],"cmd":"item"}


Es wird also tatsächlich erst der Wert 20.5 und dann der Wert 20 gesendet , obwohl bei der Einstellung 21 nur einmal das minus angeklickt wurde. Und die Schrittweite steht auch auf 0.5. Mit dem alten Treiber (ohne das Vodoo von hermannj) passiert das reproduzierbar nicht. Habt ihr eine Idee?

HCS

Zitat von: karl0123 am 22 März 2015, 17:46:42Hat man ein rtr Widget und man drückt + oder -, dann wird immer gleich um 2 Steps geändert (reproduzierbar).
Das funktioniert bei mir wie es soll (reproduzierbar).
Welchen rtr hast Du denn verwendet?

karl0123

Widget:

{% macro hmtcrt(id, gad_rtValve, gad_rtBattery, gad_humidity, gad_actual, gad_set, gad_controlmode, gad_daytemp, gad_nighttemp, gad_window, gad_battery, gad_txt, step, dt, nt) %}
{% import "basic.html" as basic %}

<div id="{{ uid(page, id) }}" data-widget="device.rtr" data-step="{{ step|default(0.5) }}"
class="rtr">
<div class="actual">
<div class="temp">
            {{ basic.shifter(id~'batteryrt', '', gad_rtBattery, 'icon.battery','', 0, 100) }}
{{ basic.float(id~'actual', gad_actual, '°' ) }}
{{ basic.shifter(id~'battery', '', gad_battery, 'icon.battery','', 0, 100) }}
</div>
<div class="text">{% if gad_humidity %}Hum.: {{ basic.hum_value(id~'humidity', gad_humidity,'%') }}&nbsp;&nbsp;{% endif %}Valve: {{ basic.value(id~'valve', gad_rtValve,'%') }}</div>
</div>

{% if gad_set %}
<div class="set">
<a data-role="button" data-icon="minus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>
<div class="temp">{{ basic.float(id~'set', gad_set, '°' ) }}</div>
<a data-role="button" data-icon="plus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>
</div>
{% endif %}

<div class="control" style="width: 90%;">
<table align="center" cellpadding="0">
<tr>
<td>{{ basic.switch(id~'manauto', gad_controlmode, icon1~'sani_heating_automatic.png', icon0~'sani_heating_manual.png', 'auto', 'manual') }}</td>
<td>{{ basic.switch(id~'night', gad_set, icon1~'scene_night.png', icon0~'scene_night.png', nt, dt) }}</td>
<td>{{ basic.switch(id~'day', gad_set, icon1~'scene_day.png', icon0~'scene_day.png', dt, nt) }}</td>
                    <td>
                    {{ basic.symbol(id~'windowtilted', gad_window, '', 'icons/ye/fts_window_1w_tilt.png','tilted','or') }}{{ basic.symbol(id~'windowopen', gad_window, '', 'icons/rd/fts_window_1w_open.png','open','or') }}
                    </td>
</tr>
</table>
</div>
</div>
{% endmacro %}


JS -Standard aus der widget.js

$(document).delegate('div[data-widget="device.rtr"] > div > a[data-icon="minus"]', {
'click': function (event, response) {
var uid = $(this).parent().parent().attr('id');
var step = $('#' + uid).attr('data-step');
var item = $('#' + uid + 'set').attr('data-item');

var temp = (Math.round((widget.get(item) - step) * 10) / 10).toFixed(1);
io.write(item, temp);
}
});

$(document).delegate('div[data-widget="device.rtr"] > div > a[data-icon="plus"]', {
'click': function (event, response) {
var uid = $(this).parent().parent().attr('id');
var step = $('#' + uid).attr('data-step');
var item = $('#' + uid + 'set').attr('data-item');

var temp = (Math.round((widget.get(item) * 1 + step * 1) * 10) / 10).toFixed(1);
io.write(item, temp);
}
});


HTML:

{{ homematic.hmtcrt('KG.wk.TC.Waesche', 'KG.wk.RT.Waesche.Clima.valve', 'KG.wk.RT.Waesche.battery', 'KG.wk.TC.Waesche.Weather.humidity', 'KG.wk.TC.Waesche.Weather.temperature', 'KG.wk.TC.Waesche.Climate.set', 'KG.wk.TC.Waesche.Climate.controlmode', 'KG.wk.TC.Waesche.Climate.dayTemp', 'KG.wk.TC.Waesche.Climate.nightTemp', 'KG.wk.TK.Waesche', 'KG.wk.TC.Waesche.battery', '', '',18,18) }}

Da es genau so mit dem alten Treiber funktioniert, fällt es mir wirklich schwer, zu glauben, dass es an mir liegt. Zumal das JS unverändert verwendet wird.

HCS

Zitat von: karl0123 am 22 März 2015, 19:06:31
Da es genau so mit dem alten Treiber funktioniert, fällt es mir wirklich schwer, zu glauben, dass es an mir liegt. Zumal das JS unverändert verwendet wird.
Das habe ich ja auch nicht behauptet. Der neue Treiber arbeitet anders als der alte und da kann es schon sein, dass etwas das bisher warum auch immer funktioniert hat, nicht funktioniert. Hatten wir ja heute schon mal.

Ich baue ihn mal bei mir ein und debugge es.


marvin78

Ich kann das Verhalten von Karl mit einem ganz ähnlichen Widget bestätigen. Auch bei mir ist mit dem älteren Treiber und den tiefen delegates alles gut. Das Verhalten mit dem neuen Treiber stellt sich bei mir so dar:

Ich klicke auf Minus oder Plus (bei 21). Es wird in der Anzeige sofort um 1 vermindert gewollt ist 0,5), dann springt der Wert (desired) kurz auf den Wert zurück, der tatsächlich gewünscht war (20,5) und dann wieder auf den um 1 verminderten Wert (20). Am Ende steht also ein um 1 verminderter Wert in der Anzeige und dieser wird in FHEM auch vom TC angenommen. Auch die Konsolenausgaben sind bei mir, wie bei karl.

HCS

Ich frage mich gerade, wie der erste send() im log zustande kommt, ohne dass ein write vorher kam.
Ist das bei Dir auch so?
Momentan werde ich durch code lesen nicht schlau aus der Sache.

Bekommt eigentlich noch jemand mails bei neuen Beiträgen?
Seit Mitternacht bekomme ich keine mehr.

marvin78

#2006
Nein. Du hast recht, karl hat wohl eine Zeile vergessen. So sieht es aus. Wobei die allerletzte Zeile erst nach einer Weile ausgeführt wird (etwa 1-2 Sekunden).

[io.fhem]: write (gad=EG_ez_TC_Esszimmer_Climate.s val=20.5)
[io.fhem]: send() data: {"cmd":"item","id":"EG_ez_TC_Esszimmer_Climate.s","val":"20.5"}
[io.fhem]: write (gad=EG_ez_TC_Esszimmer_Climate.s val=20.0)
[io.fhem]: send() data: {"cmd":"item","id":"EG_ez_TC_Esszimmer_Climate.s","val":"20.0"}
[io.fhem]: socket.onmessage: data= {"cmd":"item","items":["EG_ez_TC_Esszimmer_Climate.s","20.5"]}
[io.fhem]: socket.onmessage: data= {"items":["EG_ez_TC_Esszimmer_Climate.s","20.0"],"cmd":"item"}


Für mich sieht das so aus, als würde das prellen.

Edit: Und wegen der Mails - ist bei mir auch so. Keine Mails seit letzte Nacht.

HCS

Gut, das behebt schon mal eine meiner Verwirrungen  :)

Könntest Du mal einen original device.rtr bei Dir draufsetzen und schauen, ob der sich auch so verhält?
{{ device.rtr(..

bgewehr

Meine {{ homematic.hmtc verhalten sich ganz normal mit 1.07...
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

marvin78

#2009
Ah. Sorry. Hatte ich auch schon getestet. Auch mit dem Standard-Widget das gleiche verhalten. Browser ist übrigens Chrome. Devices: Nexus 5, diverse Samsung Tablets, PC.