NEWS
Javascript in vis einfügen
-
@oliverio Danke dir
jetzt klappt es -
@oliverio
lieber oliverio, bitte um verzeihung das ich nochmals störe.weißt du zufällig, wie ich mittels js einen datenpunkt erstelle oder zumindest werte in einen bestehenden datenpunkt schreibe und wieder auslese????
ich möchte buttons in einer view verwenden, welcheauch content und tags in anderen views beeinflusst. Da wäre es super, wenn ich daten in einen datenpunkte schreiben kann und wieder auslese.
also reinen js code, bspw:
jQuery(....).on("click....{
schreibe wert in datenpunkt
});
danke -
Schreiben von datenpunkten
Kann mit dem Befehlvis.setValue(datenpunkt,wert)
durchgeführt werden.
Von vis aus einen datenpunkt erstellen würde ich nicht empfehlen.
Gehen tut das, aber man muss mit socket.Io direkt sprechen und die Parameter korrekt setzen.Das lesen von bereits abonnierten datenpunkten (d.h. Der datenpunkt wurde irgendwo bereits in einem Widget oder in einem binding eingetragen) geht so
wert=vis.states.attr(datenpunkt.val)
Anstatt val kann beispielsweise auch .ts für den timestamp genommen werden.
Das lesen von nicht abonnierten datenpunkten geht auch ist aber auch aufwändiger. -
@oliverio said in Javascript in vis einfügen:
vis.setValue(datenpunkt,wert)
Super danke.
Gibt es eine Übersicht der vis options, vis klassen, vis methoden????in meiner view habe ich bis jetzt nur mal html und iframe widgets.
wie kann ich hier einen datenpunkt einbinden, weil derzeit funktioniert es nicht und ich denke das ist, weil ich noch keinen datenpunkt eiungebunden habe -
@jumbo125 sagte in Javascript in vis einfügen:
@oliverio said in Javascript in vis einfügen:
vis.setValue(datenpunkt,wert)
Super danke.
Gibt es eine Übersicht der vis options, vis klassen, vis methoden????Leider nur so
https://github.com/ioBroker/ioBroker.vis/blob/v1.4.16/www/js/vis.jsin meiner view habe ich bis jetzt nur mal html und iframe widgets.
wie kann ich hier einen datenpunkt einbinden, weil derzeit funktioniert es nicht und ich denke das ist, weil ich noch keinen datenpunkt eiungebunden habeich verstehe deine Frage nicht ganz.
Was funktioniert nicht? -
@oliverio
Danke das du dir die zeit nimmst.
danke für die github info..ich habe ins html widget nun:
<input type="hidden" value="{0_userdata.0.Datenpunkte.Status.Video.aktuellesVideo}"> damit ich es anspreche
Dort wird der richtige wert auch angezeigtim script steht bspw zum testen:
alert(vis.states.attr(0_userdata.0.Datenpunkte.Status.Video.aktuellesVideo.val));
leider kommt hier undefinied
-
@Codierknecht
Sehr geehrte/r CodierknechtDa du dich so gut mit CPU Ressorucen usw. auskennst wollte ich Sie fragen, ob es Ihreransicht nach mehr ressourcen benötigt, mittels ajax eine mysql eingabe und ausgabe zu starten, als die daten direkt aus dem iobroker Datenobjekt zu holen.
Grund dafür(damit Sie nicht alles lesen müssen): ich schaffe es leider nicht mittels javascript einen datenpunkt zu lesen und neu zu beschreiben.alert(vis.states.attr(0_userdata.0.Datenpunkte.Status.Video.aktuellesVideo.val));
ich kämpfe nun schon seit 2 stunden.
Die mysql abfrage habe ich ihn 10 minuten fertig
Vielen Dank
Lg Jumbo -
@jumbo125 sagte in Javascript in vis einfügen:
alert(vis.states.attr("0_userdata.0.Datenpunkte.Status.Video.aktuellesVideo.val"));
Um einen Datenpunkt per Binding einzubinden reicht auch folgendes, wenn der input tag für dich nicht anderweitig noch wichtig wäre
<div style="display:none;"> {0_userdata.0.Datenpunkte.Status.Video.aktuellesVideo} </div>
wichtig ist nur, das der Datenpunkt von vis registriert und abonniert wurde
ein komplettes funktionierendes beispiel für html widget wäre der folgende Inhalt für das Feld HTML
aktuellesVideo: {0_userdata.0.Datenpunkte.Status.Video.aktuellesVideo} <script> alert(vis.states.attr("0_userdata.0.Datenpunkte.Status.Video.aktuellesVideo.val")); </script>
wenn im browser mit javascript fehler entstehen, dann kann man mit F12 in die browser-Konsole schauen, wie der genau heißt und wo er entstanden ist.
wenn du in deinem javascript code noch den befehl
debugger;
einträgst, dann stoppt der eingebaute debugger genau an dieser stelle bei der ausführung. danach kannst du dann schritt für schritt prüfen was vor sich geht.
hier ein kleines tutorial, welches für chrome und edge gilt. bei firefox aber ganz ähnlich aussieht. opera weiß ich nicht
https://developer.chrome.com/docs/devtools/javascript/ -
@oliverio danken Ihnen Oliver
Die dev console kannte ich bereits, da ich sehr häufig mit jquery/js programmiere... nur die VIS ist mir völlig neu.
Da muss ich mich erst einarbeiten
Außerdem dachte ich das .val als Methode oder o.ä. fungiert und nicht im String mit drinnen steht
Danke -
das ist eine vis eigenheit.
du kannst dir in der developer console einfach mal den inhalt von
vis.states
anschauen.
dazu einfach im sources-tab auf der rechten seite unter watch
vis.states eintragen.
dann siehst du die liste mit allen für das projekt abonnierten datenpunkten und allen sub-werten -
@oliverio
alles klar!ich habe gerade herausgefunden, dass das event
document.ready nicht auslöst wenn meine vis container geladen ist, sondern nur die vis container. es löst viel zu früh aus. daher werden alle meine widget ids nicht gefunden. kennt das problem jemand -
@jumbo125 Sollte in dem Beispiel stehen, dass ich Dir am Anfang als Link eingestellt habe.
-
@jumbo125 sagte in Javascript in vis einfügen:
kennt das problem jemand
ja
das html wird nicht fertig generiert vom server geladen sondern dynamisch generiert.
document.ready signalisiert nur, das das was vom server geladen wurde nun vollständig gerendert wurde.
das da dann programme loslaufen und nachträglich das noch verändert weiß der browser nicht.
leider besitzt vis ebenfalls keine events die ein irgendwelches fertig signalisiert (widget fertig, view fertig, etc.)siehe dieser thread
https://forum.iobroker.net/topic/48663/howto-skripte-im-vis-editor-mit-jquery?_=1682065519805
suche nach function waitForElement -
@oliverio
Danke dir! -
Danke euch vielmals!!!!!!
alles funktioniert. mit dem bockls und debugg habe ich mich schon auseinadergesetzt. Das ist ja wirklich einfach
was mich noch interessieren würde:
wie kann man den ins blockly js code einfügenbspw wird hier eine debug infos ausgegeben, wenn der Datenpunkt verändert wird.
Super wäre es, wenn ich einen jquery code statt nur einen Text eintragen kann.Sinn dahinter:
ich habe ein html element (Bild), welches je nach Datenpunkt das bild wechseln soll. Das würde ich nun gerne mit jquery angeben. hier mal das blockly
danke euch!
-
wenn ich statt Blockly JS wähle und meinen code selbst schreibe, werden befehle wie alert() oder jquery ode nicht interpretiert, sondern als fehler angezeigt. weiß jemand wie man javascript in diesen bereich schreibt?
danke -
geht das nicht?
ich müsste eine funcktion ausführen, immer wenn ein datenpunkt geändert wird. also mehrere datenpunkte müccten immer bei einer änderung eine funktion ausgeführt werden -
@jumbo125 sagte in Javascript in vis einfügen:
geht das nicht?
Nur mal so zum Interesse für mich.
Du bist neu in JS und VIS (siehe #1).
Und willst so ein Projekt umsetzen.Jeder andere nimmt ein blockly oder ein JS und steuert/reagiert auf die DP.
Und du willst ein JS in VIS?!
Warum ?Fazit:
Ich habe mittlerweile 100... Scripte. Und alles funktioniert. Würde gar nicht auf die Idee kommen dies so machen zu wollen.
Edit: Stimmt nicht. Habe 1 oder 2 Scripte in einem HTML; wurde von mir so übernommen aus dem Forum. -
@jumbo125
Das JavaScript im JavaScript Adapter wird auf dem Server ausgeführt. Eigentlich heißt es da auch node. Da gibt es auch kein Dokumenten Baum
Jquery und alert gehen da nucht -
@bahnuhr
Hallo danke dirJS ist nicht neu für mich und ich habe etwa 10 Funktionen schon im html stehen
Vielleicht könnt ihr mir ja einen Tipp geben:
Ich habe in meiner html ein Fenster abgebildet. Über diesem Bild liegt ein Bild vom Fenster Rollo.
Dieses ändert je nach datenpunkt seine Position mit einer Animation.
Das funktioniert alles, wenn ich mittels JS den datenpunkt ändere, bspw beim Klick auf einen Button.
ABER: wenn ich mit der Fernbedienung beim Fenster das Rollo rauf oder runter steuere ändert sich zwar der datenpjnkt, aber die Animation wird nicht ausgelöst.
Daher die frage: Wie kann ich die Position des Bildes im html automatisch ändern bzw die Animation starten, sobald der datenpunkt geändert wird?Danke