NEWS
Abfrage von Datenpunkten
-
Hi,
ich habe so gut wie keine Kenntnisse von JavaScript(leider). Versuche es aber zu lernen.
ich versuche mich gerade an einen Script, das in diesen Fall vier "fancyswitches" abfragt. 'fenster1….4'
Der Zustand der DP ändert sich auch wenn ich die Schalter betätige, leider wird anscheinend die Funktion nicht abgearbeitet.
//Datenpunkte erzeugen createState('fenster1', 0); createState('fenster2', 0); createState('fenster3', 0); createState('fenster4', 0); createState('zustand', 0); var eins = getState('fenster1').val; var zwei = getState('fenster2').val; var drei = getState('fenster3').val; var vier = getState('fenster4').val; function status() { var a = getState(eins).val; var b = getState(zwei).val; var c = getState(drei).val; var d = getState(vier).val; if(a === 1 && b === 1 && c === 1 && d === 1) { setState('zustand', 1); } else if(a === 0 || b === 0 || c === 0 || d === 0) { setState('zustand', 0); } } //Script starten on(eins, function() { status(); }); on(zwei, function() { status(); });
der DP 'zustand' soll im VIS dann einen basic static html anzeigen.
-
Hi,
ich habe so gut wie keine Kenntnisse von JavaScript(leider). Versuche es aber zu lernen.
ich versuche mich gerade an einen Script, das in diesen Fall vier "fancyswitches" abfragt. 'fenster1….4'
Der Zustand der DP ändert sich auch wenn ich die Schalter betätige, leider wird anscheinend die Funktion nicht abgearbeitet.
//Datenpunkte erzeugen createState('fenster1', 0); createState('fenster2', 0); createState('fenster3', 0); createState('fenster4', 0); createState('zustand', 0); var eins = getState('fenster1').val; var zwei = getState('fenster2').val; var drei = getState('fenster3').val; var vier = getState('fenster4').val; function status() { var a = getState(eins).val; var b = getState(zwei).val; var c = getState(drei).val; var d = getState(vier).val; if(a === 1 && b === 1 && c === 1 && d === 1) { setState('zustand', 1); } else if(a === 0 || b === 0 || c === 0 || d === 0) { setState('zustand', 0); } } //Script starten on(eins, function() { status(); }); on(zwei, function() { status(); });
der DP 'zustand' soll im VIS dann einen basic static html anzeigen. `
Hallo blauholsten,
fast richtig! Da ist ein kleiner Fehler in den on-Funktionen:
//Datenpunkte erzeugen createState('fenster1', 0); createState('fenster2', 0); createState('fenster3', 0); createState('fenster4', 0); createState('zustand', 0); var eins ='fenster1'; var zwei = 'fenster2'; var drei = 'fenster3; var vier = 'fenster4'; function status() { var a = getState(eins).val; var b = getState(zwei).val; var c = getState(drei).val; var d = getState(vier).val; if(a === 1 && b === 1 && c === 1 && d === 1) { setState('zustand', 1); } else if(a === 0 || b === 0 || c === 0 || d === 0) { setState('zustand', 0); } } //Script starten on(eins, function() { status(); }); on(zwei, function() { status(); });
Hast du die Änderungen bemerkt? Die ID in der on-Funktion reagiert nicht auf getState().val –- der String in den Häkchen ist nur ein eine ersetzt nur 'javascript.[Instanz].Variablenname' damit der Datenpunkt mit getState abgefragt werden kann. Im alten Skript war es praktisch getState(getState(x).val) und das ist falsch.
Gruß
Pix
6334_ede21.jpg -
Hi,
vielen Dank! Ich werde es heute Abend mal ausprobieren.
-
Hi,
geht leider noch nicht…. :?
-
getState(id) verlangt die ID (nicht den Namen).
var eins = getIdByName('fenster1'); var zwei = getIdByName('fenster2'); var drei = getIdByName('fenster3'); var vier = getIdByName('fenster4'); var zustand = getIdByName('zustand'); function status() { var a = getState(eins).val; var b = getState(zwei).val; var c = getState(drei).val; var d = getState(vier).val; if(a && b && c && d) { setState(zustand, 1); } else { setState(zustand, 0); } } on(eins, status()); on(zwei, status());
-
Also die eigentliche if Abfrage in der funktion geht! Leider reagiert das Script nicht auf Veränderungen der fancyswitches. Nur wenn ich das Script neu lade wird die Funktion abgearbeitet.
Was mache ich falsch? Ich dacht das on ist dafür da auf gewünschte Änderungen zu reagieren?
-
Habe gerade getestet: Die verkürzte Schreibweise
on(eins, status());
funktioniert leider nicht. Richtig:
on(eins, function() {status();}); on(zwei, function() {status();}); on(drei, function() {status();}); on(vier, function() {status();});
-
So jetzt habe ich es dank eurer Hilfe am laufen! Danke!!!!
//Datenpunkte erzeugen createState('fenster1', 0); createState('fenster2', 0); createState('fenster3', 0); createState('fenster4', 0); createState('zustand', 0); function status() { var a = getState('fenster1').val; var b = getState('fenster2').val; var c = getState('fenster3').val; var d = getState('fenster4').val; if(a && b && c && d) { setState('zustand', 1); } else { setState('zustand', 0); } } on({id:'javascript.0.fenster1'}, function(){ status(); }); on({id:'javascript.0.fenster2'}, function(){ status(); }); on({id:'javascript.0.fenster3'}, function(){ status(); }); on({id:'javascript.0.fenster4'}, function(){ status(); });
ich habe bei der on function gleich mit dem id Wert gearbeitet, um später z.b. die HM Datenpunkte schneller einbinden zu können.
Wie kann man den Beitrag als [gelöst] markieren?
-
Wie kann man den Beitrag als [gelöst] markieren? `
Indem man die Betreff-Zeile editiert.Anmerkung: Die Funktion getState('Name') funktioniert nur mit Datenpunkten der zugehörigen Javascript-Instanz. Um generell mit Namen arbeiten zu können, verwende ich die Funktion getIdByName('Name'), die nur einmal bei Script-Start aufgerufen wird.
358_modbus_solaredge.png -
Die verkürzte Schreibweise
on(eins, status());
funktioniert leider nicht. Richtig:
on(eins, function() {status();}); on(zwei, function() {status();}); on(drei, function() {status();}); on(vier, function() {status();}); ```` `
oder so:
on(eins, status); on(zwei, status); on(drei, status); on(vier, status);