NEWS
Zwangsladung mit Sungrow SH10RT
-
Hallo zusammen,
ich möchte euch gerne meine Scripte zeigen und mir natürlich Tips abholen, was man verbessern kann. und in einem Script steckt noch ein kleienr Fehler, wobi ich noch Hilfe brauche.
Grundsätzlich sind es drei Scripte die zusammenarbeiten.Beschreibung:
Ich will keine vollautomatische Lösung. Zumindest noch nicht.
Wenn ich sehe das der Speicher recht leer ist und auf Grund der Witrerung keine speicherladung zu erwarten ist, will ich mit Hilfe von Telegram eine automatische Aufladung vormerken.
iobroker schaut dann, wann der billigste Strompreis ist und startet dann die Zwangsladung.- Script (Strompreise sortieren)
Über den Adapter Awattar kommen um 15 Uhr immer die Strompreise vom nächsten Tag rein.
Das Script schaut sich die Strompreise an und beschreibt anschließend drei Benutzervariablen:
0_userdata.0.Strompreis.billigster_Preis -> hier wird der billigste Preis rein kopiert
0_userdata.0.Strompreis.Zeitpunkt_Strom > hier der Zeitpunkt ab wann der billigste Preis gilt
0_userdata.0.Strompreis.Datum_Strom -> und hier an welchem Datum (zur Sicherheit)
Das Script ist komplett mit KI erstellt worden. Da habe ich keine Aktien drin.
Funktioniert aber:// Array für alle Preisdatenpunkte und Startzeit-Datenpunkte der Stunden 24 bis 47 const preisDatenpunkte = []; const startZeitDatenpunkte = []; const startDatumDatenpunkte = []; for (let i = 24; i < 48; i++) { preisDatenpunkte.push(`awattar.0.prices.${i}.nettoPriceKwh`); startZeitDatenpunkte.push(`awattar.0.prices.${i}.start`); startDatumDatenpunkte.push(`awattar.0.prices.${i}.startDate`); } // Funktion zum Finden des minimalen Preises und zugehöriger Startzeit und Datum function findeKleinstenPreis() { let minPreis = Number.MAX_VALUE; let zeitpunkt = null; let datum = null; preisDatenpunkte.forEach((preisDP, index) => { const preis = getState(preisDP).val; if (preis < minPreis) { minPreis = preis; zeitpunkt = getState(startZeitDatenpunkte[index]).val; datum = getState(startDatumDatenpunkte[index]).val; } }); setState('0_userdata.0.Strompreis.billigster_Preis', minPreis, true); setState('0_userdata.0.Strompreis.Zeitpunkt_Strom', zeitpunkt, true); setState('0_userdata.0.Strompreis.Datum_Strom', datum, true); // NEU: Datum speichern } // Überwache alle Preis-Datenpunkte auf Änderung preisDatenpunkte.forEach(dp => { on({ id: dp, change: 'ne' }, () => { findeKleinstenPreis(); }); }); // Initialer Aufruf beim Start des Skripts findeKleinstenPreis();
- Script (generelle Auslösung der Zwangsladung)
Dieses Script löst eine Zwangsladung aus, wenn die Variable 0_userdata.0.Netzladung.Ausloesebit_Netzladung wahr ist.
(In Telegram kann ich somit die Zwangsladung manuell aktivieren oder deaktivieren)
Wenn das o.g. Bit wahr ist, startet die Zwangsladung sofort.
Bei false stopt die Zwangsladung sofort und alles setzt sich zurück auf Standartbetrieb.
Außerdem wird das Bit zurückgesetzt, nachdem 30 Minuten geladen wurde oder der speicher voll ist (100%)- Script die automatische Aufladung.
Dieses Script ist nur im Grundgerüst fertig, weil ich es noch am testen bin.
Aktuell sendet es nur Telegramnachrichten. Später soll anstatt eine Nachricht abzusenden, einfach nur das Netzladebit, welches im Script 2 den Auslöser definiert, aus wahr stellen.
Über Telegram wird ein Bit auf wahr gesetzt: 0_userdata.0.Netzladung.Ausloesebit_Netzladung_auto
Wenn das Bit wahr ist, wird das Netzldabit aus wahr gesteuert. Und zwar nur dann, wenn das Datum aus 0_userdata.0.Strompreis.Datum_Strom und der Zeitpunkt 0_userdata.0.Strompreis.Zeitpunkt_Strom passt.
Leider bekomme ich das mit dem Zeitpunkt nicht hin. Aktuell soll ja nur eine Nachricht auf Telegram gesendet werden. Das passiert noch nicht.
Aktuell habe ich noch einen Timeout drin. Auch zum testen.
Hier soll später das 0_userdata.0.Netzladung.Ausloesebit_Netzladung_auto Bit wieder zurückgesetzt werden.
Wann oder zu welchen Bedingungen muss ich mir noch überlegen.So, das wars erstmal.
Mich würde jetzt interessieren:
- Wo sind die Fehler, die ich gemacht habe oder was ließe sich verbessern?
- Wie bekomme ich in Script 3 die Auslösung mit dem Zeitpunkt hin?
- ne Idee, wann das Auto Bit sich wieder zurücksetzt? (Beim beenden der Zwangsladung? um Mitternancht?)
Gruß Helix
- Script (Strompreise sortieren)
-
@doppellhelix sagte: Wie bekomme ich in Script 3 die Auslösung mit dem Zeitpunkt hin?