Hallo zusammen,
kann mir wer verraten, wieso im Skripteditor angezeigt wird „Missing semilocon“?
Weiter unten heißt es dann „Too many errors. 72% scanned.“ Die Syntax ist meines Erachtens korrekt und das Skript kann manuell ausgeführt werden, als auch läuft es im Automation Manager.
In dem Beitrag von hw-020 (https://mediola.answerbase.com/3255863/Script-wird-nicht-gestartet) habe ich einen Hinweis auf die verwendete NodeJS Version gefunden. Neo Server läuft bei mir auf der CCU3. Meiner Recherche nach läuft hier die Node JS 8.11.4 die auch vom Neo Server verwendet wird. Aktuell gibt es Node JS in der Version 21.7.1.
Eventuell wäre es ein Feature Request eine eigene Node JS Version bei dem NEO Server mitzuliefern (ähnlich wie bei Redmatic, hier wird auch eine eigene NodeJS mitgeliefert und bedient sich nicht an der von der CCU3).
Bei einem anderen Script werden unzählige Meldungen angezeigt obwohl die Syntax korrekt ist. Faszinierender weise, ist es so, dass ich das Script manuell ausführen kann im Scripteditor, aber über den Automation Manager (Task) läuft es nicht. Der Task wird angesprochen, aber das Script nicht ausgeführt. Habe das andere Script noch nicht weiter analysiert, aber wird vermutlich an der alten NodeJS Version liegen. Es ist sehr schade, dass hier Probleme auftreten ist bekannt, aber man wird im Scripteditor nirgends darauf hingewiesen: "Umfang unterstütz bis NodeJS Version x" oder ähnlich. 392 Zeilen Script für den Mülleimer! Je länger ich mich mit Mediola beschäftige, komme ich zu der Erkenntnis, auf das falsche "Pferd" gesetzt zu haben...
Zurück zu meinem Problem. Das Script verwendet nur Features der Version 8.11.4. Somit sollte es passen. Aber die angezeigten Fehler im Editor machen mich stutzig.
Kann wer meine Recherche bestätigen und hat eventuell eine Lösung oder Workaround?
Vielen Dank! Eric
var var_bezug;
var switch0Output;
var switch1Output;
var switch2Output;
var switch0Output2pm;
var PV_STATUS_Bad_Heizung_IR;
var WW_TEMP;
var BAD_TEMP;
var verbrauch_PV_Bad_Heizung_IR;
var verbrauch_PV_Bad_Heizung;
var PV_STATUS_WW_TEMP;
const http = require('http');
function httpGet(url) {
return new Promise((resolve, reject) => {
http.get(url, (res) => {
const dataChunks = [];
res.on('data', (chunk) => dataChunks.push(chunk));
res.on('end', () => resolve(Buffer.concat(dataChunks).toString()));
}).on('error', reject);
});
}
function getDeviceStatusAsync(device, variable, options) {
return new Promise((resolve, reject) => {
getDeviceStatus(device, variable, options, (err, status) => {
if (err) {
reject(err);
} else {
resolve(status);
}
});
});
}
async function main() {
try {
// Device status abfragen
const var_bezug = await getDeviceStatusAsync("_progs&sysvars", "gw1_Strom Verbrauch aktuell", {"value": "floatState", "scale": "0.1"});
// Shelly 3 Pro Technik Status abfragen
const shelly3ProResponse = await httpGet('http://192.168.1.100/rpc/Shelly.GetStatus');
const jsonData = JSON.parse(shelly3ProResponse);
const switch0Output = jsonData["switch:0"].output ? "on" : "off";
const switch1Output = jsonData["switch:1"].output ? "on" : "off";
const switch2Output = jsonData["switch:2"].output ? "on" : "off";
// Shelly 2PM Bad Status abfragen
const shelly2PMResponse = await httpGet('http://192.168.1.101/relay/0');
const shelly2PMData = JSON.parse(shelly2PMResponse);
const switch0Output2pm = shelly2PMData.ison ? "on" : "off";
// Weitere Gerätestatus abfragen
const PV_STATUS_Bad_Heizung = await getDeviceStatusAsync("OG Bad", "Handtuchheizkörper HmIP-FSM16", {"value": "switchState", "options": ["off", "on"]});
const WW_TEMP = await getDeviceStatusAsync("_progs&sysvars", "gw1_WW_TEMP", {"value": "floatState", "scale": "0.1"});
const BAD_TEMP = await getDeviceStatusAsync("OG Bad", "Thermostat HmIP-STHD", {"value": "themoActualTemp", "extMeta": "-10.0-56.0", "scale": "0.1"});
let PV_STATUS_WW_TEMP = await getDeviceStatusAsync("UG Technik", "PV_STATUS_WW_TEMP", {"value": "state", "options": ["off", "on"]});
// Lesen beendet, Start Logik
PV_STATUS_WW_Heizstab_500 = switch0Output;
verbrauch_PV_WW_Heizstab_500 = 500;
PV_STATUS_WW_Heizstab_1000 = switch1Output;
verbrauch_PV_WW_Heizstab_1000 = 1000;
PV_STATUS_WW_Heizstab_2000 = switch2Output;
verbrauch_PV_WW_Heizstab_2000 = 2000;
PV_STATUS_Bad_Heizung_IR = switch0Output2pm;
verbrauch_PV_Bad_Heizung_IR = 400;
verbrauch_PV_Bad_Heizung = 800;
setWW_2000_state = "off";
setWW_1000_state = "off";
setWW_500_state = "off";
setH_IR_state = "off";
setH_state = "off";
//Ermitteln des aktuellen Verbrauchs unter Berücksichtigung der bereits aktiven Verbraucher
dummy_bezug = var_bezug;
if (PV_STATUS_WW_Heizstab_500 == "on") {
dummy_bezug = dummy_bezug - verbrauch_PV_WW_Heizstab_500;
}
if (PV_STATUS_WW_Heizstab_1000 == "on") {
dummy_bezug = dummy_bezug - verbrauch_PV_WW_Heizstab_1000;
}
if (PV_STATUS_WW_Heizstab_2000 == "on") {
dummy_bezug = dummy_bezug - verbrauch_PV_WW_Heizstab_2000;
}
if (PV_STATUS_Bad_Heizung_IR == "on") {
dummy_bezug = dummy_bezug - verbrauch_PV_Bad_Heizung_IR;
}
if (PV_STATUS_Bad_Heizung == "on") {
dummy_bezug = dummy_bezug - verbrauch_PV_Bad_Heizung;
}
if (WW_TEMP < 50) {
PV_STATUS_WW_TEMP = "on";
}
if (WW_TEMP > 52) {
PV_STATUS_WW_TEMP = "off";
}
//Prüfen welche Geräte aktiviert werden können
if (dummy_bezug < -2000 && PV_STATUS_WW_TEMP == "on") {
setWW_2000_state = "on";
dummy_bezug = dummy_bezug + verbrauch_PV_WW_Heizstab_2000;
}
if (dummy_bezug < -1000 && PV_STATUS_WW_TEMP == "on") {
setWW_1000_state = "on";
dummy_bezug = dummy_bezug + verbrauch_PV_WW_Heizstab_1000;
}
if (dummy_bezug < -500 && PV_STATUS_WW_TEMP == "on") {
setWW_500_state = "on";
dummy_bezug = dummy_bezug + verbrauch_PV_WW_Heizstab_500;
}
if (dummy_bezug < -800 && BAD_TEMP < 24) {
setH_state = "on";
dummy_bezug = dummy_bezug + verbrauch_PV_Bad_Heizung;
}
if (dummy_bezug < -400 && BAD_TEMP < 24) {
setH_IR_state = "on";
dummy_bezug = dummy_bezug + verbrauch_PV_Bad_Heizung_IR;
}
executeDeviceCommand(
"OG Bad",
"Handtuchheizkörper HmIP-FSM16", {
"value": setH_state
},
function(err) {
err && console.error(err.message);
}
);
var http = require('http');
function schalteGeraet(host, geraetNummer, state) {
let path = `/relay/${geraetNummer}?turn=${state}`;
var options = {
method: 'GET',
host: host,
path: path
};
var req = http.request(options, function(res) {
console.log(`Gerät ${geraetNummer} bei ${host} Statuscode: ${res.statusCode}`);
res.resume();
});
req.on('error', function(err) {
console.error(`Gerät ${geraetNummer} bei ${host} Fehler:`, err);
});
req.end();
}
// Für Shelly 2PM
let stateH_IR = setH_IR_state;
schalteGeraet('192.168.1.101', 0, stateH_IR);
// Für Shelly 3 Pro
schalteGeraet('192.168.1.100', 0, setWW_2000_state);
schalteGeraet('192.168.1.100', 1, setWW_1000_state);
schalteGeraet('192.168.1.100', 2, setWW_500_state);
executeDeviceCommand(
"UG Technik",
"PV_UES_Script_TEMP",
{"value":"on"},
function(err) {
err && console.error(err.message);
}
);
} catch (error) {
console.error('Ein Fehler ist aufgetreten:', error);
}
}
main();
Neuen Kommentar hinzufügen