Ankündigung

Einklappen
Keine Ankündigung bisher.

Erweiterung UZSU Plugin um crontab Modus?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • AndreK
    antwortet
    Hi @all,

    kurzes Update / Stand der Dinge:

    die eingeschlagene Vorgehensweise geht schief weil jede[list] im UZSU-Item mit "sun" das Item aktualisiert, was ja auch Sinn macht und korrekt ist.
    Dadurch werden alle "[list]" des items aktualisiert- die "virtuellen Einträge" gehen verloren-. Da bei _update_suncalc() über den Eintragsindex upgedatet wird, was auch Sinn macht stimmen nach dem Update des Items die Indexe nicht mehr -> Fehler "Index out of Range" . Aus meiner Sicht -> Sackgasse.

    Der Plan (meiner) ist nun in def _get_time() die Serie korrekt zu berechnen und "next" bzw. "previous" korrekt zurückzugeben. Dann sollte, nach heutigem Wissensstand, der Rest auch wieder korrekt arbeiten. Nachdem ich die Berechnung der Serie mit sunset/sunrise eh schon gebastelt habe und nun auch "rrulestr" kennengelernt habe sollte es auch möglich sein dies in einem überschaubaren Zeitrahmen zu realisieren.

    Sobald wieder Zeit ist, mache ich auf dem Weg weiter (im Moment alles noch Theorie), Hinweise sind gerne willkommen.

    Viele Grüsse
    Andre

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Onkelandy Beitrag anzeigen
    Beim PR mit den timeseries hab ich einige Anmerkungen gemacht.
    Da war ich wohl etwas voreilig. Wir AndreK wvhn wollen die Zeitserie auch mit sunrise / sunset beginnen und enden lassen. Dafür könnten wir noch etwas Inspiration gebrauchen. @Onkelandy: Könntest Du unterstützen?

    Einen Kommentar schreiben:


  • wvhn
    antwortet
    Macht Sinn, aber das ist sicher das geringste Problem

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Beim PR mit den timeseries hab ich einige Anmerkungen gemacht.
    Ich wäre übrigens schwer dafür, beim Type "series" und nicht "serie" zu nutzen. Was meint ihr? Müsste dann im Widget aktualisiert werden wvhn

    Einen Kommentar schreiben:


  • wvhn
    antwortet
    Hallo,
    zu der oben genannten Testversion des Plugins gibt es eine passende smartVISU Widget Version. Die ist unten als ZIP angehängt. Diese Version ist kompatibel zum aktuellen Stand der v3.1.0. Die Ordnerstruktur im ZIP entspricht der Struktur von smartVISU, so dass man die Datei einfach in den smartVISU-Ordner entpacken kann.

    Gruß
    Wolfram

    P.S.: die zum Develop-Stand kompatible Version befindet sich hier. Dazu wird noch die base.css aus der ZIP-Datei benötigt. Letztere befindet sich auch schon im aktuellen Develop von heute.
    Angehängte Dateien
    Zuletzt geändert von wvhn; 13.10.2021, 20:57.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Hallo,

    eine erste Version des UZSU-Plugins mit der Umsetzung der TimeSeries ist mal fertig.
    Umgesetzt und getestet sind Einträge im Dict nach dem Schema, wie von AndreK hier vorgeschlagen.

    Zudem sollte es auch funktionieren, wenn man statt der Endzeit für die Zeitserie eine Anzahl von Wiederholungen angibt. der "dict key" dafür ist "timeSeriesCount".

    Wie ist es realisiert:
    Es gibt eine neue interne Funktion im Plugin, die _decode_time_series heißt. Diese wird von der Funktion _schedule aufgerufen, bevor aus den Listeneinträge mit _get_time die letzte und nächste Ausführung ermittelt wird. Die neue Funktion _decode_time_series setzt alle Zeitserien in "normale" Einträge mit Zeitstempel um. Dadurch bleiben alle anderen Funktionen unberührt.

    Hier das Plugin zum Testen.
    Rückmeldung erbeten.

    uzsu_w_timeseries.zip

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von bmx Beitrag anzeigen
    Ich möchte darauf hinweisen, das sich im Core in develop die Implementation von Crontab geändert hat und dort jetzt weitere Möglichkeiten existieren. Es gibt jetzt lib/triggertimes.py
    Bislang ist die Umsetzung so geplant, dass man eine Zeitreihe menugestützt (Widget) erstellt und im UZSU Dict hinterlegt. Das Plugin macht den Rest. Der crontab selbst wird nicht verwendet. Was glaubst Du, welchen Einfluss die Änderung im Core haben wird / kann?
    Zuletzt geändert von bmx; 20.10.2021, 13:00.

    Einen Kommentar schreiben:


  • bmx
    antwortet
    Ich möchte darauf hinweisen, das sich im Core in develop die Implementation von Crontab geändert hat und dort jetzt weitere Möglichkeiten existieren. Es gibt jetzt lib/triggertimes.py
    Zuletzt geändert von bmx; 20.10.2021, 12:59.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Auf die Schnelle klingt das vernünftig.. könnte funktionieren

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Onkelandy Beitrag anzeigen
    Ne, im Plugin selbst ist noch nichts gemacht. Wenn denn würde ich den Ansatz von Andre aufgreifen. Man müsste in der funktion _get_time vor die Zeile 674 ein neues IF Statement einfügen "if time == 'serie':" und dort die series parsen.
    Hallo,
    ich habe mich mal etwas mit dem Plugin beschäftigte, probiert und getestet, um die "Series" Möglichkeit zu implementieren. Mein Favorit zur "minimalinvasiven" Implementierung ist, die UZSU-Einträge mit "time == serie" direkt beim parsen des Items aufzulösen. Ich stelle mir das so vor, dass, wenn das Item mit dem UZSU Eintrag geparst wird direkt nach "time == serie" gerpüft wird. Wenn ein entsprechender Eintrag gefunden wird, wird diese Zeitserie ausgelöst und entsprechnend viele normale UZSU-Einträge erstellt. Somit wäre an im Plugin-Dict, in dem die Items und deren UZSU-Eintrag gespeichert sind, die ausgelösten Zeitserien drin. Somit sollten alle anderen Funktionen des Plugins ohne Änderung auskommen.

    Konkret würde ich das (oder so ähnlich) unterhalb Zeile #390 einfügen:
    Code:
        for entry in uzsu_dict['list']:
              if entry['time'] == 'serie':
                if entry['series'].get('active') is True:
                    starttime = datetime.strptime(entry['series']['timeSeriesMin'], "%H:%M" )
                    endtime = datetime.strptime(entry['series']['timeSeriesMax'], "%H:%M" )
                    step = entry['series']['timeSeriesIntervall'].split(':')
                    step_min = int(step[0])*60+int(step[1])
                    
                    while starttime <= endtime:
                        start = starttime.strftime("%H:%M")
                        new_entry = entry.copy()
                        del new_entry['series']
                        new_entry['time'] = start
                        new_uzsu_list.append(new_entry)
                        starttime = starttime + timedelta(minutes=step_min)
    
            else:
                new_uzsu_list.append(entry)

    Was meint ihr?

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hallo Sisamiwe ,

    die "duration" zu implemtieren sehe ich nicht wirklich als praktikabel. Das UZSU-Widget sowie das Plugin sehen zu einem eingestellten Zeitpunkt ein Schaltereignis vor.
    Wenn man nun eine Dauer vorgeben will muss jeweils das "Event" für Start des Intervalls + das "Event" für Ende des Intervalls angegeben werden.
    Das macht IMHO manchmal Sinn, oft aber auch nicht. Wenn jemand in Intervallen etwas schalten will, so meine Meinung, kann man auch zwei Einträge für die EIN/AUS Intervalle in der visu erfassen. Vielleicht wäre es hilfreich mal zu sammeln was alles Anwendungsfälle für Intervalle wären (Lüfter EIN/AUS, Lüfter 80%/20%, Rasensprenger EIN/AUS, usw.)

    Das sind nur meine Gedanken zum Thema, feel free to optimize it

    Viele Grüsse
    Andre

    Einen Kommentar schreiben:


  • wvhn
    antwortet
    Prio hat erstmal das shNG Plugin, denn das muss die Schaltzeiten aus dem UZSU-item ermitteln und an den Scheduler übergeben. Zusätzlich benötigte Angaben musst Du dort implementieren. Das Widget stellt ja nur das Dict für das Plugin zur Verfügung. Zum Testen kann man sich ein Dict auch manuell erstellen und in das item schreiben.

    Wenn das alles läuft, bauen wir auf Basis der Arbeiten von AndreK die Widgets so um, dass sie alle benötigten Daten ins Dict schreiben.

    Gruß
    Wolfram
    Zuletzt geändert von wvhn; 03.10.2021, 17:00.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von AndreK Beitrag anzeigen
    Ich kann gerne meine angepasste device.js zu Verfügung stellen.
    Das wäre prima. Ich versuche mich mal an der Erweiterung des Plugins

    AndreK
    Ich habe mir die Erweiterung des Widget nochmal anschaut. Wo würde man die Dauer einstellen? In der "series" sehe ich Start-Zeit, End-Zeit und Intervall. Für die Dauer habe ich nichts gesehen, oder?
    Zuletzt geändert von Sisamiwe; 03.10.2021, 16:22.

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hi,

    ich habe das Thema hinten angestellt. Bin noch mit anderen Dingen beschäftigt. Ich kann gerne meine angepasste device.js zu Verfügung stellen.
    Dann kann gerne jemand den Plugin-Teil übernehmen. Vorgehensweise würde ich auch wie von Andy in Post #132 vorgeschlagen sehen.

    Viele Grüsse Andre

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Ne, im Plugin selbst ist noch nichts gemacht. Wenn denn würde ich den Ansatz von Andre aufgreifen. Man müsste in der funktion _get_time vor die Zeile 674 ein neues IF Statement einfügen "if time == 'serie':" und dort die series parsen. Spaßig könnte es dann mit der Interpolationssache werden, müsste man sich dann in nem zweiten Schritt anschauen denke ich.

    Man müsste halt aus den series Infos ein rrule basteln, damit möglichst viele Funktionen des Plugins erhalten bleiben.
    Zuletzt geändert von Onkelandy; 03.10.2021, 14:11.

    Einen Kommentar schreiben:

Lädt...
X