@Waly_de Danke Dir. Ich werde das mal probieren.
UPDATE: Soweit hat es funktioniert. Allerdings sobald man dann z.B. die Waschmaschine anwirft ( über 600W) speist er wieder vom Akku ein. Wenn man es weiss ist es ja kein Thema. Dann muss ich meine Wasch-Zeiten halt auf den frühen Morgen ändern.
Ich hatte zwischenzeitlich mal ChatGPT gefragt, und Deinen Code durch diesen ersetzt:
// Define Constants
const CHEAP_LEVELS = ['CHEAP', 'VERY_CHEAP'];
// Function to check if it's daytime
function isDaytime() {
const now = new Date();
const sunrise = new Date(SunTimes(0));
const sunset = new Date(SunTimes(1));
return now >= sunrise && now <= sunset;
}
// Function to check price level and time of day
function checkPriceAndTimeOfDay(priceLevel) {
if (isDaytime() && CHEAP_LEVELS.includes(priceLevel)) {
for (var i = 0; i < ConfigData.seriennummern.length; i++) {
if (ConfigData.seriennummern[i].typ == "PS" && ConfigData.seriennummern[i].seriennummer != "XXXXXXXXXXXXX") {
const asn = ConfigData.seriennummern[i].seriennummer;
setStateNE(ConfigData.statesPrefix + '.app_' + mqttDaten.UserID + '_' + asn + '_thing_property_set.writeables.SetPrio', "1", false);
}
}
} else {
for (var i = 0; i < ConfigData.seriennummern.length; i++) {
if (ConfigData.seriennummern[i].typ == "PS" && ConfigData.seriennummern[i].seriennummer != "XXXXXXXXXXXXX") {
const asn = ConfigData.seriennummern[i].seriennummer;
setStateNE(ConfigData.statesPrefix + '.app_' + mqttDaten.UserID + '_' + asn + '_thing_property_set.writeables.SetPrio', "0", false);
}
}
}
}
// Regulation State
if (ConfigData.RegulationState != "") {
let eventid = ConfigData.statesPrefix + '.' + ConfigData.RegulationState;
ConfigData.Regulation = Boolean(getStateCr(eventid, ConfigData.Regulation, true).val);
on({ id: eventid, change: "any", ack: false }, function (obj) {
let name = obj.id.split('.').pop();
// log(name + ":" + obj.state.val);
for (var i = 0; i < ConfigData.seriennummern.length; i++) {
if (ConfigData.seriennummern[i].typ == "PS" && ConfigData.seriennummern[i].seriennummer != "XXXXXXXXXXXXX") {
const asn = ConfigData.seriennummern[i].seriennummer;
var foundItem = ConfigData.seriennummern.find(item => item.seriennummer === asn);
if (foundItem.RegulationOffPower >= 0 && !obj.state.val) {
setAC(asn, foundItem.RegulationOffPower * 10);
GlobalObj[asn].OldNewValue = 0;
} else if (foundItem.RegulationOffPower == -2 && !obj.state.val) {
log("Regulation Off, PrioMode On für:" + asn);
setStateNE(ConfigData.statesPrefix + '.app_' + mqttDaten.UserID + '_' + asn + '_thing_property_set.writeables.SetPrio', "1", false);
} else if (foundItem.RegulationOffPower == -2 && obj.state.val) {
log("Regulation On, PrioMode Off für:" + asn);
setStateNE(ConfigData.statesPrefix + '.app_' + mqttDaten.UserID + '_' + asn + '_thing_property_set.writeables.SetPrio', "0", false);
}
}
}
ConfigData.Regulation = Boolean(obj.state.val);
});
// Listener for CurrentPrice.level changes
on({ id: 'tibberlink.0.Homes.dfefdc35-4e8e-43a8-800f-64e5fe315d10.CurrentPrice.level', change: "any", ack: false }, function (obj) {
checkPriceAndTimeOfDay(obj.state.val);
});
// Initialize with the current price level
const initialPriceLevel = getState('tibberlink.0.Homes.dfefdc35-4e8e-43a8-800f-64e5fe315d10.CurrentPrice.level').val;
checkPriceAndTimeOfDay(initialPriceLevel);
}
Ich dachte mir, dass er Deine Logik nehmen soll, wenn die Preise nicht die definierten Level haben.