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
-
Hi,
und danke schon mal für die schnelle Antwort. Ich versuch mich mal rein zu fuchsen. Aber da ich mit ioBroker und JavaScript erst vor zwei Tagen angefangen habe übersteigt es auf den ersten Blick noch mein Verständnis.
-
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-Datenpunktes
Du 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); } } });