mworion / uzsu_widget

JAVA Script Widget for use in smarthome/ FHEM / smartvisu (with uzsu plugin)
6 stars 7 forks source link

Zeit relativ zu sunrise und sunset möglich? #6

Closed bgewehr closed 9 years ago

bgewehr commented 9 years ago

Viele haben nach der Möglichkeit gefragt, die Zeit relativ zum Sonnenaufgang oder -untergang zu formulieren.

Ich könnte mir vorstellen, ein select vor time zu erstellen, das --, SA, SU enthält. Das wäre dann so zu verstehen:

SA 01:00 ist eine Stunde nach Sonnenaufgang SU 00:30 ist eine Stunde nach Sonnenuntergang -- 21:00 ist um 21:00 Uhr

Relativ VOR SA und SU ist ohne negative Zeiten aber nicht möglich.

Könnte man wiederum mit --, SA+, SA- SU+, SU- adressieren.

Hast Du dazu schon was im Kopf?

bgewehr commented 9 years ago

susauzsu

Sowas wie:

                //sunrise und sundown selector
                template += "<td><select ' name='uzsuSUN" + numberOfRow +"' id='uzsuSUN" + numberOfRow +"' data-mini='true'><option value='-'>--</option><option value='SA+'>SA+</option><option value='SA-'>SA-</option><option value='SU+'>SU+</option><option value='SU-'>SU-</option></select><\/td>";

Zwischen value und time, sieht gar nicht schlecht aus!

mworion commented 9 years ago

Hallo Bernd

hatte ich schon in den Pull request geschrieben. Es gibt bei smarthome.py im UZSU Plugin die Möglichkeit <sunset+1 anzugeben. Das schreibst Du einfach in den Zeitstring rein. Damit ist die Funktion hier schon gegeben. Ein Aufbohren des Dicts geht nicht wirklich, da das dicts und die Schnittstelle zum Widget durch das Plugin vorgegeben ist. Das kann ich nicht ändern.

Kannst Du nicht versuchen, das auch so nach FHEM so reinzubekommen ?

Michel

bgewehr commented 9 years ago

Im Fhem kann man schreiben {sunrise(1800)}, das heißt dann 30 Minuten nach dem Sonnenaufgang.

Ich fand das nur nicht schön für die Benutzer!

Kann ich aber zur Not auch erst mal mit leben. PR zurückgezogen!

bgewehr commented 9 years ago

Man könnte allerdings auch den String jeweils so zusammensetzen, wie man ihn braucht, für SH oder fhem, aber dennoch auf der Oberfläche die Steuerelemente fprndie User anbieten, um es auch elegant eingeben zu können. Wir kriegen doch im JavaScript auch hin, einen Zeitstring daraus so oder so zu gestalten und beim Lesen Rückwärts, oder?

mworion commented 9 years ago

Das nehme ich nochmal mit, ob so etwas sinnvoll möglich ist. Hast Du eine Idee, wie man sh und FHEM unterscheiden kann (evt. etwas eleganter als nur einen Parameter mit dazuzugeben)

bgewehr commented 9 years ago

Es geht eigentlich auch so, dass in fhem die Übersetzung von <Sunset+2 in {sunset(7200)} erfolgt, ist dort nun nicht unmöglich. Besser eine gemeinsame UZSU und Interpreter im fhem Modul.

bgewehr commented 9 years ago

Ist dies hier für Dich verworfen oder verschoben?

mworion commented 9 years ago

Im Moment verschoben. Ich hab im Moment noch andere Sachen zu tun, und da hat das Prio 2, wird also eher etwas brauchen.

mworion commented 9 years ago

Hallo Bernd,

ich hab gerade angefangen mir einmal Gedanken dazu zu machen. In smarthome gibt es das Format H:M<[+/-][offset][<H:M]. Könnt Ihr das bei FHEM in gleicher Weise nutzen ? Neben offset gibt es nämlich auch die Möglichkeit Lower und Upper Boundaries zu setzen.

Michel

bgewehr commented 9 years ago

Kannst Du mal ein oder zwei Beispiele angeben, damit ich es noch besser verstehen kann?

mworion commented 9 years ago

17:30<sunset<19:30 heißt: trigger zu sunset, aber nicht früher wie 17:30 und spätestens um 19:30

bgewehr commented 9 years ago

In fhem haben wir auch upper und lower boundaries: http://fhem.de/commandref.html#SUNRISE_EL

Das geht dann so:

{sunset(<type>,<offset in sec>,<min>,<max>)}

type ist ein bisschen speziell, sowas wie Normal Null -> ;-) Kann "REAL", "CIVIL", "NAUTIC", "ASTRONOMIC" sein.

mworion commented 9 years ago

OK, dann macht es auch für Euch sinn, diese Parameter mit über das Widget abzubilden. Ihr könnt die dann auch nutzen.

bgewehr commented 9 years ago

klingt gut!

mworion commented 9 years ago

Dann muß ich mal nachdenken, wie das am besten in die Architektur passt.

mworion commented 9 years ago

Noch eine Frage: kommt das häufig vor oder ist das eher eine Ausnahme es so genau zu nutzen ?

bgewehr commented 9 years ago

Wer kann das sagen? Mein Ziel ist es, die Freiheitsgrade in fhem über ein elegantes Frontend in SV den Nutzern einfach benutzbar wieder anzubieten. (-> eher Ausnahme als Regel, aber für die, die die Ausnahme wollen, eher Pflicht als Kür!) Mir liegen Nachfragen vor, wie man das dann, wenn die Zeit stimmt, mit Regeln versehen kann

usw. Fhem hat dafür eine Bedingung, die man entsprechend setzen kann:

http://fhem.de/commandref.html#WeekdayTimer (siehe Condition!)

mworion commented 9 years ago

Das mit den Regeln ist dort möglich, wo ich das in der rrule abbilden kann. Abhängigkeiten in Bezug auf Systemzustände gibt es auf smarthome Seite nur in der Logik. Mein Idee ist, neben den Standard Einträgen (wie gehabt, Ist-Zustand) einen geführten Assistenten zu bauen, der das Ergebnis einträgt.

bgewehr commented 9 years ago

Ist das dann doch Popup im Popup?

mworion commented 9 years ago

Nein, das geht ja nicht. Ich jetzt viel gewälzt, aber nur harte Aussagen von den Entwicklern des Frameworks gehört. Aber ich habe da ein paar Ideen dazu....

bgewehr commented 9 years ago

OK, ich bleibe neugierig!

mworion commented 9 years ago

Hallo Bernd,

ich hatte es befürchtet: es ist eine riesen Orgie wegen dem parsen der Daten im Widget.

Dennoch: Ich habe einmal einen Branch "feature" mit der v1.87 angelegt. Ich habe mal keine Beschriebung dabei, probiere und teste mal möglichst genau aus. Feedback welcome. Am geschicktesten startest Du das Widget mit designType = '1', damit Du auch die Zeile selbst editieren kannst. Die Wochentage sind nicht funktional.

Michel

bgewehr commented 9 years ago

Ok, ich schau es mi an!

mworion commented 9 years ago

Habe noch etwas aufgeräumt. Ist jetzt v2.1 im feature branch

bgewehr commented 9 years ago

OK, ich sehe jetzt im designtype 1 zwei Texteingabefelder. Was genau sollte ich testen? Sorry, ich blicke es noch nicht so ganz!

bgewehr commented 9 years ago

Habe eben den Helper entdeckt! Hatte irgendwie 2.0RC1 geladen anstatt R2.1 Test jetzt!

mworion commented 9 years ago

Sorry

bgewehr commented 9 years ago

Hab heute zuwenig Zeit. Irgendwie bin ich noch verwirrt, der zweite Eintrag hat ein merkwürdige Reihenfolge:

{"active":true,"list":[{"value":"On","time":"09:00<sunrise<21:00","rrule":"FREQ=WEEKLY;;BYDAY=MO,TU,WE,TH,FR,SA","active":true},{"rrule":"FREQ=WEEKLY;;BYDAY=MO,TU,WE,TH,FR,SA","time":"21:00","value":"Off","active":true}]}
bgewehr commented 9 years ago

Erste Tests ergeben noch einige Unstimmigleiten: In UZSU-Dialog: Neue UZSU, neue Zeile -> (?) ohne Funktion Neue UZSU, neue Zeile, manuelle Zeit und Tage, speichern -> (?) geht!

Auf mobile ist keine Screen-Rotation mehr möglich, weil das Format sich nicht mehr anpasst!

Im Assistenten: Wenn der input nur eine Zeit ist und man umschaltet auf Sunrise, dann passieren mehrere Dinge:

  1. Fehlermeldung in der Console: The specified value 'sunrise' does not conform to the required format. The format is 'HH:mm', 'HH:mm:ss' or 'HH:mm:ss.SSS' where HH is 00-23, mm is 00-59, ss is 00-59, and SSS is 000-999.
  2. Die vorherige Zeit ist weg, wenn man wieder auf 'normal' umschaltet

Nach einigem Klicken völlig zerstörte Struktur der Daten: uzsustrukturkaputt

Ich komme im Moment nur zur Symptomanalyse und kann Dir noch keine Code-Hinweise geben, mache ich aber gern später!

Insgesamt ist es sehr schwierig, sich ein umfassendes Layoutkonzept vorzustellen, das über alle diese Möglichkeiten verfügt, ohne den Benutzer völlig zu überfordern. Wir haben ja noch einige Dinge übrig bei den Wochentagen: "Auch an Feiertagen (ja/nein)", "Auch an Ferientagen(ja/nein), Zufallsschaltungen zwischen zwei Zeitpunkten, ...

Wie wäre es, wenn man die Navigation nicht durch den Wechsel zwischen mehreren Popups erledigt, sondern durch das Erweitern von Abschnitten? Standardanzeige ist dann die normale UZSU, aber wenn ich (V) drücke, erweitert sich der Abschnitt und die Profi-Funktionen kommen zum Vorschein, das fände ich etwas einfacher zu verstehen als das Springen zwischen Popups. Was meinst Du?

bgewehr commented 9 years ago

So etwa, was meinst Du? uzsuexpandable

bgewehr commented 9 years ago

Ereignis könnte dann auch noch "Zufall" sein...

bgewehr commented 9 years ago

Vielleicht sollten wir auch mal fragen, für welchen Markt wir das Ganze entwickeln. Wenn international, dann weiter mit englisch, wenn nicht, dann lieber alles auf deutsch?

mworion commented 9 years ago

Hallo Bernd,

danke für das Feedback. Mal meine Pukte dazu:

28: muß ich mir ansehen, was geändert wurde. Eigentlich passiert das abspeichern immer noch so wie vorher.

29: Keine Funktion: hatte ich auch gesehen, fehlte ein callback.

    Zu den Drehungen: ist immer dei Balance alles auf einem Popup, aber dennoch klein.
    Zu den Fehlermeldungen: auch hier abgleich in einem Feld Zeit (kann als Input = 'time')  deklariert werden, wenn dann sunrise drinsteht geht es nicht. in der UZSU ist das ein einziges Feld.
       Wenn Du dazu eine Idee hast -> welcome.
    Die Komplexität hatte ich auch so erlebt. Du bestätigst das.

30: Der Vorschlag schaut gut aus. Kann ich mir gut vorstellen. Vor allem muß man dann nicht mit zwei Popups umgehen.

31: Ja macht Sinn, dann geht dort mehr.

32: Aus meiner Sicht stelle ich das auf englisch um -> konsequent. Ich hatte mir dazu wenig Gedanken gemacht, sondern nur etwas eingetragen.

Ich werden jetzt einmal die Version 2 fertig machen (ohne die eben diskutierten Extensions), damit das Text Thema, die Listen usw. fix sind. Wenn Du da ebenfalls mein reinsehen kannst (vor allem wegen der Reihenfolge im Dict (das habe ich nicht verstanden). Danach dann mal mit dem "Expertenmodus" weiter in einer Zusatzzeile.

bgewehr commented 9 years ago

Verstehe ich Dich richtig: Version 2 ist ohne den Experten-Kram, aber wieder für alle verwendbar? Danach dann - als Vorbereitung auf Version 3 - den ganzen Eperten-Kram erarbeiten?

Dann nehme ich erstmal wieder die 2.0RC1 zum testen...

mworion commented 9 years ago

Ja, richtig verstanden. Die Version 2.0RC1 auf develop ist alles drin bis auf den experten Kram. Wenn Du was testen willst, dann diese. Experten Kram ist auf feature branch v2.1

bgewehr commented 9 years ago

2.0RC1 läuft bei mir wie erwartet.

mworion commented 9 years ago

Gut, danke. Wenn Dir noch etwas auffällt in Bezug auf die gespeicherten daten usw. bitte Feedback.

bgewehr commented 9 years ago

Ein fällt mir auf: früher passte sich die Breite des Popups beim Drehen des Bildschirms auf dem iPhone an und es sah auch auf dem Handy super aus. Das ist jetzt weg, die Breite bleibt beim Drehen von Portrait zu Landscape gleicht und es ist auch im Querformat kaum bedienbar! Kannst Du danach noch mal schauen?

mworion commented 9 years ago

Ja, schaue ich mir nochmal an. Spontan aber keine Änderung gemacht, aber der Teufel steck da im Detail.

bgewehr commented 9 years ago

Also, ich kann Dir nicht sagen, warum, aber jetzt geht die Erweiterung beim Formatwechsel wieder tadellos... Komisch! Aber egal-Hauptsache geht!

mworion commented 9 years ago

Hallo Bernd,

ich habe das ganze im Feature Branch jetzt mal auf Experte umgestellt. Schau Dir das mal an. Danke !

bgewehr commented 9 years ago

Sieht sehr schön aus! Toll gemacht! Habe mal zu testen begonnen:

  1. Fall: nur Zeit 2015-03-17 19_35_54-buro

führt zu

{"active":true,"list":[{"value":"On","time":"20:00","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR","active":true},{"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR","time":"21:00","value":"Off","active":true}]}

Also alles richtig!

  1. Fall: nur Sunrise 2015-03-17 19_37_37-buro

führt zu

{"active":true,"list":[{"value":"On","time":"20:00","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR","active":true},{"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR","time":"21:00","value":"Off","active":true}]}

Hier hätte ich statt der Zeiten den Text Sunrise/Sunset erwartet!

  1. Fall: Sunrise nur mit not earlier 2015-03-17 19_40_38-buro

führt zu

{"active":true,"list":[{"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR","time":"20:00","value":"On","active":true},{"value":"Off","time":"21:00","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR","active":true}]}

Mache ich was falsch?

bgewehr commented 9 years ago

Habe mir grade mal den Code angesehen, kann es sein, das die function uzsuSaveTable noch gar nicht die Elemente zusammensetzt?

bgewehr commented 9 years ago

Wenn ich das Spiel mit createexpert und delexpert und collapsetimestring richtig deute, dann fällt mir auf, dass es evtl. zu kompliziert ist, die Expert html-Zeile dynamisch zu erzeugen und dynamisch zu vernichten und das Ergebnis in einem String zwischenzuspeichern.

Wäre es nicht einfacher möglich, die Zeilen immer doppelt anzulegen (std und expert) aber die Zeile Exp zunächst als hidden zu formatieren (per CSS zum Beispiel http://www.w3schools.com/css/css_display_visibility.asp) und dann per Expert Button nur per CSS Klasse auf show zu setzen? Dann könnte die ganz normale Routine durch die Inhalte loopen und die ganz normalen Dinge damit tun ohne dass man erst collapsetime parsen, Zeile erzeugen, ändern, parsen collapsen und vernichten muss.

Was meinst Du?

mworion commented 9 years ago

Hallo Bernd,

Gute Idee mit dem hidden. Anfangs wollte ich nur eine Zeile gleichzeitig zulassen, und da ich schon diese Lösung hatte, dann einfach wiederverwendet. Ich probiere es mal aus. Das mit dem abspeichern muss ich mir noch anschauen, war erst mal nicht der Focus.

Michel

mworion commented 9 years ago

Du verwendest Chrome als Browser, richtig?

bgewehr commented 9 years ago

Ja, Chrome und IE und mobile Safari.

"Das mit dem Abspeichern" - meinst Du damit, den Sunrise String zu bilden? Oder was anderes? Ich wollte nur vorschlagen, nichts in collapsetimestring zwischenzuspeichern und dann nochmal umzuwandeln...

bgewehr commented 9 years ago

Eins habe ich noch für usability: was hältst Du von +/- minutes an Stelle von Offset? Das versteht dann sicher jeder und macht das Layout kompakter, oder?

mworion commented 9 years ago

Ja, der Vorschlag ist gut, machen wir so.

bgewehr commented 9 years ago

Ich habe noch was gefunden: solange das Event- selectmenu auf Time steht, könnte man die input fields auf disabled stellen, dann kommt keiner auf die Idee, ein Offset zum Event Time zu erfassen oder eine latest Zeit dazu... http://wiki.selfhtml.org/wiki/HTML/Formulare/ausgrauen