Markise Programm

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
DarkGhost95
Beiträge: 362
Registriert: 13.02.2020, 07:56
System: CCU
Hat sich bedankt: 28 Mal
Danksagung erhalten: 3 Mal

Markise Programm

Beitrag von DarkGhost95 » 18.08.2021, 07:44

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 ;-)
Dateianhänge
Programm.JPG

HMNutzer
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

Beitrag von HMNutzer » 18.08.2021, 08:13

Guten Morgen,

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

dtp
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

Beitrag von dtp » 18.08.2021, 08:25

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.

DarkGhost95
Beiträge: 362
Registriert: 13.02.2020, 07:56
System: CCU
Hat sich bedankt: 28 Mal
Danksagung erhalten: 3 Mal

Re: Markise Programm

Beitrag von DarkGhost95 » 18.08.2021, 08:27

dtp hat geschrieben:
18.08.2021, 08:25
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. ;)
Das würde wie aussehen? :-) Bei Skripten bin ich raus :-D

dtp
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

Beitrag von dtp » 18.08.2021, 08:51

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.

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;
    }
  }
}
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.
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.

MichaelN
Beiträge: 9656
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Markise Programm

Beitrag von MichaelN » 18.08.2021, 08:56

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

Code: Alles auswählen

UND
   Markise1 < 100% nur prüfen
   ODER
   Markise2 < 100% nur prüfen
   ODER
   Markise3 < 100% nur prüfen
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.
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 +++

Xel66
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

Beitrag von Xel66 » 18.08.2021, 09:14

MichaelN hat geschrieben:
18.08.2021, 08:56
Eigentlich sollte nach der üblichen Logik das Programm nur auslösen, wenn auch eine Änderung Eintritt.
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

Antworten

Zurück zu „HomeMatic allgemein“