Ankündigung

Einklappen
Keine Ankündigung bisher.

Eigenes Widget: Verwendung relativer Items bzw. Ergänzung der Items im Widget

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

    Eigenes Widget: Verwendung relativer Items bzw. Ergänzung der Items im Widget

    Hallo,

    ich möchte ein Widget generieren, dass mit die Schaltzeiten der Heizung bzw. Warmwasser anzeigt und ich darüber auch modifizieren kann. Dazu möchte ich eine Tabelle erstellen, mit den Wochentagen in der ersten Spalte und den jeweiligen Schaltzeiten in der Zeile.

    Ich shNG habe ich einen Itembaum nach dem Muster verfügbar:
    Code:
    schaltzeiten_warmwasser:
      montag:
        an1:
        aus1:
        an2:
        aus2:
        an3:
        aus3:
        an4:
        aus4:
      dienstag:
        an1:
        aus1:
        an2:
        aus2:
        an3:
        aus3:
        an4:
        aus4:
      mittwoch:
        an1:
        aus1:
        an2:
        aus2:
        an3:
        aus3:
        an4:
        aus4:
      ...
    Die Strukur ist immer gleich, da diese mit struct erzeuge.

    Ich stelle mir vor, dass es reicht, wenn ich dem Widget das "Eltern_item" (in dem Fall "schaltzeiten_warmwasser:") übergebe und das Widget für die einzelnen basic.print bspw. den Pfad des jeweiligen Items ergänzt.

    Ein Beispiel:
    Ich übergeben an das Widget das Item "schaltzeiten_warmwasser:" und für die Anzeige der ersten Anschaltzeit am Montag (erste Zeile, erstes Zelle) wird der Pfad bzw. das Item für basic.print oder basic.input dann entsprechend zu "schaltzeiten_warmwasser.montag.an1" ergänzt.

    Wie bekommt man das hin?
    Hat jemand eine Idee?


    #2
    Ich glaube, es ist einfacher, wenn du für die Kommunikation zw smarthomeng und smartvisu ein Dict/ Array übergibst

    Kommentar


      #3
      Zitat von Bonze Beitrag anzeigen
      ch glaube, es ist einfacher, wenn du für die Kommunikation zw smarthomeng und smartvisu ein Dict/ Array übergibst
      Danke. Da stehe ich aber noch auf dem Schlauch. Wie meinst Du es genau?

      Kommentar


        #4
        Die UZSU verwendet so ein dict für die Kommunikation, aber das passt halt nicht zu deiner Item-Struktur.
        Eventuell könntest du aber trotzdem eine UZSU verwenden und dann die Werte per Logik aus dem dict extrahieren.

        Kommentar


          #5
          Da sich die Items nicht ändern, kannst Du das im Template als for-loop über Tage und Schaltzeiten machen.

          Auf Stackoverflow ist ein Beitrag der in die Richtung geht.

          Daraus folgend in etwa sowas hier (nicht getestet):
          Code:
          {% days = ['montag','dienstag',...] %}
          {% times = ['an1','aus1','an2','aus2',....] %}
          
          <table>
          <th>
          {% for day in days %}
          <td>day</td>
          {% endfor %}
          </th>
          
          {% for t in times %}
          <tr>
          {% for day in days %}
          {% item = 'BasisItem.'~day~'.'~t %}
          <td>{{ basic.print( '', item, ...) }}</td>
          {% endfor %}
          </tr>
          {% endfor %}
          </table>

          Kommentar


            #6
            Zitat von bmx Beitrag anzeigen
            Daraus folgend in etwa sowas hier (nicht getestet):
            Halle Bernd,
            könntest Du mir hier nochmal helfen?

            Code:
                <div class="block">
                    <div class="set-1" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
                        <div data-role="collapsible" data-collapsed="false">
                            <h3>Schaltzeiten Warmwasser</h3>
                            {% days = ['montag','dienstag'] %}
                            {% times = ['an1','aus1','an2','aus2'] %}
                            
                            <table>
                                <th>
                                {% for day in days %}
                                <td>day</td>
                                {% endfor %}
                                </th>
            
                                {% for t in times %}
                                <tr>
                                {% for day in days %}
                                {% item = 'viessmann.warmwasser.schaltzeiten.'~day~'.'~t %}
                                <td>{{ basic.print( '', item, '') }}</td>
                                {% endfor %}
                                </tr>
                                {% endfor %}
                            </table>
                        </div>
                    </div>
                </div>
            Führt zum Fehler:
            Code:
            Error occurred in twig-template engine!
            
            error: Unexpected "days" tag (expecting closing tag for the "block" tag defined near line 8).
            file:  2_page_heating2.html
            line:  117
            Zeile 117 ist {% days = ['montag','dienstag'] %}

            Der Fehler sagt mir absolut nichts. HTML, PHP etc sind (noch) "böhmische Dörfer".
            Danke dir.

            Kommentar


              #7
              Du mußt in der Doku von Twig schauen, wie da ein array definiert wird. Vermutlich habe ich das set vergessen

              Kommentar


                #8
                bmx
                Danke hat geklappt.
                Ich poste später den Code

                Kommentar


                  #9
                  gerne auch per PR in unser neues Repository für neue Widgets etc.: https://github.com/smartVISU-newstuff/widgets/tree/new

                  Kommentar


                    #10
                    Hallo,

                    ich bin Euch noch eine Antwort schuldig:

                    Die Items sind immer gleich strukturiert, das mache ich mit structs:
                    Code:
                    item_structs:
                        timer:
                            name: Schaltzeiten in Einzelzeiten fuer An und Aus
                            
                            an1:
                                name: erste Anschaltzeit
                                type: str
                                visu_acl: rw
                                
                            aus1:
                                name: erste Ausschaltzeit
                                type: str
                                visu_acl: rw
                                
                            an2:
                                name: zweite Anschaltzeit
                                type: str
                                visu_acl: rw
                                
                            aus2:
                                name: zweite Ausschaltzeit
                                type: str
                                visu_acl: rw
                                
                            an3:
                                name: dritte Anschaltzeit
                                type: str
                                visu_acl: rw
                                
                            aus3:
                                name: dritte Ausschaltzeit
                                type: str
                                visu_acl: rw
                                
                            an4:
                                name: vierte Anschaltzeit
                                type: str
                                visu_acl: rw
                                
                            aus4:
                                name: vierte Ausschaltzeit
                                type: str
                                visu_acl: rw
                    Nun möchte ich dies in einer Tabelle in der Visu darstellen. Das geht dann so:

                    Code:
                    /**
                     * Viessmann Schaltzeiten Widget als Tabelle zum Bearbeiten
                     *
                     * @param       unique id for this widget
                     * @param       Headline
                     * @param       the gad/item for timer (parent item)
                     *
                     */
                    {% macro timer_edit(id, txt, gad_timer) %}
                        {% import "basic.html" as basic %}
                        {% set uid = uid(page, id) %}
                        {% if txt %}<b>{{ txt|e }}</b><br/>{% endif %}
                        <div id="{{ uid }}">        
                            {% set days = ['montag','dienstag','mittwoch','donnerstag','freitag','samstag','sonntag'] %}
                            {% set times = ['an1','aus1','an2','aus2','an3','aus3','an4','aus4'] %}
                            
                            <table>
                                <th width=12%>
                                {% for t in times %}
                                    <th>{{ t }}</th>
                                {% endfor %}
                                </th>
                    
                                {% for day in days %}
                                    <tr>
                                    {% set parentitem = gad_timer~'.'~day %}
                                    <th ALIGN="LEFT">{{ basic.trigger('', 'create_viessmann_timer', '', 'check', parentitem, 'micro') }} {{ day }} </th>
                                    {% for t in times %}
                                        {% set item = gad_timer~'.'~day~'.'~t %}
                                        <td>{{ basic.input( '', item, 'time') }}</td>
                                    {% endfor %}
                                    </tr>
                                {% endfor %}
                            </table>
                        </div>
                    {% endmacro %}
                    Das ganze gibt es dann bald als Plugin für shNG auch mit Widgets.

                    Beste Grüße
                    Michael

                    Kommentar

                    Lädt...
                    X