NEWS
Script in vis HTML Widget einbinden
-
Hallo,
ich habe es geschafft die Spannungen der drei Phasen meines Wechselrichters in einer View als Tabelle (HTML) darzustellen. Code siehe unten. Dann wollte ich die auszugebenden Daten runden. Das geht ja wohl nur mit Scripten?
Also hab ich eine "runden" funktion geschrieben und wollte diese im HTML-Code für den ersten Eintrag benutzen.
Da muss man ja die Scripte in ein separates Tab eintragen, wie das HTML
Leider ist das Ergebnis "Null".
Ich nehme an, dass das Zusammenspiel zwischen Javascript und HTML nicht funktioniert, oder liegt es daran, dass die Übergabe an die funktion nicht korrekt ist, (dass ich den Datenpunkt nicht einfach so der Funktion übergeben kann)?HTML:
<table> <tr> <td>Phase 1:</td> <td align="right"><b>{runden(modbus.0.inputRegisters.31253_Netzspannung_Phase_L1)} V</b></td> </tr> <tr> <td>Phase 2:</td> <td align="right"><b>{modbus.0.inputRegisters.31255_Netzspannung_Phase_L2} V</b></td> </tr> <tr> <td>Phase 3:</td> <td align="right"><b>{modbus.0.inputRegisters.31257_Netzspannung_Phase_L3} V</b></td> </tr> </table>
Javascript: (getestet)
function runden(x) { return (Math.round(x)).toString(); }
-
@delphinis
Servus,
versuche es so, als Binding, ohne eine eigene Funktion:{modbus.0.inputRegisters.31255_Netzspannung_Phase_L2;round(2)}
Sollte auf 2 Nachkommastellen runden.
-
@delphinis sagte in Script in vis HTML Widget einbinden:
{modbus.0.inputRegisters.31255_Netzspannung_Phase_L2}
wäre so
{a:modbus.0.inputRegisters.31255_Netzspannung_Phase_L2;parseFloat(a).toFixed(2)}
-
leider muss man hier ein wenig tricksen.
Bindings haben zwei verschiedene Modi.
Im ersten Modus, so wie du es notiert hast, gehen nur bestimmte vordefinierte Befehle. Siehe Doku von vis
im zweiten Modi, werden alle Befehle als echte Javascript Befehle umgesetzt.
Der wird allerdings nur aktiviert, wenn du als erstes einen Datenpunkt einer variable zu weist. Welche ist vollkommen egal -
Alle Versionen funktionieren. Die Frage war vor allem zum Verständnis, wie man Javascript einbindet. Habe es also jetzt so realisiert:
{a:modbus.0.inputRegisters.31253_Netzspannung_Phase_L1;runden(a)
So kann ich meine eigene Funktion nutzen (auch wenn es offenbar auch ohne gienge).
Ich fasse zusammen:- ich muss den Datenpunkt erst einer Variable zuordnen:
a:<Datenpunkt> - Die Variable der Funktion übergeben
Danke allen.
- ich muss den Datenpunkt erst einer Variable zuordnen:
-
@glasfaser said in Script in vis HTML Widget einbinden:
a:modbus.0.inputRegisters.31255_Netzspannung_Phase
Kurze Frage: Es ist wohl so, dass wenn ich einen Wert hier der Variablen a zuordne, dass dieser gleich in einen String gewandelt wird. Meist will man diese Werte weiterverrechnen und muss sie dann eben mit parseX() wieder in eine Zahl wandeln. Parsen ist aber eine teure funktion. Kann man die Werte nicht gleich als Zahl weiterverarbeiten, oder kommen die schon mit dem Parameter als Datenpunkt (modbus.0.inputRegisters.31253_Netzspannung_Phase_L1) rein?