Sonnenstand zur Steuerung einbinden

PDF Dokumente für Informationen im Detail, sowie Bauanleitungen.

Moderatoren: Ulrich, TeamO

Bogeyof
Beiträge: 677
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 8 Mal
Danksagung erhalten: 65 Mal

Sonnenstand zur Steuerung einbinden

Beitrag von Bogeyof »

Durch die Daten des Sunandmoon Plugins in Grafana bin ich auf die Idee gekommen, abhängig vom Sonnenstand (Azimuth und Altitude) das Schattenmanagement zu aktivieren und zu deaktivieren. Dieses ist hauptsächlich in der Früh bis ca. 8° Höhe und Abends wieder ab ca. 6° nötig. Dazu noch Vormittag und Nachmittag jeweils eine kurze Zeit der Schlagschatten des Kamins.
Um dies nicht ständig in der Crontab wegen den Jahreszeiten anzupassen, kam mir die Idee das über den Sonnenstand zu steuern. Dazu habe ich mir ein kleines Python-Skript "Sundata.py" erstellt, welches nur die beiden aktuellen Werte zu Azimuth und Altitude ausgibt. Dazu müssen nur in Zeile 9 die eigenen Standortdaten eingetragen werden.

Um es in Solaranzeige einzubauen habe ich hier schon öfter das Konzept eigene_werte.php vorgestellt. Um es hier zu integrieren kann man es so einbinden:

Code: Alles auswählen

  $shell_befehl = "python3 /solaranzeige/Sundata.py";
  $temp = shell_exec($shell_befehl);
  $Einzelwerte = preg_split("/[\s,\n :}{''\]]+/", $temp);
  $aktuelleDaten["SunAz"] = floatval($Einzelwerte[0]) - 180;
  $aktuelleDaten["SunAlt"] = $Einzelwerte[1];
Die neuen Variablen müssen dann noch in die Query zum Schreiben aufgenommen werden und danach stehen sie in der Datenbank zur Verfügung. Damit kann man dann auch das Sunandmoon-Plugin ersetzen mit den eigenen Daten.

Vielleicht hilft´s und Ihr habt noch weitere Ideen, was man Sonnenstandsabhängig machen könnte. Die verwendete Astral-Bibliothek hätte noch viele weitere Werte wie Sonnenaufgang / Untergang, Schattenwurf und vieles mehr, evtl. kann man das Python-Skript noch um einige Werte erweitern.
Dateianhänge
Sundata.py.txt
(670 Bytes) 77-mal heruntergeladen

Tipe1965
Beiträge: 134
Registriert: Do 24. Sep 2020, 12:13
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Sonnenstand zur Steuerung einbinden

Beitrag von Tipe1965 »

Hey Bogeyof,
ich schon wieder. Ich würde natürlich auch gerne dieses Skript mit einbauen. Ich hab zwar deine Kostal eigene Werte.php aber die PVGIS daten und so nutze ich garnicht weil ich da noch keine vernünftigen Daten gefunden hab.

Kann ich das alles raus löschen oder wie mache ich das am sinnvollsten?

Oder lass ich das so wie es ist einfach mit auswerten und pack den Code für SunanMoon einfach unter Bateriestatus und gut ist?

Bogeyof
Beiträge: 677
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 8 Mal
Danksagung erhalten: 65 Mal

Re: Sonnenstand zur Steuerung einbinden

Beitrag von Bogeyof »

Das kann in die Byd-Steuerung mit rein (diese ist im Prinzip das gleiche wie eigene_werte.php).
Zuerst Testen ob das Skript läuft (benötigt die astral.lib, diese kommt mit der solcast oder pvlib-prognose mit rein, ansonsten muss diese manuell installiert werden: "pip3 install astral"). Wenn es funktioniert, dann gibt es nur ein paar Zahlen aus (auch z.B. Sonnenaufgang und Sonnenuntergang)

Wenn es läuft, dann könnte das z.B. so aussehen (nach dem schon vorhandenen Auslesen des Schattenmanagement einhängen):

Code: Alles auswählen

/****************************************************************************
//  Einfache Steuerungen Schattenmanagement anhand des ausgelesenen Sonnenstandes
 ****************************************************************************/
$shell_befehl = "python3 /solaranzeige/Sundata.py";
$temp = shell_exec($shell_befehl);
$Einzelwerte = preg_split("/\n/", $temp);
$aktuelleDaten["SunAz"] = floatval($Einzelwerte[0]) - 180;
$aktuelleDaten["SunAlt"] = $Einzelwerte[1];
//$aktuelleDaten["Daemmerung"] = strtotime($Einzelwerte[3]);
//$aktuelleDaten["Sonnenaufgang"] = strtotime($Einzelwerte[4]);
//$aktuelleDaten["Sonnenuntergang"] = strtotime($Einzelwerte[5]);
//$aktuelleDaten["Zwielicht"] = strtotime($Einzelwerte[6]);

if ($aktuelleDaten["SunAz"] < 0 and $aktuelleDaten["SunAlt"] < 8) {
    // Sonne steht im Osten und unter 8 Grad, SM Ost an"
    if ($SMTest != 2) {
        $shell_befehl = "python3 /solaranzeige/Kostal_SM2.py";
        $temp = shell_exec($shell_befehl);
        $aktuelleDaten["Schattenmanagement"] = "SM Ost";
        $funktionen->log_schreiben("Schattenmanagement Ost an (1): " . $SMTest, "   ", 8);
    }
}
if ($aktuelleDaten["SunAz"] < 0 and $aktuelleDaten["SunAlt"] > 8) {
    // Sonne steht im Osten und ueber 8 Grad, SM Ost aus"
    if ($SMTest == 2) {
        $shell_befehl = "python3 /solaranzeige/Kostal_SM0.py";
        $temp = shell_exec($shell_befehl);
        $aktuelleDaten["Schattenmanagement"] = "SM aus";
        $funktionen->log_schreiben("Schattenmanagement Ost aus (2): " . $SMTest, "   ", 8);
    }
}

if ($aktuelleDaten["SunAz"] > 1 and $aktuelleDaten["SunAlt"] > 33 and $aktuelleDaten["SunAlt"] < 53) {
    // Sonne steht im Westen und ueber 33 Grad, SM Ost an"
    if ($SMTest != 2) {
        $shell_befehl = "python3 /solaranzeige/Kostal_SM2.py";
        $temp = shell_exec($shell_befehl);
        $aktuelleDaten["Schattenmanagement"] = "SM Ost";
        $funktionen->log_schreiben("Schattenmanagement Ost an (3): " . $SMTest, "   ", 8);
    }
}

if ($aktuelleDaten["SunAz"] > 1 and ($aktuelleDaten["SunAlt"] < 33 or $aktuelleDaten["SunAlt"] > 53)) {
    // Sonne steht im Westen und unter 33 Grad, SM Ost aus"
    if ($SMTest == 2) {
        $shell_befehl = "python3 /solaranzeige/Kostal_SM0.py";
        $temp = shell_exec($shell_befehl);
        $aktuelleDaten["Schattenmanagement"] = "SM aus";
        $funktionen->log_schreiben("Schattenmanagement Ost aus (4): " . $SMTest, "   ", 8);
    }
}

if ($aktuelleDaten["SunAz"] < -30 and $aktuelleDaten["SunAlt"] > 32 and $aktuelleDaten["SunAlt"] < 45) {
    // Sonne steht im Osten und ueber 32 Grad, SM West an"
    if ($SMTest != 1) {
        $shell_befehl = "python3 /solaranzeige/Kostal_SM1.py";
        $temp = shell_exec($shell_befehl);
        $aktuelleDaten["Schattenmanagement"] = "SM West";
        $funktionen->log_schreiben("Schattenmanagement West an (5): " . $SMTest, "   ", 8);
    }
}

if (($aktuelleDaten["SunAz"] > -30 and $aktuelleDaten["SunAlt"] > 6) or ($aktuelleDaten["SunAz"] < -30 and $aktuelleDaten["SunAlt"] > 45)) {
    // Sonne steht im Osten aber ausreichend Richtung Sueden, SM West aus"
    if ($SMTest == 1) {
        $shell_befehl = "python3 /solaranzeige/Kostal_SM0.py";
        $temp = shell_exec($shell_befehl);
        $aktuelleDaten["Schattenmanagement"] = "SM aus";
        $funktionen->log_schreiben("Schattenmanagement West aus (6): " . $SMTest, "   ", 8);
    }
}

if ($aktuelleDaten["SunAz"] > 0 and $aktuelleDaten["SunAlt"] < 6) {
    // Sonne steht im Westen und unter 6 Grad, SM West an"
    if ($SMTest != 1) {
        $shell_befehl = "python3 /solaranzeige/Kostal_SM1.py";
        $temp = shell_exec($shell_befehl);
        $aktuelleDaten["Schattenmanagement"] = "SM West";
        $funktionen->log_schreiben("Schattenmanagement West an (7): " . $SMTest, "   ", 8);
    }
}
und am Ende die Query erweitern, damit die zusätzlichen Werte geschrieben werden (Schattenmanagement ist schon vorhanden, darunter einhängen:

Code: Alles auswählen

$query .= ",Schattenmanagement=\"" . $aktuelleDaten["Schattenmanagement"] . "\"";
$query .= ",SunAz=" . $aktuelleDaten["SunAz"];
$query .= ",SunAlt=" . $aktuelleDaten["SunAlt"];
Danach entsprechend Deiner Verschattung die Winkel und Sonnenstände (Höhe) anpassen, wann Du welches Management benötigst. Das sollte es gewesen sein...

Tipe1965
Beiträge: 134
Registriert: Do 24. Sep 2020, 12:13
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Sonnenstand zur Steuerung einbinden

Beitrag von Tipe1965 »

Ich hab den Code jetzt im Skript ab Zeile 402 hinzugefügt und die Query hinter Timestamp bei Zeile 487.

Jetzt müssten die Werte ja gleich mit in die Datenbank in die Tabelle Batterie geschrieben werden richtig?

Dann muss ich die Tage nur mal beobachten von wann bis wann auf den jeweiligen seiten Schatten ist um die Werte anzupassen.

Bogeyof
Beiträge: 677
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 8 Mal
Danksagung erhalten: 65 Mal

Re: Sonnenstand zur Steuerung einbinden

Beitrag von Bogeyof »

Nicht ganz, der Teil ab 402 sollte passen, aber die Zeilen für die Query sollten vor dem Timestamp direkt nach Schattenmanagement rein. Die Daten liegen dann unter Service (haben ja auch mit Batterie nichts zu tun)...
Hast Du das Skript auch vorher getestet, läuft es mit "python3 /solaranzeige/Sundata.py" und liefert ein paar Zahlen?

Tipe1965
Beiträge: 134
Registriert: Do 24. Sep 2020, 12:13
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Sonnenstand zur Steuerung einbinden

Beitrag von Tipe1965 »

Hab ich nochmal korrigiert.

Ja getestet hab ich es da kommen die Werte bei raus.
root@solaranzeige:/solaranzeige# python3 Sundata.py
232.70364653903675
45.57514288759183

Das Feld Schattenmanagment ist jetzt auch dazu gekommen aber SunAz und SunAlt nicht.

Bogeyof
Beiträge: 677
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 8 Mal
Danksagung erhalten: 65 Mal

Re: Sonnenstand zur Steuerung einbinden

Beitrag von Bogeyof »

Kannst Du mir die Zeilen für die Query hier anhängen? Ich habe bei Schattenmanagement ein Komma vorne dran, das gehört da nicht hin (bei mir schon weil ich davor noch mehr Werte habe), vielleicht hast Du das mitkopiert. Evtl. auch in die Logs schauen, was bei php.log und solaranzeige.log steht. Ich nehme an, dass die Query nicht richtig ausgeführt wird...

Tipe1965
Beiträge: 134
Registriert: Do 24. Sep 2020, 12:13
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Sonnenstand zur Steuerung einbinden

Beitrag von Tipe1965 »

Code: Alles auswählen

$query = "";
  $query .= "Service ";
  $query .= "Schattenmanagement=\"" . $daten["Schattenmanagement"] . "\"";
  $query .= "Schattenmanagement=\"" . $aktuelleDaten["Schattenmanagement"] . "\"";
  $query .= "SunAz=" . $aktuelleDaten["SunAz"];
  $query .= "SunAlt=" . $aktuelleDaten["SunAlt"];
  $query .= " ".$daten["Timestamp"];
  $query .= "\n";	
sah vorher so aus

Code: Alles auswählen

$query = "";
  $query .= "Service ";
  $query .= "Schattenmanagement=\"" . $daten["Schattenmanagement"] . "\"";
  $query .= ",Schattenmanagement=\"" . $aktuelleDaten["Schattenmanagement"] . "\"";
  $query .= ",SunAz=" . $aktuelleDaten["SunAz"];
  $query .= ",SunAlt=" . $aktuelleDaten["SunAlt"];
  $query .= " ".$daten["Timestamp"];
  $query .= "\n";	
Hab ich schonmal abgeändert.
Die php.log schreibt garnichts und in der Solaranzeige.log sieht so aus

Code: Alles auswählen

18.05. 15:57:57    -Schleife 1 Ausgang...
18.05. 15:57:57    -OK. Datenübertragung erfolgreich.
18.05. 15:57:57 |----------------   Stop   kostal_plenticore.php    --------------- 
18.05. 15:58:01 |----------------   Start  kostal_plenticore.php    --------------- 
18.05. 15:58:01 *  -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet. 
18.05. 15:58:57    -Schleife 1 Ausgang...
18.05. 15:58:57    -OK. Datenübertragung erfolgreich.
18.05. 15:58:57 |----------------   Stop   kostal_plenticore.php    --------------- 
18.05. 15:59:01 |----------------   Start  kostal_plenticore.php    --------------- 
18.05. 15:59:02 *  -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet. 
18.05. 15:59:57    -Schleife 1 Ausgang...
18.05. 15:59:57    -OK. Datenübertragung erfolgreich.
18.05. 15:59:57 |----------------   Stop   kostal_plenticore.php    --------------- 
18.05. 16:00:01 |----------------   Start  eigene Prognose.php    --------------- 
18.05. 16:00:01 |----------------   Start  kostal_plenticore.php    --------------- 
18.05. 16:00:02    -Alle 10 Minuten werden die Statistikdaten übertragen.
18.05. 16:00:02 *  -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet. 
18.05. 16:00:41 |----------------   Stop  eigene Prognose.php    --------------- 

Bogeyof
Beiträge: 677
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 8 Mal
Danksagung erhalten: 65 Mal

Re: Sonnenstand zur Steuerung einbinden

Beitrag von Bogeyof »

Muss so aussehen:

Code: Alles auswählen

$query = "";
  $query .= "Service ";
  $query .= "Schattenmanagement=\"" . $daten["Schattenmanagement"] . "\"";
  $query .= ",SunAz=" . $daten["SunAz"];
  $query .= ",SunAlt=" . $daten["SunAlt"];
  $query .= " ".$daten["Timestamp"];
  $query .= "\n";	
Hatte es bei mir rauskopiert, benutze aber schon wieder eine andere Technik (kostal_plenticore_math.php). Daher waren die query-Angaben falsch, sorry...

Tipe1965
Beiträge: 134
Registriert: Do 24. Sep 2020, 12:13
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Sonnenstand zur Steuerung einbinden

Beitrag von Tipe1965 »

Hab es angepasst aber leider sieht die Tabelle noch immer nicht anders aus. Hier mal ein Bild
Unbenannt.JPG
Mein Batterie Tabelle ist auch noch sehr nackt.
Unbenannt1.JPG
Unbenannt2.JPG

Antworten