Ankündigung

Einklappen
Keine Ankündigung bisher.

Erweiterung UZSU Plugin um crontab Modus?

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

    Erweiterung UZSU Plugin um crontab Modus?

    Hallo,

    ich wollte fragen, ob eine Erweiterung des UZSU-Plugins um die Funktionen des Crontab denkbar / umsetzbar ist?

    Im Moment nutze ich die UZSU um meinen frisch gesäten Rasen zu bewässern. Dazu schalte ich die Punkte täglich zur vollen Stunde zwischen 6h und 22h für 10min ein. Das ergibt sehr viele Einträge in der aktuellen Version der UZSU.

    Wenn man einen Crontab Modus hätte, könnte man diese sich wiederholenden Einträge deutlich verkürzen.

    Was meint ihr?

    Beste Grüße
    Zuletzt geändert von bmx; 20.10.2021, 13:01. Grund: abgekoppelt vom UZSU Support Thread und neuen Titel vergeben: Erweiterung UZSU Plugin um crontab Modus?

    #2
    Hmmm, wie würdest du das im Interface umsetzen wollen? Welchen Vorteil siehst du im Vergleich zum crontab Attribut für Items, evtl. im Zusammenspiel mit einer Logik?

    Kommentar


      #3
      Zitat von Onkelandy Beitrag anzeigen
      wie würdest du das im Interface umsetzen wollen
      Es könnte im Widget bspw in den Experteneinstellungen gelistet sein und das Plugin könnte dann eine Umrechnung/Umsetzung auf das aktuelle Item-Format machen.

      Zitat von Onkelandy Beitrag anzeigen
      Welchen Vorteil siehst du im Vergleich zum crontab Attribut für Items
      Der Vorteil liegt aus meiner Sicht darin, dass man das zur Laufzeit von shNG ändern kann.

      Kommentar


        #4
        Hi Sisamiwe ,

        wie würdest Du dir die Eingabe im Widget vorstellen ?
        Code:
        0 8,17 * * *
        wie bei einem "normalen" Linux cron-job ? Eher nicht, oder ?
        Ich denke das Befüllen des items müsste ebenfalls im Widget passieren, ansonsten würde ein Hilfsitem benötigt ?
        Ich könnte mir vorstellen, dass es so etwas wie einen Time-Series-Assistenten gibt.
        Ein Popup mit allen Tagen zum anklicken/auswählen, ein Eingabefeld für Uhrzeit (Stunden/Minuten) und eine Combobox mit den Schaltmöglichkeiten (EIN/AUS, ..)
        Danach sollte die Serie im Widget selbst erstellt werden. Ein Button um alle Eintrage zu löschen wäre dann sicherlich auch hilfreich.

        Das müsste für alle uzsu-widgets (icon / uzusugraph / uzsutable) jeweils eingebaut werden.

        Alles mal "laut" gedacht.

        Viele Grüsse
        Andre

        P.S. : Aus meiner Sicht wäre das eher einer Thema für das smartvisu-Forum
        Zuletzt geändert von AndreK; 28.06.2021, 19:05. Grund: Verweis auf smartvisu-Forum

        Kommentar


          #5
          Zitat von AndreK Beitrag anzeigen
          wie würdest Du dir die Eingabe im Widget vorstellen ?
          Ich könnte mir vorstellen, dass man nur die Wochentage, Stunden und Minuten ala crontab nutzt. Für die Verwendung von Monaten bzw Tagen kann ich mir nicht wirklich vorstellen.

          Die Wochentage und (Schalt)Wert sind bereits in der UZSU vorhanden. Stunden, Minuten und Dauer könnte man in den Experteneinstellungen für den jeweilgen UZSU Eintrag als Alternative zur Schaltzeitpunktdefinition über Sonnenstand mit abfragen/eingeben. Um der Logik der UZSU zu folgen, kann aber auch für jeden Schaltzustand ein eigener Eintrag erstellt werden. Somit würde die Dauer wieder entfallen.

          Ob diese Funktion besser im Widget oder im Plugin bereitgestellt wird, kann ich nicht beurteilen. Deine Argumentation für die Erstellung im Widget kann ich nachvollziehen.

          Zitat von AndreK Beitrag anzeigen
          Aus meiner Sicht wäre das eher einer Thema für das smartvisu-Forum
          Das kann man gern auch dort diskutieren. Ich habe dort allerdings keinen "SupportThread" oder ähnliches zum UZSU-Widget gefunden.

          Beste Grüße
          Michael

          Kommentar


            #6
            Hm, also ich glaube fast das müsste im Plugin integriert werden, ist sonst ja echt mühsam. Angenommen, ich erstelle im Widget mittels crontab Auswahl einen Ein-Eintrag alle 2 Stunden oder gar 10 Minuten, dann schwemmt er mir ja alles voll. Die Wochtentage kann man momentan ja eh schon bequem auswählen, das läuft über https://dateutil.readthedocs.io/en/stable/rrule.html

            Dann bräuchte es also eigentlich nur im Expertenmodus eine Möglichkeit statt einer fixen Uhrzeit einen Crontabsyntax für Stunden und Minuten nutzen zu können. Theoretisch könnte man das Plugin so umschreiben, dass es in den Listeneinträgen wie zB {'value':1, 'active':True, 'rrule':'FREQ=DAILY;INTERVAL=2;COUNT=5', 'time': '16:30'} nach nem Doppelpunkt im "time" Key sucht. Ist dieser nicht vorhanden, wird eine Crontabangabe angenommen und entsprechend geparst. Möchte sich jemand dran versuchen ?

            Kommentar


              #7
              Hi,

              ich habe mich mal dran versucht. Im Moment ist der Stand dieser :
              - Im Moment nur in UZSU-Time-Table eingebaut
              - Es gibt einen Button für die Erfassung von Serien-Schaltzeiten
              - Für die Serienschaltzeiten gibt es eine separate "Serien-Zeile"
              - Es kann von / bis und das Intervall erfasst werden
              - Wenn die Serie aktiv ist, und nur dann werden die Daten im UZSU-Item gespeichert. Die Struktur siehe unten

              Das Schalten im UZSU-Plugin ist noch nicht realisiert

              UZSU_Serie.gif
              Darstellung in der UZSU-Table:

              UZSU_TIME_TABLE.jpg

              Code:
              {
                 "active":true,
                 "list":[
                    {
                       "active":true,
                       "rrule":"FREQ=WEEKLY;BYDAY=TU,TH",
                       "value":"1",
                       "series":{
                          "active":true,
                          "timeSeriesMin":"06:00",
                          "timeSeriesMax":"15:00",
                          "timeSeriesIntervall":"01:00"
                       },
                       "time":"serie"
                    },
                    {
                       "active":true,
                       "rrule":"FREQ=WEEKLY;BYDAY=TU,TH",
                       "value":"0",
                       "series":{
                          "active":true,
                          "timeSeriesMin":"06:15",
                          "timeSeriesMax":"15:30",
                          "timeSeriesIntervall":"01:00"
                       },
                       "time":"serie"
                    },
                    {
                       "active":true,
                       "rrule":"FREQ=WEEKLY;BYDAY=SA",
                       "value":"1",
                       "calculated":"05:37",
                       "time":"sunrise"
                    },
                    {
                       "active":true,
                       "rrule":"FREQ=WEEKLY;BYDAY=SA",
                       "value":"0",
                       "calculated":"07:45",
                       "time":"sunrise+120m"
                    },
                    {
                       "active":true,
                       "rrule":"FREQ=WEEKLY;BYDAY=WE",
                       "value":"1",
                       "time":"10:00"
                    },
                    {
                       "active":true,
                       "rrule":"FREQ=WEEKLY;BYDAY=WE",
                       "value":"0",
                       "time":"11:00"
                    }
                 ],
                 "interpolation":{
                    "type":"none",
                    "initialized":false,
                    "itemtype":"bool",
                    "interval":"",
                    "initage":""
                 },
                 "lastvalue":"0",
                 "sunrise":"05:42",
                 "sunset":"21:26"
              }
              Viele Grüsse
              Andre
              Angehängte Dateien

              Kommentar


                #8
                Hallo,

                ich möchte das Thema mit dem zyklischen Einträgen nochmal aufnehmen.
                Wir hatten das bereits ab hier diskutiert.

                Das Widget ist durch AndreK bereits vorbereitet.
                Zitat von AndreK Beitrag anzeigen
                ich habe mich mal dran versucht. Im Moment ist der Stand dieser :
                - Im Moment nur in UZSU-Time-Table eingebaut
                - Es gibt einen Button für die Erfassung von Serien-Schaltzeiten
                - Für die Serienschaltzeiten gibt es eine separate "Serien-Zeile"
                - Es kann von / bis und das Intervall erfasst werden
                - Wenn die Serie aktiv ist, und nur dann werden die Daten im UZSU-Item gespeichert. Die Struktur siehe unten
                Onkelandy hat ein einen Implementierungsvorschlag in das Plugin gemacht.
                Zitat von Onkelandy Beitrag anzeigen
                Theoretisch könnte man das Plugin so umschreiben, dass es in den Listeneinträgen wie zB {'value':1, 'active':True, 'rrule':'FREQ=DAILY;INTERVAL=2;COUNT=5', 'time': '16:30'} nach nem Doppelpunkt im "time" Key sucht. Ist dieser nicht vorhanden, wird eine Crontabangabe angenommen und entsprechend geparst. Möchte sich jemand dran versuchen ​?
                Meine Fragen:
                • Hat hier bereits jemand weiter gearbeitet?
                • In welcher Funktion im Plugin müsste die Erweiterung gemacht werden?
                Ich würde mich mal dran versuchen.

                Beste Grüße
                ​​​​​​​Michael

                Kommentar


                  #9
                  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.

                  Kommentar


                    #10
                    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

                    Kommentar


                      #11
                      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.

                      Kommentar


                        #12
                        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.

                        Kommentar


                          #13
                          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

                          Kommentar


                            #14
                            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?

                            Kommentar


                              #15
                              Auf die Schnelle klingt das vernünftig.. könnte funktionieren

                              Kommentar

                              Lädt...
                              X