Ankündigung

Einklappen
Keine Ankündigung bisher.

Zugriff auf item-Parameter

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

    Zugriff auf item-Parameter

    Hallo zusammen,

    ich stehe grad ein bisschen auf'm Schlauch
    Ich würde gerne auf den "name =" -Parameter eines Icons zugreifen, um die HTML-Seiten etwas parametrisieren zu können.
    Code:
    [Raum12]
        name = Büro
        sv_page = room
        sv_img = scene_livingroom.png
        [[Licht]]
            [[[DL1]]]
                name = Deckenlicht
                type = bool
    In der HTML-Seite möchte ich dann gerne mit
    Code:
    <h3>Raum12.name</h3>
    oder so ähnlich den Parameter ersetzt bekommen. Also irgendwas in der Art
    Code:
    <h3>{{basic.value('testxxx','Raum12.name')}}</h3>
    - funktioniert so aber leider nicht

    Gibt's da was passendes?
    CU,
    Mathias

    #2
    Wenn ich deine Frage richtig verstehe, dann geht das nur, wenn du die Autokonfigurationstags in smarthome.py (also sv_xxxxx in deiner item-Konfiguration) benutzt.

    Ob smartVISU auch direkt auf die sh-Objekte zugreifen kann (und wie) müssen berufenere Nutzer als ich beantworten :-)

    Kommentar


      #3
      Na dann hoffe ich mal auf die "berufeneren Nutzer"
      Wenn ich noch zusätzlich ein sv_xxxx-Tag anlegen muss, wäre das auch kein Problem. Hauptsache, ich kriege irgendeinen dieser Parameter in's HTML-File...
      CU,
      Mathias

      Kommentar


        #4
        Grundsätzlich macht dein Vorhaben für mich nur Sinn wenn man mehrere Seiten mit einem Template verarbeiten möchte. Das würde am besten (oder auch wohl nur) über die Autogenerierung von Smarthome funktionieren.

        Denn anders (wie schon gesagt) macht es halt keinen Sinn oder habe ich dein Vorhaben nicht richtig verstanden?

        Dort kannst du sowas realisieren. Der Umbau auf die Autogeneration ist aber ein komplett anderer Weg als wenn man alles Statisch erstellt.

        Wie das ganze funktioniert steht im allgemeinen im Forum und eine Erweiterung von mir (die es hoffentlich bald offiziell in sh.py schafft) ist hier zu finden (mit entsprechenden Beispielen):

        https://knx-user-forum.de/smarthome-...smartvisu.html

        Gruß

        Kommentar


          #5
          Hallo Thomas,
          deine Erweiterung ist ziemlich interessant, aber momentan noch nicht das, was ich suche (oder ich verstehe es noch falsch - kann auch sein )

          Ich versuche mal, es zu erklären, was ich vorhabe:
          Meine navigation.html sieht zur Zeit in etwa so aus:
          Code:
          <li data-icon="false">
              {% set RAUMNR = '10' %}
              {% set RAUM = 'Raum'~RAUMNR %}
              <a href="index.php?page=Raum10">
                  <img class="icon" src="{{ icon0 }}scene_toilet_alternat.png" />
                  <h3>Flur EG</h3>
                      <div class="ui-li-aside">{{ basic.float(RAUM~'.Heizung', RAUM~'.Heizung', '°') }} <br />
                                              {{ basic.float(RAUM~'.Heizung.Stellwert', RAUM~'.Heizung.Stellwert', '%') }}</div>
              </a>
          </li>
          <li data-icon="false">
              {% set RAUMNR = '11' %}
              {% set RAUM = 'Raum'~RAUMNR %}
              <a href="index.php?page=Raum11">
                  <img class="icon" src="{{ icon0 }}scene_toilet_alternat.png" />
                  <h3>WC</h3>
                      <div class="ui-li-aside">{{ basic.float(RAUM~'.Heizung', RAUM~'.Heizung', '°') }} <br />
                                              {{ basic.float(RAUM~'.Heizung.Stellwert', RAUM~'.Heizung.Stellwert', '%') }}</div>
              </a>
          </li>
          Ich setze also in jedem Abschnitt lediglich die RAUMNR neu und verwende dies dann zur Adressierung innerhalb der Widgets.
          Da ich jedoch (noch?) keine Möglichkeit habe, innerhalb z.B. des <h3>-Tags auf das "name"-Attribut aus der .conf zuzugreifen, muss ich diesen Wert per Hand setzen.
          Ähnliches gilt für <a href="index.php?page=Raum10"> - hier wäre es hübsch, wenn ich auch auf die davor definierte Variable zugreifen könnte, statt fest "Raum10" schreiben zu müssen.

          Ich mache das, um die Einträge in der Navigation schnell erstellen bzw. verschieben zu können. Für weiterführende Denkansätze bin ich aber auch zu haben
          CU,
          Mathias

          Kommentar


            #6
            sollte glaube einfach so gehen:

            Code:
            <a href="index.php?page={{ RAUM }}">
            bzw.
            Code:
            <h3>{{ RAUM }}</h3>
            solche Dinge zur allgemeinen Template-Programmierung fehlen irgendwie in der Doku.

            EDIT: habe gerade mal ein wenig im Code geschaut und gesehen das Twig als Template Engine verwendet wird. Doku dazu findet man also hier: http://twig.sensiolabs.org/doc/templates.html

            Ein Hinweis darauf in der SmartVISU Doku wäre also hilfreich.

            EDIT2: Ok, sehe gerade was dann nicht geht, nämlich den eigentlichen Namen bezogen von sh.py zu bekommen... ich werde das selbst mal versuchen und gebe nochmal bescheid.
            Gruß

            Kommentar


              #7
              ok, also das man auf den namen aus dem sh.py Objekt zugreifen kann, wird nicht über die Template Engine möglich sein. Ob und evtl. wie das über JS geht (welches über den websocket mit sh.py kommuniziert) kann ich dir aber nicht sagen.

              Meiner Erfahrung nach ist es am einfachsten das alles per Autogenerierung zu machen, da wird einiges einfach Modularer und bleibt trotzdem Flexibel.

              Es fordert halt ein Umdenken.

              Ein kleiner Einblick zu Flexibilität habe ich gerade eben in deinen anderen Beitrag geschrieben.

              https://knx-user-forum.de/smartvisu/...portieren.html

              Kommentar


                #8
                Zitat von TCr82 Beitrag anzeigen
                ok, also das man auf den namen aus dem sh.py Objekt zugreifen kann, wird nicht über die Template Engine möglich sein. Ob und evtl. wie das über JS geht (welches über den websocket mit sh.py kommuniziert) kann ich dir aber nicht sagen.
                Gerade daran beiße ich mir seit einigen Wochen massiv die Zähne aus, was mich bei der Weiterentwicklung meines helios-Plugins+Widget zur Zeit ziemlich zurückwirft und mir vermutlich demnächst einen Zahnarzttermin einbringt.

                Das Grundproblem ist, dass TWIG serverseitig verarbeitet wird (php) und den JS-Code einfach als Text unverarbeitet "weiterleitet", um ihn dann clientseitig verarbeiten zu lassen.

                Ich versuche zur Zeit, auf einfachem Weg einer TWIG-Variablen den Wert (also die Eigenschaft 'value') eines sh.py-Items zuzuweisen, um dann aus einer Gruppe von Buttons denjenigen zu initialisieren, dessen Wert die zugehörige sh-Variable gerade hat (siehe Anlage). Sobald ich 'value' in der Variable habe, ist der Rest ein Klacks. Es gibt zwar einige "TWIG-JS-Hacks", aber die habe ich hier bisher nicht zum Laufen bekommen.

                Dieses Problem wurde in vielfältiger Form hier schon öfter angesprochen (z.B. Anzeige des aktuellen Eingangs auf einem AV-Receiver) - Lösung bisher unbekannt. Alle Ansätze waren bisher eine Sackgasse.

                Da es wohl unerheblich ist, ob ich 'value' oder 'name' eines items auslese, passt das hier wohl ganz gut rein (vielleicht hat ja jemand eine Lösung - will aber den Thread nicht kapern ).

                /tom

                p.s. Schreiben auf ein item ist mit io.write übrigens problemlos möglich, nur io.read ist nicht implementiert worden - Grund unbekannt, vielleicht gibt's ja einen ganz einfachen Grund/Workaround dafür.
                Angehängte Dateien

                Kommentar


                  #9
                  Du musst dir wahrscheinlich eine neue JS Funktion bauen um dein Vorhaben zu realisieren. Diese ändert deine HTML Objekte.

                  Wieso solltest du die Variable in Twig haben wollen? Schau dir doch die Beispiele von den Basic Widgets an.

                  Gruß

                  Kommentar


                    #10
                    Zitat von TCr82 Beitrag anzeigen
                    Wieso solltest du die Variable in Twig haben wollen? Schau dir doch die Beispiele von den Basic Widgets an.
                    Für 'schönen' HTML-Code im Sinne von 'einfach lesbar'. Siehe mein Bild oben (vereinfachter Code):

                    HTML-Code:
                     {% für alle_eingänge im eingangs_array[] %}
                       {% wenn eingang = aktiver_eingang %}
                           zeichne *bunten* button mit hinterlegter JS-Aktivität
                       {% else %}
                           zeichne normalen button mit hinterlegter JS-Aktivität
                       {% endif %}
                     {% enfor %}
                    Alles oben genannte ist an diversen Stellen im Widget getestet - nur 'aktiver_eingang' kriege ich nicht aus sh.py in eine TWIG-Variable übertragen.

                    /tom

                    Edit: Beispiel für einen AV-Receiver, dessen 10 verschiedenen Eingänge oben im HTML mittels {% set %} als array definiert sind. Wenn TWIG schon vorhanden ist, warum sollte man es nicht benutzen? Siehe auch Beitrag von Manu hier sowie etliche andere Anfragen in dieser Richtung - man kann seinen Kram einfach nicht sauber initialisieren, wenn man mit Buttons im Stil von "Radiobuttons" arbeitet ...

                    Kommentar


                      #11
                      so wäre dein Plugin aber nicht dynamisch.. ändert sich der Eingang zum aktiven ändert sich nicht der Status in der Visu?!

                      Kommentar


                        #12
                        Zitat von TCr82 Beitrag anzeigen
                        sollte glaube einfach so gehen:

                        Code:
                        <a href="index.php?page={{ RAUM }}">
                        funktioniert, Zugriff auf "name=" wie bereits weiter diskutiert leider nicht
                        Da kann/muss ich damit wohl gerade leben....

                        Vielen Dank für die Unterstützung - vielleicht kommt hierfür ja noch weiterer Input...
                        CU,
                        Mathias

                        Kommentar


                          #13
                          Hallo Ihr,

                          der Beitrag ist nun zwar schon ein paar Tage alt.
                          In der Vergangenheit hatte ich einen ähnlichen Beitrag aufgemacht: 36855-anzeige-des-feldes-name-aus-conf
                          Habe aber aus Zeitgründen es nicht mehr weiter verfolgt.
                          Vielleicht hilf das weiter.

                          Grüße Heiko

                          Kommentar

                          Lädt...
                          X