Zeitschaltuhr
Verfasst: 10. Apr 2021 15:59
Hallo zusammen,
Ich habe hier ein klein wenig gebastelt und mir eine Zeitschaltuhr zusammengebaut. Diese möchte ich euch gerne zur Verfügung stellen.
Zum einen hier das Widget zum einstellen der Zeit: Die Zeit wird in ein Item Zeit als String geschrieben.
Innerhalb einer Rule welche bei Veränderung des Items ausgelöst wird führe ich folgendes JavaScript aus:
Hier arbeite ich mit einem Timer welcher entsprechend auf die passende Uhrzeit gestellt wird.
Da ich die Zeitschaltuhr nur benötige um damit meine Kaffeemaschine zu einer vorgegebenen Uhrzeit einzuschalten reicht mir die Funktionalität für 2 Tage (Heute/Morgen).
schöne Grüße
Thomas
Ich habe hier ein klein wenig gebastelt und mir eine Zeitschaltuhr zusammengebaut. Diese möchte ich euch gerne zur Verfügung stellen.
Zum einen hier das Widget zum einstellen der Zeit: Die Zeit wird in ein Item Zeit als String geschrieben.
Code: Alles auswählen
uid: TimeController
tags: []
props:
parameters: []
parameterGroups: []
timestamp: Apr 10, 2021, 8:22:12 PM
component: f7-card
slots:
default:
- component: f7-row
config:
class:
- justify-content-center
- align-items-center
- text-align-center
slots:
default:
- component: Label
config:
text: "Bitte wähle einen Tag aus:"
style:
font-weight: 600
margin-top: 15px
- component: f7-row
config:
class:
- justify-content-center
- align-items-center
- text-align-center
slots:
default:
- component: f7-segmented
config:
strong: false
style:
width: 450px
margin-top: 5px
slots:
default:
- component: oh-button
config:
text: Aus
action: variable
actionVariable: day
actionVariableValue: 1
disabled: =(vars.day === 1)
textColor: "=(vars.day === 1) ? 'green' : 'red'"
style:
font-weight: 400
- component: oh-button
config:
text: Heute
action: variable
actionVariable: day
actionVariableValue: 2
disabled: =(vars.day === 2)
textColor: "=(vars.day === 2) ? 'green' : 'red'"
style:
font-weight: 400
- component: oh-button
config:
text: Morgen
action: variable
actionVariable: day
actionVariableValue: 3
disabled: =(vars.day === 3)
textColor: "=(vars.day === 3) ? 'green' : 'red'"
style:
font-weight: 400
- component: f7-row
config:
class:
- justify-content-center
- align-items-center
- text-align-center
slots:
default:
- component: Label
config:
text: "Bitte wähle eine Zeit aus:"
style:
font-weight: 600
margin-top: 15px
- component: f7-row
config:
class:
- justify-content-center
- align-items-center
- text-align-center
style:
margin-top: 5px
slots:
default:
- component: oh-input
config:
type: time
defaultValue: 00:00
validate: true
step: 60
min: 00:00
max: 23:59
required: true
variable: time
disabled: =(vars.day === 1)
bgColor: "=(vars.day === 1) ? 'red' : 'white'"
textColor: black
slots: {}
- component: f7-row
config:
class:
- justify-content-center
- align-items-center
- text-align-center
style:
margin-top: 20px
margin-buttom: 20px
slots:
default:
- component: oh-button
config:
raised: true
text: Einstellen
action: command
actionItem: Zeit
actionCommand: = vars.time + ' , ' + vars.day
actionFeedback: ok
Code: Alles auswählen
var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
var DateTime = Java.type("java.time.ZonedDateTime");
var ScriptExecution = Java.type("org.openhab.core.model.script.actions.ScriptExecution");
var timeH = itemRegistry.getItem('Zeit').getState().toString().split(' , ')[0].split(':')[0];
var timeM = itemRegistry.getItem('Zeit').getState().toString().split(' , ')[0].split(':')[1];
var mode = itemRegistry.getItem('Zeit').getState().toString().split(' , ')[1];
this.timer = (this.timer === undefined) ? null : this.timer;
switch(mode) {
case "1": {
this.timer.cancel(); //Timer abbrechen
this.timer = null;
break;
}
case "2": { // Heute
if(berechnung()>0){ // Eingestellte Zeit liegt in der Zukunpft
if (timer === null){
this.timer = ScriptExecution.createTimer(DateTime.now().plusMinutes(berechnung()), kaffee);
}else{
this.timer.reschedule(DateTime.now().plusMinutes(berechnung()));
}
}else{
logger.warn("Die Zeit ist bereits abgelaufen");
}
break;
}
case "3": { //Morgen
if(berechnung()+1440>0){
if (timer === null){
this.timer = ScriptExecution.createTimer(DateTime.now().plusMinutes(berechnung()+1440), kaffee);
}else{
this.timer.reschedule(DateTime.now().plusMinutes(berechnung()+1440));
}
}else{
logger.warn("Die Zeit ist bereits abgelaufen");
}
break;
}
}
//Funktion welche im Timer aufgerufen wird hier entsprechend die Anweisungen hinterlegen
function kaffee(){
//logger.info("Timer ist abgelaufen");
events.sendCommand('aKaffeemaschiene_Schalter', 'ON'); //Schaltbefehl
events.sendCommand('Zeit', '00:00 , 1'); // Zeitschaltung wieder ausschalten
}
function berechnung(){
var i = 0;
i = timeM - DateTime.now().getMinute();
i = i + ((timeH - DateTime.now().getHour())*60);
return i;
}
Da ich die Zeitschaltuhr nur benötige um damit meine Kaffeemaschine zu einer vorgegebenen Uhrzeit einzuschalten reicht mir die Funktionalität für 2 Tage (Heute/Morgen).
schöne Grüße
Thomas