Hallo, ich habe das Anhängende Programm gebaut um im Regen/ Windfall die Beschattungen rein fahren zu lassen.
Meine Regierung zu hause hat sich jetzt beschwert das einer der Aktoren (hat sie gehört weil dieser innen liegt) immer klackt.
Jedes mal wenn einer der Bedingungen ist - also z.Bsp. Regen prüft er einmal ob der Aktor eingefahren ist.
Kann ich das umgehen?
Screenshot anbei
Markise Programm
Moderator: Co-Administratoren
-
- Beiträge: 362
- Registriert: 13.02.2020, 07:56
- System: CCU
- Hat sich bedankt: 28 Mal
- Danksagung erhalten: 3 Mal
-
- Beiträge: 708
- Registriert: 24.10.2016, 17:18
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 150 Mal
- Danksagung erhalten: 22 Mal
Re: Markise Programm
Guten Morgen,
Du musst oben per Und Verknüpfung abfragen, ob die überhaupt ausgefahren sind. Führt m.E. Zu einem Programm pro Markise.
Du musst oben per Und Verknüpfung abfragen, ob die überhaupt ausgefahren sind. Führt m.E. Zu einem Programm pro Markise.
Viele Grüße
Martin
RaspberryMatic auf ESXi 7 mit RPI-RF-MOD/HB-RF-ETH. Div. HM und HMIP Funkkomponenten im Holzständerhaus
Martin
RaspberryMatic auf ESXi 7 mit RPI-RF-MOD/HB-RF-ETH. Div. HM und HMIP Funkkomponenten im Holzständerhaus
-
- Beiträge: 10658
- Registriert: 21.09.2012, 08:09
- System: CCU
- Wohnort: Stuttgart
- Hat sich bedankt: 320 Mal
- Danksagung erhalten: 501 Mal
Re: Markise Programm
Eine Alternative wäre ansonsten noch ein Skript, das die Zustände der Aktoren abfragt, bevor es sie ansteuert. Dann kann man das mit einem einzigen Programm lösen. So mache ich das z.B. in meinem zBSP/zBSS (siehe Signatur). Viele Wegen führen nach Rom.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
-
- Beiträge: 362
- Registriert: 13.02.2020, 07:56
- System: CCU
- Hat sich bedankt: 28 Mal
- Danksagung erhalten: 3 Mal
-
- Beiträge: 10658
- Registriert: 21.09.2012, 08:09
- System: CCU
- Wohnort: Stuttgart
- Hat sich bedankt: 320 Mal
- Danksagung erhalten: 501 Mal
Re: Markise Programm
Zum Beispiel so (sieht etwas komplexer aus, da es ein reduzierter Auszug aus meinem zBSS ist). Ich habe das aber eben hier in meinem Büro geschrieben und konnte es daher nicht auf Fehler überprüfen.
In "blindNamesList" trägst du einfach die Beschattungsgeräte ein, die angesteuert werden sollen. Diese musst du jeweils durch ein "\t" voneinander trennen. Das Skript prüft dann einfach, ob der unter "blindValueNew" definierte Wert bereits eingestellt ist. Nur, wenn dies nicht der Fall ist, werden die Beschattungsgeräte angesteuert.
Mit dem zBSP/zBSS wärst du aber deutlich flexibler.
Übrigens, "Markise" schreibt man ohne e. Hast du ja auch ein Mal richtig gemacht. Ich habe aber im Skript die von dir gesetzten Namen eingetragen.
In "blindNamesList" trägst du einfach die Beschattungsgeräte ein, die angesteuert werden sollen. Diese musst du jeweils durch ein "\t" voneinander trennen. Das Skript prüft dann einfach, ob der unter "blindValueNew" definierte Wert bereits eingestellt ist. Nur, wenn dies nicht der Fall ist, werden die Beschattungsgeräte angesteuert.
Code: Alles auswählen
real blindValueNew = 100.0
string blindNamesList = "Markiese Kinderzimmer 1.OG\tBeschattung Terrasse\tMarkise";
string blindName; string blindChannelsList = ""; string blindChannel;
integer cnt;
real blindValueActual = 0.0;
foreach(blindName, blindNamesList){
blindChannelsList = (dom.GetObject(ID_DEVICES).Get(blindName)).Channels().EnumUsedNames();
foreach(blindChannel, blindChannelsList){
if((dom.GetObject(ID_CHANNELS).Get(blindChannel)).DPByHssDP("LEVEL")){
blindValueActual = (dom.GetObject(ID_CHANNELS).Get(blindChannel)).DPByHssDP("LEVEL").Value();
break;
}
}
if(blindValueNew/100.0) <> blindValueActual){
cnt = 0;
foreach(blindChannel, blindChannelsList){
if((dom.GetObject(ID_CHANNELS).Get(blindChannel)).DPByHssDP("LEVEL")){
if(cnt <= 1){(dom.GetObject(ID_CHANNELS).Get(blindChannel)).DPByHssDP("LEVEL").State(blindValueNew/100.0);}
}
cnt = cnt + 1;
}
}
}
Übrigens, "Markise" schreibt man ohne e. Hast du ja auch ein Mal richtig gemacht. Ich habe aber im Skript die von dir gesetzten Namen eingetragen.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
-
- Beiträge: 9656
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 697 Mal
- Danksagung erhalten: 1617 Mal
Re: Markise Programm
Eigentlich sollte nach der üblichen Logik das Programm nur auslösen, wenn auch eine Änderung Eintritt.
Entweder hast Du ständig wechselnde Winde oder die Kombination der Datenpunkte führt dazu, daß sich das Programm wie "bei Aktualisierung" verhält.
Etwas näher auf dei Spur kannst Du dem kommen, wenn Du die Geräte auf protokolliert stellst. Dann siehst Du schon mal wie häufig da was aktualisiert wird.
Zusätzlich würde ich Alchys Auslöseskript mit einbauen. (Siehe Signatur - Debuggung Tips), dann siehst Du warum das Programm und wie häufig ausgelöst wurde. Ggf. Kannst Du eine der Bedingungen auf "nur prüfen" stellen, wenn z. B. Regen und Wind immer gleichzeitig übermittelt werden und das Programm immer 2x triggern.
Wenn Du das nicht an der Wurzel gelöst bekommst, dann hilft tatsächlich nur die Position der Markisen mit abzufragen nach dem Schema
Bin übrigens nicht der Meinung, daß Du für jede Markise ein extra Programm brauchst.
Du kannst natürlich auc hden Weg gehen das indirekter zu lösen. D.h. Dein Programm Steuert nciht direkt die Markisen, sondern schaltet eine Systemvariable vom Typ Logik um (wenn sie noch nicht den richtigen Status hat) . Und dein Markisen Programm reagiert dann auf diese SV.
Dann wäre auch Ruhe.
Entweder hast Du ständig wechselnde Winde oder die Kombination der Datenpunkte führt dazu, daß sich das Programm wie "bei Aktualisierung" verhält.
Etwas näher auf dei Spur kannst Du dem kommen, wenn Du die Geräte auf protokolliert stellst. Dann siehst Du schon mal wie häufig da was aktualisiert wird.
Zusätzlich würde ich Alchys Auslöseskript mit einbauen. (Siehe Signatur - Debuggung Tips), dann siehst Du warum das Programm und wie häufig ausgelöst wurde. Ggf. Kannst Du eine der Bedingungen auf "nur prüfen" stellen, wenn z. B. Regen und Wind immer gleichzeitig übermittelt werden und das Programm immer 2x triggern.
Wenn Du das nicht an der Wurzel gelöst bekommst, dann hilft tatsächlich nur die Position der Markisen mit abzufragen nach dem Schema
Code: Alles auswählen
UND
Markise1 < 100% nur prüfen
ODER
Markise2 < 100% nur prüfen
ODER
Markise3 < 100% nur prüfen
Du kannst natürlich auc hden Weg gehen das indirekter zu lösen. D.h. Dein Programm Steuert nciht direkt die Markisen, sondern schaltet eine Systemvariable vom Typ Logik um (wenn sie noch nicht den richtigen Status hat) . Und dein Markisen Programm reagiert dann auf diese SV.
Dann wäre auch Ruhe.
Zuletzt geändert von MichaelN am 18.08.2021, 09:20, insgesamt 1-mal geändert.
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
-
- Beiträge: 14149
- Registriert: 08.05.2013, 23:33
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Nordwürttemberg
- Hat sich bedankt: 583 Mal
- Danksagung erhalten: 1497 Mal
Re: Markise Programm
Wieder ein schönes Beispiel für meine Theorie, dass die Prüfung auf "bei Änderung" Teil der Bedingungsprüfung des Programms selbst ist und nicht im Vorfeld ohne Triggerung des Programms behandelt wird. Hier sind verODERt drei veränderliche Trigger hinterlegt, und in so einem Falle tritt dieser Effekt zwangsweise auf. Wie sollte auch sonst geprüft werden, ob sich ein Wert geändert hat und ob er ggf. einen definierten Grenzwert überschritten hat. Dieses müsste die CCU-Firmware dann in eine separate Routine auslagern und nur bei einem Prüfergebnis "WAHR" die Bedingungsprüfung des Programms triggern. Ohne es mangels Einblick beweisen zu können würde ich sagen, dass diese Prüfung einfach in diesem Programmlauf durch Vergleich mit .LastValue() gemacht wird. Diesen Wert hält die CCU sowieso vor und kann anhand der Kritierien "Wert ist größer/kleiner als der letzte bekannte" UND "Wert hat die definierte Grenze überschritten (oder seinen Logikstatus geändert)" entscheiden, dass diese Prüfung ein WAHR ergibt.
BTT: Da das Programm sowieso alle Markisen einfahren soll, braucht man keinen riesigen Aufwand zu betreiben und kann das einfachst per WebUI-Programm behandeln. Wie von MichaelN empfohlen, einfach zu den vorhandenen Bedingungen noch die Abfrage ob mindestens eine der Markisen eine Behanghöhe kleiner 100% hat (alle drei verODERt auf Behanghöhe <100% nur prüfen). Da die anderen Bedingungen auch verODERt sind, braucht man keinen separaten Block. Sieht zwar schöner aus, ist aber funktionell identisch. Dann bekommen zwar alle einmalig einen Einfahrbefehl (auch wenn sie nicht ausgefahren sind), aber da nach dem ersten Befehl sowieso keine der Markisen mehr ausgefahren ist, steuert das Programm auch keine mehr an.
Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch