Antworten
Mai 09, 2020 - 07:09
Zum NEO Automation Manager und Skripten gibt es so gut wie keine Dokumentation von Mediola.
Vielleicht wäre das Webinar, eine Möglichkeit eine solche Frage auch direkt an Mediola zu stellen und von Mediola beantwortet zu bekommen, wenn man denn an dem Termin auch Zeit haben sollte.
Vielleicht wäre das Webinar, eine Möglichkeit eine solche Frage auch direkt an Mediola zu stellen und von Mediola beantwortet zu bekommen, wenn man denn an dem Termin auch Zeit haben sollte.
Mai 12, 2020 - 09:22
Hallo,
Meine Hausautomation besteht aus einem RasperryMatic und Neo-Server. Die Idee im Neo-Server die Geräte/Kanäle zu parsen, zu filtern und dann Aktionen damit durchzuführen.
Nach dem Motto 'Jugend forscht' und mit viel Hilfe einer großen Suchmaschine ist dann die folgende Lösung entstanden.
Im ersten Schritt werden die IDs aller existierenden Kanäle ausgelesen und im zweiten die dazugehörigen Namen. Der dritte filtert die Namen und führt mit dem Ergebnis die definierte Aktion durch.
Nicht wundern, wenn im JavaScript-Log 'device not found' die Aktion wird dennoch durchgeführt. (BUG!!?!?!)
Schönen Tag in die Runde
Walter
Meine Hausautomation besteht aus einem RasperryMatic und Neo-Server. Die Idee im Neo-Server die Geräte/Kanäle zu parsen, zu filtern und dann Aktionen damit durchzuführen.
Nach dem Motto 'Jugend forscht' und mit viel Hilfe einer großen Suchmaschine ist dann die folgende Lösung entstanden.
Im ersten Schritt werden die IDs aller existierenden Kanäle ausgelesen und im zweiten die dazugehörigen Namen. Der dritte filtert die Namen und führt mit dem Ergebnis die definierte Aktion durch.
Nicht wundern, wenn im JavaScript-Log 'device not found' die Aktion wird dennoch durchgeführt. (BUG!!?!?!)
Schönen Tag in die Runde
Walter
//
//
// url = "http://htmluser:@192.168.178.205:8181/egal.exe?x=dom.GetObject(ID_DEVICES).EnumUsedIDs()";
url = "http://htmluser:@192.168.178.205:8181/egal.exe?x=dom.GetObject(ID_CHANNELS).EnumUsedIDs()";
var devid;
//
// function for id numbers
//
const getDeviceID = function(devurl) {
// return new pending promise
return new Promise((resolve, reject) => {
// select http or https module, depending on reqested url
// const lib = url.startsWith('https') ? require('https') : require('http');
const lib = require('http');
const request = lib.get(devurl, (response) => {
// handle http errors
if (response.statusCode < 200 || response.statusCode > 299) {
reject(new Error('Failed to load page, status code: ' + response.statusCode));
}
// temporary data holder
const body = [];
// on every content chunk, push it to the data array
response.on('data', (chunk) => body.push(chunk));
// we are done, resolve promise with those joined chunks
response.on('end', () => {
resolve(body.join(''));
});
});
// handle connection errors of the request
request.on('error', (err) => reject(err))
})
};
//
// main call
//
getDeviceID(url)
.then((devid) => {
//
// function for device names
//
var devname = "";
const getDeviceName = function(dataurl) {
// return new pending promise
return new Promise((resolve, reject) => {
// select http or https module, depending on reqested url
// const lib = url.startsWith('https') ? require('https') : require('http');
const lib = require('http');
const request = lib.get(dataurl, (response) => {
// handle http errors
if (response.statusCode < 200 || response.statusCode > 299) {
reject(new Error('Failed to load page, status code: ' + response.statusCode));
}
// temporary data holder
const body = [];
// on every content chunk, push it to the data array
response.on('data', (chunk) => {
body.push(chunk);
})
// we are done, resolve promise with those joined chunks
response.on('end', () =>{
resolve(body.join(''));
});
});
// handle connection errors of the request
request.on('error', (err) => reject(err));
});
};
devid = devid.match(/[0-9]+/g);
// console.log(devid);
for (var i=0; i < devid.length; i++) {
getDeviceName("http://htmluser:@192.168.178.205:8181/egal.exe?x=dom.GetObject(" + devid[i] + ").Name()")
.then((devname) => {
// get device names, this is not a generic regex
// devname = devname.match(/([A-Z]\w*\b)(?=<\/x>)/g);
// for debugging the regex
// console.log(devname);
//
// from here on the main work
//
var devoff = [];
if (devname.search(/(Irrigation\w*\b)(?=<\/x>)/g) >= 0) {
devoff = devname.match(/(Irrigation\w*\b)(?=<\/x>)/g);
// console.log(devoff[0]);
executeDeviceCommand(
"Garden",
devoff[0],
{"value":"off"},
function(err) {
err && console.error(err.message);
}
);
}
})
.catch((err) => console.log(err));
}
})
.catch((err) => console.log(err));
Neuen Kommentar hinzufügen