NEWS
"Rechnen" in Widgets
-
@oliverio Dass kann ich mir auch noch vorstellen, immerhin spart man sich den Alias.
Aber wie ich es mir schon dachte, ging es eher darum die (Rest-)Laufzeit in die ObjectID zu "pressen", damit man dann schön mittels Widget wie bspw. Basic Number die Ausgabe formatieren kann
@Sushibomba Sollte gehen, zumindest sehe ich so erst mal keinen Fehler, aaaabbbbbeeeerrrr....
brauchst du das nur für die VIS? Du berechnest fortwährend die Laufzeit neu. Sagen wir mal er schickt alle 10 Sekunden ein Update und mäht täglich 1h. Dann sind das 360 Berechnungen täglich, ob du sie brauchst oder nicht. Zwar noch nicht die Summe im Einzelnen, aber potenziere das noch mit anderen "unnützen" Berechnungen.
Wenn es nur für die VIS ist, wäre es zumindest sinnvoller, es auch nur dann auszuführen wenn du auch drauf schaust/aufrufst.
Schließlich wird auch niemand alle Minute melden "es regnet nicht", wenn er den Auftrag bekommt "sag mir bei Regen Bescheid"... -
@sborg
Ja da hast du absolut recht.
Und wie optimiere ich das dann am einfachsten?
Genau brauche es nur als Number in der Vis. -
@sushibomba Ist im Grunde so gut wie das selbe wie dein JS, nur ohne Datenpunkte.
Zur Anzeige nimmst du bspw. ein HTML-Widget.
Dort nutzt du dann ein Binding zur Berechnung und Ausgabe:
{val1:worx.0.123.rawMqtt.raw.blade_work_time;val2:worx.0.123.rawMqtt.raw.blade_work_time_reset; toHHMMSS(parseFloat(val1)-parseFloat(val2))}
Dann musst du beim Widget unter "Skript" nur noch die Funktion einfügen:
var toHHMMSS = (secs) => { var sec_num = parseInt(secs, 10) var hours = Math.floor(sec_num / 3600) % 24 var minutes = Math.floor(sec_num / 60) % 60 var seconds = sec_num % 60 return [hours,minutes,seconds] .map(v => v < 10 ? "0" + v : v) .filter((v,i) => v !== "00" || i > 0) .join(":") }
Somit steht dir die Funktion in jedem Widget deiner VIS zur Verfügung und wird auch nur noch bei Bedarf ausgeführt. Da ein Binding auch auf Änderungen getriggert wird, aktualisiert sich die Anzeige selbst dann wenn du in der View stehst und nicht nur beim laden/neu laden
-
Hey, schließe mich hier mal an mit der Frage.
Um mir die Laufzeit von Proxmox anzuzeigen benutze ich folgendes (irgendwo mal hier im Forum gefunden){d:proxmox.0.node_Rechenzentrum.uptime;Math.floor( ((d)/60/60/24) )} Tage‚ {h:proxmox.0.node_Rechenzentrum.uptime;Math.floor( ((h)/60/60) % 24 )} Std.
Ich würde aber noch gerne die Minuten dabei haben und bekomme es natürlich wieder nicht hin
Da kann mir doch bestimmt einer von euch helfen -
@nashra sagte in "Rechnen" in Widgets:
Da kann mir doch bestimmt einer von euch helfen
Verrate ich aber nicht...
{m:proxmox.0.node_Rechenzentrum.uptime;Math.floor( ((m)/60) % 60 )} Min.
-
@sborg sagte in "Rechnen" in Widgets:
@nashra sagte in "Rechnen" in Widgets:
Da kann mir doch bestimmt einer von euch helfen
Verrate ich aber nicht...
{m:proxmox.0.node_Rechenzentrum.uptime;Math.floor( ((m)/60) % 60 )} Min.
Ich kann schweigen
Danke -
Hab's selbst gelöst.
-
Ich verstehe einfach überhaupt nichts mehr.
Nun habe ich in meiner Visualisierung von Anfang an Berechnungen in Widgets durchgeführt. Ich kann mich noch an die Anfänge erinnern: Erst wollte nichts funktionieren, irgendwann klappte es und ich wusste nicht warum. Egal, dachte ich; Hauptsache es funktioniert.
Nun holt mich das Ganze wieder ein, als ich Ergänzungen vornehmen wollte. Hier zwei Beispiele, wie ich sie in HTML-Widgets verwende ..
- altes funktionierende Beispiel: {a:0_userdata.0.Heizung.tmp_jahr;b:0_userdata.0.Heizung.Umrechnungsfaktor;parseFloat(a*b).toFixed(2)}
- neues Beispiel, das stets bloß "0" als Ergebnis liefert: {a:0_userdata.GeräteÜberwachung.Spülmaschine.Energie_Verbrauch;b:0_userdata.0.GeräteÜberwachung.Waschmaschine.Energie_Verbrauch;parseFloat(a*b).toFixed(2)}
Ich bin völlig ratlos und hoffe verzweifelt auf eure Hilfe.
-
@legro
Keine Umlaute verwenden(Warum man Verbräuche miteinander multipliziert, erschließt sich mir allerdings auch nicht)
-
@codierknecht said in "Rechnen" in Widgets:
@legro
Keine Umlaute verwendenHier ein Beispiel, das Umlaute enthält und dennoch funktioniert ..
<h2>Kosten</h2>
Verbrauch: {x:0_userdata.0.Gaszähler.TempGasJahr;parseFloat(x).toFixed(1)} m<sup>3</sup><br>Energie:
{a:0_userdata.0.Heizung.tmp_jahr;b:0_userdata.0.Heizung.Umrechnungsfaktor;c:0_userdata.0.Heizung.Zustandszahl;parseFloat(abc).toFixed(0)} KWh<br> Kosten:
{a:0_userdata.0.Heizung.tmp_jahr;b:0_userdata.0.Heizung.Umrechnungsfaktor;c:0_userdata.0.Heizung.Zustandszahl;d:0_userdata.0.Heizung.Energiepreis;parseFloat(abcd).toFixed(2)} €* -
-
@legro sagte in "Rechnen" in Widgets:
Hier ein Beispiel, das Umlaute enthält und dennoch funktioniert ..
Sollte man dennoch grundsätzlich vermeiden.
Ansonsten gilt was @Homoran geschrieben hat.
-
Selbstverständlich sind in den Datenpunkten Zahlen enthalten.
-
Dann Frage ich mal anders. Sind die DP vom Typ Zahl (Number) oder Zeichenkette (String)?
-
Beim Anlegen habe ich sie selbstverständlich als Typ number angelegt.
-
@legro Fakt ist aber auch, dass wenn alles "selbstverständlich" ist - muss und geht es auch. Zeig doch bitte mal die DP selbst mit Werte.
-
@legro sagte in "Rechnen" in Widgets:
Beim Anlegen habe ich sie selbstverständlich als Typ number angelegt.
das ist irrelevant.
was reingeschrieben wird ist interessant -
Selbstverständlich steht auch eine Zahl (float, int) in den Datenpunkten.
-
@legro Kann ich aber auch in eine (und/oder als ) Zeichenkette schreiben. Zeig doch bitte mal die Details.
-
Apropos Details ..
Die Bezeichnungen der Datenpunkte in den Widgets kopiere ich mir aus den Objekten. Wenn's funktioniert, wird die Speicherung in die Zwischenablage mit Angabe des Bezeichners bestätigt (siehe 1.Bild), in den Fällen, in den es nachher nicht geht, wird nur "kopiert" angezeigt (s. 2.Bild).
In beiden Fällen wird jedoch der korrekte Name des Bezeichners in die Zwischenablage kopiert.