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

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

Vorheriges Thema - Nächstes Thema

tomster

Zitat von: nesges am 02 Juni 2015, 14:43:45
data-set='[";set Device_2 XYZ","on","C","D"]'

(bin grade nicht sicher, ob ; oder ;; )

Haut leider nicht hin...

Ich gebe Dir Recht mit den unterschiedlichen FHEM-Konventionen. Aber die Trennung könnte auch für andere Szenarien wunderbar zu Gebrauchen sein. Und wenn es nur Befehle an unterschiedliche Devices in Abhängigkeit von Wertebereichen wäre. Auch wenn mir grad nix einfällt, wofür das gut wär ;-)

viegener

Ich habe bei mir eine Anzeige der aktuellen Songtexte zum gerade gespielten Song realisiert, dazu gibt es auch eine Erweiterung im iframe um ein Reading von einem Device als URL zu verwenden. Dabei wird der Inhalt des Readings nicht angezeigt sondern als URL für den iFrame verwendet.

Das ganze ist realisiert für SONOS, sollte sich aber leicht anpassen lassen, wenn man aktuellen Titel und Artist verfügbar hat in einem Device.


<li data-row="1" data-col="5" data-sizex="7" data-sizey="4">
<div class="container cell">
        <div data-type="iframe"
            data-value-url=true
            data-device="Sonos_Wohnzimmer"
            data-get="currentLyricsUrl"
            data-check=false
            data-fill="no"
            data-height="500"
            data-width="580"
            data-icon-error="fa-frown-o"
            data-scrolling="yes"
            data-timeout="3000">
        </div>     
</div>
</li>


Dazu habe ich weiteres userReading zu eineme SONOS-Device hinzugefügt, der aus anderen Readings im Device einen URL bastelt:

attr Sonos_Wohnzimmer userReadings currentLyricsUrl { getLyricsUrl( "Sonos_Wohnzimmer" );;;; }

Und hier ist der zugehörige Inhalt in 99_myUtils.pm:


##############################################
# Get URL for Lyrics based on Device name
#
sub getLyricsUrl($) {

  my ($devicename) = @_;
 
  my $url = "http://lyrics.wikia.com/";

  my $artist = ReadingsVal($devicename, "currentArtist", "");
  my $title = ReadingsVal($devicename, "currentTitle", "");
 
  $url = $url . urlEncode( $artist ) . ":" . urlEncode( $title ). "#mw-content-text";
 
  return $url;
}




Das hinzufügen von "#mw-content-text" am Ende des URLs habe ich durch Anschauen von einigen lyrics-wikia-Seiten gefunden.

Ich habe keine einfache Lösung gefunden nur den eigentlich Songtext einzubinden, denn die Anbieter müssen aus Lizenzierungsgründen einigen Aufwand treiben um zu verhindern, dass nur der Content abgegriffen wird und somit ist nur das Einbinden der gesamten WebSeite korrekt.

Vielleicht hilft es ja jemandem ...
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

nesges

Zitat von: tomster am 02 Juni 2015, 15:03:29
Haut leider nicht hin...

Hat dann aber eine andere Ursache.

Grade noch getestet: Ein Semikolon ist richtig. Für Fhem sind das zwei voneinander getrennte Befehle, die unabhängig voneinander ausgeführt werden. Der erste wird verworfen, weil er ungültig ist. Der zweite macht das was du haben willst. Kann man auch sehr schön im Eventmonitor beobachten.

nesges

Zitat von: viegener am 02 Juni 2015, 15:26:20
Ich habe keine einfache Lösung gefunden nur den eigentlich Songtext einzubinden, denn die Anbieter müssen aus Lizenzierungsgründen einigen Aufwand treiben um zu verhindern, dass nur der Content abgegriffen wird und somit ist nur das Einbinden der gesamten WebSeite korrekt.

Aus dem Grund hatte ich das nicht mehr weiter verfolgt. Ist aber ne schöne Lösung, danke!

nesges

Zitat von: Risiko am 30 Mai 2015, 16:16:01
Als Workaround habe ich daraufhin in Zeile 71

if(f.elem.data('days') == null) {return; }


eingebaut. Damit sind die Fehlermeldungen weg.

Aber vermutlich wird ab und zu mal eine Sekunde übersprungen, richtig? Entweder stehe ich bei diesem Problem tierisch auf dem Schlauch, oder das ist eine Race Condition wegen der globalen "base". Die habe ich in der letzten Version entfernt. Bitte mal damit testen, danke.

nesges

Zitat von: nesges am 27 Mai 2015, 13:25:06
Ich werde mal sehen, dass ich die Funktion "jederzeit beliebiges Device:Reading lesen" generalisiere. Im joinedlabel mache ich bereits etwas ähnliches.

Das ist mittlerweile passiert. Im itunes_artwork kann data-notfoundimg auf ein Reading eines anderen Devices gesetzt werden, zB:

<div data-type="itunes_artwork"
            data-device="MPD"
            data-notfoundimg='TEST:notfoundimg'></div>


In diesem Reading wird ein URL zu einem Bild erwartet, das anstelle des normalen notfoundimg angezeigt wird.

tomster

Zitat von: nesges am 02 Juni 2015, 20:11:29
<div data-type="itunes_artwork"
            data-device="MPD"
            data-notfoundimg='TEST:notfoundimg'></div>


You da maaaan!

Übrigens funktioniert das Semikolon doch! Ich hatte bei meinem Test-Player einen Config-Fehler. Die anderen funktionieren alle!

tomster

Ich habe gerade eine meiner Seite etwas umgebaut, und dabei bei einem Multistatebutton ein (mir bislang unbekanntes) Phänomen beobachtet.
Beim Klick auf den Button wird kurzfristig das Layout total verschoben (siehe beigefügtes Video).
Ich kann beim besten Willen keinen Fehler in meinem Code entdecken.

<div class="inline">
                <div data-type="label" class="small">Heizmodus</div>
                <div data-type="multistatebutton"
                data-device="Wohnzimmer.Wandthermostat"
                data-get="controlMode"
                data-icons='["oa-sani_heating_manual","oa-sani_heating_automatic"]'
                data-get-on='["manual","auto"]'
                data-set='["controlMode auto","controlMode manual"]'
                data-background-icon="-"
                data-on-color="#aa6900"
                class="cell small narrow"></div>
        </div>


Liegt das vielleicht an der Execution/Response Time des set-Befehls? Im Event Monitor konnte ich beobachten, dass ein "set <device> controlMode manual" eine ganze Litanei an Events hervorruft:

2015-06-03 11:34:05 CUL_HM Wohnzimmer.Wandthermostat controlMode: set_manual
2015-06-03 11:34:06 CUL_HM CUL_HM_HM_TC_IT_WM_W_EU_123456 CMDs_pending
2015-06-03 11:34:06 CUL_HM Wohnzimmer.Wandthermostat set_controlMode manual
2015-06-03 11:34:06 CUL_HM CUL_HM_HM_TC_IT_WM_W_EU_123456 desired-temp: 19.0
2015-06-03 11:34:06 CUL_HM CUL_HM_HM_TC_IT_WM_W_EU_123456 CMDs_done
2015-06-03 11:34:06 CUL_HM Wohnzimmer.Wandthermostat battery: ok
2015-06-03 11:34:06 CUL_HM Wohnzimmer.Wandthermostat boostTime: -
2015-06-03 11:34:06 CUL_HM Wohnzimmer.Wandthermostat commReporting: off
2015-06-03 11:34:06 CUL_HM Wohnzimmer.Wandthermostat controlMode: manual
2015-06-03 11:34:06 CUL_HM Wohnzimmer.Wandthermostat desired-temp: 19.0
2015-06-03 11:34:06 CUL_HM Wohnzimmer.Wandthermostat T: 22.0 desired: 19.0
2015-06-03 11:34:06 CUL_HM Wohnzimmer.Wandthermostat winOpenReporting: off

nesges

Die Ausführungs- und Antwortzeiten sollten den Widgets vollkommen egal sein. Der Effekt sieht eher so aus, als würden CSS-Werte verändert oder Elemente eingefügt. Poste mal die vollständige HTML-Seite, evtl. kann man's reproduzieren.

tomster

Klingt zwar einerseits plausibel, andererseits habe ich eigentlich den gleichen (Abschnitts-)Code auf der selben Seite noch einmal verbaut (nur mit anderen Widgets).
Im Anhang die index.html und die erdgeschoss.html.

Die in der index.html verlinkte custom-includes.css enthält nur den notwendigen Code für die "wackelnde" Waschmaschine im (nicht übersandten footer.html), sonst nix. openautomation-custom.css existiert gar nicht mehr. Ist wohl noch ein Rudiment früherer Bastelei...

CoolTux

Hallo nesges

Ich verwende Dein settimer Widget in Verbindung mit dem wakeuptimer des RESIDENTS Modules. Soweit alles schick. Musste nur aus "OFF" im RESIDENTS Modul ein "off" machen.
Aber eine kleine Bitte hätte ich. Ich bräuchte einen 3. Knopf um ein WakeUpProgramm zu Stoppen. Dieser Knopf sollte bitte 3 Zustände darstellen können. Einmal off in Rot, dann running in blau und alle anderen Zustände in grün. Denkst Du das wäre machbar?

LG
Leon
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Kleine Korrektur, 2 Zustände reichen. Das "off" wird mir ja schon angezeigt. Also wäre ja nur ein "running" get-on und ein ".*" get-off. So habe ich das aktuell mit einem zusätzlichen switch Widget gemacht. sieht aber nicht so schön aus wie ich finde.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

nesges

Einen zusätzlichen, optionalen "Running" Zustand für den Off-Button könnte ich mir vorstellen. Ich schau's mir mal an!

uniqueck

Hallo nesges, ist es eigentlich möglich bei circle menu ein warn anzuzeigen? Und dann beim aufgeklappten Zustand auch bei der entsprechenden verlinkten unterseite, als bei dem icon was dann dehin routet?

Also kann die css class warn benutzt werden sowohl beim circle als auch bei den kinder icons?

Gruß Constantin

nesges

Am symbol-Widget ist "warn" keine CSS Klasse, sondern ein Zusatz zum Icon. Das Circlemenu zeigt die Widgets so an wie sie definiert sind, von daher: Klar, du musst dein Circlemenu nur mit Symbol-Widgets bauen.

PS: Die Frage gehört eigentlich in den Haupt-Thread