NEWS
[Gelöst] Vis Binding javascript
-
Hi,
kann man bei einem Binding in Vis komplexere javascripts auch verwenden? Ich krieg es nicht ans laufen. Will eigentlich nur eine Methode aufrufen mit 2 Paramtern und diese eben setzen und übergeben:
{heute:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDay; aktuell:sonoff.0.Sonoff-PowR2-Geschirrspüler.ENERGY_Power; isOnRgbColor(aktuell,heute)}Hat jemand einen Tipp?
-
Hi,
kann man bei einem Binding in Vis komplexere javascripts auch verwenden? Ich krieg es nicht ans laufen. Will eigentlich nur eine Methode aufrufen mit 2 Paramtern und diese eben setzen und übergeben:
{heute:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDay; aktuell:sonoff.0.Sonoff-PowR2-Geschirrspüler.ENERGY_Power; isOnRgbColor(aktuell,heute)}Hat jemand einen Tipp?
@gramar sagte in Vis Binding javascript:
Hat jemand einen Tipp?
eigentlich ja, wo liegt deine javascript funktion? in einer datei, die du mit script tag einbindest oder in einem html-widget?
wenn in einem widget, kann es sein, das das widget zu diesem Zeitpunkt noch nicht geladen ist.
vis ruft ein binding bei der ersten Initialisierung mehrfach auf. -
@gramar sagte in Vis Binding javascript:
Hat jemand einen Tipp?
eigentlich ja, wo liegt deine javascript funktion? in einer datei, die du mit script tag einbindest oder in einem html-widget?
wenn in einem widget, kann es sein, das das widget zu diesem Zeitpunkt noch nicht geladen ist.
vis ruft ein binding bei der ersten Initialisierung mehrfach auf.@oliverio
Die Funktion liegt im Skript Tag.
Komischerweise funktioniert das ganze wenn ich nur eine Variable definiere:{n:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDay;isOnRgbColor(n)}Diese funktioniert dann nicht mehr:
{heute:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDay; aktuell:sonoff.0.Sonoff-PowR2-Geschirrspüler.ENERGY_Power; isOnRgbColor2(aktuell,heute)}So sind die Funktionen definiert:
function isOnRgbColor(current) { var rgb = [0,0,0]; if ( current > 1 ) { rgb = orange; } return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')'; } function isOnRgbColor2(current, t) { var rgb = [0,0,0]; if(t > 0) { rgb = green; } return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')'; } -
@oliverio
Die Funktion liegt im Skript Tag.
Komischerweise funktioniert das ganze wenn ich nur eine Variable definiere:{n:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDay;isOnRgbColor(n)}Diese funktioniert dann nicht mehr:
{heute:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDay; aktuell:sonoff.0.Sonoff-PowR2-Geschirrspüler.ENERGY_Power; isOnRgbColor2(aktuell,heute)}So sind die Funktionen definiert:
function isOnRgbColor(current) { var rgb = [0,0,0]; if ( current > 1 ) { rgb = orange; } return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')'; } function isOnRgbColor2(current, t) { var rgb = [0,0,0]; if(t > 0) { rgb = green; } return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')'; }@gramar habe das getestet - bist du sicher, das dein script funktioniert
zusätzlich - das ganze reagiert sehr träge, weil die sonoff daten nicht immer sofort aktuell sind (könnte an teleperiod "hängen"function isOnRgbColor(current) { var rgb = [125,125,0]; if ( current > 0.1 ) { return "orange"; } else{ return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')'; } } function isOnRgbColor2(current, t) { var rgb = [120,125,0]; if(t > 0) { return "green"; } else { return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')'; } -
@oliverio
Die Funktion liegt im Skript Tag.
Komischerweise funktioniert das ganze wenn ich nur eine Variable definiere:{n:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDay;isOnRgbColor(n)}Diese funktioniert dann nicht mehr:
{heute:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDay; aktuell:sonoff.0.Sonoff-PowR2-Geschirrspüler.ENERGY_Power; isOnRgbColor2(aktuell,heute)}So sind die Funktionen definiert:
function isOnRgbColor(current) { var rgb = [0,0,0]; if ( current > 1 ) { rgb = orange; } return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')'; } function isOnRgbColor2(current, t) { var rgb = [0,0,0]; if(t > 0) { rgb = green; } return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')'; }habe jetzt mal mit 2 werten - abfrage getestet - fuktioniert auch
function isOnRgbColor2(schalter1, t) { console.log(t) if (t > 0 && schalter1=="true") {console.log("true"+schalter1); return "green"} if (t > 0 && schalter1!="true") {console.log("false"+schalter1); return "red"} if(t==0) { return "yellow"; } }wichtig ist das true in anführungszeichen

-
habe jetzt mal mit 2 werten - abfrage getestet - fuktioniert auch
function isOnRgbColor2(schalter1, t) { console.log(t) if (t > 0 && schalter1=="true") {console.log("true"+schalter1); return "green"} if (t > 0 && schalter1!="true") {console.log("false"+schalter1); return "red"} if(t==0) { return "yellow"; } }wichtig ist das true in anführungszeichen

So funktionierts auch:
{n:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_previousDay;isOnRgbColor2(n,n)}Irgendwie mach ich anscheinend einen Fehler bei der Defintion von 2 Variablen...
-
So funktionierts auch:
{n:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_previousDay;isOnRgbColor2(n,n)}Irgendwie mach ich anscheinend einen Fehler bei der Defintion von 2 Variablen...
@gramar wo ist der sinn bei einer zweimaligen übergabe des selben wertes ?
-
@gramar wo ist der sinn bei einer zweimaligen übergabe des selben wertes ?
@liv-in-sky
Das hab ich nur testweise gemacht um den Fehler einzugrenzen. Ziele wäre eben genau diese Übergabe:{heute:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDay; aktuell:sonoff.0.Sonoff-PowR2-Geschirrspüler.ENERGY_Power; isOnRgbColor2(aktuell,heute)} -
@liv-in-sky
Das hab ich nur testweise gemacht um den Fehler einzugrenzen. Ziele wäre eben genau diese Übergabe:{heute:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDay; aktuell:sonoff.0.Sonoff-PowR2-Geschirrspüler.ENERGY_Power; isOnRgbColor2(aktuell,heute)}füge mal in deinem script das console.log ein und beobachte das ganze mit den chrome-entwicklertools - dann siehst du, ob script oder übergabe das problem ist
-
füge mal in deinem script das console.log ein und beobachte das ganze mit den chrome-entwicklertools - dann siehst du, ob script oder übergabe das problem ist
Error in eval[value] : {heute:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDay; aktuell:sonoff.0.Sonoff-PowR2-Geschirrspüler.ENERGY_Power; isOnRgbColor2(aktuell,heute)} Error in eval[script]: var heute = "1.056";return aktuell:sonoff.0.Sonoff-PowR2-Geschirrspüler.ENERGY_Power; Error in eval[error] : SyntaxError: unexpected token: ':' -
Error in eval[value] : {heute:sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDay; aktuell:sonoff.0.Sonoff-PowR2-Geschirrspüler.ENERGY_Power; isOnRgbColor2(aktuell,heute)} Error in eval[script]: var heute = "1.056";return aktuell:sonoff.0.Sonoff-PowR2-Geschirrspüler.ENERGY_Power; Error in eval[error] : SyntaxError: unexpected token: ':'teste mal mit einem anderen datenpunkt
sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDaydieses .01 wird als zahl angezeigt
poste auch das momentane ganze script
-
teste mal mit einem anderen datenpunkt
sourceanalytix.0.sonoff__0__Sonoff-PowR2-Geschirrspüler__ENERGY_Total.currentYear.consumed.01_currentDaydieses .01 wird als zahl angezeigt
poste auch das momentane ganze script
@liv-in-sky
Mit einem anderen Datenpunkt funktionierts tatsächlich!
Kann man den Namen des Datenpunkts unter Hochkomma stellen damit das Script das nicht falsch interpretiert? -
@liv-in-sky
Mit einem anderen Datenpunkt funktionierts tatsächlich!
Kann man den Namen des Datenpunkts unter Hochkomma stellen damit das Script das nicht falsch interpretiert?musst du testen - bei mir funktioniert es nicht
glaube du musst z.b. mit einem alias arbeiten
-
@liv-in-sky
Mit einem anderen Datenpunkt funktionierts tatsächlich!
Kann man den Namen des Datenpunkts unter Hochkomma stellen damit das Script das nicht falsch interpretiert?ich versuche mich noch einmal zu verdeutlichen.
die reihenfolge, wann die widgets geladen werden ist zufällig. daher kann es manchmal funktionieren, manchmal nicht.
vis untersucht das binding einmalig beim laden der html seite.
wenn dann das javascript nicht zur Verfügung steht, dann wird das binding nie funktionieren.daher ist es keine gute idee, javascript funktionen in ein html widget zu packen. leider ist meine frage oben dazu nicht vollständig beantwortet worden. aber das wäre der einzige ort in vis. wo man einen script tag unterbringen kann
besser ist es die javascript funktionen in den reiter "skript" bei vis einzutragen. die stehen dann gleich zu beginn zur Verfügung. -
ich versuche mich noch einmal zu verdeutlichen.
die reihenfolge, wann die widgets geladen werden ist zufällig. daher kann es manchmal funktionieren, manchmal nicht.
vis untersucht das binding einmalig beim laden der html seite.
wenn dann das javascript nicht zur Verfügung steht, dann wird das binding nie funktionieren.daher ist es keine gute idee, javascript funktionen in ein html widget zu packen. leider ist meine frage oben dazu nicht vollständig beantwortet worden. aber das wäre der einzige ort in vis. wo man einen script tag unterbringen kann
besser ist es die javascript funktionen in den reiter "skript" bei vis einzutragen. die stehen dann gleich zu beginn zur Verfügung. -
-
@OliverIO doch doch, die Funktion isOnRgbColor2 selber ist schon im reiter "skript" definiert.
@liv-in-sky wie funktioniert das mit Aliase? Du meinst im Objekt des Datenpunktes einen Alias erstellen?
@gramar ja genau - die alias function vom iobroker nutzen - so kannst du diesen datenpunkt einen "guten" namen geben
kann man ganz schnell über die raw einstellung eines aliases ändern - soll ja nur gespiegelt werden
hier eine schnell erzeugung - du musst deinen datenpunkt als id reinkopieren

anschliessend nutzt du das alias in deiner function
-
@gramar ja genau - die alias function vom iobroker nutzen - so kannst du diesen datenpunkt einen "guten" namen geben
kann man ganz schnell über die raw einstellung eines aliases ändern - soll ja nur gespiegelt werden
hier eine schnell erzeugung - du musst deinen datenpunkt als id reinkopieren

anschliessend nutzt du das alias in deiner function
@liv-in-sky und wie spreche ich den alias dann an? alias.0.testAlias oder alias.0.testAlias.id?
-
@liv-in-sky und wie spreche ich den alias dann an? alias.0.testAlias oder alias.0.testAlias.id?
-
@liv-in-sky das mit alias scheint leider auch nicht zu funktionieren:

Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden