Photovoltaik Erzeugungs-Anzeige mit digitalem LED Strip (Brainstorming)

Hallo,

ich brauche mal die geballte Community-Power zum Brainstorming :wink:

Wir bekommen nächste Woche unsere PV Anlage installiert. Jetzt bin ich auf der Suche nach einer Idee um den restlichen Familienmitgliedern möglichst einfach und idiotensicher mitzuteilen wann und wieviel PV-Überschuss vorhanden ist und z.B. die Waschmaschine angeschmissen werden kann.

Meine erste Idee war es eine Anzeige mit einem LED-Strip (ws2812b oder ähnliches) zu bauen.

Frei nach dem Motto:
Das Teil ist 1 Meter lang mit 60 LEDs.
Alle LEDs an (z.B. in Grün) = Maximale PV-Produktion, und dann natürlich abgestuft je nach Erzeugungsmenge weniger LEDs…
Dieser Bereich wird dann Farblich unterteilt in Eigenverbrauch (z.B. Orange) und halt Grün für Überschuss bzw. Einspeisung.

Soweit die Idee…
Gibts so etwas vielleicht schon irgendwo ansatzweise als Projekt? Wie würdet ihr das am besten umsetzen inkl. IPS Integration.

Ich hätte noch einen ESP (Wemos D1 Mini) rumliegen. Allerdings bin ich jetzt nicht der Arduino Profi. Am liebsten wäre mir eine Lösung wo man aus IPS raus einfach die einzelnen LEDs auf dem Strip ansteuern könnte.

Viele Grüße
Stephan

Du könntest die Tasmota Firmware auf den Wemos D1 bringen, die kann auch WS-2812 ansteuern. Falls das in Kay’s Modul enthalten ist, dann vermutlich auch „ganz einfach“ über Symcon ansteuerbar.

Mega! auf die Idee bin ich überhaupt nicht gekommen. Ich hatte überhaupt nicht auf dem Schirm das Tasmota die WS2812 unterstützt. Wenn ich die Doku vom Modul korrekt verstanden habe müsste das tatsächlich funktionieren :slight_smile:

Viele Grüße
Stephan

Das wird mit Tasmota und Kai‘s Modul gehen. Dort kannst du jeden Pixel einzeln steuern.

Gesendet von iPhone mit Tapatalk

Ja, du kannst einzelne Pixel ansteuern, bei Fragen melde dich einfach!

Grüße,
Kai

Hallo Kai,

sehe ich es richtig das ich bei 144 LEDs 144 Befehle schicken muss? Oder lässt sich das irgendwie in Gruppen zusammenfassen. Also z. B. LED 1-33 = Rot, 34-144 Grün etc. etc.
In der Doku von deinem Modul und von Tasmota hab ich nur Commands gefunden für einzelne Pixel…

Viele Grüße
Stephan

Ja, siehst du richtig.
Mir ist im Moment, nichts anderes bekannt.

Hallo Stephan,

ich habe vor auch sowas genau sowas in die Richtung umzusetzen.
Hast du dies von dir beschriebene umgesetzt, läuft es so wie du dir dies vorgestellt hast?

Gruß
Bikasso

aus Zeitmangel leider noch nichts finales vorzeigbar. :frowning:

Momentan sieht es so aus:

In der Kategorie Pixel habe ich für jede LED eine Integer Variable angelegt. Wichtig von 1-144 Durchnummeriert. Dann ein Variablenprofil erstellt mit 0=PV, 1=Verbrauch, 2=Überschneidung, 3=Aus.

  • Ein Integer Variable PV: Hier musst du irgendwie deine PV Leistung auf eine Skala von 0-144 umrechnen (144 weil ich 144 LEDs habe). 144 wäre dann die Maximalleistung deiner Anlage.

  • Eine Integer Variable Verbrauch: Ebenfalls auf die 144er Skala umrechnen. Wobei es Sinn macht eine gleiche Skala zu verwenden damit Verbrauch und PV Leistung optisch vergleichbar sind. Also je nach Anlagengröße entspricht dann z.B. eine LED 70 Watt.

Dann hab ich mir folgendes Skript zusammengeschustert:


<?

// PV-Erzeugung abfragen
$pv = GetValueInteger(10968);

//PV-Erzeugung alten Wert abfragen
$pvold = $_IPS['OLDVALUE'];

//Aktuellen Verbrauch abfragen
$verbrauch = GetValueInteger(44513);

//PARENT Kategorie der Pixel
$parentID = 34408; 

//PixelIDs und Namen abfragen und in Array schreiben
foreach(IPS_GetChildrenIDs($parentID) as $objectID) 
{ 
    $object = IPS_GetObject($objectID); 
    $objectList[$object["ObjectName"]] = $object["ObjectID"]; 

}    

//Array Sortieren
if ($pv <= $pvold)
{     
krsort($objectList); //Wenn alter Wert PV kleiner war dann von groß nach klein sortieren
}
else
{     
ksort($objectList); //Wenn alter Wert PV größer war dann von klein nach groß sortieren 
}

//print_r($objectList);  

foreach ($objectList as $pixel)
{
//Infos vom Pixel abrufen (Name etc.)
$objekt2 = IPS_GetObject($pixel);
//Aktuellen Integerwert abrufen
$pixelwert = GetValueInteger($pixel);

	if ($objekt2['ObjectName'] <= $pv and $pixelwert != 0 and $objekt2['ObjectName'] > $verbrauch)
	{
    //PV Überschuss
    SetValueInteger($pixel, 0);
    //TasmotaLED_setLED(51701, $objekt2['ObjectName'], "#00ff00");

    sleep(1);
    }
    
    elseif ($objekt2['ObjectName'] > $pv and $objekt2['ObjectName'] <= $verbrauch and $pixelwert != 1)
	{
    //Netzbezug größer als PV-Leistung
    SetValueInteger($pixel, 1);
    //TasmotaLED_setLED(51701, $objekt2['ObjectName'], "#ff0000");
    sleep(1);
    }

    elseif ($objekt2['ObjectName'] <= $pv and $objekt2['ObjectName'] <= $verbrauch and $pixelwert != 2)
	{
    //Überschneidung
    SetValueInteger($pixel, 2);
    //TasmotaLED_setLED(51701, $objekt2['ObjectName'], "#ff9900");
    sleep(1);
    }
    elseif ($objekt2['ObjectName'] > $pv and $objekt2['ObjectName'] > $verbrauch and $pixelwert != 3)
	{
    //Aus
    SetValueInteger($pixel, 3);
    //TasmotaLED_setLED(51701, $objekt2['ObjectName'], "#000000");
    sleep(1);
    }
     else
	{
   
    }

}
 ?>


Mit dem Sleep nach jedem Schaltbefehl ist natürlich totaler Murks. So erhöht sich die Scriptlaufzeit im schlechtesten Fall 144 Sekunden und das Script bricht irgendwann ab.

Wie gesagt, ist alles erst mal nur hingerotzt und hat keinen Anspruch auf Richtigkeit etc.

Viele Grüße
Stephan

Hallo, danke für deine Antwort.
Ich wollte mir passendes Material bestellen um dies ebenfalls aufzubauen. Leider bin ich etwas unschlüssig welchen LED Controller ich hier am besten kaufen soll.
Welchen hast du eingesetzt?

Ledcontroller ?
Da brauch es nur einen PortPin von einer NodeMCU, Wemos usw. um WS2812 anzusteuern.

Muss mal wieder die Doku von Tasmota lesen, ob es da auch neue Dinge gibt.:eek:

Ich hab nen wemos d1 Mini mit Tasmota Verwendet.