NEWS
Markisen Steuerung
-
@michihorn sagte: das habe ich jetzt mal so gelöst:
Damit bleibt es dabei, dass die Uhrzeit konstant bleibt. So funktioniert es mit Änderung der Uhrzeit:
function RunDailyEinf() { if (!getState(idHand).val) { setState(id_Auslöser, "Uhrzeit"); setState(idEinf, true); setState(idAusf, false); } } //Uhrzeit var OffTime = schedule(getState(idMin).val + ' ' + getState(idStd).val + ' * * *', RunDailyEinf); on([idMin, idStd], function() { clearSchedule(OffTime); OffTime = schedule(getState(idMin).val + ' ' + getState(idStd).val + ' * * *', RunDailyEinf); }); -
@michihorn sagte: Wie kann ich das ändern?
Was ändern?
-
@michihorn sagte: Wie kann ich das ändern?
Was ändern?
-
Hallo habe meine Tahoma Markisen über Iobroker gesteuert, leider klappt das mit dieser Version nur Suboptimal.
/*****Steuerung Markisen Wintergarten ***************************************** ** März 2022 ** TAHOMA ** (0 = OBEN), (100 = UNTEN) ** erstellt: 23.03.22 ** geändert: 21.04.22 ********************************************************************************/ var logging = true; const idAdapt = "tahoma.0.info.connection" const idRolloL = 'tahoma.0.devices.Markisse_Links.states.core:DeploymentState' const idRolloR = 'tahoma.0.devices.Markisse_Rechts.states.core:DeploymentState' const idTemp = 'hm-rpc.0.OEQ0128317.1.TEMPERATURE' //Sensor Wintergarten const idLichtsensor = 'hm-rpc.2.00185BE98B3FCA.1.ILLUMINATION' //Wetterstation const idStd = "javascript.0.Garten.Markisse.R_stunde" const idMin = "javascript.0.Garten.Markisse.R_minute" const idSW_Temp = 'javascript.0.Garten.Markisse.SW_Temp'; // Auslösewert Temp const idLux = 'javascript.0.Garten.Markisse.SW_Lux'; // Auslösewert Lux const idLuxEinf = "javascript.0.Garten.Markisse.SW_LuxEinF" const id_Auslöser = "0_userdata.0.Garten.Tahoma.Markise.Auslöser" const idRegen = 'hm-rpc.2.00185BE98B3FCA.1.RAINING' //Wetterstation const id_Anw = "0_userdata.0.Haus.AW.AW" const idWind = 'hm-rpc.2.00185BE98B3FCA.1.WIND_SPEED'; //Wetterstation const idHand = 'javascript.0.Garten.Markisse.Hand' const idMLStatus = "0_userdata.0.Garten.Tahoma.Markise.StatusL"; const idMRStatus = "0_userdata.0.Garten.Tahoma.Markise.StatusR"; const id_MarkisseEXEEinf = "tahoma.0.actionGroups.Markisse_Einfahren.commands.execute" const id_MarkisseEXEAusf = "tahoma.0.actionGroups.Markisse_Ausfahren.commands.execute" const idEinf = "0_userdata.0.Garten.Tahoma.Markise.Einf" const idAusf = "0_userdata.0.Garten.Tahoma.Markise.Ausf" const js = 'system.adapter.javascript.3' var Std = getState(idStd).val var Min = getState(idMin).val var SW_Lux = getState(idLux).val; var SW_LuxEinf = getState(idLuxEinf).val; var grund; var text; //******EINFAHREN*************************************************************************** //Uhrzeit schedule({ hour: Std, minute: Min }, RunDailyEinf); function RunDailyEinf() { if (getState(idHand).val == false) { setState(id_Auslöser, "Uhrzeit"); setState(idEinf, true); setState(idAusf, false); } }; //Regen on({ id: idRegen, val: true }, function (dp) { if (getState(id_Auslöser).val != "Regen") { setState(id_Auslöser, "Regen"); setState(idEinf, true); setState(idAusf, false); } }); //LUX on({ id: idLichtsensor, valLe: SW_LuxEinf, oldValGt: SW_LuxEinf }, function (dp) { log("1.Trigger gesetzt"); if (getState(id_Auslöser).val != "Bewölkung/Helligkeit") { log("2.Kommando Einfahren gesendet"); setState(id_Auslöser, "Bewölkung/Helligkeit"); setState(idEinf, true); //-->Zeile 109 setState(idAusf, false); //-->Zeile 113 } }); //******AUSFAHREN**************************************************************************** on({ id: idLichtsensor, valGt: SW_Lux, oldValLe: SW_Lux }, function (dp) { log("1.Trigger gesetzt"); if ((getState(id_Anw).val == true) && (getState(idTemp).val >= (getState(idSW_Temp).val))) { log("2.Bedingung Licht/Temp erfüllt"); //if (compareTime('08:45', '16:00', 'between') && (getState(idRegen).val == false) && (getState(idHand).val == false)) { if (compareTime('08:45', '16:00', 'between') && (getState(idRegen).val == false)) { log("3.Ausfahrbedingungen OK"); if (getState(id_Auslöser).val != "Sonnenschutz") { log("4.Kommando Ausfahren gesendet"); setState(id_Auslöser, "Sonnenschutz"); setState(idEinf, false) //-->Zeile 109 setState(idAusf, true) //-->Zeile 113 } } } }); //****************************************************************************************** //Änderung feststellen schedule("* * * * *", function () { if (getState(idRolloL).val > 0) { setState(idMLStatus, "Ausgef.") } else { if (getState(idRolloL).val == 0) { setState(idMLStatus, "Eingef.") } } if (getState(idRolloR).val > 0) { setState(idMRStatus, "Ausgef.") } else { if (getState(idRolloR).val == 0) { setState(idMRStatus, "Eingef.") } } }); on({ id: idEinf, val: true }, function (dp) { //<--Zeile 68 setState(id_MarkisseEXEEinf, true); setStateDelayed(id_MarkisseEXEEinf, false, 52000); }); on({ id: idAusf, val: true }, function (dp) { //<--Zeile 84 setState(id_MarkisseEXEAusf, true); setStateDelayed(id_MarkisseEXEAusf, false, 52000); }); var timer = null; var triggermarkB = [id_MarkisseEXEEinf, id_MarkisseEXEAusf]; on({ id: triggermarkB, change: 'ne' }, function (dp) { if ((getState(id_MarkisseEXEEinf).val == true) || (getState(id_MarkisseEXEAusf).val == true)) { if (logging && !timer) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938149' }); timer = setTimeout(function () { timer = null; text = '\ud83c\udf1e *Markisse Status:*\n Links: ' + getState(idRolloL).val + '\n' + " Rechts: " + getState(idRolloR).val + '\n' + getState(id_Auslöser).val createEventlog("Markisse Bewegung", text) log(text); }, 60000); } }); on({ time: { hour: 23, minute: 59 } }, function () { setState(id_Auslöser, ""); setState(idHand, false); setState(idEinf, ""); setState(idAusf, ""); });Würde mich über Verbesserungsvorschläge freuen.
Michael@michihorn sagte: Würde mich über Verbesserungsvorschläge freuen.
/*****Steuerung Markisen Wintergarten *****************************************/ const logging = true; const idAdapt = "tahoma.0.info.connection" const idRolloL = 'tahoma.0.devices.Markisse_Links.states.core:DeploymentState' const idRolloR = 'tahoma.0.devices.Markisse_Rechts.states.core:DeploymentState' const idTemp = 'hm-rpc.0.OEQ0128317.1.TEMPERATURE' //Sensor Wintergarten const idLichtsensor = 'hm-rpc.2.00185BE98B3FCA.1.ILLUMINATION' //Wetterstation const idStd = "javascript.0.Garten.Markisse.R_stunde" const idMin = "javascript.0.Garten.Markisse.R_minute" const idSW_Temp = 'javascript.0.Garten.Markisse.SW_Temp'; // Auslösewert Temp const idLux = 'javascript.0.Garten.Markisse.SW_Lux'; // Auslösewert Lux const idLuxEinf = "javascript.0.Garten.Markisse.SW_LuxEinF" const id_Auslöser = "0_userdata.0.Garten.Tahoma.Markise.Auslöser" const idRegen = 'hm-rpc.2.00185BE98B3FCA.1.RAINING' //Wetterstation const id_Anw = "0_userdata.0.Haus.AW.AW" const idWind = 'hm-rpc.2.00185BE98B3FCA.1.WIND_SPEED'; //Wetterstation const idHand = 'javascript.0.Garten.Markisse.Hand' const idMLStatus = "0_userdata.0.Garten.Tahoma.Markise.StatusL"; const idMRStatus = "0_userdata.0.Garten.Tahoma.Markise.StatusR"; const id_MarkisseEXEEinf = "tahoma.0.actionGroups.Markisse_Einfahren.commands.execute" const id_MarkisseEXEAusf = "tahoma.0.actionGroups.Markisse_Ausfahren.commands.execute" // const idEinf = "0_userdata.0.Garten.Tahoma.Markise.Einf" const idAusf = "0_userdata.0.Garten.Tahoma.Markise.Ausf" // const js = 'system.adapter.javascript.3' var SW_Lux = getState(idLux).val; var SW_LuxEinf = getState(idLuxEinf).val; // var grund; //******EINFAHREN*************************************************************************** function RunDailyEinf() { if (!getState(idHand).val) { setState(id_Auslöser, "Uhrzeit", true); setState(idAusf, false, true); } } //Uhrzeit var OffTime = schedule(getState(idMin).val + ' ' + getState(idStd).val + ' * * *', RunDailyEinf); on([idMin, idStd], function() { clearSchedule(OffTime); OffTime = schedule(getState(idMin).val + ' ' + getState(idStd).val + ' * * *', RunDailyEinf); }); //Regen on({id: idRegen, val: true}, function() { if (getState(id_Auslöser).val != "Regen") { setState(id_Auslöser, "Regen", true); setState(idAusf, false, true); } }); //LUX on({ id: idLichtsensor, valLe: SW_LuxEinf, oldValGt: SW_LuxEinf }, function() { log("1.Trigger gesetzt"); if (getState(id_Auslöser).val != "Bewölkung/Helligkeit") { log("2.Kommando Einfahren gesendet"); setState(id_Auslöser, "Bewölkung/Helligkeit", true); setState(idAusf, false, true); //-->Zeile 90 } }); //******AUSFAHREN**************************************************************************** on({id: idLichtsensor, valGt: SW_Lux, oldValLe: SW_Lux}, function() { log("1.Trigger gesetzt"); if (getState(id_Anw).val && getState(idTemp).val >= getState(idSW_Temp).val) { log("2.Bedingung Licht/Temp erfüllt"); //if (compareTime('08:45', '16:00', 'between') && (getState(idRegen).val == false) && (getState(idHand).val == false)) { if (compareTime('08:45', '16:00', 'between') && !getState(idRegen).val) { log("3.Ausfahrbedingungen OK"); if (getState(id_Auslöser).val != "Sonnenschutz") { log("4.Kommando Ausfahren gesendet"); setState(id_Auslöser, "Sonnenschutz", true); setState(idAusf, true, true) //-->Zeile 90 } } } }); //Änderung feststellen schedule("* * * * *", function () { setState(idMLStatus, getState(idRolloL).val > 0 ? 'Ausgef.' : 'Eingef.', true); setState(idMRStatus, getState(idRolloR).val > 0 ? 'Ausgef.' : 'Eingef.', true); }); on(idAusf, function (dp) { if(dp.state.val) { setState(id_MarkisseEXEAusf, true); setStateDelayed(id_MarkisseEXEAusf, false, 52000); } else { setState(id_MarkisseEXEEinf, true); setStateDelayed(id_MarkisseEXEEinf, false, 52000); } }); const triggermarkB = [id_MarkisseEXEEinf, id_MarkisseEXEAusf]; on({id: triggermarkB, change: 'ne', val: false}, function() { setTimeout(function() { let text = '\ud83c\udf1e *Markise Status:*\n Links: ' + getState(idRolloL).val + '\n' + " Rechts: " + getState(idRolloR).val + '\n' + getState(id_Auslöser).val; if(logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938149' }); createEventlog("Markise Status", text); log(text); }, 20000); // 20 s Abfrageintervall }); schedule('0 0 * * *', function() { setState(id_Auslöser, "", true); setState(idHand, false, true); });createEventlog() ist eine globale Funktion?
-
@arteck Ab Zeile 119 ist ein Fehler, dass Script sendet mir die Zustände der Markisen per Whatsapp, beim Einfahren werden offenbar die Zustände zu früh abgegriffen so das 46% angezeigt wird. Endzustand sollte 0% sein

Beim Ausfahren sollte die Whatsapp 100% melden

Irgendwie komme ich gerade nicht weiter
Michael@michihorn sagte: die Zustände zu früh abgegriffen so das 46% angezeigt wird.
Der Adapter arbeitet mit Polling: Wenn als Abfrageintervall 20000 ms eingestellt sind, kann sich die Rückmeldung um bis zu 20 s verzögern.
-
@michihorn sagte: Würde mich über Verbesserungsvorschläge freuen.
/*****Steuerung Markisen Wintergarten *****************************************/ const logging = true; const idAdapt = "tahoma.0.info.connection" const idRolloL = 'tahoma.0.devices.Markisse_Links.states.core:DeploymentState' const idRolloR = 'tahoma.0.devices.Markisse_Rechts.states.core:DeploymentState' const idTemp = 'hm-rpc.0.OEQ0128317.1.TEMPERATURE' //Sensor Wintergarten const idLichtsensor = 'hm-rpc.2.00185BE98B3FCA.1.ILLUMINATION' //Wetterstation const idStd = "javascript.0.Garten.Markisse.R_stunde" const idMin = "javascript.0.Garten.Markisse.R_minute" const idSW_Temp = 'javascript.0.Garten.Markisse.SW_Temp'; // Auslösewert Temp const idLux = 'javascript.0.Garten.Markisse.SW_Lux'; // Auslösewert Lux const idLuxEinf = "javascript.0.Garten.Markisse.SW_LuxEinF" const id_Auslöser = "0_userdata.0.Garten.Tahoma.Markise.Auslöser" const idRegen = 'hm-rpc.2.00185BE98B3FCA.1.RAINING' //Wetterstation const id_Anw = "0_userdata.0.Haus.AW.AW" const idWind = 'hm-rpc.2.00185BE98B3FCA.1.WIND_SPEED'; //Wetterstation const idHand = 'javascript.0.Garten.Markisse.Hand' const idMLStatus = "0_userdata.0.Garten.Tahoma.Markise.StatusL"; const idMRStatus = "0_userdata.0.Garten.Tahoma.Markise.StatusR"; const id_MarkisseEXEEinf = "tahoma.0.actionGroups.Markisse_Einfahren.commands.execute" const id_MarkisseEXEAusf = "tahoma.0.actionGroups.Markisse_Ausfahren.commands.execute" // const idEinf = "0_userdata.0.Garten.Tahoma.Markise.Einf" const idAusf = "0_userdata.0.Garten.Tahoma.Markise.Ausf" // const js = 'system.adapter.javascript.3' var SW_Lux = getState(idLux).val; var SW_LuxEinf = getState(idLuxEinf).val; // var grund; //******EINFAHREN*************************************************************************** function RunDailyEinf() { if (!getState(idHand).val) { setState(id_Auslöser, "Uhrzeit", true); setState(idAusf, false, true); } } //Uhrzeit var OffTime = schedule(getState(idMin).val + ' ' + getState(idStd).val + ' * * *', RunDailyEinf); on([idMin, idStd], function() { clearSchedule(OffTime); OffTime = schedule(getState(idMin).val + ' ' + getState(idStd).val + ' * * *', RunDailyEinf); }); //Regen on({id: idRegen, val: true}, function() { if (getState(id_Auslöser).val != "Regen") { setState(id_Auslöser, "Regen", true); setState(idAusf, false, true); } }); //LUX on({ id: idLichtsensor, valLe: SW_LuxEinf, oldValGt: SW_LuxEinf }, function() { log("1.Trigger gesetzt"); if (getState(id_Auslöser).val != "Bewölkung/Helligkeit") { log("2.Kommando Einfahren gesendet"); setState(id_Auslöser, "Bewölkung/Helligkeit", true); setState(idAusf, false, true); //-->Zeile 90 } }); //******AUSFAHREN**************************************************************************** on({id: idLichtsensor, valGt: SW_Lux, oldValLe: SW_Lux}, function() { log("1.Trigger gesetzt"); if (getState(id_Anw).val && getState(idTemp).val >= getState(idSW_Temp).val) { log("2.Bedingung Licht/Temp erfüllt"); //if (compareTime('08:45', '16:00', 'between') && (getState(idRegen).val == false) && (getState(idHand).val == false)) { if (compareTime('08:45', '16:00', 'between') && !getState(idRegen).val) { log("3.Ausfahrbedingungen OK"); if (getState(id_Auslöser).val != "Sonnenschutz") { log("4.Kommando Ausfahren gesendet"); setState(id_Auslöser, "Sonnenschutz", true); setState(idAusf, true, true) //-->Zeile 90 } } } }); //Änderung feststellen schedule("* * * * *", function () { setState(idMLStatus, getState(idRolloL).val > 0 ? 'Ausgef.' : 'Eingef.', true); setState(idMRStatus, getState(idRolloR).val > 0 ? 'Ausgef.' : 'Eingef.', true); }); on(idAusf, function (dp) { if(dp.state.val) { setState(id_MarkisseEXEAusf, true); setStateDelayed(id_MarkisseEXEAusf, false, 52000); } else { setState(id_MarkisseEXEEinf, true); setStateDelayed(id_MarkisseEXEEinf, false, 52000); } }); const triggermarkB = [id_MarkisseEXEEinf, id_MarkisseEXEAusf]; on({id: triggermarkB, change: 'ne', val: false}, function() { setTimeout(function() { let text = '\ud83c\udf1e *Markise Status:*\n Links: ' + getState(idRolloL).val + '\n' + " Rechts: " + getState(idRolloR).val + '\n' + getState(id_Auslöser).val; if(logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938149' }); createEventlog("Markise Status", text); log(text); }, 20000); // 20 s Abfrageintervall }); schedule('0 0 * * *', function() { setState(id_Auslöser, "", true); setState(idHand, false, true); });createEventlog() ist eine globale Funktion?
-
@michihorn sagte: Zum Thema Endstand der Markise habe ich 52 Sekunden ermittelt
Dann solltest Du Zeile 129 entsprechend ändern oder besser in Zeile 122 auf false prüfen, wobei dann die Verzögerung überflüssig ist.
EDIT:
const triggermarkB = [id_MarkisseEXEEinf, id_MarkisseEXEAusf]; on({id: triggermarkB, change: 'ne', val: false}, function() { if(logging) { let text = '\ud83c\udf1e *Markisse Status:*\n Links: ' + getState(idRolloL).val + '\n' + " Rechts: " + getState(idRolloR).val + '\n' + getState(id_Auslöser).val; sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938149' }); createEventlog("Markisse Bewegung", text); log(text); } });@paul53 sagte in Markisen Steuerung:
@michihorn sagte: Zum Thema Endstand der Markise habe ich 52 Sekunden ermittelt
Dann solltest Du Zeile 129 entsprechend ändern oder besser in Zeile 122 auf false prüfen, wobei dann die Verzögerung überflüssig ist.
EDIT:
const triggermarkB = [id_MarkisseEXEEinf, id_MarkisseEXEAusf]; on({id: triggermarkB, change: 'ne', val: false}, function() { if(logging) { let text = '\ud83c\udf1e *Markisse Status:*\n Links: ' + getState(idRolloL).val + '\n' + " Rechts: " + getState(idRolloR).val + '\n' + getState(id_Auslöser).val; sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938149' }); createEventlog("Markisse Bewegung", text); log(text); } });Bei dieser Änderung wird sofort ohne Wartezeit der Status aus Tahoma abgegriffen. Gerade ist die Markise eingefahren sollte dann 0% anzeigen, Anzeige war aber 100%
-
@paul53 sagte in Markisen Steuerung:
@michihorn sagte: Zum Thema Endstand der Markise habe ich 52 Sekunden ermittelt
Dann solltest Du Zeile 129 entsprechend ändern oder besser in Zeile 122 auf false prüfen, wobei dann die Verzögerung überflüssig ist.
EDIT:
const triggermarkB = [id_MarkisseEXEEinf, id_MarkisseEXEAusf]; on({id: triggermarkB, change: 'ne', val: false}, function() { if(logging) { let text = '\ud83c\udf1e *Markisse Status:*\n Links: ' + getState(idRolloL).val + '\n' + " Rechts: " + getState(idRolloR).val + '\n' + getState(id_Auslöser).val; sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938149' }); createEventlog("Markisse Bewegung", text); log(text); } });Bei dieser Änderung wird sofort ohne Wartezeit der Status aus Tahoma abgegriffen. Gerade ist die Markise eingefahren sollte dann 0% anzeigen, Anzeige war aber 100%
@michihorn sagte: Bei dieser Änderung wird sofort ohne Wartezeit der Status aus Tahoma abgegriffen.
Ich habe im Skript oben noch eine Verzögerung von 20 s ergänzt, um das Polling zu berücksichtigen. Außerdem wird jetzt auf false, also erst 52 s später als ursprünglich getriggert.
const triggermarkB = [id_MarkisseEXEEinf, id_MarkisseEXEAusf]; on({id: triggermarkB, change: 'ne', val: false}, function() { setTimeout(function() { let text = '\ud83c\udf1e *Markise Status:*\n Links: ' + getState(idRolloL).val + '\n' + " Rechts: " + getState(idRolloR).val + '\n' + getState(id_Auslöser).val; if(logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938149' }); createEventlog("Markise Status", text); log(text); }, 20000); // 20 s Abfrageintervall });Übrigens: Markise schreibt man mit einem "s".
-
@michihorn sagte: Bei dieser Änderung wird sofort ohne Wartezeit der Status aus Tahoma abgegriffen.
Ich habe im Skript oben noch eine Verzögerung von 20 s ergänzt, um das Polling zu berücksichtigen. Außerdem wird jetzt auf false, also erst 52 s später als ursprünglich getriggert.
const triggermarkB = [id_MarkisseEXEEinf, id_MarkisseEXEAusf]; on({id: triggermarkB, change: 'ne', val: false}, function() { setTimeout(function() { let text = '\ud83c\udf1e *Markise Status:*\n Links: ' + getState(idRolloL).val + '\n' + " Rechts: " + getState(idRolloR).val + '\n' + getState(id_Auslöser).val; if(logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938149' }); createEventlog("Markise Status", text); log(text); }, 20000); // 20 s Abfrageintervall });Übrigens: Markise schreibt man mit einem "s".