Ankündigung

Einklappen
Keine Ankündigung bisher.

Struktur für RTR

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

    #61
    Hab es jetzt mal so ähnlich wie in #14 beschrieben versucht.
    Das Widged erlaubt es ja mittlerweile auch 3x den mode einzufügen und man muss nicht über den binären Status gehen. da könnte man sich einige GAs sparen.

    Nur kommt die Visu scheinbar nur mit dem untere Nibble klar und nicht mit dem oberen 4 bits.
    Mein Versuch war mit einer 0xF Maske die oberen Bits auszumaskieren. Leider funktioniert das aktuelle item nicht und das auskommentierte auch nicht.

    In post #14 wird der Mode nicht gelesen nur einma initialisiert. Bei mir läuft aber eine Nachtabsenkung über eine externe Zeitschaltuhr, die die Visu nicht mitbekommen würde.



    Code:
                [[[[HVAC_mode_temp]]]]
                    type = num
                    visu_acl = rw
                    knx_dpt = 20
                    knx_listen = 2/5/16
                    knx_init = 2/5/16        
                [[[[HVAC_mode]]]]
                    type = num
                    visu_acl = rw
                    knx_dpt = 20                
                    knx_send = 2/5/22
                    knx_listen = 2/5/16
                    knx_init = 2/5/16    
                    #eval = sh.og.schlafzimmer.heizung.HVAC_mode_temp() &0x0F
                    #eval_trigger = og.schlafzimmer.heizung.HVAC_mode_bus
                [[[[status]]]]
                    type = bool
                    visu_acl = rw
                    knx_dpt = 1
                    eval = (sh.og.schlafzimmer.heizung.HVAC_mode_temp() & 0x20) >> 5
                    eval_trigger = og.schlafzimmer.heizung.HVAC_mode_temp
    Zapft ihr Narren der König hat Durst

    Kommentar


      #62
      erledigt

      Kommentar


        #63
        Eine (fast) perfekte Lösung

        Hallo zusammen!
        Ich habe aus mehreren Posts (Danke an alle!) mir eine Lösung für MDT Heizungsaktor gebastelt, die jetzt doch perfekt ist


        widget_ext.html (aus Post 14)
        HTML-Code:
        /**
         * Standard RTR (Room Temperatur Regulator) (MDT)
         *
         * @param       unique id for this widget
         * @param       name of the rtr
         * @param       a gad/item for the actual temperature
         * @param       a gad/item for the set temperature
         * @param       a gad/item for the changing of the set temperature
         * @param       a gad/item for comfort / standby (3x bit or 1x byte)
         * @param       a gad/item for night (3x bit or 1x byte)
         * @param       a gad/item for frost (3x bit or 1x byte)
         * @param       a gad/item for the current state of the actor
         * @param       a gad/item for a text (some rtr have a text-display), (optional)
         * @param       step for plus/minus buttons (optional, default 0.5)
         */
        {% macro rtr(id, txt, gad_actual, gad_set_value, gad_set, gad_comfort, gad_night, gad_frost, gad_state, gad_txt, step) %}
            {% import "basic.html" as basic %}
        
            <div id="{{ uid(page, id) }}" data-widget="device.rtr" data-step="{{ step|default(0.5) }}"
                class="rtr">
                <div class="actual">
                    <div class="temp">{{ basic.float(id~'actual', gad_actual, '°' ) }}</div>
                    <div class="text">{{ txt }} {% if gad_txt %} {{ basic.value(id~'txt', gad_txt) }} {% endif %}</div>
                </div>
        
                {% if gad_set %}
                    <div class="set">
                        <a data-role="button" data-icon="minus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>
                        <div class="temp" style="display:none;">{{ basic.float(id~'set', gad_set, '°' ) }}</div>
                        <div class="temp">{{ basic.float(id~'set_value', gad_set_value, '°' ) }}</div>
                        <a data-role="button" data-icon="plus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>
                    </div>
                {% endif %}
        
                <div class="control">
                    {% if (gad_comfort == gad_night) and (gad_night == gad_frost) %}
                        {{ basic.switch(id~'mode', gad_comfort, icon1~'user_available.png', icon0~'user_away.png', '1', '2') }}
                        {{ basic.switch(id~'night', gad_night, icon1~'scene_night.png', icon0~'scene_day.png', '3', '2') }}
                        {{ basic.switch(id~'frost', gad_frost, icon1~'weather_frost.png', icon0~'weather_frost.png', '4', '2') }}
                    {% else %}
                        {{ basic.switch(id~'mode', gad_comfort, icon1~'user_available.png', icon0~'user_away.png') }}
                        {{ basic.switch(id~'night', gad_night, icon1~'scene_night.png', icon0~'scene_day.png') }}
                        {{ basic.switch(id~'frost', gad_frost, icon1~'weather_frost.png', icon0~'weather_frost.png') }}
                    {% endif %}
                    <div style="float:left; width: 5px; height: 48px;"></div>
                    {{ basic.symbol(id~'state_on', gad_state, '', icon0~'sani_heating.png', 0) }}
                    {{ basic.symbol(id~'state_off', gad_state, '', icon1~'sani_heating.png') }}
                </div>
            </div>
        {% endmacro %}
        smartvisu.conf (Die 3. Stelle der Gruppenandresse enstpricht der Objektnummer Kanal A)
        Code:
        [Homezone]
        	[[Wohnzimmer]]
        		[[[Heizung]]]
        			type = num
        			visu = true
        			[[[[ist]]]]
        				type = num
        				visu_acl = rw
        				knx_dpt = 9
        				knx_init = 3/1/0
        				knx_listen = 3/1/0
        				knx_cache = 3/1/0
        				sqlite = yes
        			[[[[soll]]]]
        				type = num
        				visu=true
        				visu_acl = rw
        				knx_dpt = 9
        				knx_init = 3/1/9
        				knx_listen = 3/1/9
        				knx_cache = 3/1/9
        				enforce_updates = yes
        			[[[[sollwertverschiebung]]]]
        				type = num
        				visu_acl = rw
        				visu=true
        				knx_dpt = 9
        				enforce_updates = yes
        				knx_init = 3/1/8
        				knx_listen = 3/1/8
        				knx_send = 3/1/8
        			[[[[stellwert]]]]
        				type = num
        				visu = true
        				knx_dpt = 5001
        				knx_init = 3/1/3
        				knx_cache = 3/1/3
        				sqlite = yes
        			[[[[modus]]]]
        				type = num
        				visu_acl = rw
        				visu = true
        				knx_dpt = 20
        				knx_init = 3/1/10
        				knx_listen = 3/1/10
        				knx_send = 3/1/10
        				knx_cache = 3/1/10
        			[[[[heizen]]]]
        				type = bool
        				visu = true
        				eval = 0 if value == 0 else 1
        				eval_trigger = Homezone.Wohnzimmer.Heizung.stellwert
        Das Ganze in einer html aufrufen:
        HTML-Code:
        <div class="block">
        	<div class="set-2" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
        
        		<div data-role="collapsible" data-collapsed="false">
        			<h3>Heizung</h3>
        			{% import "widget_ext.html" as ext %}
        			{{ ext.rtr('Homezone.Wohnzimmer.Heizung', '', 'Homezone.Wohnzimmer.Heizung.ist', 'Homezone.Wohnzimmer.Heizung.soll', 'Homezone.Wohnzimmer.Heizung.sollwertverschiebung', 'Homezone.Wohnzimmer.Heizung.modus', 'Homezone.Wohnzimmer.Heizung.modus', 'Homezone.Wohnzimmer.Heizung.modus', 'Homezone.Wohnzimmer.Heizung.heizen') }}
        		</div>
        
        	</div>
        </div>
        Vorteile dieser Lösung:
        • Nur ein Modus gleichzeitg anklickbar
        • Nach Modusumschaltung wird auch die Solltemperatur entsprechend angepasst
        Angehängte Dateien

        Kommentar


          #64
          Zitat von Eugenius Beitrag anzeigen
          Einziges Problem was ich noch habe, wenn ich sh.py neustarte, wird die Temperatur erst dann angezeigt, wenn Temperatursensor die aktiv sendet. D.h. sh.py holt die selbst nicht
          Ohne das oben jetzt alles gelesen zu haben ....... knx_cache verwenden?

          Kommentar


            #65
            Vermutlich, zumindest funktioniert das damit bei mir mit dem Original-Widget.

            Kommentar


              #66
              Zitat von macflei Beitrag anzeigen
              Ohne das oben jetzt alles gelesen zu haben ....... knx_cache verwenden?
              DAS war die Lösung! Danke!
              P.S. ich habe oben auch angepasst.

              Kommentar


                #67
                Mensch, Eugenius!

                Hättest du das nicht 2 Tage früher posten können?
                Gefällt mir ziemlich gut so.
                Jetzt ist nur noch die Frage, ob es sinnvoller ist, die Solltemperatur über die Sollwertverschiebung oder über "Sollwert Komfort" zu steuern. Vom Ergebnis her dürfte beides auf's Gleiche rauskommen und ich wüsste gerade nicht, was ich bevorzugen sollte.
                Die Frage kam auf, da meine bisherige Cometvisu den Sollwert Komfort verwendet und ich mich gefragt habe, wieso die CV andere Werte anzeigt als die SV.

                Da kommt mir grad noch ne Erweiterung für's Widget in den Sinn: unterhalb der Status-Buttons den jeweiligen Sollwert anzeigen, der damit ausgelöst wird...mal gucken....
                CU,
                Mathias

                Kommentar


                  #68
                  @Eugenius:

                  knx_cache beinhaltet "knx_init + knx_listen", von daher hast du das momentan doppelt drin.

                  Kommentar


                    #69
                    Zitat von gindler Beitrag anzeigen
                    Jetzt ist nur noch die Frage, ob es sinnvoller ist, die Solltemperatur über die Sollwertverschiebung oder über "Sollwert Komfort" zu steuern.
                    Da wurde es sehr gut beschrieben


                    Zitat von gindler Beitrag anzeigen
                    Da kommt mir grad noch ne Erweiterung für's Widget in den Sinn: unterhalb der Status-Buttons den jeweiligen Sollwert anzeigen, der damit ausgelöst wird...mal gucken....
                    Zwar nicht unterhalb, aber so wie hier realisiert:


                    widget_ext.html
                    Code:
                    {% macro rtr(id, txt, gad_actual, gad_set_value, gad_set, gad_comfort, gad_night, gad_frost, gad_state, gad_txt, step[B], gad_setpoint[/B]) %}
                        {% import "basic.html" as basic %}
                    
                        <div id="{{ uid(page, id) }}" data-widget="device.rtr" data-step="{{ step|default(0.5) }}"
                            class="rtr">
                            <div class="actual">
                                <div class="temp">{{ basic.float(id~'actual', gad_actual, '°' ) }}</div>
                                <div class="text">{{ txt }} {% if gad_txt %} {{ basic.value(id~'txt', gad_txt) }} {% endif %}</div>
                            </div>
                    [B]        <div class="setpointtext">
                                <div class="text">Heizt mit: {{ basic.float(id~'setpoint', gad_setpoint, '%' ) }}</div>[/B]
                            </div>
                            {% if gad_set %}
                                <div class="set">
                                    <a data-role="button" data-icon="minus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>
                                    <div class="temp" style="display:none;">{{ basic.float(id~'set', gad_set, '°' ) }}</div>
                                    <div class="temp">{{ basic.float(id~'set_value', gad_set_value, '°' ) }}</div>
                                    <a data-role="button" data-icon="plus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>
                                </div>
                            {% endif %}
                    
                            <div class="control">
                                {% if (gad_comfort == gad_night) and (gad_night == gad_frost) %}
                                    {{ basic.switch(id~'mode', gad_comfort, icon1~'user_available.png', icon0~'user_away.png', '1', '2') }}
                                    {{ basic.switch(id~'night', gad_night, icon1~'scene_night.png', icon0~'scene_day.png', '3', '2') }}
                                    {{ basic.switch(id~'frost', gad_frost, icon1~'weather_frost.png', icon0~'weather_frost.png', '4', '2') }}
                                {% else %}
                                    {{ basic.switch(id~'mode', gad_comfort, icon1~'user_available.png', icon0~'user_away.png') }}
                                    {{ basic.switch(id~'night', gad_night, icon1~'scene_night.png', icon0~'scene_day.png') }}
                                    {{ basic.switch(id~'frost', gad_frost, icon1~'weather_frost.png', icon0~'weather_frost.png') }}
                                {% endif %}
                                <div style="float:left; width: 5px; height: 48px;"></div>
                                {{ basic.symbol(id~'state_on', gad_state, '', icon0~'sani_heating.png', 0) }}
                                {{ basic.symbol(id~'state_off', gad_state, '', icon1~'sani_heating.png') }}
                            </div>
                        </div>
                    {% endmacro %}
                    Aufruf dann mit:
                    HTML-Code:
                    {% import "widget_ext.html" as ext %}
                    {{ ext.rtr('Homezone.Wohnzimmer.Heizung', '', 
                    'Homezone.Wohnzimmer.Heizung.ist', 
                    'Homezone.Wohnzimmer.Heizung.soll', 
                    'Homezone.Wohnzimmer.Heizung.sollwertverschiebung', 
                    'Homezone.Wohnzimmer.Heizung.modus', 
                    'Homezone.Wohnzimmer.Heizung.modus', 
                    'Homezone.Wohnzimmer.Heizung.modus', 
                    'Homezone.Wohnzimmer.Heizung.heizen'
                    ,'','','Homezone.Wohnzimmer.Heizung.stellwert'
                    ) }}

                    Zitat von ratzi82 Beitrag anzeigen
                    knx_cache beinhaltet "knx_init + knx_listen", von daher hast du das momentan doppelt drin.
                    Danke für den Hinweis. Ja, die init's und listen's werden nicht mehr benötigt, stören aber auch nicht.

                    Ich bin noch ganz jung was sh.py angeht, kenn noch nicht alle Besonderheiten

                    Kommentar


                      #70
                      Ich bin derzeit bei meinen ersten Gehversuchen mit der Visu und versuche mich gerade an der Kombination MDT Glastaster und MDT Heizungsaktoren.

                      Vielen Dank schon mal an euch, für die ganze Vorarbeit.

                      @Eugenius: Ich habe deine Lösung bei mir am laufen.
                      Allerdings werden beim Klicken von + und - die Sollwerte nicht aktualisiert.

                      Im Code steht ja:
                      Code:
                      <div class="temp" style="display:none;">{{ basic.float(id~'set', gad_set, '°' ) }}</div>
                      In diesem unsichtbaren Feld wird die Sollwertverschiebung eingetragen und entspricht auch den Werten auf dem Bus. Aber der Wert wird in der Anzeige nicht mit dem eingestellten Sollwert "verrechnet".
                      Ist das so gedacht?

                      Außerdem wird bei Umschaltung der Betriebsart der Sollwert nicht angepasst auf dem Bus, oder aktualisiert der MDT den eh nicht?

                      Kommentar


                        #71
                        Okay, war zwischen Stuhl und Bildschirm zu finden.
                        Hatte die GA mit dem Sollwert Komfort verknüpft statt "Aktueller Sollwert".

                        Kommentar


                          #72
                          Ich habe das Problem, dass der Stellwert nicht angezeigt wird.
                          Der Aufruf ist:
                          Code:
                                   <div class="block">
                                          <div class="set-2" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
                          
                                                  <div data-role="collapsible" data-collapsed="false">
                                                          <h3>Raumtemperatur</h3>
                                                          {{ rtr_nb.rtr('Heizung_OG_Bad', 'Heizung Bad', 'Obergeschoss.Bad.Heizung.ist', 'Obergeschoss.Bad.Heizung.soll', 'Obergeschoss.Bad.Heizung.sollwertverschiebung', 'Obergeschoss.Bad.Heizung.modus', 'Obergeschoss.Bad.Heizung.modus', 'Obergeschoss.Bad.Heizung.modus', 'Obergeschoss.Bad.Heizung.heizen', '', '', 'Obergeschoss.Bad.Heizung.stellwert') }}
                                                          {{ plot.period('TempBad', 'Obergeschoss.Bad.Heizung.ist', 'avg', '24h') }}
                                                  </div>
                          
                                          </div>
                                  </div>
                          In der smartvisu.conf steht:
                          Code:
                                  [[[Heizung]]]
                                                  type = num
                                                  visu = true
                                                  [[[[ist]]]]
                                                          type = num
                                                          visu_acl = rw
                                                          sqlite = yes
                                                          ow_addr = 28.B9CC61060000
                                                          ow_sensor = T
                                                          knx_dpt = 9
                                                          knx_send = 3/0/0
                                                          knx_reply = 3/0/0
                                                          knx_cache = 3/0/0
                                                  [[[[soll]]]]
                                                          type = num
                                                          visu=true
                                                          visu_acl = rw
                                                          knx_dpt = 9
                                                          knx_cache = 3/6/0
                                                          enforce_updates = yes
                                                  [[[[sollwertverschiebung]]]]
                                                          type = num
                                                          visu_acl = rw
                                                          visu=true
                                                          knx_dpt = 9
                                                          enforce_updates = yes
                                                          knx_init = 3/3/0
                                                          knx_listen = 3/3/0
                                                          knx_send = 3/3/0
                                                  [[[[stellwert]]]]
                                                          type = num
                                                          visu = true
                                                          knx_dpt = 5001
                                                          knx_cache = 3/5/0
                                                          sqlite = yes
                                                  [[[[modus]]]]
                                                          type = num
                                                          visu_acl = rw
                                                          visu = true
                                                          knx_dpt = 20
                                                          knx_send = 3/2/0
                                                          knx_cache = 3/2/0
                                                  [[[[heizen]]]]
                                                          type = bool
                                                          visu = true
                                                          eval = 0 if value == 0 else 1
                                                          eval_trigger = Obergeschoss.Bad.Heizung.stellwert
                          Die GA hat im Moment den Wert 0, Anzeige klappt aber auch mit keinem anderen Wert.

                          Hat jemand 'ne Idee?

                          Ach ja, damit der angehängte Plot nicht verschoben wird habe ich das widget noch in Table-Tags verpackt.

                          Gruß,
                          Norbert
                          Angehängte Dateien

                          Kommentar


                            #73
                            Zitat von NorbertB Beitrag anzeigen
                            Ich habe das Problem, dass der Stellwert nicht angezeigt wird.
                            Sieht so aus, als ob "stellwert" keinen Wert hat.
                            GA richtig eingetragen?
                            evtl. mit knx_init und knx_listen statt knx_cache testen.

                            Oder statt "stellwert" ein komplett anderes Item zum Testen nehmen.
                            Oder "stellwert" als basic.float wo anders zum Test einbauen.

                            Kommentar


                              #74
                              Hi Eugenius,

                              Ich habe Deine Tips umgesetzt.

                              knx_cach habe ich durch knx_init und knx_listen ersetzt:
                              Code:
                                              [[[[stellwert]]]]
                                                      type = num
                                                      visu = true
                                                      knx_dpt = 5001
                                                      knx_init = 3/5/0
                                                      knx_listen = 3/5/0
                                                      sqlite = yes
                              Den Aufruf habe ich um ein basic.float ergänzt:
                              Code:
                                       <div class="block">
                                              <div class="set-2" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
                              
                                                      <div data-role="collapsible" data-collapsed="false">
                                                              <h3>Raumtemperatur</h3>
                                                              {{ own_rtr.rtr('Heizung_OG_Bad', 'Heizung Bad', 'Obergeschoss.Bad.Heizung.ist', 'Obergeschoss.Bad.Heizung.soll', 'Obergesc
                              hoss.Bad.Heizung.sollwertverschiebung', 'Obergeschoss.Bad.Heizung.modus', 'Obergeschoss.Bad.Heizung.modus', 'Obergeschoss.Bad.Heizung.modus', 'Obergeschos
                              s.Bad.Heizung.heizen', '', '', 'Obergeschoss.Bad.Heizung.stellwert') }}
                                                              {{ plot.period('TempBad', 'Obergeschoss.Bad.Heizung.ist', 'avg', '24h') }}
                                                              {{ basic.float('Stellw_Bad', 'Obergeschoss.Bad.Heizung.stellwert', '%') }}
                                                      </div>
                              
                                              </div>
                                      </div>
                              Unten wird das basic.float angezeigt, im rtr-widget allerding keine Änderung:
                              Angehängte Dateien

                              Kommentar


                                #75
                                Das Problem saß mal wieder zwischen den Ohren. Bei der macro-Definition habe ich das "gad_setpoint" vergessen...

                                Kommentar

                                Lädt...
                                X