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
-
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.
-
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
-
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
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