Hallo Gemeinde,
hab mir auf basis des exestierenden Plugins "
RolladenLueftungsPos.pl"
was zusammen kopiert und angepasst.
Das Resultat möchte ich hier gerne vorstellen und anderen blutigen Anfängern wie mich zur Verfügung stellen. Ich habe mein Verständnis zur Funktion aller Zeilen so gut es mir möglich war dokumentiert. Das soll helfen, die Programmiersprache und KNX-spezifischen Zeilen besser zu verstehen.
Verbesserungspunkte, Korrekturvorschläge gerne hier posten, damit das weiter verbessert werden kann.
Ich schreibe paarallel alle möglichen Code - Erklärungen zusammen und würde das gerne der breiten Masse im Sinne einer " wie bau ich mir ein eigenes Plugin" zur Verfügung stellen. Ich halte ein upload dieses Sammelsurums im Bereich hier für sinnvoll:
OpenAutomation
hab mir auf basis des exestierenden Plugins "
RolladenLueftungsPos.pl"
was zusammen kopiert und angepasst.
Das Resultat möchte ich hier gerne vorstellen und anderen blutigen Anfängern wie mich zur Verfügung stellen. Ich habe mein Verständnis zur Funktion aller Zeilen so gut es mir möglich war dokumentiert. Das soll helfen, die Programmiersprache und KNX-spezifischen Zeilen besser zu verstehen.
Verbesserungspunkte, Korrekturvorschläge gerne hier posten, damit das weiter verbessert werden kann.
Ich schreibe paarallel alle möglichen Code - Erklärungen zusammen und würde das gerne der breiten Masse im Sinne einer " wie bau ich mir ein eigenes Plugin" zur Verfügung stellen. Ich halte ein upload dieses Sammelsurums im Bereich hier für sinnvoll:
OpenAutomation
PHP-Code:
## Dieses Plugin steuert die Rolläden unter Berücksichtigung des Fensteröffnungsstatuses und der Außenhelligkeit.
# https://knx-user-forum.de/editpost.php?do=updatepost&postid=372788
# Wenn Rollo unter + Fenster geschwenkt-->Rollo kmpl. hoch;
# wenn Rollo unter + Fenster geschwenkt -->Rollo in Lueftungspos.,
# Wenn Fenster zu und Rollo oben und Helligkeitsschwelle erreicht--> Rollo kmpl. runter
##
## Globale Definitionen ##
my $GA_Gesamt_SperreAuto = '3/0/4'; # Gruppenadresse, die die Lüftungsautomatik sperrt
my $Fenster_zu = 00; # Wert Fensterstatus geschlossen
my $Fenster_gekippt = 02; # Wert Fensterstatus gekippt
my $Fenster_geschwenkt = 01; # Wert Fenstergeschwenkt, also offen
my $Helligkeitwert_Schaltschwelle = 50; # Helligkeitswert unter der das Rollo runter gefahren werden soll, wenn Fenster=zu
#Definition aller Rolläden über ein Array von Hashes, wobei jeder Hash ein Rollladen/Fenster ist.
my @AlleRolllaeden;
# Name = Name des Rolladen
# GA_Fensterstatus = Gruppenadresse für Überwachung Art der Fensteröffnung ( verschlossen, gekippt, geschwenkt )
# GA_Rollo_auf_Wert = Gruppenadresse zum Anfahren einer definierten Position
# GA_RolloAufAb = Gruppenadresse zu Auf/Abfahren des Rollos
# GA_Rollo_Status = Gruppenadresse auf der die Rückmeldung der Position erfolgt
# PosRollo_Lueftung = Position des Rolladen im % für Lüftungsposition
# PosRollo_geschlossen = Position des Rolladen im % für Lüftungsposition
push @AlleRolllaeden, { Name => "Wohnen_RH",
GA_Fensterstatus => "6/1/3",
GA_Rollo_auf_Wert => "2/1/17",
GA_RolloAufAb => "2/1/15",
GA_Rollo_Status => "2/3/4",
PosRollo_Lueftung => 80,
PosRollo_geschlossen => 100 ,
GA_Helligkeitswert => "5/4/0"}
# { Name => "XXX",
# GA_Fensterstatus => "X/X/X",
# GA_Rollo_auf_Wert => "X/X/X",
# GA_RolloAufAb => "X/X/X",
# GA_Rollo_Status => "X/X/X",
# PosRollo_Lueftung => XX,
# PosRollo_geschlossen => XXX ,
# GA_Helligkeitswert => "X/X/X"}
;
## Plugin nur bei Telegramm aufrufen
$plugin_info{$plugname.'_cycle'} = 0; # Plugin nur bei Telegramm aufrufen, daher =0
## Rolladensperre beachten
$plugin_subscribe{$GA_Gesamt_SperreAuto}{$plugname} = 1; #Anmeldung an Gruppenadresse für Rolladensperre
#Sperrkennzeichen setzen, wenn Telegramm eintrifft
if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $GA_Gesamt_SperreAuto)
{$plugin_info{$plugname.'_sperre'} = knx_read($GA_Gesamt_SperreAuto,0,1);}
#Wenn Sperrkennzeichen gesetzt ist, dann soll der Code beendet werden
if ($plugin_info{$plugname.'_sperre'} == 1)
{return "Sperre";}
##Ausführen des Codes je definiereten Rolladen
foreach my $element (@AlleRolllaeden)
{
$plugin_subscribe{$element->{GA_Fensterstatus}}{$plugname} = 1; #Anmeldung an Gruppenadresse für Fensterstatus
#Wenn Telegramm für Fensterstatus eintrifft, sollen weitere Prüfungen durchgeführt werden
if ($msg{'apci'} eq "A_GroupValue_Write" and ($msg{'dst'} eq $element->{GA_Fensterstatus})) #wenn ein Befehl und dieser, was auf die GA_Fensterstatus schreibt, dann..
{
my $Fensterstatus = knx_read($element->{GA_Fensterstatus}, 300, 1); #Zuweisung des Wertes der "GA_Fensterstatus" der Hilfs-Variablen "$Fensterstatus$
my $Rollo_Status = knx_read($element->{GA_Rollo_Status}, 300, 5.001); #Zuweisung des Wertes der "GA_Fensterstatus" der Hilfs-Variablen "$Rollo_Status"
my $Helligkeitswert = knx_read($element->{GA_Helligkeitswert}, 300, 9.004); #Zuweisung des Wertes der "GA_Helligkeitswert" der Hilfs-Variablen "$Helligkeitswert"
#Wenn Fenster=zu und das Rollo in der Position für Rollo_geschlossen und der Helligkeitswert außen <= des Helligkeitswert_Schaltschwelle, dann Rollo runter fahren
if (($Fensterstatus==$Fenster_zu ) && ($Rollo_Status <= $element->{PosRollo_geschlossen}) && ($Helligkeitswert <= $Helligkeitwert_Schaltschwelle ))
{knx_write($element->{GA_Rollo_auf_Wert} , $element->{PosRollo_geschlossen}, 5.001); #Schreibbefehlt auf die "GA_Rollo_auf_Wert mit dem Wert aus dem Element des oberen Arrays mit Namen "PosRollo_geschlossen"
return "PosRollo geschlossen weil dunkel"; #nach Abarbeitung der Bedingung ausgabe in der PluginLogdatei "PosRollo geschlossen weil dunkel"
}
#Wenn Fenster=geschwenkt und Rolladen in Position größer gleich 10% --> Schreibbefehl für Rollo hoch
if (($Fensterstatus==$Fenster_geschwenkt) && ($Rollo_Status >= 10 ))
{knx_write($element->{GA_RolloAufAb}, 0, 1); #Schreibbefehl auf die dem Element mit der Bezeichnung "GA_RolloAufAb" zugewiesenen GA. Es wird ein 0 für Rollo ab gesendet.
return "Rollo hoch weil Fenster geschwenkt"; #nach Abarbeitung der Bedingung ausgabe in der PluginLogdatei "Rollo hoch weil Fenster geschwenkt"
}
#Wenn Fenster=gekippt und Rolladen in Position größer gleich PosRollo_Lueftung--> Schreibbefehl für Rollo auf PosRollo_Lueftung
if (($Fensterstatus==$Fenster_gekippt) && ($Rollo_Status >= $element->{PosRollo_Lueftung}))
{knx_write($element->{GA_Rollo_auf_Wert}, $element->{PosRollo_Lueftung}, 5.001); #Schreibbefehl auf die dem Element mit der Bezeichnung "GA_Rollo_auf_Wert" zugewiesenen GA. Es wird der, dem Element mit der Bezeichnung "PosRollo_Lueftung" zugewiesenen Wert geschrieben
}
}
}
return "Warte"; #Rückgabewert falls noch kein Telegramm eingetroffen ist
Kommentar