NEWS
Allgemeine Frage zu Widget "jqui-mfd-ctrl-socket"
-
Hallo,
ich verwende bei meiner Visualisierung mehrmals das oben genannte Widget. Funktioniert auch bestens.
Jetzt habe ich aber einen Sonderfall der mir nicht klar ist. Wie funktioniert das mit der Extrasteuerung?
Mein Plan ist, das zusätzlich zu der normalen Funktion (Setzen einer Systemvariable, ändern des Icons) auch je nach Schaltzustand verschiedene URLs abgesetzt werden sollen. Der Aufruf der netzinternen URL bewirkt das Senden eines IR-Befehles mittels der leider nicht mehr produzierten RedEye Hardware. Gebe ich die URL direkt im Browser ein, dann passt es. Nur mit der Extrasteuerung komme ich nicht klar. Gebe ich dort die URL's ein schaltet nicht mal mehr die Systemvariable um.
Hat jemand einen Tipp wie das mit der Extrasteuerung genau funktioniert?
LG
Günther
-
Hallo,
ich verwende bei meiner Visualisierung mehrmals das oben genannte Widget. Funktioniert auch bestens.
Jetzt habe ich aber einen Sonderfall der mir nicht klar ist. Wie funktioniert das mit der Extrasteuerung?
Mein Plan ist, das zusätzlich zu der normalen Funktion (Setzen einer Systemvariable, ändern des Icons) auch je nach Schaltzustand verschiedene URLs abgesetzt werden sollen. Der Aufruf der netzinternen URL bewirkt das Senden eines IR-Befehles mittels der leider nicht mehr produzierten RedEye Hardware. Gebe ich die URL direkt im Browser ein, dann passt es. Nur mit der Extrasteuerung komme ich nicht klar. Gebe ich dort die URL's ein schaltet nicht mal mehr die Systemvariable um.
Hat jemand einen Tipp wie das mit der Extrasteuerung genau funktioniert?
LG
Günther `
Es ist eins oder anderes. Du solltest das über Javascript lösen. -
Alles klar, danke für die Auskunft.
Muss mich in JavaScript mal einarbeiten.
Gibt es da irgendein HowTo wie man JavaScript in IOBroker anwendet?
Adapter ist installiert.
-
-
Hallo, ja das ist ein Einstieg. Hätte ich auch selbst draufkommen können.
Danke
Lg
Günther
-
So, erste Schritte und nix geht.
Irgendwie schaffe ich es nicht, das mein Script auf die Systemvariable horcht.
Hat jemand einen Tipp?
Ich kann die SV Ändern wie ich will, das Script wird nicht ausgelöst.
var wz_ID = "hm-rega.0.6649.STATE"/*SV_Klima_WZ*/; var klima_activ = 0; on('wz_ID', function() { log('Start'); if (getState (wz_ID) === true && klima_activ === 0) {klima_activ = 1; log('einschalten'); } else if (getState (wz_ID) === false && klima_activ === 1) {klima_activ = 0; log('ausschalten'); } });
-
versuchs mal ein debugging mit
getState('hm-rega.0.6649').val
ich glaube das Problem mit "/*Name" hatte ich auch mal, und nach try&error hat dann die obigen Syntax funktioniert.
- Harald
-
Hallo Jeeper.at,
@Jeeper.at:So, erste Schritte und nix geht.
Irgendwie schaffe ich es nicht, das mein Script auf die Systemvariable horcht.
Hat jemand einen Tipp?
Ich kann die SV Ändern wie ich will, das Script wird nicht ausgelöst.
var wz_ID = "hm-rega.0.6649.STATE"/*SV_Klima_WZ*/; var klima_activ = 0; on('wz_ID', function() { log('Start'); if (getState (wz_ID) === true && klima_activ === 0) {klima_activ = 1; log('einschalten'); } else if (getState (wz_ID) === false && klima_activ === 1) {klima_activ = 0; log('ausschalten'); } }); ```` `
In der Subscription (on) sind ein paar Fehler: Du hast den Variablenname mit dem Namen des Datenpunktes in Anführungszeichen gesetzt. Die Anführungszeichen nutzt du nur, wenn du den Namen des Datenpunktes verwenden willst. Ausserdem fehlt noch eine Bezeichnung für das Objekt, das von der Subscription zurückgegeben wird. Meist wird hier data, obj oder dp verwendet. Du kannst aber auch mietzekatze oder rambo schreiben function(dp) …
Weiterhin brauchst du innerhalb der Subscription/Überwachung eines Datenpunktes nicht noch einmal dessen Status mit getState abfragen. Die Subscription löst eh nur aus, wenn es eine Neuerung beim Datenpunkt gibt, daher ist der Status des Datenpunktes (dp.state.val) auch aktuell.
Jetzt mal alles zusammen:
var wz_ID = "hm-rega.0.6649.STATE"/*SV_Klima_WZ*/; var klima_activ = 0; on(wz_ID, function(dp) { // reagieren auf Änderung, da keine weiteren Parameter angegeben log('Start - Änderung von ' + wz_ID + ' festgestellt'); if (dp.state.val === true && klima_activ === 0) { klima_activ = 1; log('einschalten'); } else if (dp.state.val === false && klima_activ === 1) { klima_activ = 0; log('ausschalten'); } });
Vereinfacht auch so:````
var wz_ID = "hm-rega.0.6649.STATE"/SV_Klima_WZ/;
var klima_activ = 0;on(wz_ID, function(dp) { // reagieren auf Änderung, da keine weiteren Parameter angegeben
log('Start - Änderung von ' + wz_ID + ' festgestellt');
klima_activ = Number(dp.state.val); // Number erzeugt Zahl aus Boolean false=0, true=1
log( (klima_activ === 0) ? 'ausschalten' : 'einschalten' ); // Kurzform für: wenn variable = 0 dann log 'ausschalten' sonst log 'einschalten'
});Oder noch kürzer:```` var wz_ID = "hm-rega.0.6649.STATE"/*SV_Klima_WZ*/; on(wz_ID, function(dp) { // reagieren auf Änderung, da keine weiteren Parameter angegeben log( (Number(dp.state.val) === 0) ? 'Änderung von ' + wz_ID + ' festgestellt: ausschalten' : 'Änderung von ' + wz_ID + ' festgestellt: einschalten' ); });
Gruß
Pix
-
Hallo PIX,
vielen Dank. Ich bin gänzlich neu in Javascript. Normalerweise schlage ich mich mit ABAP herum.
Nun funktioniert mal das. Jetzt kann ich meine nächsten Versuche starten.
LG
Günther
-
Hallo,
war ja klar, gleich die nächste Frage (aber nur so lernt man).
ich möchte in meinem Script einfach die folgende URL aufrufen.
var url = 'http://RedEye_F0101-39354.local.:8080/redeye/rooms/0/devices/274/commands/send?commandId=275';
Es braucht kein Fenster oder so aufgehen, sondern nur die URL angesprochen werden.
Wie mache ich das?
LG
Günther