//========================================================================================================
//Changelog
// 26.08.2020 - v 1.0 - Feuersturm - Ansteuerung Rollaeden und Beschattung funktionieren. Ansteuerung Veluxfenster noch offen
//========================================================================================================
//========================================================================================================
//Notizen
//========================================================================================================
//Verhalten
//100 entspricht ganz offen
//0 entspricht ganz geschlossen
//Wird der Rolladen zwischendurch gestoppt nimmt der Wert Activity_State den geschriebenen Sollwert an, obwohl dieser noch nicht erreicht wurde
//99 fuer hochfahren, dann kann 100 als neuer Wert genutzt werden, um Rolladen ganz nach oben zu fahren
//Beschattung 1 fuer ganz runter, 99 fuer ganz offen. Wenn per Taster oder WebUI das Verfahren getriggert wird, dann wird der Wert auf 0 gesetzt
//Nach dem Verfahren fuer Beschattung Stop-Befehl ausloesen, damit der Prozentwert im Objekt "Level" uebernommen wird
//Wenn Per Schalter der Rolladen verfahren wird, wird das Objekt "Level" nicht aktualisiert. Wenn man vor dem Beschattungstrigger den StopBefehl ausloest
//wird der Wert "Level" aktualisiert
//========================================================================================================
//========================================================================================================
//Anlegen der für das Skript notwendigen Datenpunkte
//========================================================================================================
//========================================================================================================
createState('Beschattung.Beschattungsmodus', '');
createState('Beschattung.RolladenAnsteuerungLevelVisEG', ''); //Datenpunkt wird von VIS View Rolladen gefuellt, um den Levelwert der Rolladen fuer das Geschoss zu setzen
createState('Beschattung.RolladenAnsteuerungLevelVisOG', ''); //Datenpunkt wird von VIS View Rolladen gefuellt, um den Levelwert der Rolladen fuer das Geschoss zu setzen
createState('Beschattung.RolladenAnsteuerungLevelVisEGOG', ''); //Datenpunkt wird von VIS View Rolladen gefuellt, um den Levelwert der Rolladen fuer das Geschoss zu setzen
createState('Beschattung.RolladenVerriegelungAktivKind1', false, {read: true, write: true, name: "", type: "boolean", def: false});
createState('Beschattung.RolladenVerriegelungAktivSchlafzimmer', false, {read: true, write: true, name: "", type: "boolean", def: false});
createState('Beschattung.RolladenVerriegelungAktivKind2', false, {read: true, write: true, name: "", type: "boolean", def: false});
//========================================================================================================
//========================================================================================================
//Globale Variablen
//========================================================================================================
//========================================================================================================
const debug = true; //true = aktiviert logging, false = kein logging
//Datenpunkte für Rollaeden im Erdgeschoss
var DP_RolladenKuecheFenster = "hm-rpc.0.001658A99FD26E.14.LEVEL";
var DP_RolladenKuecheTerassentuer = "hm-rpc.0.001658A99FD26E.10.LEVEL";
var DP_RolladenWohnzimmerTerassentuer = "hm-rpc.0.001658A99FD264.6.LEVEL";
var DP_RolladenWohnzimmerTerasseFenster = "hm-rpc.0.001658A99FD26E.6.LEVEL";
var DP_RolladenWohnzimmerWestenFenster = "hm-rpc.0.001658A99FD26E.2.LEVEL";
var DP_RolladenHWR = "hm-rpc.0.001658A99FD264.2.LEVEL";
//Datenpunkte für Rollaeden im Obergeschoss
var DP_RolladenBadezimmer_Level = "hm-rpc.0.001658A99FD227.2.LEVEL";
var DP_RolladenKind2_Level = "hm-rpc.0.001658A99FD264.14.LEVEL";
var DP_RolladenKind1_Level = "hm-rpc.0.001658A99FD264.10.LEVEL";
var DP_RolladenSchlafzimmer_Level = "hm-rpc.0.001658A99FD227.6.LEVEL";
//Datenpunkte für Velux Rolladen
var VeluxRolladenStopDP = "hm-rpc.0.00111A498EAEDB.4.STOP"; //Datenpunkt um Velux Rolladen anzuhalten
var VeluxRolladenLevelDP = "hm-rpc.0.00111A498EAEDB.4.LEVEL"; //Datenpunkt in welcher die Prozentangabe zum öffnen geschrieben werden muss
var VeluxRolladenActivityStateDP = "hm-rpc.0.00111A498EAEDB.4.ACTIVITY_STATE";
// Datenpunkte fuer Beschattungsansteuerungen
var DP_Beschattungsmodus = "javascript.0.Beschattung.Beschattungsmodus";
//Ueber diese Datenpunkte wird gesteuert, ob der Rolladen gesperrt ist und somit nicht durch andere
//Funktionen / Beschattungen verfahren werden kann
var DP_RolladenVerriegelungAktivKind1 = "javascript.0.Beschattung.RolladenVerriegelungAktivKind1";
var DP_RolladenVerriegelungAktivSchlafzimmer = "javascript.0.Beschattung.RolladenVerriegelungAktivSchlafzimmer";
var DP_RolladenVerriegelungAktivKind2 = "javascript.0.Beschattung.RolladenVerriegelungAktivKind2";
var DP_RolladenAnsteuerungLevelVisEG = "javascript.0.Beschattung.RolladenAnsteuerungLevelVisEG";
var DP_RolladenAnsteuerungLevelVisOG = "javascript.0.Beschattung.RolladenAnsteuerungLevelVisOG";
var DP_RolladenAnsteuerungLevelVisEGOG = "javascript.0.Beschattung.RolladenAnsteuerungLevelVisEGOG";
var sceneBeschattungV1 = "scene.Beschattung_Rolladen_V1_EG_OG_Alle_Zu";
var sceneBeschattungV2 = "scene.Beschattung_Rolladen_V2_WZ-Sueden_beschatten";
var sceneBeschattungV3 = "scene.Beschattung_Rolladen_V3_Sueden_zu";
// Parameter um Velux Rolladen zu konfigurieren
var FahrzeitRolladen0ProzentVonOffenNachZu = 35000; //Dauer in Sekunden bis der Rolladen komplett geschlossen (0 Prozent offen) ist, wenn der Rolladen vorher vollständig offen war
var FahrzeitRolladen100ProzentVonZuNachOffen = 35000;
//========================================================================================================
//========================================================================================================
// Abschnitt Rolladen Level ueber VIS eingestellt
// Der nachfolgende Abschnitt ist dazu gedacht mehrere Rolladen gleichzeitig auf ein bestimmtes Level zu verfahren
//========================================================================================================
//========================================================================================================
//Der Datenpunkt RolladenAnsteuerungLevelVisEG wird ausgewertet. Bei Wertveraenderung wird der gesetzt Wert an die Funktion
//uebergeben, welche die Rollaeden im Erdgeschoss auf das gewaehlte Level verfaehrt
on({ id: DP_RolladenAnsteuerungLevelVisEG, change: "any" }, function (obj) {
if(debug) console.log("Eingestellter Wert fuer RolladenAnsteuerungLevelVisEG: " + getState(DP_RolladenAnsteuerungLevelVisEG).val);
RolladenVerfahrenVisEG(getState(DP_RolladenAnsteuerungLevelVisEG).val);
});
//Der Datenpunkt RolladenAnsteuerungLevelVisOG wird ausgewertet. Bei Wertveraenderung wird der gesetzt Wert an die Funktion
//uebergeben, welche die Rollaeden im Obergeschoss auf das gewaehlte Level verfaehrt
on({ id: DP_RolladenAnsteuerungLevelVisOG, change: "any" }, function (obj) {
if(debug) console.log("Trigger DP_RolladenAnsteuerungLevelVisOG: Eingestellter Wert fuer RolladenAnsteuerungLevelVisOG: " + getState(DP_RolladenAnsteuerungLevelVisOG).val);
RolladenVerfahrenVisOG(getState(DP_RolladenAnsteuerungLevelVisOG).val);
});
//Der Datenpunkt RolladenAnsteuerungLevelVisEGOG wird ausgewertet. Bei Wertveraenderung wird der gesetzt Wert an die Funktion
//uebergeben, welche die Rollaeden im Erdgeschoss und im Obergeschoss auf das gewaehlte Level verfaehrt
on({ id: DP_RolladenAnsteuerungLevelVisEGOG, change: "any" }, function (obj) {
if(debug) console.log("Eingestellter Wert fuer RolladenAnsteuerungLevelVisEGOG: " + getState(DP_RolladenAnsteuerungLevelVisEGOG).val);
RolladenVerfahrenVisEGOG(getState(DP_RolladenAnsteuerungLevelVisEGOG).val);
});
//========================================================================================================
//========================================================================================================
// Lokale Funktionen
//========================================================================================================
//========================================================================================================
function RolladenVerfahrenVisEG(iLevel){
if(debug) console.log("RolladenVerfahrenVisEG: Verfahre Fenster im EG auf Level: " + iLevel);
setState(DP_RolladenKuecheFenster,iLevel);
setState(DP_RolladenKuecheTerassentuer,iLevel);
setState(DP_RolladenWohnzimmerTerassentuer,iLevel);
setState(DP_RolladenWohnzimmerTerasseFenster,iLevel);
setState(DP_RolladenWohnzimmerWestenFenster,iLevel);
setState(DP_RolladenHWR,iLevel);
}
function RolladenVerfahrenVisOG(iLevel){
if(debug) console.log("RolladenVerfahrenVisOG: Verfahre Fenster im OG auf Level: " + iLevel);
setState(DP_RolladenBadezimmer_Level,iLevel);
RolladenZimmerKind2_Level(iLevel);
RolladenZimmerKind1_Level(iLevel);
RolladenZimmerSchlafzimmer_Level(iLevel);
}
function RolladenVerfahrenVisEGOG(iLevel){
if(debug) console.log("RolladenVerfahrenVisEGOG: Verfahre Fenster im EG und OG auf Level: " + iLevel);
RolladenVerfahrenVisEG(iLevel);
RolladenVerfahrenVisOG(iLevel);
}
function RolladenZimmerKind1_Level(iLevel){
if(getState(DP_RolladenVerriegelungAktivKind1).val == false) {
if(debug) console.log("RolladenZimmerKind1_Level: Rolladen per VIS NICHT verriegelt, Wunschlevel " + iLevel + "% wird eingestellt");
setState(DP_RolladenKind1_Level,iLevel);
}
else {
if(debug) console.log("RolladenZimmerKind1_Level: Rolladen per VIS VERRIEGELT, Wunschlevel " + iLevel + "% wird NICHT eingestellt");
}
}
function RolladenZimmerSchlafzimmer_Level(iLevel){
if(getState(DP_RolladenVerriegelungAktivSchlafzimmer).val == false) {
if(debug) console.log("RolladenZimmerSchlafzimmer_Level: Rolladen per VIS NICHT verriegelt, Wunschlevel " + iLevel + "% wird eingestellt");
setState(DP_RolladenSchlafzimmer_Level,iLevel);
}
else {
if(debug) console.log("RolladenZimmerSchlafzimmer_Level: Rolladen per VIS VERRIEGELT, Wunschlevel " + iLevel + "% wird NICHT eingestellt");
}
}
function RolladenZimmerKind2_Level(iLevel){
if(getState(DP_RolladenVerriegelungAktivKind2).val == false) {
if(debug) console.log("RolladenZimmerKind2_Level: Rolladen per VIS NICHT verriegelt, Wunschlevel " + iLevel + "% wird eingestellt");
setState(DP_RolladenKind2_Level,iLevel);
}
else {
if(debug) console.log("RolladenZimmerKind2_Level: Rolladen per VIS VERRIEGELT, Wunschlevel " + iLevel + "% wird NICHT eingestellt");
}
}
//========================================================================================================
//========================================================================================================
// Abschnitt Beschattungsoptionen
//
//========================================================================================================
//========================================================================================================
on({ id: DP_Beschattungsmodus, change: "any" }, function (obj) {
var iBeschattungsmodus = getState(DP_Beschattungsmodus).val;
if(debug) console.log("Beschattungsmodus: " + iBeschattungsmodus + " empfangen")
switch(iBeschattungsmodus) {
//Beschattung Variante 1 - ganzes Haus wird beschattet
case (1):
if(debug) console.log("Beschattungsmodus: " + iBeschattungsmodus + " getriggert")
setState(sceneBeschattungV1, true);
//VeluxRolladenVerfahrenProzent(1); //schliesse Velux Rolladen vollstaendig;
iBeschattungsmodus = 0;
break;
//Beschattung Variante 2- WZ Suedseite wird beschattet und Velux Rolladen wird geschlossen
case (2):
if(debug) console.log("Beschattungsmodus: " + iBeschattungsmodus + " getriggert")
setState(sceneBeschattungV2, true);
//VeluxRolladenVerfahrenProzent(1); //schliesse Velux Rolladen vollstaendig;
iBeschattungsmodus = 0;
break;
//Beschattung Variante 3- Suedseite wird fast ganz geschlossen und Velux Rolladen wird geschlossen
case (3):
if(debug) console.log("Beschattungsmodus: " + iBeschattungsmodus + " getriggert")
setState(sceneBeschattungV3, true);
//VeluxRolladenVerfahrenProzent(1); //schliesse Velux Rolladen vollstaendig;
iBeschattungsmodus = 0;
break;
default:
iBeschattungsmodus = 0;
break;
}
});
//========================================================================================================
//========================================================================================================
// Abschnitt fuer die Ansteuerung des Velux Rolladen
//========================================================================================================
//========================================================================================================
function VeluxRolladenVerfahrenProzent(ProzentSollAngabe)
{
var BerechneteFahrtzeitSek = 0;
var TimerID = null;
switch(ProzentSollAngabe) {
case(1):
BerechneteFahrtzeitSek = FahrzeitRolladen0ProzentVonOffenNachZu;
break;
default:
break;
}
//BerechneteFahrtzeitSek = (FahrzeitRolladen0ProzentVonOffenNachZu/100) * ProzentSollAngabe;
if(debug) console.log("VeluxRolladenVerfahrenProzent - Berechnete Fahrzeits in ms: " + BerechneteFahrtzeitSek + " fuer angeforderten Öffnungsprozentwert: " + ProzentSollAngabe);
VeluxRolladenStop(); //Sorgt dafür, dass der Rolladen gestoppt wird falls er gerade verfahren wird
setState(VeluxRolladenLevelDP,99);
if(debug) console.log("VeluxRolladenVerfahrenProzent - fahre Rolladen auf 99% Öffnung");
TimerID = setTimeout(function() {VeluxRolladenStop();}, FahrzeitRolladen100ProzentVonZuNachOffen);
clearTimeout(TimerID);
if(debug) console.log("VeluxRolladenVerfahrenProzent - Level Rolladen: " + getState(VeluxRolladenLevelDP).val);
VeluxRolladenAnsteuerungDauer(BerechneteFahrtzeitSek);
}
function VeluxRolladenAnsteuerungDauer(DauerSekunden){
var TimerID = null;
VeluxRolladenStop();
setState(VeluxRolladenLevelDP,1);
if(debug) console.log("VeluxRolladenAnsteuerungDauer - DauerSekunden:" + DauerSekunden);
TimerID = setTimeout(function() {VeluxRolladenStop();},DauerSekunden);
clearTimeout(TimerID);
if(debug) console.log("VeluxRolladenAnsteuerungDauer - Rolladen in gewünschter Possition");
}
function VeluxRolladenStop(){
setState(VeluxRolladenStopDP,true);
if(debug) console.log("Velux: Stop Befehl wurde gesendet");
if(debug) console.log("VeluxRolladenStop - Level Rolladen: " + getState(VeluxRolladenLevelDP).val);
}