[FHEM-Tablet-UI] Widgets for fhem-tablet-ui

Begonnen von nesges, 10 April 2015, 10:30:25

Vorheriges Thema - Nächstes Thema

tomster

So, hab's eingebaut. Die Banane ist gut!

nesges

Zitat von: tomster am 20 Mai 2015, 10:14:36
Find nur ich die geänderte Datei nicht oder hast Du sie noch gar nicht hochgeladen?

Heute morgen wohl den commit vergessen. Ist jetzt eingecheckt.

Zitat von: tomster am 20 Mai 2015, 10:53:31
So, hab's eingebaut. Die Banane ist gut!

Als nächstes wird in Ruhepausen automatisch das passende Lied dazu gespielt ;)

tomster

Kann es sein, dass das Script bei JEDEM Update/ poll von von artist/title in MPD erneut bei iTunes anfragt; sprich von dem upgedateten Readings getriggert wird?
Das erzeugt aber ganz schön Traffic. Zudem wohl auch Anfragen mehrmals gesendet werden...

itunes_artwork update ["artist", "title"] ["ANTENNE BAYERN", "Nachrichten"]  jquery.... > eval (Zeile 111)
itunes_artwork itunes.start ["ANTENNE BAYERN", "Nachrichten"]  jquery.... > eval (Zeile 42)
itunes_artwork update ["artist", "title"] ["ANTENNE BAYERN", "Nachrichten"]  jquery.... > eval (Zeile 111)
itunes_artwork itunes.start ["ANTENNE BAYERN", "Nachrichten"]  jquery.... > eval (Zeile 42)
itunes_artwork update ["artist", "title"] ["ANTENNE BAYERN", "Nachrichten"]  jquery.... > eval (Zeile 111)
itunes_artwork itunes.start ["ANTENNE BAYERN", "Nachrichten"]  jquery.... > eval (Zeile 42)
itunes_artwork update ["artist", "title"] ["ANTENNE BAYERN", "Nachrichten"]  jquery.... > eval (Zeile 111)
itunes_artwork itunes.start ["ANTENNE BAYERN", "Nachrichten"]  jquery.... > eval (Zeile 42)
3
itunes_artwork itunes.artwork http://is4.mzstatic.com/image/pf/us/r30/Music/v4/a3/3f/af/a33faf31-22ff-b889-893f-341abca73733/9008798104321_cover.220x220-75.jpg  jquery.... > eval (Zeile 72)
itunes_artwork itunes.results -  jquery.... > eval (Zeile 77)
itunes_artwork itunes.start ["ANTENNE BAYERN"]  jquery.... > eval (Zeile 42)
itunes_artwork itunes.results -  jquery.... > eval (Zeile 77)
itunes_artwork itunes.start ["ANTENNE BAYERN"]  jquery.... > eval (Zeile 42)
itunes_artwork itunes.artwork http://is4.mzstatic.com/image/pf/us/r30/Music/v4/a3/3f/af/a33faf31-22ff-b889-893f-341abca73733/9008798104321_cover.220x220-75.jpg  jquery.... > eval (Zeile 72)
itunes_artwork itunes.results -  jquery.... > eval (Zeile 77)
itunes_artwork itunes.start ["ANTENNE BAYERN"]  jquery.... > eval (Zeile 42)
itunes_artwork itunes.results -  jquery.... > eval (Zeile 77)
itunes_artwork itunes.start ["ANTENNE BAYERN"]  jquery.... > eval (Zeile 42)
4
itunes_artwork itunes.artwork http://is4.mzstatic.com/image/pf/us/r30/Music/v4/a3/3f/af/a33faf31-22ff-b889-893f-341abca73733/9008798104321_cover.220x220-75.jpg  jquery.... > eval (Zeile 72)
itunes_artwork update ["artist", "title"] ["ANTENNE BAYERN", "Nachrichten"]  jquery.... > eval (Zeile 111)
itunes_artwork itunes.start ["ANTENNE BAYERN", "Nachrichten"]  jquery.... > eval (Zeile 42)
itunes_artwork update ["artist", "title"] ["ANTENNE BAYERN", "Nachrichten"]  jquery.... > eval (Zeile 111)
itunes_artwork itunes.start ["ANTENNE BAYERN", "Nachrichten"]  jquery.... > eval (Zeile 42)
itunes_artwork update ["artist", "title"] ["ANTENNE BAYERN", "Wir lieben Bayern, wir lieben die Hits"]  jquery.... > eval (Zeile 111)
itunes_artwork itunes.start ["ANTENNE BAYERN", "Wir lieben Bayern, wir lieben die Hits"]  jquery.... > eval (Zeile 42)
itunes_artwork update ["artist", "title"] ["ANTENNE BAYERN", "Wir lieben Bayern, wir lieben die Hits"]  jquery.... > eval (Zeile 111)
itunes_artwork itunes.start ["ANTENNE BAYERN", "Wir lieben Bayern, wir lieben die Hits"]  jquery.... > eval (Zeile 42)
itunes_artwork itunes.results -  jquery.... > eval (Zeile 77)
itunes_artwork itunes.start ["ANTENNE BAYERN"]  jquery.... > eval (Zeile 42)
itunes_artwork itunes.results -  jquery.... > eval (Zeile 77)
itunes_artwork itunes.start ["ANTENNE BAYERN"]  jquery.... > eval (Zeile 42)
itunes_artwork itunes.results -  jquery.... > eval (Zeile 77)
itunes_artwork itunes.start ["ANTENNE BAYERN"]  jquery.... > eval (Zeile 42)
itunes_artwork itunes.results -  jquery.... > eval (Zeile 77)
itunes_artwork itunes.start ["ANTENNE BAYERN"]  jquery.... > eval (Zeile 42)
4
itunes_artwork itunes.artwork http://is4.mzstatic.com/image/pf/us/r30/Music/v4/a3/3f/af/a33faf31-22ff-b889-893f-341abca73733/9008798104321_cover.220x220-75.jpg

nesges

Zitat von: tomster am 20 Mai 2015, 11:05:23
Kann es sein, dass das Script bei JEDEM Update/ poll von von artist/title in MPD erneut bei iTunes anfragt; sprich von dem upgedateten Readings getriggert wird?

Ja, natürlich.

Die mehrfachen Anfragen für's gleiche Update sollten allerdings nicht sein, da suche ich noch nach der Ursache.

tomster

Zitat von: nesges am 20 Mai 2015, 11:15:44
Ja, natürlich.

Die mehrfachen Anfragen für's gleiche Update sollten allerdings nicht sein, da suche ich noch nach der Ursache.

Sorry hatte mich ungenau ausgedrückt. Klar ist natürlich, dass eine Reading-Änderung das Script triggert. Was auch sonst? ;-)
Ich wollte damit sagen, dass eben innerhalb eines Songs die Readings vielleicht 3-4 Mal mit gleichem Inhalt von MPD "upgedated" werden. Das Script führt dann jedes Mal eine Anfrage bei iTunes durch. Zudem eben noch bis zu 4 Mal hintereinander. Das da der Herr iTunes vielleicht irgendwann sauer wird, könnt ich verstehen...

Mal noch so als Idee:
Derzeit holt das Script die Cover ja in der im Script angegebenen size (default, glaub ich 150x150px). Wäre es - gerade im Zeitalter von Displays mit was-weiß-ich-wieviel-hundert-DPI - nicht eventuell sinnvoll die Cover in höherer Auflösung runterzuladen und diese dann nur angezeigt auf die gewünschte Größe zu reduzieren?
Klar, der Unterschied der Dateigröße ist nicht zu verachten:
150x150 ~  5 KB
500x500 ~ 40KB

Aber was sind Bytes gegen Ästhetik... ;-)

tomster

#110
Noch was:

Das Script wird anscheinend auch getriggert, wenn der MPD "auf Stop" ist und zumindest laut FHEMWeb der Timestamp der artist,title-Readings NICHT geändert wird. Damit wird auch im Leerlauf (wieder 4 Mal) eine Anfrage bei iTunes gestartet. Welches Event triggert denn das Script genau?
--edit--
Ach, da steht ja ein elem.data('refresh',    elem.data('refresh')    || 15*60); im Script...

Könnte hier auch Sinn machen, einfach ein weiteres Default-Bild bei state=stop einzubauen.

mc-hollin

Hallo Nesges,
kann man eigentlich auch den Wochentag aus dem widget_clock über data-format direkt heraus bekommen?
Über den Parametr "w" bekomme ich nur die Zahl.
Ich hab, weil ich es nicht anders wusste, das Widget erweitert.

var ArrayTage = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
d['w'] = ArrayTage[now.getDay()];


Ist natürlich bei Udates doof.

update71

Zitat von: mc-hollin am 20 Mai 2015, 12:03:06
Hallo Nesges,
kann man eigentlich auch den Wochentag aus dem widget_clock über data-format direkt heraus bekommen?
Über den Parametr "w" bekomme ich nur die Zahl.
Ich hab, weil ich es nicht anders wusste, das Widget erweitert.

var ArrayTage = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
d['w'] = ArrayTage[now.getDay()];


Fände ich auch eine gute Idee, habs bei mir in die index im head so eingebaut:
<script type="text/javascript" language="JavaScript">
    var DatumAktuell = new Date();
    var WochenTagAktuell = DatumAktuell.getDay();
    var ArrayTage = new Array ("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
    function TagText (Zahl) { return ArrayTage[Zahl]; } var TagName = TagText(WochenTagAktuell);
</script>

und an der benötigten Stelle so reingenommen:
<div class="cell large">
    <script type="text/javascript">document.write(TagName)</script>   
    </div>


Stört bei updates dann nicht :)

Gruss
Thomas
###########
Raspi mit Fhem, nanoCUL 433 + mehrere Brennstuhl Steckdosen - HM-LAN + Thermostat, 6 fach Taster, Aussensensor - HUEBridge + 3 weiße LEDs ... mehr folgt

nesges

Zitat von: tomster am 20 Mai 2015, 11:33:27
Ich wollte damit sagen, dass eben innerhalb eines Songs die Readings vielleicht 3-4 Mal mit gleichem Inhalt von MPD "upgedated" werden. Das Script führt dann jedes Mal eine Anfrage bei iTunes durch.

Das kann das Widget nur schwer verhindern (geht, wird aber unnötig aufwändig). Aber man bekommt das mit event-on-change-reading in den Griff.

ZitatDerzeit holt das Script die Cover ja in der im Script angegebenen size (default, glaub ich 150x150px). Wäre es - gerade im Zeitalter von Displays mit was-weiß-ich-wieviel-hundert-DPI - nicht eventuell sinnvoll die Cover in höherer Auflösung runterzuladen und diese dann nur angezeigt auf die gewünschte Größe zu reduzieren?

Das Artwork wird jetzt schon in genau der eingestellten Größe geholt. Den "größten" Artwork-URL den iTunes liefert hat die Größe 100x100. Das ersetze ich durch size x size und iTunes liefert das Bild entsprechend aufgelöst.

ZitatWelches Event triggert denn das Script genau?

Im moment noch jedes. Das ist wahrscheinlich auch der Grund für die mehrfachen Abfragen.

tomster

#114
Zitat
Das kann das Widget nur schwer verhindern (geht, wird aber unnötig aufwändig). Aber man bekommt das mit event-on-change-reading in den Griff.

Wieso? (Hier redet sich nun der Java-DAU leicht, zugegeben) Ein simpler Vergleich am Anfang vom Script "ist-update-string = vorheriger String" täte doch den Trick, oder? Zu event-on-change: Das glaub ich nicht, da sich ja das Reading von z.B. artist und title im Stop-Fall gar nicht ändert. Sogar der Time-Stamp in FHEMWeb bleibt gleich. Trotzdem wird ge-retriggert... Es muss also etwas anderes sein, das Dein Script triggert...

ZitatDas Artwork wird jetzt schon in genau der eingestellten Größe geholt. Den "größten" Artwork-URL den iTunes liefert hat die Größe 100x100. Das ersetze ich durch size x size und iTunes liefert das Bild entsprechend aufgelöst.
Nö, man kann (zumindest bei den paar von mir versuchten) auch ein 1000x1000 dahintersetzen und es kommt ein ziiiiiemlich großes Cover zurück.Wenn ich nun z.B. besagtes 1000px-Bild hole und es dann nur angezeigt (<img width="150" height="150">) auf die gewünschte Große bringen würde, ist die Auflösung auf Displays entsprechend detaillierter als bei einem 150px-Bild...

nesges

Zitat von: mc-hollin am 20 Mai 2015, 12:03:06
kann man eigentlich auch den Wochentag aus dem widget_clock über data-format direkt heraus bekommen?

Bisher nicht, ist aber ne gute Idee. Ich baue den ganzen Wochentag als "l" (kleines L), gekürzt auf drei Buchstaben als "D" ein.

update71

Zitat von: nesges am 20 Mai 2015, 13:10:13
Bisher nicht, ist aber ne gute Idee. Ich baue den ganzen Wochentag als "l" (kleines L), gekürzt auf drei Buchstaben als "D" ein.

Super, danke. Könntest du es auch mit 2 Buchstaben variabel gestalten? Einmal abgekürzt und einmal komplett?
:)
Thomas
###########
Raspi mit Fhem, nanoCUL 433 + mehrere Brennstuhl Steckdosen - HM-LAN + Thermostat, 6 fach Taster, Aussensensor - HUEBridge + 3 weiße LEDs ... mehr folgt

tomster

widget_multistatebutton:

Ich habe meinen Button wie folgt definiert:

<div data-type="multistatebutton"
                data-device="Denon"
                data-get="currentStatus"
                data-set='["mute on","mute off"]'
                data-background-icon="-"
                data-get-on='["disconnected","off","mute on","[0-9]|[1-9][0-9]"]'
                data-icons='["fa-music warn","fa-music","fa-music fa-blink","fa-music warn"]'
                data-on-colors='["#505050","#505050","#aa6900","#aa6900"]'
                class="small"></div>


Dahinter steckt das selbstangelegte userReading "currentStatus". Dieses fasst mit diesem Script

set Denon userReadings currentStatus:(state|power|mute|volume) {((ReadingsVal("Denon","state",0) eq "opened")?((ReadingsVal("Denon","power",0) eq "on")? ((ReadingsVal("Denon","mute",0) eq "off")?(ReadingsVal("Denon","volume","")):"mute on"):"off"):"disconnected")}

sämtliche Device-readings zustandsabhängig in einem userReading zusammen, um die Stati eben in einem Widget anzeigen zu können.

Die Anzeige des Widgets funktioniert einwandfrei. Nur die data-set-Funktion mag nicht so recht wie ich es will. Das "mute on" geht noch, doch dann kommt das Widget durcheinander. Das liegt vermutlich daran, dass es aus Sicht des Widgets keine Rückmeldung nach "mute off" erhält. Ein erneuter Klick triggert nämlich wieder ein "set Denon mute on" an Stelle des eigentlich zu sendenden "set Denon mute off".
Hat jemand eine Idee hierzu?

nesges

Was sagt der Eventmonitor bei mute on/mute off?

tomster

Es macht genau was es sagt, dass es macht: 2 x "set Denon mute on"

Wenn ich (wenn am Gerät "mute off" ist) vom Widget klicke, wird ein "mute on" gesetzt:

2015-05-20 21:39:31 DENON_AVR Denon mute on


Möchte ich dann "mute off" setzen, wird wieder ein "mute on" geschickt:

2015-05-20 21:40:42 DENON_AVR Denon mute on

Dabei geht currentStatus auch ganz brav sofort auf "mute on" und das Icon im Widget wechselt auch brav. Nur bekommt das anscheinend die toggle-Logik im Widget nicht mit...