Rolladenaktor mit Script ansteuern

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

heidepower
Beiträge: 66
Registriert: 26.12.2018, 20:32

Re: Rolladenaktor mit Script ansteuern

Beitrag von heidepower » 11.04.2023, 20:30

@Baaxy

Ja ist das ganze Script.

Ja dachte ich mir, dass ich mir das sparen kann:D.

Die Variabel SonnenWinkel habe ich unter Systemvariablen händisch anglegt. wie kann ich diese dann im Script verwerden? Muss ich dan "Var SonnenWinkel = 0;" am anfang von Script deklarieren?

Gibt es einen Unterschied zweischen SystemVar. und ScriprVar.?

So hatte ich das Script am Anfang, lief aber nicht...

Code: Alles auswählen


var SonnenWinkel = 0;

SonnenWinkel = dom.GetObject("Sonne Elevation").Value(); !SystemVariabel "sonnen_elevation" in dei ScriptVariabel SonnenWinkel schreiben

if ( (SonnenWinkel >=2) && (SonnenWinkel <7) )				
{
 dom.GetObject("PV-Anlage Balkon Antrieb:4").DPByHssDP("LEVEL").State(0.00);	
}

...

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Rolladenaktor mit Script ansteuern

Beitrag von Henke » 11.04.2023, 20:33

Teste das Mal.
Bei der SImulation rechnet er einfach alle Winkel von -10 bis 100 durch.
Mit rTeillung gibst du das Raster an.
Die Positionsangabe werden auch entsprechend ausgewertet, da ich nicht davon ausgehe, das der Motor immer auf genau 1% die Position trifft:

Code: Alles auswählen

real rSunAlti = system.SunAltitude();
real rMin = 2.0; ! Stellung 0%
real rMax = 39.0; ! Stellung 100%
real rTeilung = 10.0;

! true bei Simulation, false bei Echtbetrieb
if ( true )
{
rSunAlti = -10.0;
real rMoLevel = 0.0;
while ( rSunAlti < 100.0)
{
	real step = ((rSunAlti - rMin)/(rMax-rMin))*100.0/rTeilung ;
	real rProzent = step.Round(0)*rTeilung/100.0;
	if ( rProzent < 0.0 ) { rProzent = 0.0; }
	if ( rProzent > 1.0 ) { rProzent = 1.0; }
	WriteLine ( rSunAlti # " " # rProzent );

    if ( ((rMoLevel*100.0/rTeilung).Round(0)*rTeilung/100.0) != rProzent )
    {
	    rMoLevel = rProzent;
		WriteLine ( "Neue Position " # rMoLevel # "-" # (rMoLevel*100.0/rTeilung).Round(0)*rTeilung/100.0 );
    }
rSunAlti = rSunAlti+1 ;
}
}
else
{
	real step = ((rSunAlti - rMin)/(rMax-rMin))*100.0/rTeilung ;
	real rProzent = step.Round(0)*rTeilung/100.0;
	if ( rProzent < 0.0 ) { rProzent = 0.0; }
	if ( rProzent > 1.0 ) { rProzent = 1.0; }
!	WriteLine ( rSunAlti # " " # rProzent );

	object oMotorLevel = dom.GetObject("PV-Anlage Balkon Antrieb:4").DPByHssDP("LEVEL");
	if ( ((oMotorLevel.Value()*100.0/rTeilung).Round(0)*rTeilung/100.0) != rProzent )
	{
		oMotorLevel.State(rProzent);
	}
}

MichaelN
Beiträge: 9684
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1627 Mal

Re: Rolladenaktor mit Script ansteuern

Beitrag von MichaelN » 11.04.2023, 20:39

heidepower hat geschrieben:
11.04.2023, 20:30
Ja ist das ganze Script.
Wieso kein WebUI Programm? Das wäre nicht umständlicher.
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 +++

heidepower
Beiträge: 66
Registriert: 26.12.2018, 20:32

Re: Rolladenaktor mit Script ansteuern

Beitrag von heidepower » 11.04.2023, 21:26

@Henke
Was macht das Programm genau? Der Rollladenaktor steuert einen Linearmotor an der PV-Panels der Sonnen Elevation anpasst (Sonnenstandscript). Da das ganze nicht so genau sein muss, fahr ich 10Grad Schritte. Dazu kommt noch das der Verfahrweg, also die Prozent zu dem Winkel nicht linear ist (Konstruktions bedingt).

Deswegen die If Abfragen :mrgreen:

@MichealN
auf die Idee kamm ich garnicht, aber kann sogra leichter sein :) Schau ich mir morgen mal an

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Rolladenaktor mit Script ansteuern

Beitrag von Henke » 11.04.2023, 22:17

Du hast einen minimalen Winkel (2Grad) und einen maximalen Winkel (39Grad) sowie eine Teilung von 10.

Das Programm berechnet/simuliert aus der Sonnenhöhe die Prozent in 0.0 bis 1.0 zur Ansteuerung der Motors und kontrolliert dabei auch, ob ein Steuerbefehl gesendet werden muss.

Bei der Simulation kommt folgendes:

Code: Alles auswählen

-1.000000 0.000000
0.000000 0.000000
1.000000 -0.000000
2.000000 0.000000
3.000000 0.000000
4.000000 0.100000
Neue Position 0.100000-0.100000
5.000000 0.100000
6.000000 0.100000
7.000000 0.100000
8.000000 0.200000
Neue Position 0.200000-0.200000
9.000000 0.200000
10.000000 0.200000
11.000000 0.200000
12.000000 0.300000
Neue Position 0.300000-0.300000
13.000000 0.300000
14.000000 0.300000
15.000000 0.400000
Neue Position 0.400000-0.400000
16.000000 0.400000
17.000000 0.400000
18.000000 0.400000
19.000000 0.500000
Neue Position 0.500000-0.500000
20.000000 0.500000
21.000000 0.500000
22.000000 0.500000
23.000000 0.600000
Neue Position 0.600000-0.600000
24.000000 0.600000
25.000000 0.600000
26.000000 0.600000
27.000000 0.700000
Neue Position 0.700000-0.700000
28.000000 0.700000
29.000000 0.700000
30.000000 0.800000
Neue Position 0.800000-0.800000
31.000000 0.800000
32.000000 0.800000
33.000000 0.800000
34.000000 0.900000
Neue Position 0.900000-0.900000
35.000000 0.900000
36.000000 0.900000
37.000000 0.900000
38.000000 1.000000
Neue Position 1.000000-1.000000
39.000000 1.000000
Daran sieht man auch, wenn man die Kirche mit dem Dorf direkt verknüpft, das es ziemlich egal ist, wenn es nicht linear ist. In der Praxis dürfte eine gröbere Teilung von 5 mehr als ausreichen. Ich würde mir eher Gedanken darüber machen, wie die Ausbeute bei diffusem Licht optimiert werden kann.
Da schlägt dann wieder der Vorteil eines Scriptes zu. Die Teilung ändert man nur im Script und klickt sich nicht die Finger wund in der WebUI.
Evtl. kommst du später ja auch an die aktuelle Leistung der PV Module und optimierst darüber im Script die Stellung.
Einen Lichtsensor für PV zu verwenden finde ich schräg. Schließlich hat man den Quadratmeterweise schon.

heidepower
Beiträge: 66
Registriert: 26.12.2018, 20:32

Re: Rolladenaktor mit Script ansteuern

Beitrag von heidepower » 12.04.2023, 10:55

@Henke

Ok jetzt hab ich es verstanden. Ich habe noch extra ein Script das mir den Sonnenstand berechnet. Du arbeitest mit dem neuen Sonnenstandscript, dass mit RaspberryMatic Firmware 3.45.7.20190504 integriert wurde.

teste dein Script nachher...

heidepower
Beiträge: 66
Registriert: 26.12.2018, 20:32

Re: Rolladenaktor mit Script ansteuern

Beitrag von heidepower » 12.04.2023, 17:26

@Henke

Hab dein Script getestet. funktioniert, aber leider passen die Postionswerte nicht immer gut zu dem Winkel. "Soll" sind meine Werte die ich Je Stellung mit einem digitalen Winkelmesser ermittelt habe. "IST" entsprechen deine Werte aus dem Script. "%" ist die Postion des Aktors

Code: Alles auswählen

  %   Soll      IST
  0%    2°      2°
 10%    7°      4°
 20%   10°      8°
 30%   15°     12°
 40%   18°     15°
 50%   22°     19°
 60%   26°     23°
 70%   29°     27°
 80%   32°     30°
 90%   35°     34°
100%   38°     38°

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Rolladenaktor mit Script ansteuern

Beitrag von Henke » 12.04.2023, 17:54

Da bezweifel ich die Genauigkeit der Messung. :D
Differenz:
5,3,5,3,5,4,4,3...
2,4,4,3,4,4,4

heidepower
Beiträge: 66
Registriert: 26.12.2018, 20:32

Re: Rolladenaktor mit Script ansteuern

Beitrag von heidepower » 12.04.2023, 18:52

gemessen mit:
Bosch GLC50C
Messbereich Neigungsmessung 0 - 360° (4 x 90°)
Messgenauigkeit (typisch)* ± 0,2°* (* zzgl. einsatzabhängiger Abweichung)

Wären bei 38° max +/-7,6°, da aber die die Werte im oberen Bereich genauer sind schließe ich so eine hohe ungenauigkeit aus.

Was soll das für eine Differnez sein?

Diff von SOLL zu IST ist bei mir
0, 3, 2, 3, 3, 3, 2, 2, 1, 0

Wenn Die SOLLwerte 10% nach vorne verschoben würde, würde es im mittleren Bereich nahezu perfekt passen.

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Rolladenaktor mit Script ansteuern

Beitrag von Henke » 12.04.2023, 19:34

Das ist die Differenz der einzelnen Punkte untereinander.
Eine lineare Reihe ist: 1,2,3,4,5 oder 1,3,5,7. Durch Rundung können da schon mal Sprünge drin sein, wie bei 4,4,3,4,4.

Eine Messreihe wie bei dir mit 5,3,5,3,5,4,4,3 ist nicht linear und auch nicht logarithmisch, sonder zeig höhere Ungenauigkeiten, die durch Messung oder den Motorlauf hervorgerufen werden können. Evtl. hat auch die Richtung aus der die Position angefahren wird einen Einfluss.

Um es präziser zu machen, könnte man es trigonometrisch auflösen, doch da steht Aufwand und nutzen in keiner Relation, vor allem nicht wenn versucht wird durch ein Raster die Anzahl der Änderungen/Fahrten zu reduzieren.

Wenn du dir die Tabelle ansiehst, so stellst du fest das für mehrere Eingangswerte eine Position angestrebt wird.
0 bis 3 Grad Position 0 -> 2
4 bis 7 Grad Position 0.1 -> 7
8 bis 11 Grad Position 0.2 -> 10

Somit sind das wohl eher Treffer. :D

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“