Ankündigung

Einklappen
Keine Ankündigung bisher.

Neue RTR Version mit Komforttemperatur für MDT Glas

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

    Neue RTR Version mit Komforttemperatur für MDT Glas

    Hallo zusammen,

    ich versuche gerade einen neues RTR Modul zum laufen zu bringen in dem ich auch die Komforttemperatur verstellen kann.
    Außerdem möchte ich die Buttons der Sollwertverschiebung, nur anzeigen wenn der Komfortbetrieb aktiv ist.

    Aktuell habe ich hierbei folgende Probleme:

    1. Ich kann die Buttons nicht in Abhängigkeit von einem Wert ausblenden. Konkret müsste hier die Variable gad_state auf den Wert 2 abgefragt werden.

    2. Die Buttons die eigentlich die Komforttemperatur ändern sollen, ändern immer den oberen Wert. Haben also die gleiche Funktion wie die Buttons darüber

    3. Ich würde die Temperaturwerte gerne immer mit einer Nachkommastelle anzeigen, auch wenn der Wert Null ist.

    Hier noch der aktuelle Code und ein Screenshot. Hoffe es kann mir jemand auf die Sprünge helfen...

    RTR_MDT_NEU_001.JPG

    Code:
    /**
    * Standard RTR (Room Temperatur Regulator) mit Komforttemperatur
    *
    * @param "id"                            eingeitige Bezeichnung fuer das Widget
    * @param "txt"                        Name des RTR´s oder Raum
    * @param "gad_actual"            Isttemperatur
    * @param "gad_set_value"     Sollwert (absolut)
    * @param "gad_set"                Sollwertverschiebung
    * @param "gad_com"                Komforttemperatur
    * @param "gad_heat_value"    Stellgroesse
    * @param "gad_state"            Betriebsart (Komfort/StandBy/Nacht/Frost)    / 1Byte
    * @param "gad_txt"                Text vom RTR anzeigen (optional)
    * @param "step"                        Schrittweite fuer die plus/minus Buttons (optional, default 0.5)
    */
    
    {% macro rtr(id, txt, gad_actual, gad_set_value, gad_set, gad_com, gad_heat_value, 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, '°C' ) }}</div>
                    <div class="text">{{ txt }} {% if gad_txt %} {{ basic.value(id~'txt', gad_txt) }} {% endif %}</div>
            </div>
    
        <div class="set">
                 {% if gad_txt %}<a data-role="button" data-icon="minus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>{% endif %}
                    <div class="temp" style="display:none;">{{ basic.float(id~'set', gad_set, '°C' ) }}</div>
            <div class="temp">{{ basic.
    float(id~'set_value', gad_set_value, '°C Solltemp' ) }}</div>
            {% if gad_txt %}<a data-role="button" data-icon="plus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>{% endif %}
         </div>
    
            <div class="set">
                    <a data-role="button" data-icon="minus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>
                    <div class="temp">{{ basic.float(id~'com', gad_com, '°C Komtemp' ) }}</div>
                    <a data-role="button" data-icon="plus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>
            </div>
    
    
        <div class="control">
            {{ basic.switch(id~'mode', gad_state, icon1~'user_available.png', icon0~'user_away.png', '1', '2') }}
            {{ basic.switch(id~'night', gad_state, icon1~'scene_night.png', icon0~'scene_day.png', '3', '2') }}
            {{ basic.switch(id~'frost', gad_state, icon1~'weather_frost.png', icon0~'weather_frost.png', '4', '2') }}
            {{ basic.shifter(id~'shift', '', gad_heat_value, icon1~'sani_heating_series_00.png', icon0~'sani_heating_series_00.png',0,90 ) }}
        </div>
        </div>
        
    {% endmacro %}
    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>
                    {{ device.rtr('rtr', 'Heizung', 'Heizung.Buero.isttemp', 'Heizung.Buero.solltemp', 'Heizung.Buero.sollschieb', 'Heizung.Buero.comforttemp', 'Heizung.Buero.stellgroesse', 'Heizung.Buero.status', 'an', 0.2) }}
                </div>
            </div>
        </div>
    Code:
     [Heizung]
        [[Buero]]
            [[[isttemp]]]
                type = num
                visu_acl = rw
                sqlite = yes
                knx_dpt = 9
                knx_listen = 4/2/3
                knx_init = 4/2/3
            [[[stellgroesse]]]
                type = num
                visu = true
                knx_dpt = 5001
                knx_listen = 4/2/0
                knx_init = 4/2/0
            [[[solltemp]]]
                type = num
                visu_acl = rw
                sqlite = yes
                knx_dpt = 9
                knx_send = 4/2/2
                knx_listen = 4/2/2
                knx_init = 4/2/2
           [[[sollschieb]]]
                type = num
                visu_acl = rw
                knx_dpt = 9
                knx_init = 4/2/15
                knx_listen = 4/2/15
                knx_send = 4/2/15
           [[[comforttemp]]]
                type = num
                visu_acl = rw
                sqlite = yes
                knx_dpt = 9
                knx_send = 4/2/10
                knx_listen = 4/2/10
                knx_init = 4/2/10
            [[[status]]]
                type = num
                visu_acl = rw
                knx_dpt = 5
                knx_listen = 4/2/14
                knx_send = 4/2/14
                knx_init = 4/2/14
            [[[heizen]]]
                type = bool
                visu_acl = rw
                sqlite = yes
                knx_dpt = 1
                knx_listen = 4/2/4
                knx_init = 4/2/4
    Zuletzt geändert von PauleFoul; 25.10.2015, 11:09.

    #2
    Also die IF-Abfrage macht mich Wahnsinnig

    Code:
     {% if gad_state == 1 %}<a data-role="button" data-icon="minus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>{% endif %}
    So kommt zwar kein Fehler, aber der Button bleibt immer ausgeblendet, auch wenn die Variable gad_state = 1 ist

    Kommentar


      #3
      Hat denn keiner eine Idee wie man diese IF-Abfrage programmieren muss? Oder geht das so garnicht?

      Kommentar


        #4
        Ist Dir klar, das der fest stehende Teil von der PHP/Twig Kombination bereitgestellt wird, während die ganze Kommunikation über Javascript läuft?
        Damit wird Dein Konstrukt mit {% if gad_state == 1 %} leider gar nichts, weil der schon von PHP/TWIG bearbeitet wird. Ich würde sagen Du liest Dich da mal ein ...

        Kommentar


          #5
          Wenn ich den Button nicht zeichne habe ich keine Funktion, oder? Was soll daran nicht gehen?

          Ich habe es ja mit der Abfrage {% if gad_txt} schon erfolgreich ausgeblendet, jedoch eben nicht abhängig vom Variablen Wert!?


          Und warum hier immer der "von oben herab Ton"? So langsam trau ich mir nicht mehr eine Frage zu stellen oder ist das hier ein
          Expertenforum!?

          Kommentar


            #6
            Ich finde den Hinweis von Bernd in keinster Weise "von oben herab". Er hat in meinen Augen mit dem Hinweis zwecks Kommunikation völlig Recht. So wie Du das angehst wird das wahrscheinlich nicht funktionieren. Vieleicht schaust Du Dir mal die widget.js an. Parallel dazu dann die oder ein Widget. Vieleicht bringt Dich das dann auf den richtigen Weg (Zusammenhänge).
            Für soetwas ist dann auch besipielsweise die visu.js im eigenen Pages-Verzeichnis da.
            Da ich die Idee zwecks "Verstellen der Sollwertverschiebung nur im Komfort-Modus" selber nicht so schlecht finde, habe ich mal zu Testzwecken etwas angefangen zu spielen. Da es nur erste Spielerien sind stelle ich auch erstmal keine Code-Schnipsel rein. Muß nur schauen wie ich das zeitlich hinbekomme.
            Alternativ könntest Du Dir natürlich auch mal in der 2.8 das collapse ...oder/bzw. status.collapse anschauen.
            Damit ist es u.a. möglich komplette divs item-abhängig zu verbergen bzw. "ein- u. auszublenden"
            Also dann die - und + Buttons komplett ausblenden und nicht wie in dem Screen die Buttons einfach nur "nicht bedienbar" zu machen.





            Angehängte Dateien

            Kommentar


              #7
              Danke für die konstruktive Rückmeldung.

              Ich werde mich in den nächsten Tage in die von Dir genannten Dateien einlesen um den Code und die Hintergründe besser zu verstehen.

              Kommentar


                #8
                So ich hab mir das jetzt mal ein wenig angeschaut.

                Also zum Thema Funktion der plus und minus -Buttons kommt es auf folgende Zeilen in der device.html an:

                Code:
                <div id="{{ uid(page, id) }}" data-widget="device.rtr" data-step="{{ step|default(0.5) }}" class="rtr">
                Code:
                <a data-role="button" data-icon="minus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>
                die rufen dann in der widget.js folgendes auf
                Code:
                // ----- d e v i c e ----------------------------------------------------------
                // ----------------------------------------------------------------------------
                
                // ----- device.rtr -----------------------------------------------------------
                $(document).delegate('div[data-widget="device.rtr"] > div > a[data-icon="minus"]', {
                    'click': function (event, response) {
                        var uid = $(this).parent().parent().attr('id');
                        var step = $('#' + uid).attr('data-step');
                        var item = $('#' + uid + 'set').attr('data-item');
                
                        var temp = (Math.round((widget.get(item) - step) * 10) / 10).toFixed(1);
                        io.write(item, temp);
                    }
                });
                
                $(document).delegate('div[data-widget="device.rtr"] > div > a[data-icon="plus"]', {
                    'click': function (event, response) {
                        var uid = $(this).parent().parent().attr('id');
                        var step = $('#' + uid).attr('data-step');
                        var item = $('#' + uid + 'set').attr('data-item');
                
                        var temp = (Math.round((widget.get(item) * 1 + step * 1) * 10) / 10).toFixed(1);
                        io.write(item, temp);
                    }
                });
                Was mir immer noch nicht ganz klar ist wie ich jetzt beeinflussen kann welcher Wert mit dem Button geändert wird bzw. wie ich
                die Funktion zweil mal aufrufen kann und dann aber unterschiedliche Werte geändert werden...

                Kommentar


                  #9
                  Ich denke ein Weg wäre.....
                  Lege Dir in der visu.js z.B. eine "angepasste device.rtr" an.
                  Code:
                  // ----- [COLOR=#0000FF]device.rtrcomfort [/COLOR]-----------------------------------------------------------
                  $(document).delegate('div[data-widget="[COLOR=#0000FF]device.rtrcomfort[/COLOR]"] > div > a[data-icon="minus"]', {
                      'click': function (event, response) {
                          var uid = $(this).parent().parent().attr('id');
                          var step = $('#' + uid).attr('data-step');
                          var item = $('#' + uid + 'set').attr('data-item');
                  
                          var temp = (Math.round((widget.get(item) - step) * 10) / 10).toFixed(1);
                          io.write(item, temp);
                      }
                  });
                  
                  $(document).delegate('div[data-widget="[COLOR=#0000FF]device.rtrcomfort[/COLOR]"] > div > a[data-icon="plus"]', {
                      'click': function (event, response) {
                          var uid = $(this).parent().parent().attr('id');
                          var step = $('#' + uid).attr('data-step');
                          var item = $('#' + uid + 'set').attr('data-item');
                  
                          var temp = (Math.round((widget.get(item) * 1 + step * 1) * 10) / 10).toFixed(1);
                          io.write(item, temp);
                      }
                  });
                  Dann im Pages eine dazugehörige html anlegen (z.B. widget_rtr_comfort.html), welche Du via import in Dein "komplettes" Widget einbindest

                  Kommentar


                    #10
                    So ähnlich habe ich mir das auch gedacht, wobei mir nicht ganz gefällt, das der benötigte Code dann an mehreren Stellen verteilt ist.

                    Eventuell werde ich das dann alles in separaten Dateien zusammenfassen...

                    Kommentar


                      #11
                      Wie auch immer Du das dann löst. Hauptsache Du hast den Zusammenhang verstanden.

                      Kommentar


                        #12
                        Zitat von macflei Beitrag anzeigen
                        Wie auch immer Du das dann löst. Hauptsache Du hast den Zusammenhang verstanden.
                        Hat zwar lang gedauert, aber ich denke ich hab es verstanden...

                        Kommentar


                          #13
                          So hier mal der Code damit die Verstellung der Komforttemperatur funktioniert.

                          Was jetzt noch offen ist:
                          - Buttons für die Sollwertverschiebung ausblenden wenn nicht im Konfort-Betrieb
                          - Sollwertverschiebung auf Wert 0.0 setzen wenn man aus dem Komfortbetrieb raus geht
                          - Werte IMMER mit einer Nachkommastelle anzeigen
                          - Widget breiter machen, da die obere Zeile teilweise "überschlägt"

                          RTR_MDT_NEU_002.JPG

                          Code:
                          /**
                          * Standard RTR (Room Temperatur Regulator) mit Komforttemperatur
                          *
                          * @param "id"                            eingeitige Bezeichnung fuer das Widget
                          * @param "txt"                        Name des RTR´s oder Raum
                          * @param "gad_actual"            Isttemperatur
                          * @param "gad_set_value"    Sollwert (absolut)
                          * @param "gad_set"                Sollwertverschiebung
                          * @param "gad_com"                Komforttemperatur
                          * @param "gad_heat_value"    Stellgroesse
                          * @param "gad_state"            Betriebsart (Komfort/StandBy/Nacht/Frost)    / 1Byte
                          * @param "gad_txt"                Text vom RTR anzeigen (optional)
                          * @param "step"                        Schrittweite fuer die plus/minus Buttons (optional, default 0.5)
                          */
                          
                          {% macro rtr(id, txt, gad_actual, gad_set_value, gad_set, gad_com, gad_heat_value, gad_state, gad_txt, step) %}
                              {% import "basic.html" as basic %}
                          
                          <div class="rtr">
                                  <div class="actual">
                                          <div class="temp">{{ basic.float(id~'actual', gad_actual, '°C' ) }}/{{ basic.float(id~'set', gad_set, '°C' ) }}/{{ basic.float(id~'heat_value', gad_heat_value, '%' ) }}</div>
                                          <div class="text">{{ txt }} {% if gad_txt %} {{ basic.value(id~'txt', gad_txt) }} / {{ basic.value(id~'state', gad_state) }} {% endif %}</div>
                                  </div>
                                  
                              <div id="{{ uid(page, id) }}" data-widget="device.rtr.set" data-step="{{ step|default(1.0) }}" class="rtr">
                              <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, '°C' ) }}</div>
                                           <div class="temp">{{ basic.float(id~'set_value', gad_set_value, '°C Solltemp' ) }}</div>
                                           <a data-role="button" data-icon="plus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>
                               </div>
                               </div>    
                           
                              
                              <div id="{{ uid(page, id) }}" data-widget="device.rtr.com" data-step="{{ step|default(2.0) }}" class="rtr">
                                  <div class="set">
                                          <a data-role="button" data-icon="minus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>
                                          <div class="temp">{{ basic.float(id~'com', gad_com, '°C Komtemp' ) }}</div>
                                          <a data-role="button" data-icon="plus" data-inline="true" data-iconpos="notext" class="ui-mini"></a>
                                  </div>
                              </div>
                          
                              <div class="control">
                                  {{ basic.switch(id~'mode', gad_state, icon1~'user_available.png', icon0~'user_away.png', '1', '2') }}
                                  {{ basic.switch(id~'night', gad_state, icon1~'scene_night.png', icon0~'scene_day.png', '3', '2') }}
                                  {{ basic.switch(id~'frost', gad_state, icon1~'weather_frost.png', icon0~'weather_frost.png', '4', '2') }}
                                  {{ basic.shifter(id~'shift', '', gad_heat_value, icon1~'sani_heating_series_00.png', icon0~'sani_heating_series_00.png',0,90 ) }}
                              </div>
                          </div>
                              
                          {% endmacro %}

                          Code:
                          /**
                           * This file is for your own widgets.
                           */
                          
                          
                          // ----- d e v i c e ----------------------------------------------------------
                          // ----------------------------------------------------------------------------
                          // ----- device.rtr.set--------------------------------------------------------
                          
                          $(document).delegate('div[data-widget="device.rtr.set"] > div > a[data-icon="minus"]', {
                              'click': function (event, response) {
                                  var uid = $(this).parent().parent().attr('id');
                                  var step = $('#' + uid).attr('data-step');
                                  var item = $('#' + uid + 'set').attr('data-item');
                          
                                  var temp = (Math.round((widget.get(item) - step) * 10) / 10).toFixed(1);
                                  io.write(item, temp);
                              }
                          });
                          
                          $(document).delegate('div[data-widget="device.rtr.set"] > div > a[data-icon="plus"]', {
                              'click': function (event, response) {
                                  var uid = $(this).parent().parent().attr('id');
                                  var step = $('#' + uid).attr('data-step');
                                  var item = $('#' + uid + 'set').attr('data-item');
                          
                                  var temp = (Math.round((widget.get(item) * 1 + step * 1) * 10) / 10).toFixed(1);
                                  io.write(item, temp);
                              }
                          });
                          
                          // ----- device.rtr.com--------------------------------------------------------
                          $(document).delegate('div[data-widget="device.rtr.com"] > div > a[data-icon="minus"]', {
                              'click': function (event, response) {
                                  var uid = $(this).parent().parent().attr('id');
                                  var step = $('#' + uid).attr('data-step');
                                  var item = $('#' + uid + 'com').attr('data-item');
                          
                                  var temp = (Math.round((widget.get(item) - step) * 10) / 10).toFixed(1);
                                  io.write(item, temp);
                              }
                          });
                          
                          $(document).delegate('div[data-widget="device.rtr.com"] > div > a[data-icon="plus"]', {
                              'click': function (event, response) {
                                  var uid = $(this).parent().parent().attr('id');
                                  var step = $('#' + uid).attr('data-step');
                                  var item = $('#' + uid + 'com').attr('data-item');
                          
                                  var temp = (Math.round((widget.get(item) * 1 + step * 1) * 10) / 10).toFixed(1);
                                  io.write(item, temp);
                              }
                          });
                          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>
                                          {{ device.rtr('rtr', 'Heizung', 'Heizung.Kind.isttemp', 'Heizung.Kind.solltemp', 'Heizung.Kind.sollschieb', 'Heizung.Kind.comforttemp', 'Heizung.Kind.stellgroesse', 'Heizung.Kind.status', 'an', 0.2) }}
                                      </div>
                                  </div>
                              </div>
                          Zuletzt geändert von PauleFoul; 08.11.2015, 13:21.

                          Kommentar

                          Lädt...
                          X