Ankündigung

Einklappen
Keine Ankündigung bisher.

Werte aus sh.py "übersetzen" und in Visu anzeigen

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

    Werte aus sh.py "übersetzen" und in Visu anzeigen

    Hallo zusammen,

    ich weiß der Titel ist nicht gut gewählt, mir fiel aber auf die schnelle keine bessere Beschreibung ein.

    In sh.py lese ich die Betreibsart meiner KWL aus. Hier bekomme ich Werte (int) zw. 0 und 4 zurück:
    0: Aus
    1: Automatik
    2: Stufe 1
    3: Stufe 2
    4: Stufe 3

    In der Visu möchte ich nun anstatt des Integer-Wertes den entsprechenden Text anzeigen.

    Ich hab versucht, das via basic.formula wie folgt zu realisieren:

    Code:
    {{ basic.formula('item.Betriebsart', 'item.Betriebsart', '', 'var modes = {0: "Aus", 1: "Automatik", 2: "Stufe 1", 3: "Stufe 2", 4: "Stufe 3"}; modes[VAR]') }}
    Leider hat das nicht funktioniert. In der Visu wird leider nur "NaN" angezeigt. Es scheint so, als würde basic.formula nur einen Integer-Wert o. ä zulassen.

    Habt ihr noch eine Idee, wie man das realisieren könnte?

    Danke schon mal!

    Gruß

    Christian
    Zuletzt geändert von fuppy; 14.01.2017, 12:25.

    #2
    Wird so nicht gehen. Du kriegst die Werte nicht in Dein serverseitiges HTML - war auch mein 'klassischer' Anfängerfehler. Vereinfacht gesagt:

    Der Server liefert eine (fast) fertige Webseite aus. An den Stellen allerdings, an denen später die Werte aus sh.py eingesetzt werden, steht zu diesem Zeitpunkt aber noch 'NaN' bzw '---'. Der Server kennt die tatsächlichen Werte gar nicht - er hat nach der Auslieferung der 'Rohseite' fertig, sein Werk ist getan.

    Das Einsetzen der Werte in das 'NaN' oder '---' erfolgt erst später durch Dein Endgerät über jQuery-Scripte, die direkt zwischen Deinem Endgerät und sh.py kommunizieren.

    Ich hoffe, ich konnte einigermaßen rüberbringen, wie es funktioniert - hab mir damals auch ne Weile daran die Zähne ausgebissen und sogar versucht, TWIG aufzubohren (das ist die Template-Engine, über die die Seiten generiert werden).

    Lösung für Dich: Bau Dir ein Textitem in sh.py, das den anzuzeigenden Zielwert über eval ermittelt.

    /tom

    (An die Profis: Bitte nicht gleich für obige Beschreibung hauen. )

    Kommentar


      #3
      Warum nicht mit dem Multitext-Widget? So mache ich es zumindest.

      Kommentar


        #4
        Tom Bombadil Ich hau dich nicht, deine Aussage ist aber trotzdem nicht korrekt.

        In der angegebenen Formel werden VAR, VAR1, ... durch die empfangenen Werte ersetzt, (teilweise) per eval in JavaScript ausgeführt, als float formatiert und in die --- eingefügt.
        Das eval wird aber aus irgend einem Grund nur ausgeführt, wenn entweder der mode nicht leer ist oder VAR1 in der Formel verwendet wurde. Sonst wird direkt das parseFloat gemacht, daher kommt das NaN.

        Also fuppy, versuch mal, entweder modes[VAR1] zu schreiben oder beim mode 'SUM' anzugeben.

        Du könntest die Formel übrigens auch verkürzen auf:
        Code:
        '["Aus", "Automatik", "Stufe 1", "Stufe 2", "Stufe 3"][VAR1]'
        Mir gefällt die Lösung so gut, dass ich evtl. basic.maptext aus der kommenden Version wieder entferne, das würde genau dasselbe machen
        A propos: Ich bin in diesem Moment daran, basic.formula zu überarbeiten bzw. durch basic.print abzulösen, deshalb weiss ich es auch so genau. Dort werde ich das mit dem eval sicher ändern.

        Kommentar


          #5
          Ok, ich geb's zu, Frage falsch verstanden! Stimmt ja, im Widget selbst ist man ja quasi schon auf 'js Level' auf der Client-Seite und hat Zugriff auf die Daten. Aber trotzdem wieder was gelernt. Wenn wenigstens der Rest stimmt, dann passt's ...
          /tom

          Kommentar


            #6
            Hallo zusammen,

            erstmal vielen Dank an alle für die schnellen Antworten!

            Ich hab smai Rat mal befolgt und beide Varianten ausprobiert:

            Code:
             {{ basic.formula('item.Betriebsart', 'item.Betriebsart', '', 'var modes = {0: "Aus", 1: "Automatik", 2: "Stufe 1", 3: "Stufe 2", 4: "Stufe 3"}; modes[VAR1]') }}
            Und


            Code:
             {{ basic.formula('item.Betriebsart', 'item.Betriebsart', '', 'var modes = {0: "Aus", 1: "Automatik", 2: "Stufe 1", 3: "Stufe 2", 4: "Stufe 3"}; modes[SUM(VAR)]') }}
            Leider beides ohne Erfolg. Wird immer noch NaN ausgegeben. Ich hab dann einen Versuch gestartet im JS Object anstatt einen String mir eine fiktive Zahl zurückgeben lassen.

            Code:
             {{ basic.formula('item.Betriebsart', 'item.Betriebsart', '', 'var modes = {0: 100, 1: 200, 2: 300, 3: 400, 4: 500}; modes[VAR]') }}
            Hier wird dann zumindest die korrekte Zahl angezeigt, sprich es funktioniert...

            An was könnte das noch liegen? Bin grad etwas ratlos...

            Danke schon mal!

            PS: smai Ich würde wenn dann anstatt auf die Array-Notation aus meiner Sicht doch lieber auf eine Object-Notation (Key:Value) setzen, da dies aus meiner Sicht flexibler ist. Hier klappt es nur, weil die Range eben von schon von 0-4 reicht. Wären Sprünge o. ä. drin, müsste man das Array entsprechend hinfaken... Just my two cents ;-)

            Kommentar


              #7
              Mist, du hast recht, es kann leider nicht funktionieren.
              Oben habe ich es ja schon beschrieben: Am Ende wird in jedem Fall parseFloat aufgerufen. Es kann also nie ein String ausgegeben werden.
              Entweder baust du also multitext ein, oder alternativ für jeden Status einzeln ein basic.text, das nur beim entsprechenden Status angezeigt wird.
              Oder als dritte möglichkeit baust du den String in sh.py zusammen und zeigst ihn per basic.value an.

              Wie erwähnt, wird maptext wohl in irgend einer Form im nächsten Release integriert sein.
              Zuletzt geändert von smai; 14.01.2017, 22:10.

              Kommentar


                #8
                Schade, hab ich mir schon fast gedacht...

                Ich werds mal mit basic.text versuchen. Ich lass aktuell noch die Visu via. sh.py automatisch generieren. Hier zusätzliche Widgets einzubauen funktioniert nicht, da alle Dateien immer bei jedem Neustart von sh.py gelöscht werden.

                Wenn ich mit basic.text nicht zufrieden bin, bau ich das sh.py Plugin so um, dass es mir gleich die richtigen Werte liefert. Macht man zwar eigentlich nicht, aber ein Workaround wäre es...

                Sonst hoffe ich einfach mal, dass maptext im nächsten Release mit dabei ist, welches hoffentlich bald erscheinen wird :-)

                Danke nochmals für eure Hilfe!

                Kommentar

                Lädt...
                X