Ankündigung

Einklappen
Keine Ankündigung bisher.

Mal wieder Rollladen

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

    Mal wieder Rollladen

    Hallo,

    ich habe folgende Konstellation mit einem Rolladen:

    Aktor JRA/S4.230.2.1

    Auszug aus dem item:
    Code:
        Arbeit:
            name: Arbeitszimmer
            sv_page: room
            sv_img: scene_office.png
            light: {}
    
            ceiling:
                name: Deckenlicht
                type: bool
                # visu = yes
                visu_acl: rw
                knx_dpt: 1
                knx_send: 1/0/6
                knx_listen: 1/6/6
                knx_init: 1/6/6
                sv_widget: "{{ basic.switch('item', 'item', icon1~'light_ceiling_light.png', icon0~'light_ceiling_light.png') }} Deckenlicht"
    
            Rollladen:
                sv_widget: Rollladen_Arbeitszimmer{{ device.shutter('Roll_AZ', 'Rollladen', 'EG.Arbeit.Rollladen.move', 'EG.Arbeit.Rollladen.stop', 'EG.Arbeit.Rollladen.pos') }}
    
                move:
                    type: bool
                    visu_acl: rw
                    enforce_updates: 'true'
                    knx_dpt: 1
                    knx_send: 1/1/2
    
                stop:
                    type: bool
                    visu_acl: rw
                    enforce_updates: 'true'
                    knx_dpt: 1
                    knx_send: 1/1/1
    
                pos:
                    type: num
                    visu_acl: rw
                    knx_dpt: 5
                    knx_send: 1/6/200
                    knx_init: 1/6/200
                    # 1/1/2 -> Rollladen AUF/AB
                    # 1/1/1 -> Rollladen STOP
                    #  -> Rollladen POSITION anfahren existiert bei JRA/S4.230.2.1 nicht
                    # 1/6/200 -> Rollladen POSITION Rückmeldung 0..255
                    # 1/6/201 -> Endlage oben 0..1
                    # 1/6/202 -> Endlage unten 0..1
    Folgende Probleme:

    - Der Rolladen fährt über die SmartVisu verkehrt herum. Bei Klick auf oben fährt der Rollladen nach unten und umgekehrt. Am Aktor kann ich die Richtung nicht umkehren. Der Rolladen reagiert folgendermaßen auf Direktzugriff per knxd:
    knxtool groupswrite local: 1/1/2 1 # Rollladen Buero runter
    knxtool groupswrite local: 1/1/2 0 # Rollladen Buero rauf

    - Die Position wird nur beim Klick auf X aktualisiert und nicht während der Fahrt des Rollladens. Am Aktor ist das Statusobjekt dafür bei "Objektwert senden" auf "bei Änderung und Aufforderung" gesetzt.
    - Den Rollladen auf Position fahren geht ja direkt mit dem Aktor nicht. Ich habe eine Rollladenlogik entdeckt unter https://knx-user-forum.de/forum/supp...ber-zeit/page4, gebe aber zu, dass ich diese nicht wirklich verstehe.

    Protokoll Busmonitor:
    Code:
    gedrückt #    Zeit    Dienst    Flags     Prio    Quelladresse    Quelle    Zieladresse    Ziel    Rout    Typ    DPT    Info    Iack
    x        14    2017-04-24 17:31:38.886    vom Bus    S=0    Low    1.1.255    -    1/1/1    Arbeiten - Auf/Ab Kurzzeit    5    Schreiben      1.008 Auf/Ab    $01 | Ab    LL_ACK
             15    2017-04-24 17:31:39.136    vom Bus    S=2    Low    1.1.9    1.1.9  JRA/S4.230.2.1 Jal./Rol.Akt.man.4f,230V,REG    1/6/200    Status Rollladen Höhe Arbeit    6    Schreiben      5.001 Prozent (0..100%)    $20 | 12,5 %    LL_ACK
    v        16    2017-04-24 17:31:55.286    vom Bus    S=4    Low    1.1.255    -    1/1/2    Arbeiten - Auf/Ab Langzeit    5    Schreiben      1.008 Auf/Ab    $00 | Auf    LL_ACK
    x        17    2017-04-24 17:31:57.630    vom Bus    S=6    Low    1.1.255    -    1/1/1    Arbeiten - Auf/Ab Kurzzeit    5    Schreiben      1.008 Auf/Ab    $01 | Ab    LL_ACK
             18    2017-04-24 17:31:57.864    vom Bus    S=0    Low    1.1.9    1.1.9  JRA/S4.230.2.1 Jal./Rol.Akt.man.4f,230V,REG    1/6/200    Status Rollladen Höhe Arbeit    6    Schreiben      5.001 Prozent (0..100%)    $0A | 3,9 %    LL_ACK
             19    2017-04-24 17:31:59.724    vom Bus    S=2    Low    1.1.255    -    1/1/2    Arbeiten - Auf/Ab Langzeit    5    Schreiben      1.008 Auf/Ab    $00 | Auf    LL_ACK
    Vielen Dank und Gruß Holger

    #2
    Hallo Holger

    Zitat von HolgiM Beitrag anzeigen
    Aktor JRA/S4.230.2.1

    [...]

    - Der Rolladen fährt über die SmartVisu verkehrt herum. Bei Klick auf oben fährt der Rollladen nach unten und umgekehrt. Am Aktor kann ich die Richtung nicht umkehren. Der Rolladen reagiert folgendermaßen auf Direktzugriff per knxd:
    knxtool groupswrite local: 1/1/2 1 # Rollladen Buero runter
    knxtool groupswrite local: 1/1/2 0 # Rollladen Buero rauf
    Welche Version der smartVISU nutzt du?
    Ich habe denselben Aktor für meine Rollläden und mit SV 2.8 keine Probleme mit auf und ab.
    Bei der Develop-Version hat Onkelandy da kürzlich ein Issue gemeldet, ich habe den aber noch nicht verifiziert. Ist aber eben die Develop-Version!


    Zitat von HolgiM Beitrag anzeigen
    - Die Position wird nur beim Klick auf X aktualisiert und nicht während der Fahrt des Rollladens. Am Aktor ist das Statusobjekt dafür bei "Objektwert senden" auf "bei Änderung und Aufforderung" gesetzt.
    Ja, das ist so. Der JRA/S meldet die Position nicht während der Fahrt sondern erst am Ende und man kann das leider nicht ändern. "bei Änderung und Aufforderung" bedeutet nur, dass der Status sowohl am Ende der Fahrt wie auch per expliziter Leseanforderung gesendet wird.
    Ich habe auch lange gebraucht, um das erst zu verstehen und dann zu akzeptieren. Keinen Ahnung, ob dies bei anderen Aktoren anders ist.


    Zitat von HolgiM Beitrag anzeigen
    - Den Rollladen auf Position fahren geht ja direkt mit dem Aktor nicht. Ich habe eine Rollladenlogik entdeckt unter https://knx-user-forum.de/forum/supp...ber-zeit/page4, gebe aber zu, dass ich diese nicht wirklich verstehe.
    Was meinst du genau mit "geht ja nicht"? Der Aktor hat sowohl ein KO zum setzen der Position in Prozent wie auch 4 voreingestellten Positionen, welche per boolean (DPT 1) angefahren werden können.
    In deinem Arbeit.Rollladen.pos solltest du also bei knx_send die GA dieses KO eintragen und nicht diejenige des Status-KO.

    Auch zwei der vordefinierten Positionen lassen sich mir device.shutter nutzen, indem du ein entsprechendes Item anlegst und dieses als 8. Parameter (item_saved) angibst.



    Noch zwei allgemeine Tipps:

    1. Bei enforce_updates sollte das true meines Wissens ohne ' sein.

    2. In sv_widget kannst du den Begriff item für den Namen des betreffenden items verwenden.
    also {{ device.shutter('item', 'Rollladen', 'item.move', 'item.stop', 'item.pos') }}
    anstatt {{ device.shutter('Roll_AZ', 'Rollladen', 'EG.Arbeit.Rollladen.move', 'EG.Arbeit.Rollladen.stop', 'EG.Arbeit.Rollladen.pos') }}
    So kannst du dieses einfacher auf andere Items kopieren und auch beim Umbenennen eines Items gibt es keine Probleme.

    Kommentar


      #3
      Zitat von smai Beitrag anzeigen
      Hallo Holger


      Welche Version der smartVISU nutzt du?
      Ich habe denselben Aktor für meine Rollläden und mit SV 2.8 keine Probleme mit auf und ab.
      Die SV 2.9 aus dem Komplett-Image von Onkel Andy

      Zitat von smai Beitrag anzeigen
      Was meinst du genau mit "geht ja nicht"? Der Aktor hat sowohl ein KO zum setzen der Position in Prozent wie auch 4 voreingestellten Positionen, welche per boolean (DPT 1) angefahren werden können.
      In deinem Arbeit.Rollladen.pos solltest du also bei knx_send die GA dieses KO eintragen und nicht diejenige des Status-KO.
      Den JRA gibt es in verschiedenen Versionen. Bei der 2.1 gibt es keine Positionsfahrt und damit auch keine Möglichkeit, eine GA darauf zu definieren. Die Position selbst kann sehr wohl gemeldet werden.

      Zitat von smai Beitrag anzeigen
      Noch zwei allgemeine Tipps:

      1. Bei enforce_updates sollte das true meines Wissens ohne ' sein.
      Das ist bei der Übersetzung der Items aus dem Conf in das YAML-Format durch das Script entstanden. Es funktioniert. Ich werde es aber auch mal ohne die Anführungszeichen testen.

      Zitat von smai Beitrag anzeigen
      2. In sv_widget kannst du den Begriff item für den Namen des betreffenden items verwenden.
      also {{ device.shutter('item', 'Rollladen', 'item.move', 'item.stop', 'item.pos') }}
      anstatt {{ device.shutter('Roll_AZ', 'Rollladen', 'EG.Arbeit.Rollladen.move', 'EG.Arbeit.Rollladen.stop', 'EG.Arbeit.Rollladen.pos') }}
      So kannst du dieses einfacher auf andere Items kopieren und auch beim Umbenennen eines Items gibt es keine Probleme.
      Danke. Das werde ich testen.

      Gruß
      Holger

      Kommentar


        #4
        Onkelandy du hast echt die Develop-Version in ein Komplett-Image gepackt!?

        Zitat von HolgiM Beitrag anzeigen
        Den JRA gibt es in verschiedenen Versionen. Bei der 2.1 gibt es keine Positionsfahrt und damit auch keine Möglichkeit, eine GA darauf zu definieren. Die Position selbst kann sehr wohl gemeldet werden.
        Ich habe den 1.1, der ist wie 2.1 ohne manuelle Bedienung. Aber die Position hat er doch trotzdem, um Gegensatz zum 5.1 musst du nur die Fahrzeiten selbst ermitteln und eintragen.


        Zitat von HolgiM Beitrag anzeigen
        Das ist bei der Übersetzung der Items aus dem Conf in das YAML-Format durch das Script entstanden. Es funktioniert. Ich werde es aber auch mal ohne die Anführungszeichen testen.
        Sorry, habe nicht gesehen, dass dies YAML ist. Da ist es allenfalls richtig mit '

        Kommentar


          #5
          Zitat von smai Beitrag anzeigen
          Onkelandy du hast echt die Develop-Version in ein Komplett-Image gepackt!?
          Die Frage ist zwar nicht an mich gerichtet, aber ich habe dieses Image verwendet:
          https://sourceforge.net/projects/sma...4.zip/download

          Wenn ich https://github.com/Martin-Gleiss/smartvisu/issues/158 richtig verstehe, muss irgendwo im Code (Ja, wo eigentlich?) dies gesetzt werden :
          Code:
          <td valign="top">
              <div class="set">
                  {% if item_move is empty %}
                      {{ basic.button('', item_pos, '', 'carat-u', min) }}
                  {% else %}
                      {{ basic.button('', item_move, '', 'carat-u', min < max ? 1 : 0 ) }}
                  {% endif %}
              </div>
          </td>
          Zitat von smai Beitrag anzeigen
          Ich habe den 1.1, der ist wie 2.1 ohne manuelle Bedienung. Aber die Position hat er doch trotzdem, um Gegensatz zum 5.1 musst du nur die Fahrzeiten selbst ermitteln und eintragen.
          Ich habe noch mal in der Doku zum Aktor nachgesehen. du hast recht. Ich habe das mit den Fahrzeiten verwechselt.


          Kommentar


            #6
            Der Code dürfte aus widgets/device.html sein.
            Ich hatte da an den Parameternamen rumgespielt und zuletzt wohl eine inkonsistente Version erzeugt.

            Kommentar


              #7
              Zitat von smai Beitrag anzeigen
              Der Code dürfte aus widgets/device.html sein.
              Ich hatte da an den Parameternamen rumgespielt und zuletzt wohl eine inkonsistente Version erzeugt.
              Ist mein Schnipsel oben denn nun richtig?

              Danke.

              Kommentar


                #8
                Ich würde sagen, es muss folgendermassen sein, kann es aber grad nicht testen:

                Zeilen 33 - 41
                HTML-Code:
                                <td valign="top">
                                    <div class="set">
                                        {% if item_move is empty %}
                                            {{ basic.button('', item_pos, '', 'carat-u', min) }}
                                        {% else %}
                                            {{ basic.button('', item_move, '', 'carat-u', min < max ? 0 : 1 ) }}
                                        {% endif %}
                                    </div>
                                </td>
                Zeilen 55 - 63
                HTML-Code:
                                <td valign="bottom">
                                    <div class="set">
                                        {% if item_move is empty %}
                                            {{ basic.button('', item_pos, '', 'carat-d', max) }}
                                        {% else %}
                                            {{ basic.button('', item_move, '', 'carat-d', min < max ? 1 : 0 ) }}
                                        {% endif %}
                                    </div>
                                </td>

                Kommentar


                  #9
                  [QUOTE=smai;n1087496]Ich würde sagen, es muss folgendermassen sein, kann es aber grad nicht testen:

                  Zitat von smai Beitrag anzeigen
                  Ich würde sagen, es muss folgendermassen sein, kann es aber grad nicht testen:
                  Das war es noch nicht ganz. Beim Starten von Smarthome über sudo /usr/local/smarthome/bin/smarthome.py --start wird jedes mal die Datei /var/www/smartvisu/widgets/device.html überschrieben, so dass die Änderungen nicht wirken. Wo ist denn das Template dafür?

                  Immerhin klappt jetzt die Positionsfahrt.

                  Einen Schritt weiter.

                  Danke noch Mal für die Mühe.

                  Gruß Holger

                  Kommentar


                    #10
                    Es wird waaas!?
                    Wenn das tatsächlich so ist, müssen du dich an die Leute von SHNG helfen. Das ist definitiv nicht in meinem Sinn.

                    Kommentar


                      #11
                      Zitat von smai Beitrag anzeigen
                      Es wird waaas!?
                      Wenn das tatsächlich so ist, müssen du dich an die Leute von SHNG helfen. Das ist definitiv nicht in meinem Sinn.
                      Oh Entschuldigung,

                      da war ich etwas voreilig. Ich habe aus Versehen die Kopie angeschaut, die ich selbst angelegt habe. Trotz alledem fährt der Rollladen immer noch in die falsche Richtung. Das hat mich in die Irre geleitet.

                      Der Part value_top/value_bottom kommt in device.html in 2 Macros vor. Ich benutze shutter, nicht blind. Muss das an beiden Stellen geändert werden? Aber auch ein Ändern an beiden Stellen ändert nichts an der verkehrten Richtung. Es muss noch etwas Anderes sein. Kann es sein, dass es daran liegt, dass ich min und max in meinem Aufruf nicht nutze (sv_widget: Rollladen_Arbeitszimmer{{ device.shutter('Roll_AZ', 'Rollladen', 'EG.Arbeit.Rollladen.move', 'EG.Arbeit.Rollladen.stop', 'EG.Arbeit.Rollladen.pos') }})) und deshalb min weder größer noch kleiner max ist sondern exakt gleich? Dann wären aber die Default-Werte nicht richtig gesetzt. Es sollte laut dem Kommentar im default.html 0 und 255 sein.

                      device.html nach Änderung:

                      Code:
                      /**
                      * -----------------------------------------------------------------------------
                      * @package     smartVISU
                      * @author      Martin Gleiß
                      * @copyright   2012 - 2015
                      * @license     GPL [http://www.gnu.de]
                      * -----------------------------------------------------------------------------
                      */
                      
                      
                      /**
                      * Standard blind
                      *
                      * @param unique id for this widget (optional)
                      * @param name of the blind
                      * @param a item for the up and down movement (optional, min/max will be sent to item_pos if omitted)
                      * @param a item for stopping the movement (optional)
                      * @param a item for the absolute position of the blinds
                      * @param a item for increase and decrease of the blade (optional)
                      * @param a item for the absolute angle of the blade (optional)
                      * @param the minimum value for close (optional, default: 0)
                      * @param the maximum value for open (optional, default: 255)
                      * @param step between two values (optional, default: 5)
                      *
                      * [USER="25162"]info[/USER] inspired by Frank Berlenz
                      */
                      {% macro blind(id, txt, item_move, item_stop, item_pos, item_shift, item_angle, min, max, step) %}
                              {% import "basic.html" as basic %}
                      
                              <div class="blind"{% if not id is empty %} id="{{ uid(page, id) }}"{% endif %}>
                                      <table align="center" cellpadding="0">
                                              <tr>
                                                      <td valign="top">
                                                              <div class="set">
                                                                      {% if item_move is empty %}
                                                                              {{ basic.button('', item_pos, '', 'carat-u', min) }}
                                                                      {% else %}
                                                                              {{ basic.button('', item_move, '', 'carat-u', min < max ? 0 : 1 ) }}
                                                                      {% endif %}
                                                              </div>
                                                      </td>
                                                      <td rowspan="3" align="left" class="pos">
                                                              {{ basic.slider('', item_pos, min, max, step, 'vertical') }}</td>
                                                      <td rowspan="2" valign="bottom" class="angle">
                                                              {{ txt }}<br />
                                                              {% if item_angle %} {{ basic.slider('', item_angle, min, max, step, 'semicircle') }} {% endif %}
                                                      </td>
                                              </tr>
                                              <tr>
                                                      <td>
                                                              {% if item_stop %}
                                                                      <div class="set">{{ basic.button('', item_stop, '', 'delete', 1) }}</div> {% endif %}</td>
                                              </tr>
                                              <tr>
                                                      <td valign="bottom">
                                                              <div class="set">
                                                                      {% if item_move is empty %}
                                                                              {{ basic.button('', item_pos, '', 'carat-d', max) }}
                                                                      {% else %}
                                                                              {{ basic.button('', item_move, '', 'carat-d', min < max ? 1 : 0 ) }}
                                                                      {% endif %}
                                                              </div>
                                                      </td>
                                                      <td valign="bottom">
                                                              {% if item_shift %}
                                                                      <div class="set">
                                                                              <span style="float: left;">{{ basic.button('', item_shift, '', 'minus', 0) }}</span>
                                                                              <span style="float: right;">{{ basic.button('', item_shift, '', 'plus', 1) }}</span>
                                                                      </div>
                                                              {% endif %}
                                                      </td>
                                              </tr>
                                      </table>
                              </div>
                      {% endmacro %}
                      
                      
                      /**
                      * The Codepad is used to protect some widgets. You have to enter a correct code to use the widgets for a time.
                      * You may specify a global code in the config.php for all codepads.
                      *
                      * @param unique id for this widget
                      * @param code to be entered (optional, default in config)
                      * @param a title for the pad (optional)
                      * @param how long should the widgets be unlocked (optional, default: 10 seconds)
                      */
                      {% macro codepad(id, code, title, duration) %}
                      
                              <div id="{{ uid(page, id) }}" data-id="{{ id }}" data-widget="device.codepad" data-val="{{ code|default(config_codepad_code)|md5 }}" data-duration="{{ duration|default('10') }}"
                                      data-role="popup" data-overlay-theme="a" class="alert" style="width: 166px;" >
                                      <div data-role="header" data-theme="c"><h1>{{ title|default('Enter Code') }}</h1></div>
                      
                                      <input type="password" style="text-align: center;"/>
                      
                                      <div style="margin: 10px;">
                                      {% for i in 1..9 %}
                                              <a data-val="{{ i }}" data-role="button" data-inline="true" data-iconpos="nopic" data-mini="true" >{{ i }}</a>
                                      {% endfor %}
                                              <a data-val="-" data-role="button" data-inline="true" data-iconpos="nopic" data-mini="true" >-</a>
                                              <a data-val="0" data-role="button" data-inline="true" data-iconpos="nopic" data-mini="true" >0</a>
                                              <a data-val="ok" data-role="button" data-inline="true" data-iconpos="nopic" data-mini="true" >OK</a>
                                      </div>
                              </div>
                      
                      {% endmacro %}
                      
                      
                      /**
                      * Standard dimmer with switching and dimming function
                      *
                      * @param unique id for this widget (optional)
                      * @param name of the dimmer
                      * @param a item for switching
                      * @param a item for dimming
                      * @param the minimum value if the slider is moved to total left (optional, default: 0)
                      * @param the maximum value if the slider is moved to total right (optional, default: 255)
                      * @param step between two values (optional, default: 5)
                      * @param the pic for the 'on' state (optional)
                      * @param the pic for the 'off' state (optional)
                      * @param the color for the 'on' state (optional)
                      * @param the color for the 'off' state (optional)
                      */
                      {% macro dimmer(id, txt, item_switch, item_value, min, max, step, pic_on, pic_off, color_on, color_off) %}
                              {% import "basic.html" as basic %}
                      
                              <div class="dimmer" data-widget="device.dimmer"{% if not id is empty %} id="{{ uid(page, id) }}"{% endif %} data-item="{{ item_switch }}, {{ item_value }}">
                                      {{ basic.stateswitch('', item_switch, 'icon', '', [ pic_off|default('light_light.svg'), pic_on|default('light_light.svg') ], '', [ color_off , color_on|default('icon1') ]) }}
                                      <p>{{ txt|e }}</p>
                                      {{ basic.slider('', item_value, min, max, step, 'horizontal', 'none') }}
                              </div>
                      
                      {% endmacro %}
                      
                      
                      /**
                      * Standard RTR (Room Temperatur Regulator)
                      *
                      * @param unique id for this widget (optional)
                      * @param name of the rtr
                      * @param a item for the actual temperature
                      * @param a item for the set temperature
                      * @param a item for comfort / standby (3x bit or 1x byte)
                      * @param a item for night (3x bit or 1x byte)
                      * @param a item for frost (3x bit or 1x byte)
                      * @param a item for the current state of the actor
                      * @param a 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, item_actual, item_set, item_comfort, item_night, item_frost, item_state, item_txt, step) %}
                              {% import "basic.html" as basic %}
                      
                              <div{% if not id is empty %} id="{{ uid(page, id) }}"{% endif %} data-widget="device.rtr" data-step="{{ step|default(0.5) }}"
                                      class="rtr">
                                      <div class="actual">
                                              <div class="temp">{{ basic.print('', item_actual, '°' ) }}</div>
                                              <div class="text">{{ txt }} {% if item_txt %} {{ basic.print('', item_txt, 'text') }} {% endif %}</div>
                                      </div>
                      
                                      {% if item_set %}
                                              <div class="set">
                                                      <a class="ui-btn ui-micro ui-btn-corner-all ui-btn-inline ui-shadow ui-nodisc-icon ui-btn-icon-notext ui-icon-minus" data-sign="-1"></a>
                      
                                                      <div class="temp">{{ basic.print('', item_set, '°' ) }}</div>
                                                      <a class="ui-btn ui-micro ui-btn-corner-all ui-btn-inline ui-shadow ui-nodisc-icon ui-btn-icon-notext ui-icon-plus" data-sign="+1"></a>
                                              </div>
                                      {% endif %}
                      
                                      <div class="control">
                                              {% if ((config_driver == 'linknx') and (item_comfort == item_night) and (item_night == item_frost)) %}
                                                      {{ basic.switch('', item_comfort, 'user_available.svg', 'user_away.svg', 'comfort', 'standby') }}
                                                      {{ basic.switch('', item_night, 'scene_night.svg', 'scene_day.svg', 'night', 'standby') }}
                                                      {{ basic.switch('', item_frost, 'weather_frost.svg', 'weather_frost.svg', 'frost', 'standby') }}
                                              {% elseif ((item_comfort == item_night) and (item_night == item_frost)) %}
                                                      {{ basic.switch('', item_comfort, 'user_available.svg', 'user_away.svg', '1', '2') }}
                                                      {{ basic.switch('', item_night, 'scene_night.svg', 'scene_day.svg', '3', '2') }}
                                                      {{ basic.switch('', item_frost, 'weather_frost.svg', 'weather_frost.svg', '4', '2') }}
                                              {% else %}
                                                      {{ basic.switch('', item_comfort, 'user_available.svg', 'user_away.svg') }}
                                                      {{ basic.switch('', item_night, 'scene_night.svg', 'scene_day.svg') }}
                                                      {{ basic.switch('', item_frost, 'weather_frost.svg', 'weather_frost.svg') }}
                                              {% endif %}
                                              <div style="float:left; width: 3px; height: 50px;"></div>
                                              {{ basic.switch('', item_state, 'sani_heating.svg', 'sani_heating.svg') }}
                                      </div>
                              </div>
                      {% endmacro %}
                      
                      
                      /**
                      * Standard shutter
                      *
                      * @param unique id for this widget (optional)
                      * @param name of the shutter
                      * @param a item for the up and down movement (optional, value_top/value_bottom will be sent to item_pos if omitted)
                      * @param a item for stopping the movement (optional)
                      * @param a item for the absolute position of the blinds
                      * @param a item for increase and decrease of the blade (optional, for future use)
                      * @param a item for the absolute angle of the blade (optional)
                      * @param a item for some saved positions (optional)
                      * @param the value for opened (optional, default 0)
                      * @param the value for closed (optional, default 255)
                      * @param step between two values (optional, default 5)
                      * @param 'half' blade turns from -1 to +1, 'full' blade turns from 0 to +1 (optional, default 'half')
                      * @param a background image url; optimal size is 100px x 180px (optional)
                      * @param the value to send for position 1 (optional, default 0)
                      * @param the value to send for position 2 (optional, default 1)
                      *
                      * [USER="25162"]info[/USER] inspired by Jörg Gutowski
                      */
                      {% macro shutter(id, txt, item_move, item_stop, item_pos, item_shift, item_angle, item_saved, value_top, value_bottom, step, mode, background, value_pos_1, value_pos_2) %}
                              {% import "basic.html" as basic %}
                      
                              <div class="blind"{% if not id is empty %} id="{{ uid(page, id) }}"{% endif %}>
                                      <table align="center" cellpadding="0">
                                              <tr>
                                                      <td valign="top">
                                                              <div class="set">
                                                                      {% if item_move is empty %}
                                                                              {{ basic.button('', item_pos, '', 'carat-u', min) }}
                                                                      {% else %}
                                                                              {{ basic.button('', item_move, '', 'carat-u', min < max ? 0 : 1 ) }}
                                                                      {% endif %}
                                                              </div>
                                                      </td>
                                                      <td rowspan="3" valign="center" class="pos">
                                                              {{ basic.shutter('', item_pos, item_angle, value_top, value_bottom, step, mode, background) }}
                                                      </td>
                                                      <td valign="top">
                                                              {% if item_saved %}
                                                                      <div>{{ basic.button('', item_saved, 'Pos1', 'grid', value_pos_1) }}</div>
                                                              {% endif %}
                                                      </td>
                                              </tr>
                                              <tr>
                                                      <td valign="center">
                                                              {% if item_stop %}
                                                                      <div class="set">{{ basic.button('', item_stop, '', 'delete', 1) }}</div>
                                                              {% endif %}
                                                      </td>
                                                      <td valign="center">{{ txt }}</td>
                                              </tr>
                                              <tr>
                                                      <td valign="bottom">
                                                              <div class="set">
                                                                      {% if item_move is empty %}
                                                                              {{ basic.button('', item_pos, '', 'carat-d', max) }}
                                                                      {% else %}
                                                                              {{ basic.button('', item_move, '', 'carat-d', min < max ? 1 : 0 ) }}
                                                                      {% endif %}
                                                              </div>
                                                      </td>
                                                      <td valign="bottom">
                                                              {% if item_saved %}
                                                                      <div>{{ basic.button('', item_saved, 'Pos2', 'grid', value_pos_2) }}</div>
                                                              {% endif %}
                                                      </td>
                                              </tr>
                                      </table>
                              </div>
                      
                      {% endmacro %}
                      
                      /**
                      * Widget for usage of UZSU plugin
                      *
                      * @param unique id for this widget (optional)
                      * @param the item of the UZSU (NOT the item which is switched by UZSU)
                      * @param headline of popup (optional, default: UZSU)
                      * @param the pic for the 'on' state (optional)
                      * @param the pic for the 'off' state (optional)
                      * @param supported types are 'bool', 'num', 'list', 'text' (optional, default: bool)
                      * @param valueParameterList depending on valueType (optional):
                              bool: ['text on','text off'] or ['text1:value1','text2:value2'],
                              num: ['min max step'],
                              list: ['value1','value2','value3'] or ['text1:value1','text2:value2','text3:value3'],
                              text: no value parameter
                      * @param the color for the 'on' state, e.g. '#f00' for red (default 'icon1' of the design)
                      * @param the color for the 'off' state, e.g. '#f00' for red (default 'icon0' of the design)
                      *
                      * @author Michael Würtenberger
                      */
                      
                      {% macro uzsuicon(id, item, headline, pic_on, pic_off, valueType, valueParameterList, color_on, color_off, _backend) %}
                              {% import "basic.html" as basic %}
                      
                              <span{% if not id is empty %} id="{{ uid(page, id) }}"{% endif %} data-widget="uzsu.uzsuicon" data-item="{{ item }}"
                                      data-headline="{{ headline|default('UZSU') }}" data-designType="{{ _backend }}"
                                      data-valueType="{{ valueType|default('bool') }}" data-valueParameterList="{{ implode(valueParameterList) }}"
                                      class="switch icon">
                                      <a>
                                              {{ basic._icon(pic_off|deficon('time_timer_switch.svg'), color_off, '', 'icon-off') }}
                                              {{ basic._icon(pic_on|deficon('time_timer_switch.svg'), color_on|default('icon1'), '', 'icon-on hide') }}
                                      </a>
                              </span>
                      
                      {% endmacro %}
                      Zuletzt geändert von HolgiM; 25.04.2017, 20:36.

                      Kommentar


                        #12
                        Irgendwie fehlen da die Defaultwerte. Wahrscheinlich habe ich da beim teilweisen committen irgendwas durcheinander gebracht.
                        Ich werde das bei Gelegenheit korrigieren, habe aber im Moment keine Zeit dafür.

                        Ich kann nur - wie schon oft - wiederholen, dass die Develop-Version nicht für den produktiven Einsatz gedacht ist.
                        Nicht mal ich selbst nutze diese in meinem Haus.

                        Kommentar


                          #13
                          Zitat von smai Beitrag anzeigen
                          Irgendwie fehlen da die Defaultwerte. Wahrscheinlich habe ich da beim teilweisen committen irgendwas durcheinander gebracht.
                          Ich werde das bei Gelegenheit korrigieren, habe aber im Moment keine Zeit dafür.

                          Ich kann nur - wie schon oft - wiederholen, dass die Develop-Version nicht für den produktiven Einsatz gedacht ist.
                          Nicht mal ich selbst nutze diese in meinem Haus.
                          Hallo,

                          danke, ich werde mal die 2.8 nehmen. Sie befindet sich bei dem Image ja parallel zur 2.9 Version in einem anderen Verzeichnis. Für mich war nicht klar erkennbar, das die Version 2.9 noch in einem so frühen Stadium ist. Das heisst ja auch nicht, dass die Version 2.8 fehlerfrei ist.

                          Gruß
                          Holger

                          Kommentar


                            #14
                            Zitat von HolgiM Beitrag anzeigen
                            Trotz alledem fährt der Rollladen immer noch in die falsche Richtung. Das hat mich in die Irre geleitet.
                            Hi Holger,

                            kann es sein das der Rolladenmotor nur falsch herum angeschlossen ist? Wenn er bei 1 hoch und bei 0 runter fährt... Den Fehler hatte ich am Anfang auch.

                            Dafür habe ich nun Probleme anständige Anleitungen und Infos für meine Visu bzw. die Konfig von shng zu finden...

                            VG Jannis

                            Kommentar


                              #15
                              Zitat von startrix Beitrag anzeigen

                              Hi Holger,

                              kann es sein das der Rolladenmotor nur falsch herum angeschlossen ist? Wenn er bei 1 hoch und bei 0 runter fährt... Den Fehler hatte ich am Anfang auch.

                              Dafür habe ich nun Probleme anständige Anleitungen und Infos für meine Visu bzw. die Konfig von shng zu finden...

                              VG Jannis
                              Definitiv nicht! Meine KNX-Installation ist bereits seit 5 Jahren im Betrieb. Die Taster lassen es in der richtigen Richtung fahren (1 runter, 0 rauf, sieht man auch bei dem Test mit groupswrite).Mit der Version 2.8 lief es dann auch richtig. Weiß jemand, ob dieser Bug in der Version 2.9 mittlerweile behoben ist?

                              Kommentar

                              Lädt...
                              X