smartVISU - allgemeine Fragen

Begonnen von Jojo11, 02 Februar 2015, 18:57:43

Vorheriges Thema - Nächstes Thema

Jojo11


marvin78

#16
Widget für ein Select, das auch mehr als 10 Einträge (dynamisch viele) verarbeiten kann:

{% macro select_uni(id, gad, items, text) %}
   <div align="center">
<label>
<select id="{{ uid(page, id) }}" data-widget="basic.select_uni" data-item="{{ gad }}" data-native-menu="false" data-placeholder="false" />
        {% if choose_text != '' %}
        <option selected>{{ text }}</option>
        {% endif %}
{% for item in items %}
            <option>{{ item }}</option>
        {% endfor %}
</select>
</label>
    </div>
{% endmacro %}


Für die visu.js

$(document).delegate('select[data-widget="basic.select_uni"]', {
'update': function (event, response) {
$(this).val(response).selectmenu('refresh');
},

'change': function (event) {
// DEBUG:
console.log("[basicext.select_single] change '" + this.id + "':", $(this).prop("value"));
io.write($(this).attr('data-item'), $(this).val() );
}
});


Einbau des Widgets:

{{ basic.select_uni('ID',gad,['List 1','List 2',...,'ListN'],'Text' ) }}

Ausgangspunkt war das Widget von bgewehr.

Was noch fehlt ist ein Converter, der die nötigen Listen auch aus den FHEM-Modulen holt (diese stehen ja meist NICHT in readings).

herrmannj


marvin78

Wie kommen sie denn nach FHEM? Es gibt viele Module, die dynamische set Listen für verschiedene set-Befehle haben. So zum Beispiel Eingänge für einen AV-Receiver, Kanäle bei einem Enigma2-Receiver, andere Fernbedienungsbefehle. Diese sind nicht statich in den Modulen definiert, befinden sich aber nicht in Readings.

Beispiele für so einen set Befehl wären

set YAMAHA_AV input hdmi1
set ENIGMA2_RECEIVER channel daserste


Können diese dynamischen Befehle auch über Fronthem abgebildet werden oder siehst du da keine Chance?

Wobei das hier auch eigentlich woanders hingehört.

herrmannj

Hi, ja witzig, das sollten wir eigentlich im fronthem thread weitermachen, da wo gerade "allgemeine Fragen" auftauchen  :)

Antwort: im Prinzip ja - logisch gern.
Wenn Du Dir im Wiki die lichtszene anschaust - da mach ich das mit buttons und einem dummy. Ist von Prinzip her ähnlich. Ich wüsste jett ad hoc nicht wie man dynamische Listen komfortabel abbildet... Das setzt ja voraus dass das selecet widget überhaupt mal seine Inhalte dynamisch aktualisieren kann und es müsste eine, möglichst universelle, Art geben die Listen dann auszulesen. Alles andere wäre modulspezifisch. Das geht auch, setzt aber voraus das die entsprechenden Modul erweitert werden.

Man kann converter für solche Fragestellungen direkt ins modul einbauen. Das macht immer dann Sinn wenn die Logik des Moduls "mitarbeiten" muss (wie hier, im Prinzip kennt das yamaha modul die notwendigen Bedien-Dinger wie Channel etc).

Das wird aber nur funktionieren wenn der entsprechende Autor des Moduls "Bock drauf hat", evtl weil er smartVisu selbst einsetzt.

Ich bin für Vorschläge offen, kanns aber nicht leisten module dafür anzupassen. Ansonsten statisch: zB für channel gibt es ja einige Beispiele die Buttons auf der GUI zu ordnen, Icons (Das Erste...) dahinter zulegen usw. Das klappt ja Problems los. Um bei dem Beispiel Channel zu bleiben, das willst Du ja auch eine bestimmte Reihenfolge haben (Das Erste, ZDF, ...) da müsste man ja sowieso "händisch" ordnen.

Lass mal mit dem Ding im fronthem thread weitermachen.

vg
jörg

chris1284

#20
würde beim set im gad kein reading hinterlegen sund in smartvisu einfach in einem button statt "on" ein "input hdmi1" schreibt.
ich würde davon ausgehen das dann über das gad der befehl "set <name> input hdmi1" gesendet wird, kennt das device den befehl nicht wird er im schlimmsten fall nicht ausgeführt.

eine rückmeldung ist in dem fall natürlich nicht vorhandne wenn kein reading

bgewehr

Zitat von: Jojo11 am 02 Februar 2015, 18:57:43
Aktuell würde ich gerne dieses dropdown-Menü einsetzen: http://knx-user-forum.de/smartvisu/39806-neue-widgets-basic-input-und-basic-select.html

@Bernd: Das widget habe ich in eine zusätzliche widgets.html gepackt und die sandbox.js ebenfalls in den "MeinHaus"-Ordner. Muss ich noch irgendwas beachten? Möchte einen dummy mit dem Wert aus der Liste setzen und verwende den "direct"-converter. Aber irgendwie geht es nicht  :( Ich kann die Liste anklicken und einen Wert auswählen, aber dieser wird nicht an fhem übergeben. Kann es was mit dem Namen zu tun haben, wenn ich das widget in einer anderen Datei speichere?

Bitte schau in die basic.html und die widgets.js in meinem GIT: http://github.com/bgewehr/smartVISU . Vergiss den Thread im KNX-Forum, das ist alt und keiner hat je darauf reagiert.

Ich benutze das Widget zum Beispiel in den timern im widget_homematic.html, da kannst Du nachsehen!
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

Jojo11

#23
Zitat von: bgewehr am 05 Februar 2015, 15:28:49
Bitte schau in die basic.html und die widgets.js in meinem GIT: http://github.com/bgewehr/smartVISU . Vergiss den Thread im KNX-Forum, das ist alt und keiner hat je darauf reagiert.

Ich benutze das Widget zum Beispiel in den timern im widget_homematic.html, da kannst Du nachsehen!

Danke marvin78 und Bernd!
Ich werde das gleich mal testen  ::)

schöne Grüße
Jo

Nachtrag: Vielen Dank, es funktioniert jetzt bestens. Aber keine Ahnung, was ich vorher falsch gemacht habe  ;D ;D

bjoernbo

Ich muss hier auch mal eine allgemeine Frage loswerden. Habe heute smartvisu installiert und nach ein paar Anlauf Problemen zum laufen bekommen.
Jetzt will ich natürlich meine eigenen Räume etc. definieren und einbinden. Auf der Suche im hier im Forum und im WWW habe ich nirgends eine "Anleitung" gefunden, wie man nun sein "eignes Projekt" erstellt (auch gerade in Abhängigkeit der Dateien).
Kann wer einen Tipp geben?

DANKE
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

cruser1800

So jetzt habe ich glaube die Programmierung etwas mehr verstanden.

Mein Problem: Darstellung des richtigen Bildes von Openweather!

Meine Lösung:

Ich schreibe die url mit einen definierten Begriff, hier "Ersetzen" in die Eigenschaft "src" danach ersetze ich das Wort "Ersetzen" mit  dem Inhalt des gad und erhalte somit das richtige Bild für die Darstellung.

basic.html
{% macro imgweather(id, gad_image, gad_prefix) %}

<img id="{{ uid(page, id) }}" data-widget="basic.imgweather" data-item="{{ gad_image }}" src="{{ gad_prefix }}" style="visibility:display; width:50px">

{% endmacro %}


widget.js
// ----- basic.imgweather ----------------------------------------------------------
$(document).delegate('img[data-widget="basic.imgweather"]', {
'update': function (event, response) {

var newSrc = $('#' + this.id).attr("src").replace("Ersetzen", response);
$('#' + this.id).attr('src',newSrc);
$('#' + this.id).attr('style',"visibility:'display'; width: 50px");

}
});


Vielleicht interessiert es ja jemanden!  ;)

Gruß Lutz

cruser1800

Zitat von: bjoernbo am 06 Februar 2015, 20:50:26
Ich muss hier auch mal eine allgemeine Frage loswerden. Habe heute smartvisu installiert und nach ein paar Anlauf Problemen zum laufen bekommen.
Jetzt will ich natürlich meine eigenen Räume etc. definieren und einbinden. Auf der Suche im hier im Forum und im WWW habe ich nirgends eine "Anleitung" gefunden, wie man nun sein "eignes Projekt" erstellt (auch gerade in Abhängigkeit der Dateien).
Kann wer einen Tipp geben?

DANKE

Erstelle unter pages einen neuen Ordner und Kopiere den Inhalt aus einem anderen Ordner in deinem und passe es so an wie du mochtest.

Am besten erstmal ein Projekt nachvollziehen -> basic.html, index.html, menu.html, rooms.html, rooms_menu.html ...

Gruß

herrmannj

Zitat von: cruser1800 am 06 Februar 2015, 21:01:57
So jetzt habe ich glaube die Programmierung etwas mehr verstanden.

Mein Problem: Darstellung des richtigen Bildes von Openweather!

Meine Lösung:

Ich schreibe die url mit einen definierten Begriff, hier "Ersetzen" in die Eigenschaft "src" danach ersetze ich das Wort "Ersetzen" mit  dem Inhalt des gad und erhalte somit das richtige Bild für die Darstellung.

basic.html
{% macro imgweather(id, gad_image, gad_prefix) %}

<img id="{{ uid(page, id) }}" data-widget="basic.imgweather" data-item="{{ gad_image }}" src="{{ gad_prefix }}" style="visibility:display; width:50px">

{% endmacro %}


widget.js
// ----- basic.imgweather ----------------------------------------------------------
$(document).delegate('img[data-widget="basic.imgweather"]', {
'update': function (event, response) {

var newSrc = $('#' + this.id).attr("src").replace("Ersetzen", response);
$('#' + this.id).attr('src',newSrc);
$('#' + this.id).attr('style',"visibility:'display'; width: 50px");

}
});


Vielleicht interessiert es ja jemanden!  ;)

Gruß Lutz

Mei, des is fei guat !

Aber funktioniert das auchh zweimal, als wenn schon "replaced" ist  ? Normal müsste das "$('#' + this.id).attr('src',respone.concat('.png') );" doch reichen ?

vg
jörg

cruser1800

Zitat von: herrmannj am 06 Februar 2015, 21:41:49
Mei, des is fei guat !

Aber funktioniert das auchh zweimal, als wenn schon "replaced" ist  ? Normal müsste das "$('#' + this.id).attr('src',respone.concat('.png') );" doch reichen ?

vg
jörg

Funktioniert auch zweimal! Habe gemerkt, dass ich ein falsches reading zugeordnet hatte. Nach Änderung im Fromthem und F5 im Explorer war das richtige Bild da.

Wenn ich deine Lösung richtig verstehe wird an das gad nur ".png" angefügt. das würde aber nur den Namen z.B. "2.png" ergeben. Das Bild von Wetter.com heißt aber "d_2_S.png" somit würde es nicht dargestellt werden. Die Bilder alle umzubenennen hatte ich nicht vor! Vor allen weil eis auch Bilder für die Nacht gibt, welche dann "n_2_S.png" heißt! Somit ist das ersetzen aus meiner Sicht sinnvoller!

VG Lutz

herrmannj

verstehe. Ich hatte das so als generisches "mach-aus-einem-GAD-ein-Icon" - widget gesehen, dafür würde ich das auch nehmen. In Deinem Fall ist es natürlich speziell. Wenn ich darf würde ich das trotzdem, dann generisch, mit in die fhem-widget.js ins git nehmen. Den style würde ich dann ebenfalls ins css nehmen.

vg
jörg