Ankündigung

Einklappen
Keine Ankündigung bisher.

Code-Beispiele für den Einsatz der dynamischen Icon gesucht

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

    [Codebeispiel] Code-Beispiele für den Einsatz der dynamischen Icon gesucht

    Die dynamischen Icon in smartVISU sind eine gute Möglichkeit einen Status ansprechend darzustellen.
    Allerdings ist es bei manchen Icon kein Selbstläufer wie die Umrechnung auf den erforderlichen Wertebereich von 0 bis 255 erfolgen muss, z. B. für icon.clock oder icon.zenith.

    Daher würde es mich freuen, wenn ihr hier ein paar Beispiele von eurer Integration und deren Umsetzung (z.B. die erforderliche Berechnung in smarthome.py) postet, so dass sich nicht jeder von neuem darüber Gedanken machen muss.

    #2
    Einbinden einer analogen Uhr in smartVISU:
    analog_clock.png

    Was wird benötigt (am Beispiel von smarthome.py als Backend):
    • In smartvisu muss das icon.clock() eingebunden werden und
    • in smarthome.py wird die aktuelle Uhrzeit in Minuten umgerechnet.

    Das Einbinden des dynamischen Icons auf der eigenen smartVISU-Seite erfolgt mit folgenden Zeilen, in diesem Beispiel enthält das Item "visu.time.icon" die aktuelle Uhrzeit in Minuten:
    HTML-Code:
    {% import   "icon.html" as icon %}
        {{ icon.clock('iconAnalogClock', '', 'visu.time.icon') }}
    Anschließend wird das benötigte Item "visu.time.icon" in smarthome.py (z.B. in der Datei "item.conf") erzeugt:
    Code:
    [visu]
        [[time]]
            [[[icon]]]
                type = num
                visu_acl = ro
    Um die Umrechnung durchzuführen, wird eine neue Datei "visu_time.py" im "logics"-Verzeichnis erstellt und darin folgende Zeilen eingetragen:
    Code:
    #!/usr/bin/env python
    sh.visu.time.icon(int(time.strftime("%I")) * 60 + int(time.strftime("%M")))
    Als letztes wird die neue Logik einmal pro Minute aufgerufen, dies geschieht in der Datei "logic.conf" die um folgende Zeilen ergänzt wird:
    Code:
    [visu_time]
        filename = visu_time.py
        crontab = init | * * * *
    Zuletzt geändert von panzaeron; 17.05.2015, 15:34.

    Kommentar


      #3
      Hallo Panzaeron,
      vielen Dank für Dein Beispiel. Nachdem ich auf "visu_time_minutes" in der "logic.conf" vor Deiner Änderung von 16:10 geändert hatte, funktionierte es mit den unten stehenden Eintragungen!

      HTML-Code:
      {% import "icon.html" as icon %}
      {{ icon.clock('iconAnalogClock', '', 'visu.time.minutes') }}

      Anschließend wird das benötigte Item "visu.time.minutes" in smarthome.py (z.B. in der Datei "item.conf") erzeugt:

      Code:
      [visu]
      [[time]]
      [[[minutes]]]
      type = num
      visu_acl = ro

      Um die Umrechnung durchzuführen, wird eine neue Datei "visu_time_minutes.py" im "logics"-Verzeichnis erstellt und darin folgende Zeilen eingetragen:

      Code:
      #!/usr/bin/env python sh.visu.time.minutes(int(time.strftime("%I")) * 60 + int(time.strftime("%M")))

      Als letztes wird die neue Logik einmal pro Minute aufgerufen, dies geschieht in der Datei "logic.conf" die um folgende Zeilen ergänzt wird:

      Code:
      [visu_time_minutes]
      filename = visu_time_minutes.py
      crontab = init | * * * *

      Nach Deiner Änderung von 16:10 sind glaube ich noch mehr Fehler drin.
      Gruß Hans
      Zuletzt geändert von Tontechniker; 17.05.2015, 15:31.

      Kommentar


        #4
        Weil ich gerade dabei bin, habe ich auch ein Beispiel für das dynamische Icon "zenith":

        Zu Beginn wird wieder ein Item (icon) benötigt welches die Position angiebt, im Folgenden werden gleich noch weitere interessante Items für die Visu erzeugt:
        Code:
        [visu]
            [[sun]]
                [[[icon]]]
                    type = num
                    visu_acl = ro
                [[[azimut]]]
                    type = num
                    visu_acl = ro
                [[[altitude]]]
                    type = num
                    visu_acl = ro
                [[[rise]]]
                    type = str
                    visu_acl = ro
                [[[set]]]
                    type = str
                    visu_acl = ro
        Für die benötigte Logik eine Datei "visu_sun.py" im "logics"-Verzeichnis erzeugen und folgenden Inhalt einfügen:
        Code:
        #!/usr/bin/env python
        import math
        
        # Berechnungen für icon.zenith
        now = datetime.datetime.utcnow().hour * 60 + datetime.datetime.utcnow().minute
        sunrise = sh.sun.rise().hour * 60 + sh.sun.rise().minute
        sunset = sh.sun.set().hour * 60 + sh.sun.set().minute
        icon = int(round((255 * (now - sunrise)  / (sunset - sunrise)),0))
        
        sh.visu.sun.icon(icon)
        
        azimut, altitude = sh.sun.pos()
        azimut = int(round(math.degrees(azimut),0))
        altitude = int(round(math.degrees(altitude),0))
        
        sh.visu.sun.azimut(azimut)
        sh.visu.sun.altitude(altitude)
        sh.visu.sun.rise(sh.sun.rise().astimezone(sh.tzinfo()).strftime("%H:%M"))
        sh.visu.sun.set(sh.sun.set().astimezone(sh.tzinfo()).strftime("%H:%M"))
        Diese Logik muss smarthome.py bekannt gemacht werden, dies geschieht in der Datei "logic.conf" durch das Einfügen der folgenden Zeilen am Ende:
        Code:
        [visu_sun]
            filename = visu_sun.py
            cycle = 300
        Durch "cycle = 300" wird die Logik alle 5 Minuten aufgerufen und damit die Items für den Sonnenstand aktualisiert.

        Am Ende kann das dynamische Icon in die eigene smartVISU-Seite mit folgenden Zeilen integriert werden:
        HTML-Code:
        {% import "icon.html" as icon %}
            {{ icon.zenith('iconZenith', '', 'visu.sun.icon') }}
        Zuletzt geändert von panzaeron; 22.10.2015, 13:03.

        Kommentar


          #5
          Hallo panzaeron,
          ich suche mich gerade tot nach dem Link zu den neuen icons. Benötige z.B. icon.zenith. Kannst Du mir bitte mal den Link schicken?
          Gruß
          Hans


          Danke!
          Zuletzt geändert von Tontechniker; 17.05.2015, 19:03.

          Kommentar


            #6
            Das Icon zenith findest du auf Github. Eine ZIP mit der aktuellen Version von smartVISU ist hier zu finden.

            Kommentar


              #7
              Zitat von Tontechniker Beitrag anzeigen
              Code:
              [visu_time_minutes]
              filename = visu_time_minutes.py
              crontab = init | * * * *

              Nach Deiner Änderung von 16:10 sind glaube ich noch mehr Fehler drin.
              Gruß Hans
              Sorry, ich war noch nicht fertig mit meinen Änderungen, jetzt sollte alles wieder passen...

              Kommentar


                #8
                Hallo,

                ich hab versucht das dynamische Icon zenith lt. Anleitung von panzaeron einzubinden.
                Im Moment sieht das so aus.

                icon zenith.JPG

                Irgendwas schein mir noch zu fehlen, im Log wird auch nichts angezeigt.

                LG Markus

                Kommentar


                  #9
                  Zitat von MarkusG Beitrag anzeigen
                  Irgendwas schein mir noch zu fehlen, im Log wird auch nichts angezeigt.
                  Nutzt du die komplette Version aus dem GIT oder hast du nur die "widget/icon.html" kopiert? Es scheint so, als ob du noch die ältere "widget/widget.js" bzw. "widget/widget.min.js" verwendest und diese musst du auch gegen die Version aus dem GIT ersetzen.

                  Kommentar


                    #10
                    Nutzt du die komplette Version aus dem GIT oder hast du nur die "widget/icon.html" kopiert? Es scheint so, als ob du noch die ältere "widget/widget.js" bzw. "widget/widget.min.js" verwendest und diese musst du auch gegen die Version aus dem GIT ersetzen.
                    Es lag an der icon.html, bei der hatte ich nur den letzten Teil ergänzt. Mit
                    der aus dem GIT funktionierts jetzt.

                    Danke

                    LG Markus

                    Kommentar


                      #11
                      Hallo panzaeron,

                      das Icon für den Sonnenstand ist wirklich gelungen!
                      Ich habe es heute eingesetzt und dabei ist mir aufgefallen, dass die Berechnung für das Icon nicht stimmt.
                      Ich hatte um 10:00 Uhr bereits einen Sonnenstand vom Nachmittag.

                      Zitat von panzaeron Beitrag anzeigen

                      ....
                      # Berechnungen für icon.zenith
                      now = datetime.datetime.utcnow().hour * 60 + datetime.datetime.utcnow().minute
                      sunrise = sh.sun.rise().hour * 60 + sh.sun.rise().minute
                      sunset = sh.sun.set().hour * 60 + sh.sun.set().minute
                      icon = int(round((255 * now / (sunset - sunrise)),0))
                      .......
                      Mit dieser Formel klappt es besser:

                      Code:
                      icon = int(round(255 * ((now - sunrise) / (sunset - sunrise)),0))
                      Sonnenstand.JPG

                      Gruß Rudi
                      Gruß
                      ElektroRudi

                      ............kann,.muß aber net....

                      Kommentar


                        #12
                        Zitat von ElektroRudi

                        Mit dieser Formel klappt es besser:

                        Code:
                        icon = int(round(255 * ((now - sunrise) / (sunset - sunrise)),0))
                        Danke für die Info Ich habe das Icon nicht im Einsatz, daher ist es mir nicht aufgefallen, deine Lösung sieht sehr gut aus

                        Kommentar

                        Lädt...
                        X