NEWS
GetState in switch
-
Hallo zusammen,
ich versuche gerade in iobroker mit js modbus und hue zu kombinieren, damit egal, wo ich was ändere, der andere das mitkriegt.
Folgendes Skript hab ich probiert, aber die Werte sind immer undefined nach dem switch
! var Devicename1;
! var Devicename2;
! var DeviceNeedsBool = false;
! var anzahlFunktionen = 3;
! var i=1;
! for (i=1;i<=anzahlFunktionen;i++)
! {
! switch (i)
! {
! case '1': Devicename1 = getState("modbus.0.holdingRegisters.12288_Lampe_1_Rot");
! Devicename2 = getState("hue.0.Philips_hue.Lampe_1_LED.r");
! DeviceNeedsBool = false;
! break;
! case '2': Devicename1 = getState("modbus.0.holdingRegisters.12289_Lampe_1_Gruen");
! Devicename2 = getState("hue.0.Philips_hue.Lampe_1_LED.g");
! DeviceNeedsBool = false;
! break;
! case '3': Devicename1 = getState("modbus.0.holdingRegisters.12290_Lampe_1_Blau");
! Devicename2 = getState("hue.0.Philips_hue.Lampe_1_LED.b");
! DeviceNeedsBool = false;
! break;
! default:
! } // end of switch
! console.log("Value Switch " + i + ": " + Devicename1);
! console.log("Value Switch " + i + ": " + Devicename2);
! console.log("Value Switch " + i + ": " + DeviceNeedsBool);
! on({id: Devicename1, change: "ne"}, function (obj)
! {
! var value = obj.state.val;
! var oldValue= obj.oldState.val;
! console.log("Value " + i + ": " + value);
! console.log("Value " + i + ": " + oldValue);
! if (value != oldValue)
! {
! console.log("Value IF" + i + ": " + value);
! console.log("Value IF" + i + ": " + oldValue);
! if (!DeviceNeedsBool)
! {
! setState(Devicename2, value);
! }
! else if (DeviceNeedsBool)
! {
! setState(Devicename2, !value);
! oldValue = value;
! }
! }
! });
! } // end of forDeswegen arbeitet das auch nach der switch Anweisung nicht weiter.
Kann mir bitte jemand auf die Sprünge helfen?
Danke Michael
-
Naja Du zählst eine Zahl aber dein Case vergleicht mit einem String ('1') … das matcht nicht damit landest Du in Default und da wird nichts getan, also ergo ... undefined ...
-
Danke dir, das hat funktioniert, aber wir komme ich jetzt an die Werte von obj.state.val und obj.oldState.val, um sie miteinander zu vergleichen?
on({id: Devicename1, change: "ne"}, function (obj)
{
var value = obj.state.val;
var oldValue= obj.oldState.val;
console.log("Value " + i + ": " + value);
console.log("Value " + i + ": " + oldValue);
if (value != oldValue)
Das funktioniert leider nicht.
-
Naja DeviceName1 ist ein Wert (genau genommen sogar das Wert-Objekt des States) und keine ID eines States … darauf macht es keinen Sinn zu subscriben ...
-
Und wie löst man sowas dann? Ich brauche doch einen Vergleichswert, um zu sehen, ob und was sich geändert hat.
Btw: Das sind meine ersten Versuche in JS.
Danke Michael
-
Effektiv machst Du viele davon
on({id:"modbus.0.holdingRegisters.12288_Lampe_1_Rot", change: "ne", ack: true}, function(obj) {
if (getState("hue.0.Philips_hue.Lampe_1_LED.r").val === obj.state.val) return; /doo nothing because value is already as should
setState("hue.0.Philips_hue.Lampe_1_LED.r", obj.state.val, false);
});
für alle Kombinationen. Es geht auch cooler, aber für JS Beginner denke genau richtig
-
mit js modbus und hue zu kombinieren, damit egal, wo ich was ändere, der andere das mitkriegt. `
https://forum.iobroker.net/viewtopic.php?f=21&t=14027&p=148561#p148561. -
Ich brauche doch einen Vergleichswert, um zu sehen, ob und was sich geändert hat. `
Die https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#on–-subscribe-on-changes-or-updates-of-some-state des JS-Adapters kennst Du ? Und damit auch die Bedeutung der Triggerbedingung change: 'ne' ? -
Effektiv machst Du viele davon
on({id:"modbus.0.holdingRegisters.12288_Lampe_1_Rot", change: "ne", ack: true}, function(obj) {
if (getState("hue.0.Philips_hue.Lampe_1_LED.r").val === obj.state.val) return; /doo nothing because value is already as should
setState("hue.0.Philips_hue.Lampe_1_LED.r", obj.state.val, false);
});
für alle Kombinationen. Es geht auch cooler, aber für JS Beginner denke genau richtig `
So ist es jetzt gelöst. Das war ja auch meine Anfangsidee, aber mit der for Schleife wäre es halt cooler gewesen, weil ja immer wieder neue Geräte hinzukommen.
Dank dir Michael