Ankündigung

Einklappen
Keine Ankündigung bisher.

Versuch eines Widgets Zeiteingabe

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

    Versuch eines Widgets Zeiteingabe

    Hallo,

    zur Information.
    Meine KNX-Steuerung läuft auf einem EIBPC. Über EIBStudio ist eine Oberfläche gestaltet. Für meine Heizung gebe ich die Temperaturen der Räume und die Schaltzeiten (Komfort, Abwesend und Nacht) mit Start- und Endezeiten vor. Die Steurung und die Remanentsicherung erfolgt im EibPc.
    Die Darstellung der Temperaturverläufe ict hie leider mangelhaft, deshalb habe ich Seiten mit Plots in smartvisu erstellt.

    Heranch auch die veränderbaren Vorbabetemperaturen der einzelnen Räume ergänzt. Jetzt wollte ich auch noch die Schaltzeiten der einzelnen Räume ergänzen, dazu habe ich ein Makro(Widget) gebastelt.
    Leider scheitere ich hier und brauche Hilfe.

    Bild 1 zeigt in etwas das Wuschaussehen der Zeile an (+/- Button für Stunde und Minute, dazwichen die Anzege der gewünchten Zeit)

    Bild2 zeigt meinen "Erfolg". Leider werden Zeitanzeige und die Zeiteingabe angezeigt, eine Redurierung auf ein Zeitfeld ist mir nicht gelungen.
    Schaltfunktionen , KNX-Übergabge und Rückgabe über KNX/EIBPC+remanentspeicher klappen.

    Wo liegt mein Denkfehler im Widget?
    Gibt es eine Lösung zur Zeiteingabe?

    Benötigt werden hh und mm als Integer(u08) zur Übergabe.
    Sicherlich kann man die Zeitanzeige noch optimiere( 10:07 statt 10:7) oder Logikfunctioen einfügen( z.B 10:59 + 1Min nicht 10:60 sondern 11:00 )
    Aber Schritt für Schritt, sollte es schon etwas geben, bitte sagt mir wie und wo!
    Für jeden Hinweis bin ich dankbar!
    Grüße
    Wolfgang
    Die Conf-Datei
    Code:
             [[[heizung]]]
                name = Temperaturen Bad
              [[[[ist]]]]
                type = num
                sqlite = yes
    #            sv_widget = {{ device.rtr('item', 'item.name', 'item.ist', 'item.soll', 'item.komfort', 'item.nacht', 'item.frost', 'item.status') }} | {{ plot.period('item-plot', 'item', 'avg') }}
                visu_acl = rw
                 knx_dpt = 9
                 knx_cache = 4/1/6
               [[[[soll]]]]
                    type = num
                    visu_acl = rw
                    sqlite = yes
                    knx_dpt = 9
                    knx_cache = 2/1/109
                [[[[modus_komfort]]]]
                    type = bool
                    visu_acl = rw
                    knx_dpt = 1
                    knx_cache = 2/1/113
                    knx_send =2/1/113 
                [[[[modus_nacht]]]]
                    type = bool
                    visu_acl = rw
                    knx_dpt = 1
                    knx_cache = 2/1/114  
                    knx_send = 2/1/114
                [[[[modus_frost]]]]
                    type = bool
                    visu_acl = rw
                    knx_dpt = 1
                    knx_cache  = 2/1/115
                    knx_send = 2/1/115
                [[[[stellgroesse]]]]
                    type = num
                    visu_acl = rw
                    sqlite = yes
                    knx_dpt = 5.001
                    eval=round(value,2)
                    knx_cache  = 2/1/122  
                [[[[status]]]]
                    type = bool
                    visu_acl = rw
                    sqlite = yes
                    knx_dpt = 1
                    knx_cache  = 2/1/47 
                [[[[basissoll_frost]]]]
                    type = num
                    visu_acl = rw
                    knx_dpt = 9
                    knx_cache  = 2/1/160 
                    knx_send = 2/1/160
                [[[[basissoll_komfort]]]]
                    type = num
                    visu_acl = rw
                    knx_dpt = 9
                    knx_cache  = 2/1/163  
                    knx_send = 2/1/163
                [[[[basissoll_standby]]]]
                    type = num
                    visu_acl = rw
                    knx_dpt = 9
                    knx_cache  = 2/1/162  
                    knx_send = 2/1/162
                [[[[basissoll_nacht]]]]
                    type = num
                    visu_acl = rw
                    knx_dpt = 9
                    knx_cache  = 2/1/161  
                    knx_send = 2/1/161
     
                [[[[stundek1anf]]]]
                    type = num
                    enforce_updates = yes
                    visu_acl = rw
                    knx_dpt = 5
                    knx_cache = 2/5/0
                    knx_send = 2/5/0
                [[[[stundek1anfplus]]]]
                    type = num
                    visu_acl = rw
                    enforce_updates = yes
                    eval = sh.og.bad.heizung.stundek1anf(sh.og.bad.heizung.stundek1anf()+1)
                [[[[stundek1anfminus]]]]
                    type = num
                    visu_acl = rw
                    enforce_updates = yes
                    eval = sh.og.heizung.stundek1anf(sh.og.bad.heizung.stundek1anf()-1)
                [[[[minutek1anf]]]]
                    type = num
                    enforce_updates = yes
                    visu_acl = rw
                    knx_dpt = 5
                    knx_cache = 2/5/1
                    knx_send = 2/5/1
                [[[[minutek1anfplus]]]]
                    type = num
                    visu_acl = rw
                    enforce_updates = yes
                    eval = sh.og.bad.heizung.minutek1anf(sh.og.bad.heizung.minutek1anf()+1)
                [[[[minutek1anfminus]]]]
                    type = num
                    visu_acl = rw
                    enforce_updates = yes
                    eval = sh.og.heizung.minutek1anf(sh.og.bad.heizung.minutek1anf()-1)
     
                [[[[stundek1end]]]]
                    type = num
                    enforce_updates = yes
                    visu_acl = rw
                    knx_dpt = 5
                    knx_cache = 2/5/2
                    knx_send = 2/5/2
                [[[[stundek1endplus]]]]
                    type = num
                    visu_acl = rw
                    enforce_updates = yes
                    eval = sh.og.bad.heizung.stundek1end(sh.og.bad.heizung.stundek1end()+1)
                [[[[stundek1endminus]]]]
                    type = num
                    visu_acl = rw
                    enforce_updates = yes
                    eval = sh.og.heizung.stundek1end(sh.og.bad.heizung.stundek1end()-1)
                [[[[minutek1end]]]]
                    type = num
                    enforce_updates = yes
                    visu_acl = rw
                    knx_dpt = 5
                    knx_cache = 2/5/3
                    knx_send = 2/5/3
                [[[[minutek1endplus]]]]
                    type = num
                    visu_acl = rw
                    enforce_updates = yes
                    eval = sh.og.bad.heizung.minutek1end(sh.og.bad.heizung.minutek1end()+1)
                [[[[minutek1endminus]]]]
                    type = num
                    visu_acl = rw
                    enforce_updates = yes
                    eval = sh.og.heizung.minutek1end(sh.og.bad.heizung.minutek1end()-1)
    Mein Widget-Versuch
    Code:
    /**
    * Small TimeSet (Uhrzeit setzen) widges in /smartvisu wird genommen
    *
    * @param       unique id for this widget
    * @param       name of the TimeSet
    * @param       a gad/item for the actual htime 
    * @param       a gad/item for the set htime
    * @param       a gad/item for the actual mtime     
    * @param       a gad/item for the set mtime
    * @param       step for plus/minus buttons (optional, default 1.0°)
    */
    {% macro uhrzeit(id, txt, gad_actualh, gad_seth, gad_actualm, gad_setm, step) %}
    {% import "basic.html" as basic %}
    {% set uid = uid(page, id) %}
     
    /** Design */
    <div id="{{ uid }}" class="uhrzeit">
        <table style="width:100%; text-align: left;">
            <tr>
                <th width="30%">{% if txt %} {{ txt }} {% endif %}</th>
                <td width="8%">
                    {% if gad_seth %}
                        {{ basic.button(id~'minush', '', '', 'minus', '', 'micro') }}
                    {% endif %}
                </td>
                <td width="8%">
                    {% if gad_seth %}
                        {{ basic.button(id~'plush', '', '', 'plus', '', 'micro') }}
                    {% endif %}
                </td>
     
                <td width="6%"><div class="temph">{{ basic.float(id~'actualh', gad_actualh, ' :') }}</div></td>
                <td width="10%"><div class="tempm">{{ basic.float(id~'actualm', gad_actualm, 'Uhr' ) }}</div></td>
     
                <td width="8%">
                    {% if gad_setm %}
                        {{ basic.button(id~'minusm', '', '', 'minus', '', 'micro') }}
                    {% endif %}
                </td>
                <td width="8%">
                    {% if gad_setm %}
                        {{ basic.button(id~'plusm', '', '', 'plus', '', 'micro') }}
                    {% endif %}
                </td>
     
     
                <td width="8%"><div class="temph">{{ basic.float(id~'seth', gad_seth, 'h') }}</div></td>
                <td width="8%"><div class="tempm">{{ basic.float(id~'setm', gad_setm, 'm') }}</div></td>
     
                    </tr>
        </table>
     
        {% if gad_seth %}
     
            /** Events */
            <script type="text/javascript">
                // plus / minus Stunde
                $("#{{ uid~'minush' }}").unbind('click').bind('click', function(){
                    var temph = (Math.round((parseFloat($("#{{ uid~'seth' }}").html().replace(',','.')) - {{ step|default(0.5) }}) * 10) / 10).toFixed(1);
                $("#{{ uid~'seth' }}").html(temph + ' h');
                io.write("{{ gad_seth }}", temph);
                });
                $("#{{ uid~'plush' }}").unbind('click').bind('click', function(){
                    var temph = (Math.round((parseFloat($("#{{ uid~'seth' }}").html().replace(',','.')) + {{ step|default(0.5) }}) * 10) / 10).toFixed(1);
                $("#{{ uid~'seth' }}").html(temph + ' h');
                io.write("{{ gad_seth }}", temph);
                });
                                   </script>
        {% endif %}
                   
        {% if gad_seth %}
              /** Events */
            <script type="text/javascript">      
                                                               // plus / minus Minute
                $("#{{ uid~'minusm' }}").unbind('click').bind('click', function(){
                    var tempm = (Math.round((parseFloat($("#{{ uid~'setm' }}").html().replace(',','.')) - {{ step|default(0.5) }}) * 10) / 10).toFixed(1);
                $("#{{ uid~'setm' }}").html(tempm + ' m');
                io.write("{{ gad_setm }}", tempm);
                });
                $("#{{ uid~'plusm' }}").unbind('click').bind('click', function(){
                    var tempm = (Math.round((parseFloat($("#{{ uid~'setm' }}").html().replace(',','.')) + {{ step|default(0.5) }}) * 10) / 10).toFixed(1);
                $("#{{ uid~'setm' }}").html(tempm + ' m');
                io.write("{{ gad_setm }}", tempm);
                });
            </script>
        {% endif %}
    </div>
    Angehängte Dateien

    #2
    Hallo Wolfgang,

    Du schreibst ein zweites Mal die Werte als float:
    Code:
    <td width="8%"><div class="temph">{{ basic.float(id~'seth', gad_seth, 'h') }}</div></td>
    <td width="8%"><div class="tempm">{{ basic.float(id~'setm', gad_setm, 'm') }}</div></td>
    Du muß im JavaScript die Werte in die aktuellen schreiben, keine extra Set Variable wie z.B. uid~'seth' verwenden.
    Also diese beiden Zeilen im HTML raus und im JavaScript uid~'seth' durch id~'actualh' ersetzen (und natürlich auch die Klassen Referenzen). Dann müßte es klappen.

    Du änderst damit sofort die Werte ohne Bestätigung. Ob der Rest klappt habe ich auf dem Papier nicht nachvollziehen können.

    Grüße

    Michel

    PS: Dein Punkt gehört aber eigentlich ins Forum smartvisu !

    Kommentar


      #3
      Danke Michel,

      die Zeiten sind jetzt ok, es geht mit einem Feld!

      An die Optik kann ich mich erst morgen machen.

      Kann die angesprochene Logic in den HTML-Code oder muss ich an die logic.py (usw)?

      Besten Dank!!
      Wolfgang
      Angehängte Dateien

      Kommentar


        #4
        Hallo Wolfgang,

        die Logik des Zählens und der Überträge muss in den JavaScript umfang rein !

        Michel

        Kommentar

        Lädt...
        X