Hab da mal was gemacht.
https://forum.iobroker.net/topic/82454/zwangsladung-mit-sungrow-sh10rt
Jetzt ist es mir klarer.
Wie ich den Thread angefangen habe, war mir der Unterschied ja überhaupt nicht bewusst.
Deswegen stand ich wohl auch gewaltig auf dem Schlauch und hab mich mehrmals gefragt, was ihr da überhaupt redet 
Jetzt macht das alles einen Sinn.
Hier noch der Vollständigkeitshalber das 3. Script.

Vielen lieben Dank. Ich werde es testen.
Also zwei vermeidbare Fehler, die mir hätten auch auffallen können 
Ich hoffe ich habe dich richtig verstanden:
var datum, uhrzeit, schedule1, timeout;
// Beschreibe diese Funktion …
async function setStart() {
datum = getState('0_userdata.0.Strompreis.Datum_Strom').val.split(',');
uhrzeit = getState('0_userdata.0.Strompreis.Zeitpunkt_Strom').val.split(':');
schedule1 = schedule((datum[1]).toString().trim() + ' ' + (datum[0]).toString().trim() + ' ' + (datum[0]).toString().trim() + ' ' + (datum[1]).toString().trim() + ' ' + '*'.toString().trim(), async () => {
if (getState('0_userdata.0.Netzladung.Ausloesebit_Netzladung_auto').val) {
if ((formatDate(new Date(), 'hh:mm:ss') == getState('0_userdata.0.Strompreis.Zeitpunkt_Strom').val) && (formatDate(new Date(), 'DD.MM.YYYY') == getState('0_userdata.0.Strompreis.Datum_Strom').val)) {
sendTo('telegram', 'send', {
text: 'Test automatisch Netzladen zum billigsten Zeitpunkt',
});
}
timeout = setTimeout(async () => {
timeout = null;
if (getState('0_userdata.0.Netzladung.Ausloesebit_Netzladung_auto').val == true) {
setState('0_userdata.0.Netzladung.Ausloesebit_Netzladung_auto' /* Ausloesebit_Netzladung_auto */, false);
sendTo('telegram', 'send', {
text: 'Test automatisches Netzladungsbit beendet',
});
}
}, 300000);
}
});
}
on({ id: [].concat(['0_userdata.0.Strompreis.Datum_Strom']).concat(['0_userdata.0.Strompreis.Zeitpunkt_Strom']), change: 'ne' }, async (obj) => {
(() => { if (schedule1) { clearSchedule(schedule1); schedule1 = null; }})();
await setStart();
});
await setStart();
Vllt. noch zur Info:
die Variable 0_userdata.0.Strompreis.Datum_Strom hat das Format TT.MM.JJJJ
die Variable 0_userdata.0.Strompreis.Zeitpunkt_Strom hat das Format HH:MM:SS
@paul53
Ok, habe ich gemacht.


Leider bekomme ich dann diese Fehlermeldung:
javascript.0 15:53:55.645 error
TypeError: Cannot read properties of undefined (reading 'toString')
javascript.0 15:53:55.645 error
at setStart (script.js.PV.Zwangsladung_Auto:8:35)
javascript.0 15:53:55.645 error
at script.js.PV.Zwangsladung_Auto:33:7
javascript.0 15:53:55.645 error
at script.js.PV.Zwangsladung_Auto:40:3
Hast du eine Idee, was noch schief läuft?
@paul53
Hallo,
erstmal vielen Dank für deine Arbeit.
Beeindruckend wie man auf sowas kommt.
Ich habe gerade versucht das nachzubauen.
Kannst du mir den letzte Block einmal erklären?
falls Wert von Objekt ID Automatik
mache Kommentar
Welche Objekt ID Automatik meinst du genau?
Ist das der Zeitpunkt, wenn ein neues Datum "reinkommt"?
und warum dann ein Kommentar?
Gruß Helix
Hallo zusammen,
ich möchte euch gerne meine Scripte zeigen und mir natürlich Tips abholen, was man verbessern kann. In einem Script steckt noch ein kleinrr Fehler, wobei ich noch Hilfe brauche.
Grundsätzlich sind es drei Scripte die zusammenarbeiten.
Beschreibung:
Im Grunde gehts um darum den Batteriespeicher meiner PV Anlage zu bestimmten Zeiten voll zu laden.
Ich nutze einen dynamischen Stromtarif. Da macht es Sinn, wenn keine Sonne zu erwarten ist, den Speicher zu billligen Stromzeiten zu füllen und ihn dann in teuren Zeiten zu nutzen.
Ich will keine vollautomatische Lösung. Zumindest noch nicht.
Wenn ich sehe das der Speicher recht leer ist und auf Grund der Witterung 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.
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();
Wenn das o.g. Bit wahr ist, startet die Zwangsladung sofort.
Bei false stopt die Zwangsladung sofort und alles setzt sich zurück auf Standartwerte.
Außerdem wird das Bit zurückgesetzt, nachdem 30 Minuten geladen wurde oder der Speicher voll ist (100%)

Über Telegram wird ein Bit auf wahr gesetzt: 0_userdata.0.Netzladung.Ausloesebit_Netzladung_auto
Wenn das Bit wahr ist, wird das Netzladebit auf 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:
Gruß Helix
@gombersiob
hi, ja du hast recht. Das könnte man alles machen.
Ich denke meine Idee ist erstmal die Ausbaustufe 1.
Damit man mal Erfahrung sammeln und relativ schnell eingreifen kann.
Eine automatische Lösung die nicht 100%ig funktioniert ist gerade beim Thema Zwangsladung ja eine teure Angelegenheit.
Bestes Beispeil gestern und heute.
Gefühlt haben wir bei uns das selbe Wetter.
Gestern hatte ich aber überhaupt keinen Ertrag. So bin ich überhaupt zum Thema Zwangsladung gekommen.
Heute wenigstens etwas, so dass ich den Speicher aufgeladen bekomme. Wenn auch nicht vollständig.
Stelle es mir schwer vor, da eine passable automatische Lösung zu finden.
Ideen kann ich gut gebrauchen 
Die Möglichkeit eine Zwnagsladung wird wohl immer mehr in Mode kommen, je mehr dynamische Tarife auf den Markt kommen.
Ich experimentiere nun auch schon eine Zeit damit rum, habe aber noch keine befriedigende Lösung gefunden.
Ich kann:

Brainstorming!
Mögliche Lösungen (für mich) wären:
Ich lade über den Awattar Adapter den billigsten Strompreis und den zugehörigen Zeitraum in iobroker. Der Zeitbereich des billigsten Strompreisbereicht wird in das Holding Register vom Sungrow geladen.
Über Text2Command schalte ich dann die Zwangsladung "scharf"
Das o.g. Zwangsladungsscript wird dann nicht per Telegram gestartet, sonderns zur vorher gesetzten Uhrzeit.
Das wäre für mich die beste Lösung.
Zeiten werden immer gesetzt, Aktivert wird es über Telegram nur wenn ich es will.
Eine Möglichkeit wäre noch, indem ich in Telegram die iSolarApp kopiere.
Startzeit usw werden über ein Menü in Telegram vorgegeben und dann direkt in die passenden Register geschrieben.
Einziger Vorteil, es dürfte weniger hakelig laufen, als in der iSolarApp
Aber ich weiß nicht, ob der Text2Command sowas überhaupt hergibt und ich habe noch nicht herausgefunden, in welche Register die Startzeit gesscvhrieben wird. ich sehe da bei mir nämlich nichts, wenn ich das mit der iSolarApp testen will.
Was haltet ihr von den Ideen?
Es gibt sehr viele Scripte die behandeln das Thema: Fenster auf Erkennung als Liste senden.
Z.b. hier:
https://www.machs-smart.de/offene-und-geschlossene-fenster-mit-blockly-als-liste-ausgeben/
Vllt hilft dir das weiter. Ist ja so ähnlich.