Hallo,
bin komplett neu in Mediola / Javascript und habe noch keine passende Einführung gefunden.
Möchte im Automation Manager mit einem Homematic IP Fensterkontakt HMIP-SWDO einen Homematic Heizkörperthermostat HM-CC-RT-DN steuern:
Wenn Fenster auf -> Soll-Temp merken in System-Variable -> Heizung aus
Wenn Fenster zu -> gemerkte Soll-Temp setzen aus Systemvariable -> Heizung auf Auto
Ich vermute 2 Tasks welche den Sensor überwachen? (Einen für auf / einen für zu)
Eine Do While -Schleife habe ich im Blockeditor nicht gefunden. Auch nicht Loop until.
Möchte gerne alle 10 Min. eine Push-Nachricht senden bis das Fenster wieder zu ist.
Wie bekomme ich die Temeratur aus dem getDeviceStatus in die Systemvariable?
Wie setze ich die Soll-Temperatur im executeDeviceCommand auf den Wert einer Systemvariablen?
Das gleiche Szenario möchte ich auch mit HMIP-SWDO und AVM DECT Heizungsthermostat machen.
Plugins sind alle vorhanden.
Zu guter Letzt habe ich noch einen Wandthermostat HmIP-WTH-2 der einen HM-CC-RT-DN Heizkörperthermostat steuern soll:
Ist-Temperatur-Wand soll Heizkörper regeln bis Soll-Temperatur-Wand erreicht ist. Gibt es Beispielscripte für den AM dazu?
Mit Homematic IP-Sensor über Automation Manager einen Homematic Aktor steuern
Moderator: Co-Administratoren
-
- Beiträge: 6
- Registriert: 12.05.2019, 08:26
- Wohnort: Hagenow
- Kontaktdaten:
Re: Mit Homematic IP-Sensor über Automation Manager einen Homematic Aktor steuern
hi,
hast nicht angegeben was du für hardware benutzst.
Ein Mediola Gateway oder CCU, Neo Server mit CCU oder V5 Plus mit Neoserver?
du musst zuerst bei ccu und neoserver, eine neo server variable anlegen oder eine gateway variable falls du v5 gateway benutzst, typ float.
dann wäre dein script für temp schreiben in variable so:
und so wieder aus der variable in thermostat, set temperature to...
es gibt als auslöser den intervall block, den kannst du nehmen und auf 10 minuten setzen, dann falls/sons block und nach fenster offen prüfen. im Dann block eben push versenden. Da intervall aber immer laufen wird, könnte man diesen task im sonst teil mit einem script auf inactive schalten..
also falls fenster nicht offen.
hier beispiel für aktiv schalten, du musst die id des tasks herausfinden, hier im beispiel 5:
und inaktiv:
setze mal im browser folgendes ein:
vorher die ip adresse deines neo server anpassen sowie die id des tasks...
was heisst heizug aus?
soll temperatur auf 5 grad, einen schalter auf off schalten...?
Beantworte die fragen dann kann man weiter machen...
hast nicht angegeben was du für hardware benutzst.
Ein Mediola Gateway oder CCU, Neo Server mit CCU oder V5 Plus mit Neoserver?
du musst zuerst bei ccu und neoserver, eine neo server variable anlegen oder eine gateway variable falls du v5 gateway benutzst, typ float.
dann wäre dein script für temp schreiben in variable so:
Code: Alles auswählen
getDeviceStatus(
"Schlafzimmer",
"Heizung Schlafzimmer",
{"value":"themoSetTemp","extMeta":"4.5-30.5","scale":"0.5"},
function(err, status) {
err && console.error(err.message);
console.log(status);
executeDeviceCommand(
"AIO GATEWAY V5+ (EA)",
"Float1",
{"value":"setValue","ext":status,"extMeta":"-21474836.48-21474836.47","scale":"0.01"},
function(err) {
err && console.error(err.message);
}
);
}
);
Code: Alles auswählen
getDeviceStatus(
"AIO GATEWAY V5+ (EA)",
"Float1",
{"value":"state","extMeta":"-21474836.48-21474836.47","scale":"0.01"},
function(err, status) {
err && console.error(err.message);
console.log(status);
executeDeviceCommand(
"Schlafzimmer",
"Heizung Schlafzimmer",
{"value":"themoTempRaw","ext":status,"extMeta":"4.5-30.5","scale":"0.5"},
function(err) {
err && console.error(err.message);
}
);
}
);
also falls fenster nicht offen.
hier beispiel für aktiv schalten, du musst die id des tasks herausfinden, hier im beispiel 5:
Code: Alles auswählen
const getContent = function(url) {
// 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 request = lib.get(url, (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));
});
};
getContent('http://192.168.1.20:8088/cmd?XC_FNC=setTaskActive&id=5&active=true')
.then((html) => console.log(html))
.catch((err) => console.error(err));
Code: Alles auswählen
const getContent = function(url) {
// 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 request = lib.get(url, (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));
});
};
getContent('http://192.168.1.20:8088/cmd?XC_FNC=setTaskActive&id=5&active=false')
.then((html) => console.log(html))
.catch((err) => console.error(err));
Code: Alles auswählen
http://192.168.1.20:8088/cmd?XC_FNC=setTaskActive&id=5&active=false
was heisst heizug aus?
soll temperatur auf 5 grad, einen schalter auf off schalten...?
Beantworte die fragen dann kann man weiter machen...
-
- Beiträge: 6
- Registriert: 12.05.2019, 08:26
- Wohnort: Hagenow
- Kontaktdaten:
Re: Mit Homematic IP-Sensor über Automation Manager einen Homematic Aktor steuern
Danke für die schnelle Antwort. Habe hier eine mediola V5+ mit Zigbee und EnOcean Sticks sowie NEO-Server im Einsatz.
Werde mal die Scripte testen und berichten
Werde mal die Scripte testen und berichten
-
- Beiträge: 6
- Registriert: 12.05.2019, 08:26
- Wohnort: Hagenow
- Kontaktdaten:
Re: Mit Homematic IP-Sensor über Automation Manager einen Homematic Aktor steuern
So - Habe mal getestet:
Ein Task läuft auf der V5+ "Fenster Buero auf" der das Skript "Temperatur Buero merken" ausführt um die Systemvariable "Temperatur_Buero_soll" zu füllen und dann die Soll-Temperatur auf 8° setzt. Script "Temperatur Buero merken":
getDeviceStatus(
"Buero",
{"value":"themoSetTemp","extMeta":"4.5-30.5","scale":"0.5"},
function(err, status) {
err && console.error(err.message);
console.log(status);
executeDeviceCommand(
"AIO GATEWAY V5+ (EA)",
"Temperatur_Buero_soll",
{"value":"setValue","ext":status,"extMeta":"-21474836.48-21474836.47","scale":"0.01"},
function(err) {
err && console.error(err.message);
}
);
}
);
Systemvariable wird aber nicht gefüllt das Setzen der Temperatur geht.
Wie kann ich den Wert der Systemvariable ausgeben um zu testen ob das Skript das macht was es soll?
Frage den Wert z.Zt. im AM in den Systemvariablen ab. (ohne Ergebnis)
Logischerweise funktioniert das Setzen der Soll-Temperatur im zweiten Script "Temperatur Buero setzen" deshalb auch nicht:
getDeviceStatus(
"AIO GATEWAY V5+ (EA)",
"Temperatur_Buero_soll",
{"value":"state","extMeta":"-21474836.48-21474836.47","scale":"0.01"},
function(err, status) {
err && console.error(err.message);
console.log(status);
executeDeviceCommand(
"Buero",
"Heizung",
{"value":"themoTempRaw","ext":status,"extMeta":"4.5-30.5","scale":"0.5"},
function(err) {
err && console.error(err.message);
}
);
}
);
Wäre für eine Dokumentation die über (Zitat) "Im Skripteditor können individuelle Skripte mittels JavaScript geschriebenwerden. In der Menüleiste stehen diverse Optionen (wie Speichern, Öffnen, Status/Aktion einfügen) zur Verfügung. " hinausgeht...
Ein Task läuft auf der V5+ "Fenster Buero auf" der das Skript "Temperatur Buero merken" ausführt um die Systemvariable "Temperatur_Buero_soll" zu füllen und dann die Soll-Temperatur auf 8° setzt. Script "Temperatur Buero merken":
getDeviceStatus(
"Buero",
{"value":"themoSetTemp","extMeta":"4.5-30.5","scale":"0.5"},
function(err, status) {
err && console.error(err.message);
console.log(status);
executeDeviceCommand(
"AIO GATEWAY V5+ (EA)",
"Temperatur_Buero_soll",
{"value":"setValue","ext":status,"extMeta":"-21474836.48-21474836.47","scale":"0.01"},
function(err) {
err && console.error(err.message);
}
);
}
);
Systemvariable wird aber nicht gefüllt das Setzen der Temperatur geht.
Wie kann ich den Wert der Systemvariable ausgeben um zu testen ob das Skript das macht was es soll?
Frage den Wert z.Zt. im AM in den Systemvariablen ab. (ohne Ergebnis)
Logischerweise funktioniert das Setzen der Soll-Temperatur im zweiten Script "Temperatur Buero setzen" deshalb auch nicht:
getDeviceStatus(
"AIO GATEWAY V5+ (EA)",
"Temperatur_Buero_soll",
{"value":"state","extMeta":"-21474836.48-21474836.47","scale":"0.01"},
function(err, status) {
err && console.error(err.message);
console.log(status);
executeDeviceCommand(
"Buero",
"Heizung",
{"value":"themoTempRaw","ext":status,"extMeta":"4.5-30.5","scale":"0.5"},
function(err) {
err && console.error(err.message);
}
);
}
);
Wäre für eine Dokumentation die über (Zitat) "Im Skripteditor können individuelle Skripte mittels JavaScript geschriebenwerden. In der Menüleiste stehen diverse Optionen (wie Speichern, Öffnen, Status/Aktion einfügen) zur Verfügung. " hinausgeht...