Ankündigung

Einklappen
Keine Ankündigung bisher.

basic.symbol - mode "A and not B" und "not A and B" wie möglich, oder anders ...

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

    basic.symbol - mode "A and not B" und "not A and B" wie möglich, oder anders ...

    Liebe smartVISU'ler,

    ich möchte die Öffnungszustände eine zweiflügeligen Fensters mit der automatischen Auswahl der 4 Icons visualisieren

    Fall A: (item-A-Wert == 0) and (item-B-Wert = 0) -> fts_window_2w.svg
    Fall B: (item-A-Wert == 0) and (item-B-Wert = 1) -> fts_window_2w_open_r.svg
    Fall C: (item-A-Wert == 1) and (item-B-Wert = 0) -> fts_window_2w_open_l.svg
    Fall D: (item-A-Wert == 1) and (item-B-Wert = 1) -> fts_window_2w_open_lr.svg


    Fall A und D sind ja die Standardfunktionalitäten von basic.symbol. Wie bekomme ich aber, allein auf der Visu (bei smarthome.py die inversen Items zu definieren ist bei 20 Fenstern ja sehr unschön) die Negation der Item-Werte hin? Bin kein großer Programmierer, aber ein einfacher Negierungsoperator wäre irgendwie toll, doch irgendwie will das nicht so einfach ... sehe den Wald vor lauter Bäumen momentan nicht mehr.

    Vielen Dank für jegliche Hilfe im Voraus!

    Ralf.




    #2
    Meines Wissens geht das nicht.

    Du könntest etwas mit status.collapse basteln, aber das wird recht unübersichtlich.

    Aber da mir der Use Case gefällt, werde ich für die kommende Version wohl etwas derartiges implementieren.
    Mir schwebt vor, dass man bei mode dann einen beliebigen JavaScript-Ausdruck angeben kann (ähnlich basic.formula). Wenn dieser true zurückgibt, wird das Symbol angezeigt und sonst nicht.

    Kommentar


      #3
      Mir fällt auch nur eine etwas unelegante (aber von mir genutzte) Variante ein:

      Je Fenster einen Hilfswert (Item) schaffen: Hilfswert = 2*item-A-Wert + item-B-Wert.

      Dann sowas in die Visu bauen:

      {{ basic.symbol(''ic_1'', 'Hilfswert'', '''', "fts_window_2w.svg'', ''0'', '''', ''#25ea4e'') }}
      {{ basic.symbol(''ic_2'', ''Hilfswert'', '''', "fts_window_2w_open_r.svg'', ''1'', '''', ''#25ea4e'') }}
      {{ basic.symbol(''ic_3'', ''Hilfswert'', '''', "fts_window_2w_open_l.svg'', ''2'', '''', ''#25ea4e'') }}
      {{ basic.symbol(''ic_4'', ''Hilfswert'', '''', "fts_window_2w_open_lr.svg'', ''3'', '''', ''#25ea4e'') }}

      Viele Grüße
      Martin

      There is no cloud. It's only someone else's computer.

      Kommentar


        #4
        Das wäre super!

        Bis dahin habe ich das so gelöst:

        Items:
        Code:
        [Wohnzimmer]
            [[Fenster_Mitte_Rechts]]
                [[[Wert]]]
                    type = num
                    knx_dpt = 5
                    knx_cache = 1/2/5
                [[[Zustand_1]]]
                    type = bool
                    knx_dpt = 1
                    knx_cache = 1/2/6
            [[Fenster_Mitte_Links]]
                [[[Wert]]]
                    type = num
                    knx_dpt = 5
                    knx_cache = 1/2/8
                [[[Zustand_1]]]
                    type = bool
                    knx_dpt = 1
                    knx_cache = 1/2/9
            [[Fenster_Links_Rechts]]
                [[[Wert]]]
                    type = num
                    knx_dpt = 5
                    knx_cache = 1/2/11
                [[[Zustand_1]]]
                    type = bool
                    knx_dpt = 1
                    knx_cache = 1/2/12
            [[Fenster_Links_Links]]
                [[[Wert]]]
                    type = num
                    knx_dpt = 5
                    knx_cache = 1/2/14
                [[[Zustand_1]]]
                    type = bool
                    knx_dpt = 1
                    knx_cache = 1/2/15
            [[Mitte]]
                [[[Wert]]]
                    type = num
            [[Links]]
                [[[Wert]]]
                    type = num
        logic.conf:
        Code:
        [WZ_Fenster_Logik]
            filename = logic_wz_fenster.py
            watch_item = Wohnzimmer.Fenster_Mitte_Rechts.Wert | Wohnzimmer.Fenster_Mitte_Links.Wert | Wohnzimmer.Fenster_Links_Rechts.Wert | Wohnzimmer.Fenster_Links_Links.Wert
        logic_wz_fenster.py:
        Code:
        #!/usr/bin/env python3
        # Rechnet die Zustaende der Doppelfenster im Wohnzimmer so um,
        # dass man mit nur einem Icon auskommt
        
        sh.Wohnzimmer.Mitte.Wert(sh.Wohnzimmer.Fenster_Mitte_Links.Wert() + (sh.Wohnzimmer.Fenster_Mitte_Rechts.Wert() * 3))
        sh.Wohnzimmer.Links.Wert(sh.Wohnzimmer.Fenster_Links_Links.Wert() + (sh.Wohnzimmer.Fenster_Links_Rechts.Wert() * 3))
        In der SmartVISU:
        Code:
            <div class="block">
                <div class="set-1" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
                    <div data-role="collapsible" data-collapsed="false">
                        <h3>Fenster & Türen</h3>
                        <table width=100%>
                            <tr>
                                <td align=left>
                                    {{ basic.symbol('WZ_Terrassentuer_Gekippt', 'Wohnzimmer.Terrassentuer.Wert', 'Terrassentür gekippt', './icons/ye/fts_door_tilt.png', 2) }}
                                    {{ basic.symbol('WZ_Terrassentuer_Offen', 'Wohnzimmer.Terrassentuer.Wert', 'Terrassentür offen', './icons/rd/fts_door_open.png', 1) }}
                                    {{ basic.symbol('WZ_Terrassentuer_Zu', 'Wohnzimmer.Terrassentuer.Wert', 'Terrassentür geschlossen', icon0~'fts_door.png', 0) }}
                                    <br />
                                    {{ basic.symbol('WZ_Fenster_Mitte_0', 'Wohnzimmer.Mitte.Wert', 'Fenster Mitte geschlossen', icon0~'fts_window_2w.png', 0) }}
                                    {{ basic.symbol('WZ_Fenster_Mitte_1', 'Wohnzimmer.Mitte.Wert', 'Fenster Mitte L offen', './icons/rd/fts_window_2w_open_l.png', 1) }}
                                    {{ basic.symbol('WZ_Fenster_Mitte_2', 'Wohnzimmer.Mitte.Wert', 'Fenster Mitte L gekippt', './icons/ye/fts_window_2w_tilt_l.png', 2) }}
                                    {{ basic.symbol('WZ_Fenster_Mitte_3', 'Wohnzimmer.Mitte.Wert', 'Fenster Mitte R offen', './icons/rd/fts_window_2w_open_r.png', 3) }}
                                    {{ basic.symbol('WZ_Fenster_Mitte_4', 'Wohnzimmer.Mitte.Wert', 'Fenster Mitte offen', './icons/rd/fts_window_2w_open_lr.png', 4) }}
                                    {{ basic.symbol('WZ_Fenster_Mitte_5', 'Wohnzimmer.Mitte.Wert', 'Fenster Mitte L gekippt R offen', './icons/rd/fts_window_2w_tilt_l_open_r.png', 5) }}
                                    {{ basic.symbol('WZ_Fenster_Mitte_6', 'Wohnzimmer.Mitte.Wert', 'Fenster Mitte R gekippt', './icons/ye/fts_window_2w_tilt_r.png', 6) }}
                                    {{ basic.symbol('WZ_Fenster_Mitte_7', 'Wohnzimmer.Mitte.Wert', 'Fenster Mitte L offen R gekippt', './icons/rd/fts_window_2w_open_l_tilt_r.png', 7) }}
                                    {{ basic.symbol('WZ_Fenster_Mitte_8', 'Wohnzimmer.Mitte.Wert', 'Fenster Mitte gekippt', './icons/ye/fts_window_2w_tilt_lr.png', 8) }}
                                    <br />
                                    {{ basic.symbol('WZ_Fenster_Links_0', 'Wohnzimmer.Links.Wert', 'Fenster Links geschlossen', icon0~'fts_window_2w.png', 0) }}
                                    {{ basic.symbol('WZ_Fenster_Links_1', 'Wohnzimmer.Links.Wert', 'Fenster Links L offen', './icons/rd/fts_window_2w_open_l.png', 1) }}
                                    {{ basic.symbol('WZ_Fenster_Links_2', 'Wohnzimmer.Links.Wert', 'Fenster Links L gekippt', './icons/ye/fts_window_2w_tilt_l.png', 2) }}
                                    {{ basic.symbol('WZ_Fenster_Links_3', 'Wohnzimmer.Links.Wert', 'Fenster Links R offen', './icons/rd/fts_window_2w_open_r.png', 3) }}
                                    {{ basic.symbol('WZ_Fenster_Links_4', 'Wohnzimmer.Links.Wert', 'Fenster Links offen', './icons/rd/fts_window_2w_open_lr.png', 4) }}
                                    {{ basic.symbol('WZ_Fenster_Links_5', 'Wohnzimmer.Links.Wert', 'Fenster Links L gekippt R offen', './icons/rd/fts_window_2w_tilt_l_open_r.png', 5) }}
                                    {{ basic.symbol('WZ_Fenster_Links_6', 'Wohnzimmer.Links.Wert', 'Fenster Links R gekippt', './icons/ye/fts_window_2w_tilt_r.png', 6) }}
                                    {{ basic.symbol('WZ_Fenster_Links_7', 'Wohnzimmer.Links.Wert', 'Fenster Links L offen R gekippt', './icons/rd/fts_window_2w_open_l_tilt_r.png', 7) }}
                                    {{ basic.symbol('WZ_Fenster_Links_8', 'Wohnzimmer.Links.Wert', 'Fenster Links gekippt', './icons/ye/fts_window_2w_tilt_lr.png', 8) }}
                                </td>
                            </tr>
                        </table>                
                    </div>
                </div>
            </div>
        Das sieht dann so aus:

        Fenster.JPG

        Nicht, dass man das nicht schöner machen kann, aber es erfüllt den Zweck

        Natürlich musst du das anpassen, je nachdem, was du für Fensterkontakte hast etc. Ich habe diese Hoppe ENOCEAN Griffe, die mir den Status für offen, gekippt und geschlossen liefern. Daher noch etwas komplizierter, aber als Anhaltspunkt könnte dir das reichen. Vor allem die Icons gibt es jetzt nur noch als SVG, bin da selber noch nicht auf die aktuelle 2.8 umgestiegen, arbeite aber dran

        Gruß, Martin

        Kommentar


          #5
          Zitat von Msinn Beitrag anzeigen
          Je Fenster einen Hilfswert (Item) schaffen: Hilfswert = 2*item-A-Wert + item-B-Wert.
          Sieht nach einer guten Idee aus, schon mal Danke, wie definiere ich aber einen solchen Hilfswert? Auf smartVISU-Ebene oder muss ich runter in smarthome.py? Brauche noch etwas Hilfe ...

          Kommentar


            #6
            Geht es nicht ohne logic.conf, einfach so (auf sh.py-Ebene)?

            Code:
            [links]
                type = bool
                dpt = 1
                knx_listen = x/y/0
            [rechts]
                type = bool
                dpt = 1
                knx_listen = x/y/1
            [zusammen]
                type = num
                eval  = 2 * sh.links() + sh.rechts()
                eval_trigger = links | rechts
                visu_acl = rw

            Kommentar


              #7
              In Smarthome.py

              Msinn hat es eigentlich schön gezeigt, mit der neueren .svg Variante. Bei mir ist das noch primitiver gelöst, weil uralt. Ne extra Logik musst du wahrscheinlich deswegen nicht anlegen, das klappt wohl auch mit "eval" im Hilfsitem. Hat bei mir damals nur nie funktioniert.

              Edit: Du hast die Lösung ja prinzipiell schon selber gepostet.
              Zuletzt geändert von Sipple; 24.02.2017, 10:33.

              Kommentar


                #8
                Eben hatte ich noch eine viel bessere Idee zur Erweiterung:
                Würde es Sinn machen, wenn man bei basic.symbol eine Liste von Icons, Werten, Farben und Texten angeben könnte (wie bei basic.multistate oder dem neuen basic.stateswitch)?

                Das mit der Formel würde ich trotzdem implementieren. Es würde dann das Ergebnis der Formel für die Wertauswahl verwendet.

                Im vorliegenden Anwendungsfall würde die Definition dann etwa so aussehen:
                HTML-Code:
                {{ basic.symbol('',
                    ['item-A', 'item-B'],
                    '',
                    ['fts_window_2w.svg', 'fts_window_2w_open_r.svg', 'fts_window_2w_open_l.svg', 'fts_window_2w_open_lr.svg'],
                    [0,1,2,3],
                    '2*VAR1 + VAR2',
                    ['#25ea4e','#25ea4e','#25ea4e','#25ea4e']
                ) }}
                Aber es gibt sicher noch ganz viele andere Anwendungsfälle. Wollte man bisher z.B. einen einfachen Schaltzustand mit weissem und farbigem (icon1) Symbol visualisieren, musste man ja immer zweimal basic.symbol angeben.
                Neu wäre das einfach:
                HTML-Code:
                {{ basic.symbol('', 'item', '', [0,1], '', ['','icon1']) }}

                Kommentar


                  #9
                  Zitat von smai Beitrag anzeigen
                  Würde es Sinn machen, wenn man bei basic.symbol eine Liste von Icons, Werten, Farben und Texten angeben könnte (wie bei basic.multistate oder dem neuen basic.stateswitch)?
                  Also, ich könnte es für meine Statusanzeigen definitiv gut gebrauchen - ein klares '+1'.
                  /tom

                  Kommentar


                    #10
                    Kurzes Feedback, gerade mit eval und eval_trigger eingebaut, funktioniert! Also geht auch ohne logic.conf. Vielen Dank an Alle hier!

                    Die Idee für das obige neue "super-basic.symbol" auch von mir ein klares '+1'

                    Ralf

                    Kommentar


                      #11
                      Zur Info:
                      Das basic.symbol ist nun so erweitert, dass es mehrere Werte abbilden kann.
                      Auch die Formeln sind implementiert.
                      Details findet ihr in der eingebauten Doku der develop Version.

                      Kommentar

                      Lädt...
                      X