Ankündigung

Einklappen
Keine Ankündigung bisher.

Struktur für RTR

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

    Struktur für RTR

    Hi,

    ich bin gerade dabei meine Heizung bzw. die RTR´s über die SmartVisu zu visualisieren. Dabei setze ich als Backend SmartHome.py ein.
    Allerdings habe ich so meine Probleme die richtige Struktur zu finden.
    Aktuell habe ich in meiner Conf folgendes:

    Code:
    [[[[Heizung]]]]
            type = num
            visu = yes
    	history = true
    	knx_dpt = 9
            knx_listen = 2/1/1
    	[[[[[set]]]]]
    		type = num
    		visu = yes
    	        history = true
    		knx_dpt = 9
    		knx_send = 2/1/3
    		knx_listen = 2/1/4
    	[[[[[mode]]]]]
    		type = num
    		visu = yes
    		knx_dpt = 5
    		knx_listen = 2/1/7
    		knx_send = 2/1/6
    	[[[[[night]]]]]
    		type = num
    		visu = yes
    		knx_dpt = 5
    		knx_listen = 2/1/10
    		knx_send = 2/1/7
    	[[[[[frost]]]]]
    		type = num
    		visu = yes
    		knx_dpt = 5
    		knx_listen = 2/1/7
    	[[[[[state]]]]]
    		type = num
    		visu = yes
    		history = true
    		knx_dpt = 5
    		knx_listen = 2/1/4
    		knx_init = 2/1/4
    Der Code für den RTR in der Visu sieht wie folgt aus:

    Code:
    {{ device.rtr('WohnzimmerRTR', '', 'Haus.Erdgeschoss.Wohnzimmer.Heizung', 'Haus.Erdgeschoss.Wohnzimmer.Heizung.set', 'Haus.Erdgeschoss.Wohnzimmer.Heizung.mode', 'Haus.Erdgeschoss.Wohnzimmer.Heizung.mode', 'Haus.Erdgeschoss.Wohnzimmer.Heizung.mode', 'Haus.Erdgeschoss.Wohnzimmer.Heizung.state') }}
    Meine Adressen sind wie im Screenshot zu sehen angelegt.

    Ich kann die Temperatur verstellen aber der Mode wird nicht korrekt gesetzt.
    Ich habe MDT-Aktoren die, soweit ich weiß, noch eine zusätzliche Info an die Rückmeldung hängen.

    Mich würde erstmal interessieren ob ich generell einen Fehler in meiner Config habe oder ob es eventuell wirklich an den MDT-Aktoren und deren Rückmeldung liegt.
    Wenn ich die Config so in Smarthome lade, dann funktioniert gar nichts mehr.

    Vielen Dank für eure Hilfe.
    Marcus
    Angehängte Dateien

    #2
    Hallo Marcus,

    Martin und ich bauen gerade an dem nächsten Pi Release. Wir planen am WE eine Beta zu releasen. Danach kann ich mir das mit Martin mal ansehen.

    Sorry und bis bald

    Marcus

    Kommentar


      #3
      Hallo,

      möchte das Thema noch mal aufgreifen. Könnt Ihr euch das ansehen und mir sagen ob ich meine Gruppenadressen den richtigen Items zugeordnet habe oder ich hier noch einen Fehler drin habe?

      Vielen Dank
      Marcus

      Kommentar


        #4
        Hallo Marcus,

        sorry für die späte Antwort.

        Zitat von mannmawg Beitrag anzeigen
        Wenn ich die Config so in Smarthome lade, dann funktioniert gar nichts mehr.
        Kannst Du das bitte spezifizieren?

        Die Config sieht an sich ganz gut aus. Was ich so nicht beantworten kann, ob die DPT zu dem Aktor passen.

        Vllt. kann Apollo noch einen Fehler erkennen?

        Bis bald

        Marcus

        Kommentar


          #5
          Hi Marcus,

          sorry der Ursprungs-Post ist nicht mehr ganz aktuell.
          Habe meine Config neu aufgesetzt.
          Hier meine aktuelle Config:
          Code:
          [[[[Heizung]]]]
           name = Fußbodenheizung
           type = num
           value = 21
           history = yes
           visu = yes
           knx_dpt = 9
           knx_listen = 2/1/1
           sv_widget = "{{ device.rtr('item', 'Wohnzimmer', 'item', 'item.set', 'item.mode', 'item.mode', 'item.mode', 'item.state') }}"
           [[[[[set]]]]]
            type = num
            visu = yes
            history = true
            knx_dpt = 9
            knx_send = 2/1/3
            knx_listen = 2/1/4
           [[[[[mode]]]]]
            type = num
            visu = yes
            knx_dpt = 20
            knx_listen = 2/1/7
            knx_send = 2/1/6
           [[[[[state]]]]]
            type = num
            visu = yes
            history = true
            knx_dpt = 5
            knx_listen = 2/1/4
            knx_init = 2/1/4
          Wenn ich nun den Mode in der Visualisierung ändere kann ich im Gruppenmonitor der ETS keine Telegramme sehen.
          Ich bin von der Cometvisu auf die Smartvisu umgestiegen, an den Gruppenadressen habe ich nichts gemacht, mit der Cometvisu hat es funktioniert. Ich habe es quasi 1zu1 übernommen.

          Gruß Marcus

          Kommentar


            #6
            Hallo Marcus,

            kann es sein, dass Du ein Logfile mit einer Fehlermeldung unterschlägst? ;-)

            knx_dpt = 20 wird momentan nicht unterstützt.

            Probier mal knx_dpt = 5.

            Bis bald

            Marcus

            Kommentar


              #7
              Zitat von mknx Beitrag anzeigen
              knx_dpt = 20 wird momentan nicht unterstützt.
              jetzt aber. Allerdings erst auf github.

              Bis bald

              Marcus

              Kommentar


                #8
                Hi Marcus,

                sorry an das Logfile hätte ich natürlich denken können

                Code:
                Item 'Haus.EG.Wohnzimmer.Heizung.mode': value (night) does not match type (num). Via Visu 192.168.178.34:5730
                habe den dpttype in der Config auf 5 geändert. Leider ohne Erfolg

                Danke
                marcus

                Kommentar


                  #9
                  Hallo Marcus,

                  was so ein bisserl Log ausmacht.

                  Die Visu versucht den Mode auf 'night' zu setzen. Das ist ein String und harmoniert nicht mit dem type = num.

                  Jetzt ist die große Preisfrage, was erwartet Dein Autor?

                  Bis bald

                  Marcus

                  Kommentar


                    #10
                    Hi Marcus,

                    das Kommunikationsobjekt zum schalten der Betriebsart ist vom Datentyp 20.102 ebenso die Rückmeldung, also beides 1-byte. Laut Dokumentation wertet das Objekt den empfangen Hex-Wert entsprechend aus.
                    Code:
                    Komfort 0x01
                    Standby 0x02
                    Nacht 0x03
                    Frost/Hitzeschutz 0x04
                    Im log steht:
                    Code:
                    SmartHome.py ERROR    Problem running <bound method KNX.update_item of <plugins.knx.KNX connected 127.0.0.1:6720 at 0x1f205a8>>: invalid literal for int() with base 10: 'comfort'
                    Irgendwie stehe ich auf dem Schlauch.

                    Danke
                    Marcus

                    Kommentar


                      #11
                      Habe das gleiche Problem. Bin auch gerade dabei meinen MDT Heizungsaktor anzubinden. Bei mir wird ebenfalls versucht ein String zu setzen. Irgendwie ist mir nicht klar, wie die Betriebsart von der smartVISU ausgesteuert wird. Und für was ist eigentlich gad_state?

                      Außerdem hat der MDT keine GA zum Setzen der Sollwerttemperatur sondern nur für die Sollwertverschiebung und für den Komfort Sollwert. Wie man das nun in sh.py + smartVISU korrekt einbinden weiß ich auch noch nicht
                      Mit freundlichen Grüßen
                      Niko Will

                      Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
                      - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

                      Kommentar


                        #12
                        Hallo Marcus,

                        Zitat von mannmawg Beitrag anzeigen
                        Laut Dokumentation wertet das Objekt den empfangen Hex-Wert entsprechend aus.
                        Code:
                        Komfort 0x01
                        Standby 0x02
                        Nacht 0x03
                        Frost/Hitzeschutz 0x04
                        ich denke hier muss die smartVISU die Werte 1-4 liefern (hex ist nicht nötig).
                        @Apollo: hörst Du?

                        Ansonsten müsst man eine kleine Logik bauen, die die Werte konvertiert.

                        Bis bald

                        Marcus

                        Kommentar


                          #13
                          Zur Info: ich baue gerade das RTR Widget für den MDT Heizungsaktor um. Melde mich, wenn ich fertig bin.
                          Mit freundlichen Grüßen
                          Niko Will

                          Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
                          - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

                          Kommentar


                            #14
                            Okay, ich habe meinen MDT Heizungsaktor wie folgt angebunden bekommen.

                            Zuerst einmal kann man leider nicht das Standard device.rtr Widget verwendet, da der MDT mit Sollwertverschiebung arbeitet. Man kann zwar auch den Komfort Sollwert verwenden, wenn man sich aber nicht im Modus Komfort befindet würde dann der falsche Wert gesetzt werden. Daher habe ich das device.rtr Widget in meinem pages Folder angepasst:

                            Code:
                            /**
                             * Standard RTR (Room Temperatur Regulator)
                             *
                             * @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', 'comfort', 'standby') }}
                                            {{ basic.switch(id~'night', gad_night, icon1~'scene_night.png', icon0~'scene_day.png', 'night', 'standby') }}
                                            {{ basic.switch(id~'frost', gad_frost, icon1~'weather_frost.png', icon0~'weather_frost.png', 'frost', 'standby') }}
                                        {% 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 %}
                            Das liegt in einer Datei widget_ext.html in meinem pages Ordner. Verwendet wird das ganze nun so:

                            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>Flur Heizung</h3>
                                        {% import "widget_ext.html" as ext %}
                                        {{ ext.rtr('eg.flur.heizung', 'Flur/WC', 'eg.flur.heizung.ist', 'eg.flur.heizung.soll', 'eg.flur.heizung.sollwertverschiebung', 'eg.flur.heizung.komfort', 'eg.flur.heizung.nacht', 'eg.flur.heizung.frostschutz', 'eg.flur.heizung.heizen') }}
                                    </div>
                            
                                </div>
                                </div>
                            Und das zugehörige sh.py Item:

                            Code:
                            ['eg']
                                [['flur']]
                                    [[['heizung']]]
                                        [[[['ist']]]]
                                            type=num
                                            visu=true
                                            knx_dpt=9
                                            knx_listen=4/1/0
                                            cache=true
                                            sqlite=true
                                        [[[['soll']]]]
                                            type=num
                                            visu=true
                                            knx_dpt=9
                                            knx_init=4/7/0
                                            sqlite=true
                                        [[[['sollwertverschiebung']]]]
                                            type=num
                                            visu=true
                                            knx_dpt=9
                                            knx_send=4/3/0
                                        [[[['stellwert']]]]
                                            type=num
                                            visu=true
                                            knx_dpt=5001
                                            knx_init=4/4/0
                                            sqlite=true
                                        [[[['modus']]]]
                                            type=num
                                            knx_dpt=20
                                            knx_init=4/5/1
                                        [[[['komfort']]]]
                                            type=bool
                                            visu=true
                                            knx_dpt=1
                                            knx_send=4/5/3
                                            eval=value if value < 2 else (sh.eg.flur.heizung.modus() & 0x01)
                                            eval_trigger=eg.flur.heizung.modus
                                        [[[['standby']]]]
                                            type=bool
                                            visu=true
                                            eval=value if value < 2 else ((sh.eg.flur.heizung.modus() & 0x02) >> 1)
                                            eval_trigger=eg.flur.heizung.modus
                                        [[[['nacht']]]]
                                            type=bool
                                            visu=true
                                            knx_dpt=1
                                            knx_send=4/5/4
                                            eval=value if value < 2 else ((sh.eg.flur.heizung.modus() & 0x04) >> 2)
                                            eval_trigger=eg.flur.heizung.modus
                                        [[[['frostschutz']]]]
                                            type=bool
                                            visu=true
                                            knx_dpt=1
                                            knx_send=4/5/5
                                            eval=value if value < 2 else ((sh.eg.flur.heizung.modus() & 0x08) >> 3)
                                            eval_trigger=eg.flur.heizung.modus
                                        [[[['frostalarm']]]]
                                            type=bool
                                            visu=true
                                            eval=(sh.eg.flur.heizung.modus() & 0x80) >> 7
                                            eval_trigger=eg.flur.heizung.modus
                                        [[[['heizen']]]]
                                            type=bool
                                            visu=true
                                            eval=(sh.eg.flur.heizung.modus() & 0x20) >> 5
                                            eval_trigger=eg.flur.heizung.modus
                            Man kann zwar die Modi Komfort, Nacht, Frost/Hitzeschutz auch mit 1-bit auslesen, aber leider den Status heizen nicht. Daher lese ich Modus aus und triggere damit die anderen Items. Da diese Items wie z.B. komfort auch über die Visu gesetzt werden können, muss zunächst geprüft werden, ob der Wert von der Visu kommt (könnte man evtl. auch mit source machen).

                            Wenn das jemand einfacher hin bekommen hat, immer her damit!
                            Mit freundlichen Grüßen
                            Niko Will

                            Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
                            - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

                            Kommentar


                              #15
                              Hi Niko,

                              ich werde deinen RTR mal am Wochenende testen.

                              Allerdings habe ich meinen MDT-Heizungsaktor so eingestellt, dass die Sollwerte für Nacht und Standby vom Sollwert Komfort abhängig sind. Verstelle ich nun in meiner aktuellen Visu (CometVisu) z.B. die Temperatur für z.B. Nacht dann wir der Komfort-Sollwert angepasst und die Sollwerte für Nacht und Standby entsprechend der Vorgaben im Aktor angepasst. Fahre eigentlich ganz gut mit den Einstellungen. Wie hast du deinen Aktor parametriert?

                              Gruß Marcus

                              Kommentar

                              Lädt...
                              X