Hallo,
ich hänge aktuell noch an einem Punkt in ASC, wo ich noch eure Hilfe benötige.
Ich ändere die Behanghöhe und die Lamellenposition meiner Raffstore mit einer Perlfunktion unter dem Attribut ASC_Shading_Pos, das funktioniert eigentlich soweit ohne Probleme.
Nun fährt aber mein Raffstore, sporadisch die Lamellen während der Beschattung falsch und ich wollte diese auf den korrekten Wert wieder korrigieren. Meine Korrektur kommt auch im Rollodevice an, aber der Raffstore bewegt sich nicht, ich vermute weil sich der Wert von ASC_Shading_Pos ja durch das korrekte setzen nicht mehr vom letzten Wert ändert.
Kurz noch der Ablauf:
- Durch Änderung des Sonnenstands wird eine neue Behang und Lamellenposition über eine Perfunktion über das Attribut ASC_Shading_Pos vorgegeben.
- Der Raffstor fährt auch, doch sporadisch passt die Lamellenposition nicht, der Wert vom Reading "pctSlats" ist anders als im Rollodevice unter "ascAPIget("ShadingPositionAssignment","Rollodevice")".
- Nun kann ich diese fehlerhafte Lamellenposition auch gut erkennen und korrigieren, die Korrektur kommt auch im Rollodevice an, jedoch wird anscheinend kein neuer Fahrbefehl mehr gesendet, da sich der vorhergehende nicht vom aktuellen unterscheidet.
- Nur neue Fahrbefehle, welche sich vom vorhergehenden Befehl unterscheiden werden auch korrekt befolgt und ausgeführt.
Kann ich da im Rollodevice irgendetwas anstoßen, damit der letzte Fahrbefehl nochmals gesendet wird?
Ein Fahrbefehl von außerhalb wird sofort als manuelle Fahrt erkannt und die Beschattungsautomatik wird von ASC sofort beendet.
Aktuell gebe ich im Rollodevice über das Attribut "
ASC_Shading_Pos" die Werte für Behang und Lamellenposition für die Beschattung wie folgt über Perl vor:
{
my $Log = AttrNum("OG_RA01_BueroReinhard_3","Logausgabe",5);
my $pctPos = 100;
my $pctSlatPos = 100;
my $SunAltitude = ReadingsNum("Astro","SunAlt",0);
my $Behang_ist = ReadingsNum("OG_RA01_BueroReinhard_3","pct",0);
my $Behang_soll = ascAPIget("ShadingPos","OG_RA01_BueroReinhard_3");
my $Lamellen_ist = ReadingsNum("OG_RA01_BueroReinhard_3","pctSlats",0);
my $Lamellen_soll = ascAPIget("ShadingPositionAssignment","OG_RA01_BueroReinhard_3");
my $Beschattung = ReadingsVal("OG_RA01_BueroReinhard_3","ASC_ShuttersLastDrive","???");
if (ReadingsNum("OG_VG_Sportzimmer","measured-temp",21) <= AttrNum("OG_RA01_BueroReinhard_3","ASC_Shading_start_IndoorTemperature",21)) {
$pctPos = 100; ## 100
$pctSlatPos = 100; ## 100
if ($Log >= 5) {
Log 1, "Device OG_RA01_BueroReinhard_3 - Innentemperatur zu kalt für Beschattung"
}
} else {
if ($SunAltitude > 0 and $SunAltitude < 20) {
$pctPos = 2; ## 2
$pctSlatPos = 25 ## 25
}
if ($SunAltitude >= 25 and $SunAltitude < 30) {
$pctPos = 23; ## 23
$pctSlatPos = 23 ## 23
}
if ($SunAltitude >= 30 and $SunAltitude < 40) {
$pctPos = 30; ## 30
$pctSlatPos = 29 ## 29
}
if ($SunAltitude >= 40 and $SunAltitude < 50) {
$pctPos = 35; ## 35
$pctSlatPos = 32 ## 32
}
if ($SunAltitude >= 50 and $SunAltitude < 60) {
$pctPos = 40; ## 40
$pctSlatPos = 35 ## 35
}
if ($SunAltitude >= 60 and $SunAltitude < 65) {
$pctPos = 45; ## 45
$pctSlatPos = 37 ## 37
}
if ($SunAltitude >= 65) {
$pctPos = 50; ## 50
$pctSlatPos = 40 ## 40
}
if ($Log >= 5) {
Log 2, "Device OG_RA01_BueroReinhard_3 - Altitude = $SunAltitude °, Behang = $pctPos %, Lamellen = $pctSlatPos % nachgeführt"
}
}
if ($Beschattung eq "shading in") {
if ($Behang_ist != $Behang_soll) {
$pctPos = $Behang_soll;
if ($Log >= 3) {
Log 1, "Behang-Istwert für Beschattung nachjustiert von $Behang_ist % auf $Behang_soll %"
}
}
if($Lamellen_ist != $Lamellen_soll) {
$pctSlatPos = $Lamellen_soll;
if ($Log >= 3) {
Log 1, "Lamellen-Istwert für Beschattung nachjustiert von $Lamellen_ist % auf $Lamellen_soll %"
}
}
}
if ($Log >= 5) {
Log 1, "Duchlauf Device OG_RA01_BueroReinhard_3 Attribut ASC_Shading_Pos erfolgt"
}
$pctPos.":".$pctSlatPos
}
Das Problem könnte auch noch mit dem Attribut "
event-on-change-reading" zusammenhängen, diese ist bei mir aktuell auf "
.*" gesezt, dieses benötige ich aber zwingend, zu Unterscheidung der manuellen Fahrten.
Solltet ihr mehr Infos oder noch nähere Erklärungen benötigen, so liefere ich diese gerne nach.
Habt ihr da einen Tipp für mich, wie ich mein Problem lösen kann?
Gruß Reinhard