NEWS
"Rechnen" in Widgets
-
Gibt es mittlerweile eine funktionierenden String den ich bei Objekt-ID einfügen kann?
Wenn ich
code_text {value1:worx.0.123.rawMqtt.raw.blade_work_time;value2:worx.0.123.rawMqtt.raw.blade_work_time_reset;value1-value2}
einfüge, dann zeigt er mir immer keinen Wert an. Was mache ich falsch?
-
die werte aus den datenpunkten kommen meist/immer als strings an.
daher muss man sie erst in den DAtentyp number umwandeln damit man rechnen kann{value1:worx.0.123.rawMqtt.raw.blade_work_time;value2:worx.0.123.rawMqtt.raw.blade_work_time_reset;parseFloat(value1)-parseFloat(value2)}
-
@oliverio
Vielen Dank. Habe ich gerade direkt probiert aber er spuckt trotzdem keinen Wert aus -
@sushibomba Dann wäre mal ein "Debug" angebracht. Einfaches HTML-Widget mit entsprechendem Inhalt:
erster Wert: {value1:worx.0.123.rawMqtt.raw.blade_work_time; value1} <br/> erster Wert: {value1:worx.0.123.rawMqtt.raw.blade_work_time; typeof(value1)} <br/> zweiter Wert: {value2:worx.0.123.rawMqtt.raw.blade_work_time_reset; value2} <br/> zweiter Wert: {value2:worx.0.123.rawMqtt.raw.blade_work_time_reset; typeof(value2)} <br/> Berechnung: {value1:worx.0.123.rawMqtt.raw.blade_work_time;value2:worx.0.123.rawMqtt.raw.blade_work_time_reset;parseFloat(value1)-parseFloat(value2)}
Was spuckt er denn da aus?
-
Dann spuckt er das aus:
erster Wert: 31161
erster Wert: string
zweiter Wert: 29570
zweiter Wert: string
Berechnung: 1591Also hier scheint die Berechnung zu funktionieren.
-
@sushibomba Dann bleibt die Frage "wo genau" du die Berechnung eintragen willst. Bindings funktionieren nicht überall
-
Also am liebsten würde ich sie mir in das Widget von MaterialDesign - Input einbauen. Dort dann als Number einfach nur anzeigen lassen und das Widget sperren damit es optisch zum Rest passt.
Falls es aber nicht geht dann einfach als basic - number -
@sushibomba MaterialDesign bin ich außen vor, Basic-Number geht IMHO nicht.
Gibt aber einen einfachen Test. Trage einfach ein Binding ohne alles ein. Wird was angezeigt muss auch die Berechnung funktionieren:{worx.0.123.rawMqtt.raw.blade_work_time}
-
-
-
@sushibomba sagte in "Rechnen" in Widgets:
@sborg
Ok funktioniert leider nicht @Homoran auch nicht in der Runtime.@sborg sagte in "Rechnen" in Widgets:
@sushibomba Dann bleibt die Frage "wo genau" du die Berechnung eintragen willst.
und?
-
Ich möchte einfach nur in meiner Worx View die Zahl berechnet haben wie lange die Klingen vom Mährobotor laufen. Oder verstehe ich die Frage nicht
-
@sushibomba sagte in "Rechnen" in Widgets:
Oder verstehe ich die Frage nicht
anscheinend.
@sborg sagte in "Rechnen" in Widgets:
Dann bleibt die Frage "wo genau" du die Berechnung eintragen willst.
nicht was du eintragen oder erreichen willst.
- welches Widget?
- in welchem Feld dort?
-
@homoran
Oh tut mir leid das ich es nicht sofort verstanden habeEntweder basic - Number -> Object ID
Oder am liebsten materialdesign - Input -> Object ID -
@sushibomba warum in Object-ID.
da muss der Datenpunkt rein, von wo die Daten bezogen werden.IMHO darf/kann da kein Binding rein. Das funktioniert nicht (immer)
-
@homoran sagte in "Rechnen" in Widgets:
IMHO~darf/kann da kein Binding rein. Das funktioniert nicht (immer)Jepp, in der ObjectID geht das nicht. Das hat aber mit dem System an sich zu tun, also Laufzeiten wann, was, wo gemacht wird.
-
-
@sushibomba sagte in "Rechnen" in Widgets:
Dann muss ich es wohl anderweitig versuchen.
So ganz verstehe ich noch nicht was du bezwecken willst. Du berechnest eine (Rest-)Laufzeit, die ist dynamisch (=verändert sich also). Warum willst du die dann als statische ObjectID?
Dies ist eine ObjectID
worx.0.123.rawMqtt.raw.blade_work_time
Die wird iaR nie geändert (außer mal bei einem Adapter-Update), denn darauf greifen dann die Skripte, Blockly, Node-RED, VIS... zu. Die kann, und darf, sich also nie ändern (bis der Dev dies aus "Gründen" tut ).
Deine berechnete Zeit wäre dann ein state der ObjectID. Der darf/kann sich dann beliebig ändern.Wenn du versuchst aus "123456 Sekunden" des Bindings eine formatierte Zeitanzeige ala
hh:mm
zu generieren, musst du das anders lösen (Blockly, Hilfsdatenpunkt, JS-Snippet...).
So ein JS-Snippet habe ich die Tage beim Shelly-Adapter gepostet, da dessen Uptime nun in Sekunden angezeigt wird -
es gab hier schon anfragen, per binding die objectid zu berechnen, damit man nicht soviele widgets anlegen muss.
aber vis kann keine dynamischen object ids
-
Ich habe es jetzt mit nem JS und nem Datenpunkt gelöst. Mal schauen ob es funktioniert.
'use strict'; const idBladeWorkTime = 'worx.0.xxx.rawMqtt.raw.blade_work_time'; const idBladeWorkTimeReset = 'worx.0.xxx.rawMqtt.raw.blade_work_time_reset'; const idBladeWorkTimeCurrent = '0_userdata.0.VIS.Eigene_Datenpunkte.WORX.xxx.blade_work_time_current'; function zweiStellig(zahl) { return zahl < 10 ? '0' + zahl : zahl } function stundenMinuten(minuten) { return parseInt(minuten / 60) + ':' + zweiStellig(minuten % 60); } on ({id: [idBladeWorkTime, idBladeWorkTimeReset], change: 'ne'}, function() { setState(idBladeWorkTimeCurrent, stundenMinuten(getState(idBladeWorkTime).val - getState(idBladeWorkTimeReset).val)); })