Ankündigung

Einklappen
Keine Ankündigung bisher.

basic.button - Wert des Items erhöhen bzw. verringern

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

    basic.button - Wert des Items erhöhen bzw. verringern

    Hallo zusammen...

    wie kann ich o.g. Problemstellung lösen?

    Hier mein HTML-Code:
    HTML-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>Einstellungen</h3>
                    <img class="icon" src='{{ icon0 }}scene_stove.svg' />
                    {{ basic.button('EG.wohnen.temperatur.wassertasche.max.minus', 'EG.wohnen.temperatur.wassertasche.max', '', 'minus', EG.wohnen.temperatur.wassertasche.max()-1, 'micro') }}
                    {{ basic.float('EG.wohnen.temperatur.wassertasche.max', 'EG.wohnen.temperatur.wassertasche.max', '°') }}
                    {{ basic.button('EG.wohnen.temperatur.wassertasche.max.plus', 'EG.wohnen.temperatur.wassertasche.max', '', 'plus', EG.wohnen.temperatur.wassertasche.max()+1, 'micro') }}
                </div>
    
            </div>
        </div>
    und die zugehörigen Items:
    Code:
    [EG]
        [[wohnen]]
            [[[temperatur]]]
                [[[[wassertasche]]]]
                    name = "Temperatur Kaminofen Wassertasche"        #EG Wohnen Kaminofen Wassertasche
                    type = num
                    #sqlite = init
                    ow_addr = 28.0000F0010000
                    ow_sensor = T
                    enforce_updates = on
                    [[[[[max]]]]]                            #maximal erlaubte Temperatur -> Pumpe einschalten
                        name = "Maximal-Temperatur Kaminofen Wassertasche"
                        type = num
                        value = 75
                        visu_acl = rw
                        cache = on
                    [[[[[max]]]]]                            #minimal erlaubte Temperatur -> Pumpe ausschalten
                        name = "Minimal-Temperatur Kaminofen Wassertasche"
                        type = num
                        value = 65
                        visu_acl = rw
                        cache = on
    Leider funktionierts so nicht, es wird immer der Wert -1 bzw. 1 gesendet
    cu Yfkt5A
    DALI(ABB DG/S1.1), KODI RaspberryPi4, QNAP TS-509, Zehnder ComfoAir 200 L Luxe
    DELL T20 mit Proxmox - VM´s: SmartHomeNG/smartVISU, TVHeadend, jellyfin

    #2
    Hi,

    der Ansatz geht nicht! In der SmartVisu kannst Du nicht auf die Werte von Items zugreifen, zumindest nicht in Form von Ausdrücken! Aus Sicht der SmartVisu sind die Items nur Strings, die an den Server geschickt werden und dort mit Werten ersetzt werden.
    Du must die +1 bzw. -1 in sh.py auswerten und dort die min bzw. max Items ändern.

    Gruß, Waldemar

    Kommentar


      #3

      Danke für die schnelle Antwort...

      Hier mal mein Versuch das Umzusetzen ohne gerade testen zu können...
      Kann das so funktionieren?

      erweiterte Items:
      Code:
      [[[[[max]]]]]                #maximal erlaubte Temperatur -> Pumpe einschalten
          name = "Maximal-Temperatur Kaminofen Wassertasche"
          type = num
          value = 75
          visu_acl = rw
          cache = on  
          [[[[[[minus]]]]]]        #maximal erlaubte Temperatur verringern
              name = "Maximal-Temperatur Kaminofen Wassertasche verringern"
              type = num
              eval = sh.EG.wohnen.temperatur.wassertasche.max(sh.EG.wohnen.temperatur.wassertasche.max()-1)
              visu_acl = rw
              enforce_updates = on
          [[[[[[plus]]]]]]        #maximal erlaubte Temperatur erhoehen
              name = "Maximal-Temperatur Kaminofen Wassertasche erhöhen"
              type = num
              eval = sh.EG.wohnen.temperatur.wassertasche.max(sh.EG.wohnen.temperatur.wassertasche.max()+1)
              visu_acl = rw
              enforce_updates = on
      HTML-Einbindung in smartVISU:
      HTML-Code:
      {{ basic.button('EG.wohnen.temperatur.wassertasche.max.minus', 'EG.wohnen.temperatur.wassertasche.max', '', 'minus', 'EG.wohnen.temperatur.wassertasche.max.minus', 'micro') }}
      {{ basic.float('EG.wohnen.temperatur.wassertasche.max', 'EG.wohnen.temperatur.wassertasche.max', '°') }}
      {{ basic.button('EG.wohnen.temperatur.wassertasche.max.plus', 'EG.wohnen.temperatur.wassertasche.max', '', 'plus', 'EG.wohnen.temperatur.wassertasche.max.plus' 'micro') }}
      Zuletzt geändert von Yfkt5A; 11.09.2015, 07:59. Grund: Formatierung Code
      cu Yfkt5A
      DALI(ABB DG/S1.1), KODI RaspberryPi4, QNAP TS-509, Zehnder ComfoAir 200 L Luxe
      DELL T20 mit Proxmox - VM´s: SmartHomeNG/smartVISU, TVHeadend, jellyfin

      Kommentar


        #4
        Hi,

        kann ich Dir nicht mit Sicherheit sagen (und es auch nicht ausprobieren). Ich weiß nicht, ob der Setter sh.item(x) irgendwas zurückliefert (ob es also eine Funktion ist). Was der eval macht, wenn es keine Funktion ist, kann ich auch nicht sagen... ich habe es zumindest so noch nicht versucht.
        Versuch es doch einfach mal, ich wäre an einer Info interessiert, ob es klappt.

        Ansonsten machst Du (verkürzt formuliert):
        Code:
        [max]
            ...
            eval = value if value > -1000 and value < 1000 else sh.max() - 1 if value < -1000 else sh.max() + 1 if value > 1000 else sh.max()
            eval_trigger = max.plus | max.minus
            ...
            [[plus]]
                ...
                eval = 2000
                enforce_updates = true
                ...
            [[minus]]
                ...
                eval = -2000
                enforce_updates = true
                ...
        Damit wird plus und minus nur als Trigger benutzt, egal welcher Wert da gesetzt wird, es kommen nur -2000 und +2000 raus (Temperaturen, die Du hoffentlich nie haben willst). Damit sind das dann "magic values", die zum setzen von max genutzt werden.
        Das eval bei max ist so kompliziert, damit man max direkt setzen kann UND über plus und minus. Python scheint keine math.sign() zu haben, sonst hätte man das einfacher formulieren können.

        Gruß, Waldemar
        Zuletzt geändert von mumpf; 11.09.2015, 09:14. Grund: Rechtschreibfehler gefixed

        Kommentar


          #5
          Hallo Waldemar...

          erstmal danke für deine Hilfestellung, jedoch habe ich weder deine noch meine Lösung zum Laufen bekommen

          Nach nun einer Stunde rumprobieren läufts wie gewünscht mit folgendem Code:
          Code:
          [EG]
              [[wohnen]]
                  [[[temperatur]]]
                      [[[[wassertasche]]]]
                          name = "Temperatur Kaminofen Wassertasche"  #EG Wohnen Kaminofen Wassertasche
                          type = num
                          #sqlite = init
                          ow_addr = 28.00D8FA010000
                          ow_sensor = T
                          enforce_updates = on
                          #knx_dpt = 9
                          #knx_send = 12/2/55
                          [[[[[max]]]]]                  #maximal erlaubte Temperatur -> Pumpe einschalten
                              name = "Maximal-Temperatur Kaminofen Wassertasche"
                              type = num
                              value = 75
                              eval = (sh.EG.wohnen.temperatur.wassertasche.max() - 1) if value == -1  else ((sh.EG.wohnen.temperatur.wassertasche.max() + 1) if value == +1 else 75 )
                              sh.EG.wohnen.temperatur.wassertasche.max() + 1 if value = 1 else sh.EG.wohnen.temperatur.wassertasche.max()
                              eval_trigger = EG.wohnen.temperatur.wassertasche.max.aendern
                              visu_acl = rw
                              cache = on
                              [[[[[[aendern]]]]]]       #maximal erlaubte Temperatur verringern
                                  name = "Maximal-Temperatur Kaminofen Wassertasche verringern"
                                  type = num
                                  visu_acl = rw
                                  enforce_updates = on
          und folgendermaßen in die smartVISU eingebunden:
          HTML-Code:
          {{ basic.button('EG.wohnen.temperatur.wassertasche.max.minus', 'EG.wohnen.temperatur.wassertasche.max.aendern', '', 'minus', -1, 'micro') }}
          {{ basic.float('EG.wohnen.temperatur.wassertasche.max', 'EG.wohnen.temperatur.wassertasche.max', '°') }}
          {{ basic.button('EG.wohnen.temperatur.wassertasche.max.plus', 'EG.wohnen.temperatur.wassertasche.max.aendern', '', 'plus', 1, 'micro') }}
          Und hier noch ein paar Fehlermeldungen von meinen Versuchen:
          HTML-Code:
          2015-09-11 22:49:18 WARNING  EG.wohnen.temperatur.wassertasche.max Item EG.wohnen.temperatur.wassertasche.max: problem evaluating value if value > -1000 and value < 1000 else sh.max() - 1 if value < -1000 else sh.max() + 1 if value > 1000 else sh.max(): 'SmartHome' object has no attribute 'max'
          2015-09-11 23:04:30 WARNING  EG.wohnen.temperatur.wassertasche.max Item EG.wohnen.temperatur.wassertasche.max: problem evaluating value if value = -1 and value = 1 else sh.EG.wohnen.temperatur.wassertasche.max() - 1 if value = -1 else sh.EG.wohnen.temperatur.wassertasche.max() + 1 if value = 1 else sh.EG.wohnen.temperatur.wassertasche.max(): invalid syntax (<string>, line 1)
          2015-09-11 23:05:08 WARNING  EG.wohnen.temperatur.wassertasche.max Item EG.wohnen.temperatur.wassertasche.max: problem evaluating if value = -1 sh.EG.wohnen.temperatur.wassertasche.max() - 1 if value = +1 sh.EG.wohnen.temperatur.wassertasche.max() + 1: invalid syntax (<string>, line 1)
          2015-09-11 23:08:00 WARNING  EG.wohnen.temperatur.wassertasche.max Item EG.wohnen.temperatur.wassertasche.max: problem evaluating if int(value) = -1 sh.EG.wohnen.temperatur.wassertasche.max() - 1 if int(value) = +1 sh.EG.wohnen.temperatur.wassertasche.max() + 1: invalid syntax (<string>, line 1)
          2015-09-11 23:09:39 WARNING  EG.wohnen.temperatur.wassertasche.max Item EG.wohnen.temperatur.wassertasche.max: problem evaluating if int(value) = -1 int(sh.EG.wohnen.temperatur.wassertasche.max()) - 1 if int(value) = +1 int(sh.EG.wohnen.temperatur.wassertasche.max()) + 1: invalid syntax (<string>, line 1)
          2015-09-11 23:11:55 WARNING  EG.wohnen.temperatur.wassertasche.max Item EG.wohnen.temperatur.wassertasche.max: problem evaluating if value = -1 (sh.EG.wohnen.temperatur.wassertasche.max() - 1) if value = +1 (sh.EG.wohnen.temperatur.wassertasche.max() + 1): invalid syntax (<string>, line 1)
          2015-09-11 23:17:02 WARNING  EG.wohnen.temperatur.wassertasche.max Item EG.wohnen.temperatur.wassertasche.max: problem evaluating (sh.EG.wohnen.temperatur.wassertasche.max() - 1) if value = -1  (sh.EG.wohnen.temperatur.wassertasche.max() + 1) if value = +1 else 75: invalid syntax (<string>, line 1)
          2015-09-11 23:19:11 WARNING  EG.wohnen.temperatur.wassertasche.max Item EG.wohnen.temperatur.wassertasche.max: problem evaluating (sh.EG.wohnen.temperatur.wassertasche.max() - 1) if value == -1  (sh.EG.wohnen.temperatur.wassertasche.max() + 1) if value == +1 else 75: invalid syntax (<string>, line 1)
          2015-09-11 23:21:41 WARNING  EG.wohnen.temperatur.wassertasche.max Item EG.wohnen.temperatur.wassertasche.max: problem evaluating (EG.wohnen.temperatur.wassertasche.max() - 1) if value == -1  (EG.wohnen.temperatur.wassertasche.max() + 1) if value == +1 else 75: invalid syntax (<string>, line 1)
          2015-09-11 23:28:54 WARNING  EG.wohnen.temperatur.wassertasche.max Item EG.wohnen.temperatur.wassertasche.max: problem evaluating (EG.wohnen.temperatur.wassertasche.max() - 1) if value == -1  else 75: name 'EG' is not defined
          2015-09-11 23:31:08 WARNING  EG.wohnen.temperatur.wassertasche.max Item EG.wohnen.temperatur.wassertasche.max: problem evaluating (sh.EG.wohnen.temperatur.wassertasche.max() - 1) if value == -1  (sh.EG.wohnen.temperatur.wassertasche.max() + 1) if value == +1 else 75: invalid syntax (<string>, line 1)
          2015-09-11 23:32:19 WARNING  EG.wohnen.temperatur.wassertasche.max Item EG.wohnen.temperatur.wassertasche.max: problem evaluating (sh.EG.wohnen.temperatur.wassertasche.max() - 1) if value == -1  (sh.EG.wohnen.temperatur.wassertasche.max() + 1) elif value == +1 else 75: invalid syntax (<string>, line 1)
          2015-09-11 23:36:36 WARNING  EG.wohnen.temperatur.wassertasche.max Item EG.wohnen.temperatur.wassertasche.max: problem evaluating (sh.EG.wohnen.temperatur.wassertasche.max() - 1) if value == -1  (sh.EG.wohnen.temperatur.wassertasche.max() + 1) else value == +1 else 75: invalid syntax (<string>, line 1)
          PS: Jetzt wäre es noch hilfreich irgendwie einen Min- und Max-Wert angeben zu können... aber jetzt muss ich ins Bett...
          PPS: Das Attribut "enforce_updates"... muss das nun "true" oder "on" sein?
          cu Yfkt5A
          DALI(ABB DG/S1.1), KODI RaspberryPi4, QNAP TS-509, Zehnder ComfoAir 200 L Luxe
          DELL T20 mit Proxmox - VM´s: SmartHomeNG/smartVISU, TVHeadend, jellyfin

          Kommentar


            #6
            Hi,

            schön dass Du es hinbekommen hast. Mit "verkürzter Schreibweise" bei meinem Beispiel meinte ich, dass Du Deine Item-Namen einsetzten musst. sh.max() usw. gibt es natürlich bei Dir nicht...

            Gruß, Waldemar

            Kommentar


              #7
              Das Erhöhen bzw. Verringern des Wertes funktioniert sehr gut, jedoch würde ich gern noch einen Min- und einen Max-Wert vorgeben. z.B. 55 und 90
              Wie bekomm ich das da noch rein?

              Und noch eine Kleinigkeit...
              Da ich ja im Moment zum Testen smarthome immer wieder neu starte ist mir folgendes aufgefallen:
              Die Werte werden immer wieder auf 75 bzw. 65 zurück gesetzt, obwohl cache=on ist. Wie kann ich hier noch Abhilfe schaffen?

              PS: das mit "verkürzter Schreibweise" hatte ich schon verstanden, trotzdem bin ich daran gescheitert
              cu Yfkt5A
              DALI(ABB DG/S1.1), KODI RaspberryPi4, QNAP TS-509, Zehnder ComfoAir 200 L Luxe
              DELL T20 mit Proxmox - VM´s: SmartHomeNG/smartVISU, TVHeadend, jellyfin

              Kommentar

              Lädt...
              X