@DennisK:
Weis jemand von euch wie ich den Pfad "./eQ-3-radiator-thermostat/eq3.exp <macadresse>temp 20.0" anpassen muss, damit er mit iobroker kompatibel ist?</macadresse> `
Ich habe mich die Tage auch mal mit dem Thermostat beschäftigt und mir basierend auf dem Code von Heckie75 ein Skript in ioBroker geschrieben, dass mir auch ein paar Datenpunkte erstellt. Sicherlich nicht der schönste Code, aber es funktioniert. Ich habe den Pfad zur eq3.exp-Datei absolut angegeben, damit ich den Code verwenden kann:
! ````
/*
script needs Heckie75/eQ-3-radiator-thermostat package.
see https://github.com/Heckie75/eQ-3-radiator-thermostat
thermostat must be paired via bluetooth
exec command must be enabled in javascript adapter
*/
! //Absolute Path to eQ-3-radiator-thermostat package and MAC of paired eQ3 thermostat
var eQ3 = "/home/pi/eQ-3-radiator-thermostat/eq3.exp";
var mac = "00:00:00:00:00:00";
! //new iobroker states
createState('eQ3.control.boostOn', false, {type: "boolean", role: "button"});
createState('eQ3.control.boostOff', false, {type: "boolean", role: "button"});
createState('eQ3.control.getStatus', false, {type: "boolean", role: "button"});
createState('eQ3.control.setMode', false, {max: 1, min: 0, states: {0:"auto",1:"manual"}});
createState('eQ3.control.setTemp');
createState('eQ3.control.setOffset');
createState('eQ3.control.command');
! createState('eQ3.status.Temperature');
createState('eQ3.status.Valve');
createState('eQ3.status.Mode');
createState('eQ3.status.VacationMode');
createState('eQ3.status.LowBattery');
createState('eQ3.status.OpenWindow');
createState('eQ3.status.Boost');
createState('eQ3.status.Locked');
createState('eQ3.status.OffsetTemp');
! createState('eQ3.device.MAC');
createState('eQ3.device.Name');
createState('eQ3.device.Vendor');
! createState('eQ3.timer.timerJSON');
! //Exec-Befehl
var eQ3exec = eQ3 + ' ' + mac + ' ';
! //Status
on({id: 'javascript.0.eQ3.control.getStatus', val: true}, function (obj) {
exec(eQ3exec + "status", function(err, stdout, stderr) {
eQ3status(stdout);
});
});
! //Boost On
on({id: 'javascript.0.eQ3.control.boostOn', val: true}, function (obj) {
exec(eQ3exec + "boost", function(err, stdout, stderr) {
eQ3status(stdout);
});
});
! //Boost Off
on({id: 'javascript.0.eQ3.control.boostOff', val: true}, function (obj) {
exec(eQ3exec + "boost off", function(err, stdout, stderr) {
eQ3status(stdout);
});
});
! //Set Temperature
on({id: 'javascript.0.eQ3.control.setTemp', change: "any"}, function (obj) {
var value = obj.state.val;
exec(eQ3exec + "temp " + value, function(err, stdout, stderr) {
eQ3status(stdout);
});
});
! //Set Offset
on({id: 'javascript.0.eQ3.control.setOffset', change: "any"}, function (obj) {
var value = obj.state.val;
exec(eQ3exec + "offset " + value, function(err, stdout, stderr) {
eQ3status(stdout);
});
});
! //Set Mode
on({id: 'javascript.0.eQ3.control.setMode', change: "any"}, function (obj) {
var value = obj.state.val;
if (value === 0) {
exec(eQ3exec + "auto", function(err, stdout, stderr) {
eQ3status(stdout);
});
} else if (value === 1){
exec(eQ3exec + "manual", function(err, stdout, stderr) {
eQ3status(stdout);
});
}
});
! //Custom Command
on({id: 'javascript.0.eQ3.control.command', change: "any"}, function (obj) {
var value = obj.state.val;
exec(eQ3exec + value, function(err, stdout, stderr) {
eQ3status(stdout);
});
});
! //Thermostat Status
function eQ3status(stdout) {
eQ3json();
stdout = stdout.split("\n");
stdout.forEach(element => {
switch(element.split(":")[0]){
case "Temperature":
setState('eQ3.status.Temperature', element.split(":")[1]);
break;
case "Valve":
setState('eQ3.status.Valve', element.split(":")[1]);
break;
case "Mode":
setState('eQ3.status.Mode', element.split(":")[1]);
break;
case "Vacation mode":
setState('eQ3.status.VacationMode', element.split(":")[1]);
break;
case "Offset temperature":
setState('eQ3.status.OffsetTemp', element.split(":")[1]);
break;
case "Device name":
setState('eQ3.device.Name', element.split(":")[1]);
break;
case "Device vendor":
setState('eQ3.device.Vendor', element.split(":")[1]);
break;
case "":
break;
}
});
}
! //Thermostat Status JSON
function eQ3json(){
exec(eQ3exec + "json", function(err, stdout, stderr) {
obj = JSON.parse(stdout);
//Status
setState('eQ3.status.LowBattery', obj.mode["low battery"]);
setState('eQ3.status.OpenWindow', obj.mode["open window"]);
setState('eQ3.status.Boost', obj.mode.boost);
setState('eQ3.status.Locked', obj.mode.locked);
//Device
setState('eQ3.device.MAC', obj.mac);
//Timer
setState('eQ3.timer.timerJSON', JSON.stringify(obj.timers));
});
}
! schedule('*/5 * * * *', function (obj) {
exec(eQ3exec + "status", function(err, stdout, stderr) {
eQ3status(stdout);
});
});
! ````
Noch habe ich nicht alle Funktionen des Skripts von Heckie75 umgesetzt, aber mehr brauch ich aktuell nicht. Die Basissteuerung und die Abfrage des Status (alle 5 Minuten) reicht mir bisher. Vielleicht hilft dir oder anderen das ja als Vorlage.
Greetz
kr4mb3 `
Kann jemand vielleicht kurz erklären wie der das eingebunden hat mit dem code? Evtl für vis oder den cloud Adapter