NEWS
Mehrere Objekte auf Statusänderung prüfen
-
Hallo,
ich möchte gerne mehrere Geräte anlegen und auf deren Statusänderung reagieren.
Hier ist mein aktueller Code, der auch gut funktioniert, allerdings nur für ein Gerät.
const request = require('request').defaults({ rejectUnauthorized: false }); var sessiontoken on({id: "My_Devices.0.Lichtschalter_Flur", change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("My_Devices.0.Lichtschalter_Flur").val == true) { try { request('https://IP:8080/json/system/loginApplication?loginToken=APPLToken', { json: true }, (err, res, body) => { if (err) { return console.log(err); } sessiontoken = body.result.token; //console.log(`${sessiontoken}`); request({url: 'https://IP:8080/json/device/turnOn?dsid=DeviceID', headers: {Cookie: `token=${sessiontoken}`}}, function(error, response, body) { console.log(body); }); }); } catch (e) { console.error(e); } } else if (getState("My_Devices.0.Lichtschalter_Flur").val == false) { try { request('https://IP:8080/json/system/loginApplication?loginToken=APPLToken', { json: true }, (err, res, body) => { if (err) { return console.log(err); } sessiontoken = body.result.token; //console.log(`${sessiontoken}`); request({url: 'https://IP:8080/json/device/turnOff?dsid=DeviceID', headers: {Cookie: `token=${sessiontoken}`}}, function(error, response, body) { console.log(body); }); }); } catch (e) { console.error(e); } } });Ich möchte ungern den Code für jedes Gerät duplizieren. Ist es möglich alles Geräte unter My_Devices.0 auf Änderung ab zu fragen und die Device ID des geänderten Gerätes an den HTTP Request zu übergen?
-
Schau dir Mal $selector an
https://github.com/ioBroker/ioBroker.ja ... --selector
Sent from my iPhone using Tapatalk
-
Ist es möglich alles Geräte unter My_Devices.0 auf Änderung ab zu fragen und die Device ID des geänderten Gerätes an den HTTP Request zu übergeben? `
Ja, z.B. mit regexon(/^My_Devices\.0\..+/, function(obj) { // Triggert auf Wertänderung aller Datenpunkte unter My_Devices.0. var id = obj.id; // ID des Trigger-DatenpunktesDu meinst sicherlich die Datenpunkt-ID ?
-
Danke hat damit wunderbar geklappt.
Hier die Finale Lösung.
const request = require('request').defaults({ rejectUnauthorized: false }); var sessiontoken on(/^My_Devices\.0\..+/, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; var id = obj.id var dsid = obj.id.replace("My_Devices.0.", "") console.log(`DeviceID = ${id}`); if (getState(id).val == true) { try { request('https://IP:8080/json/system/loginApplication?loginToken=Token', { json: true }, (err, res, body) => { if (err) { return console.log(err); } sessiontoken = body.result.token; console.log(`SessionToken = ${sessiontoken}`); console.log(`https://IP:8080/json/device/turnOn?dsid=${dsid}`) request({url: `https://IP:8080/json/device/turnOn?dsid=${dsid}`, headers: {Cookie: `token=${sessiontoken}`}}, function(error, response, body) { console.log(body); }); }); } catch (e) { console.error(e); } } else if (getState(id).val == false) { try { request('https://IP:8080/json/system/loginApplication?loginToken=Token', { json: true }, (err, res, body) => { if (err) { return console.log(err); } sessiontoken = body.result.token; console.log(`SessionToken = ${sessiontoken}`); console.log(`https://IP:8080/json/device/turnOff?dsid=${dsid}`) request({url: `https://IP:8080/json/device/turnOff?dsid=${dsid}`, headers: {Cookie: `token=${sessiontoken}`}}, function(error, response, body) { console.log(body); }); }); } catch (e) { console.error(e); } } });