Hallo zusammen
Ich möchte ein einfaches Pumpensymbol (Kreis mit einem Dreieck), das die Füllfarbe ändert, wenn die Pumpe läuft.
Ich habe nichts passendes für mich gefunden, und habe stattdessen einfach ein HTML Widget genommen.
Wieso habe ich z.B. kein SVG Shape genommen und für den Kreis und das Dreieck eine Gruppe gemacht werdet Ihr euch vielleicht fragen. Ich möchte, das das Symbol automatisch anhand der Bildschirmauflösung skaliert. Das heisst, das dann die Leitung auch immer in der Mitte der Pumpe ist. Und das Dreieck immer in der Mitte des Dreieck.
Da ich mich nicht so auskenne habe ich zugegebener maßen ChatGPT gefragt.
Ich hatte dann ungefähr diesen Code bekommen
<div style="width:100%; aspect-ratio: 1 / 1;">
<svg viewBox="0 0 100 100" width="100%" height="100%" preserveAspectRatio="xMidYMid meet">
<!-- Kreis -->
<circle id="statusCircle" cx="50" cy="50" r="49"
fill="gray"
stroke="black"
stroke-width="3" />
<!-- Zentriertes Dreieck -->
<polygon
points="50,2 10,74 90,74"
fill="none"
stroke="black"
stroke-width="3"
/>
</svg>
</div>
<script>
// Dein Datenpunkt
const datapoint = {alias.0.Heizung.Speicherladepumpe.Schaltbefehl};
// Farbe ändern je nach Wert
function updateCircleColor(value) {
const color = value ? "green" : "gray";
document.getElementById("statusCircle").setAttribute("fill", color);
}
// Startwert lesen
vis.binds.basic.getValue(datapoint, function (val) {
updateCircleColor(val);
});
// Auf Änderungen reagieren
vis.states.bind(datapoint + ".val", function (e, newVal) {
updateCircleColor(newVal);
});
</script>
Ich habe Ihn bereits ein wenig angepasst, damit es für mich passen würde.
Leider funktioniert das mit der Füllfarbe aber nicht.
Anscheinend funktionieren keine JS funktionen im HTML Widget.
Ich habe es dan noch so Probiert
<div style="width:100%; aspect-ratio: 1 / 1;">
<svg viewBox="0 0 100 100" width="100%" height="100%" preserveAspectRatio="xMidYMid meet">
<!-- Kreis -->
<circle id="statusCircle" cx="50" cy="50" r="49"
fill={Wert:alias.0.Heizung.Speicherladepumpe.Schaltbefehl; wert==true? "green":"grey"}
stroke="black"
stroke-width="3" />
<!-- Zentriertes Dreieck -->
<polygon
points="50,2 10,74 90,74"
fill="none"
stroke="black"
stroke-width="3"
/>
</svg>
</div>
Da ist der Kreis dann aber einfach Schwarz
Was funktioniert ist, wenn ich direkt einen Datenpunkt mit dem Füllfarbentext hineinschreibe.
Aber ich möchte eigentlich umgehen dafür extra wieder zusätzliche datenpunkte anzulegen.
Hat vielleicht jemand einen Tipp für mich.
Vilen Dank