@paul53
Danke für die Überarbeitung. Das sieht doch wesentlich kompakter aus 👍
Ja, toLog() ist eine globale Funktion, die mir eine Aktivitätsliste füllt und gleichzeitig einen Log-Eintrag erstellt.
Da neben der Steuerung des Tors in dem eigentlichen Script noch die Regelung eines Lüfters drin ist, hier mal der aktuelle Stand des gesamten Scripts:
/*
**
** Steuerung Garage
**
*/
var cronVal = '*/15 * * * *';
var numMinDuration = 30;
var dpAussenTemperatur = 'hm-rpc.0.00XXXXXXXXXXEF.1.ACTUAL_TEMPERATURE';
var dpAussenFeuchtigkeit = 'hm-rpc.0.00XXXXXXXXXXEF.1.HUMIDITY';
var dpGarageFeuchtigkeit = 'hm-rpc.0.00XXXXXXXXXX5F.1.HUMIDITY';
var dpGarageLuefter = 'hm-rpc.0.00XXXXXXXXXX9D.3.STATE';
const dpGarageDoorOpen = '0_userdata.0.Trigger.TriggerGarageDoorOpen';
const dpGarageDoorClose = '0_userdata.0.Trigger.TriggerGarageDoorClose';
const dpGarageDoorStatus = '0_userdata.0.Trigger.TriggerGarageDoorStatus';
const dpGarageDoorState = 'hm-rpc.0.00XXXXXXXXXXF7.1.DOOR_STATE';
const dpGarageDoorCommand = 'hm-rpc.0.00XXXXXXXXXXF7.1.DOOR_COMMAND';
var doorState = getState(dpGarageDoorState).val;
/*
** Create Datapoints
*/
createState(dpGarageDoorOpen, false, { name: 'TriggerGarageDoorOpen', desc: 'TriggerGarageDoorOpen', type: 'boolean', role: 'state' });
createState(dpGarageDoorClose, false, { name: 'TriggerGarageDoorClose', desc: 'TriggerGarageDoorClose', type: 'boolean', role: 'state' });
createState(dpGarageDoorStatus, '-', { name: 'TriggerGarageDoorStatus', desc: 'TriggerGarageDoorStatus', type: 'string', role: 'value' });
/*
** Subscriptions
*/
schedule(cronVal, function() {
if(getState(dpGarageLuefter).val === false) {
if(getState(dpGarageFeuchtigkeit).val > getState(dpAussenFeuchtigkeit).val) {
if(getState(dpAussenTemperatur).val > 5) {
if(getState(dpAussenTemperatur).val < 20) {
var numMilSecsDur = numMinDuration * 60000;
var endTime = Date.now() + numMilSecsDur;
setState(dpGarageLuefter, true);
toLog('Garagenbelüftung eingeschaltet (Dauer: ' + numMinDuration + ' - Lf: ' + getState(dpGarageFeuchtigkeit).val + '%)');
var sHandler = schedule(endTime, function () {
setState(dpGarageLuefter, false);
toLog('Garagenbelüftung ausgeschaltet (Lf: ' + getState(dpGarageFeuchtigkeit).val + '%)');
clearSchedule(sHandler);
});
}
}
}
}
});
on ({id: dpGarageDoorOpen, change: 'ne', val: true}, function () {
if(doorState != 1) {
setState(dpGarageDoorCommand, 1);
setState(dpGarageDoorStatus, 'wird geöffnet', true);
}
setState(dpGarageDoorOpen, false, true);
});
on ({id: dpGarageDoorClose, change: 'ne', val: true }, function () {
if(doorState > 0) {
setState(dpGarageDoorCommand, 3);
setState(dpGarageDoorStatus, 'wird geschlossen', true);
}
setState(dpGarageDoorClose, false, true);
});
on (dpGarageDoorState, function (dp) {
doorState = dp.state.val;
let msg = '';
if(doorState === 0) {
msg = 'geschlossen';
} else if(doorState === 1) {
msg = 'offen';
}
if(msg) {
setState(dpGarageDoorStatus, msg, true);
toLog('Das Garagentor ist ' + msg);
}
});
Vielleicht kann der eine oder andere davon etwas gebrauchen.
Viele Grüße
Levy