NEWS
Mit Widget Gestylt Daten addieren
-
Hallo Forum, hallo Helfer!
Ich schaffe es einfach nicht, aus zwei Widgets [Gestylt - Eingabe des Datums] und [Gestylt - Eingabe der Zeit] einen Datenpunkt zu erstellen, in welchem mir die beiden Daten zusammenzählt werden.
Ich möchte damit einen zukünftigen Trigger erstellen, welcher mir ein Objekt auf "true" setzt.
Hintergrund ist: Wenn ich ein paar Tage nicht zuhause bin, schalte ich den elektrischen Warmwasserboiler ab. Da ich den Zeitpunkt der Rückekehr weiß, soll die Boilersteuerung, zum erstellten Zeitpunkt, wieder auf "Ein" geschaltet werden.
Bei [Gestylt - Eingabe der Zeit] wird immer das aktuelle Tagesdatum "mitgenommen" und eine Addition der beiden Objekte (Datum und Zeit) ergibt den falschen Wert. Beim konvertieren der Daten scheitere ich immer. Entweder wird gar nichts gerechnet oder das zukünftige Datum ist "doppelt soweit" in der Zukunft. Es muss nicht über dieses Widget gelöst werden, aber einen extra Adapter möchte ich für diese eine Aufgabe nicht installieren.
Eventuell kann mir jemand auf die Sprünge helfen.
BD und BG Tom
-
Hallo Forum, hallo Helfer!
Ich schaffe es einfach nicht, aus zwei Widgets [Gestylt - Eingabe des Datums] und [Gestylt - Eingabe der Zeit] einen Datenpunkt zu erstellen, in welchem mir die beiden Daten zusammenzählt werden.
Ich möchte damit einen zukünftigen Trigger erstellen, welcher mir ein Objekt auf "true" setzt.
Hintergrund ist: Wenn ich ein paar Tage nicht zuhause bin, schalte ich den elektrischen Warmwasserboiler ab. Da ich den Zeitpunkt der Rückekehr weiß, soll die Boilersteuerung, zum erstellten Zeitpunkt, wieder auf "Ein" geschaltet werden.
Bei [Gestylt - Eingabe der Zeit] wird immer das aktuelle Tagesdatum "mitgenommen" und eine Addition der beiden Objekte (Datum und Zeit) ergibt den falschen Wert. Beim konvertieren der Daten scheitere ich immer. Entweder wird gar nichts gerechnet oder das zukünftige Datum ist "doppelt soweit" in der Zukunft. Es muss nicht über dieses Widget gelöst werden, aber einen extra Adapter möchte ich für diese eine Aufgabe nicht installieren.
Eventuell kann mir jemand auf die Sprünge helfen.
BD und BG Tom
das geht meiner meinung nach nur mit einem javascript und datenpunkte zum zwischenspeichern
dp_date = der datenpunkt für das datumswidget
dateFormat = da musst du mal schauen wie das datumswidget dein datum speichert. bei mir wird es im deutschen format gespeichert. auf basis dessen wird das datum geparsed. der browser ist bei mir auf englisch, daher das englische eingabeformat
dp_time = der datenpunkt für dein zeit widget
dp_result = der datenpunkt in den das datum dann als iso utc datum gespeichert wird.let dp_date="0_userdata.0.mydate"; let dp_time="0_userdata.0.mytime"; let dp_result="0_userdata.0.mystring"; let dateFormat = "DD.MM.YYYY"; function parseDate(dateString, format) { const tokenRegex = /(DD|MM|YYYY|YY)/g; const tokens = []; const regexPattern = "^" + format.replace(tokenRegex, (token) => { tokens.push(token); switch (token) { case "DD": return "(\\d{1,2})"; case "MM": return "(\\d{1,2})"; case "YYYY": return "(\\d{4})"; case "YY": return "(\\d{2})"; } }) + "$"; const match = dateString.match(new RegExp(regexPattern)); if (!match) { return null; } let day = 1; let month = 1; let year = 1970; tokens.forEach((token, index) => { const value = parseInt(match[index + 1], 10); switch (token) { case "DD": day = value; break; case "MM": month = value; break; case "YYYY": year = value; break; case "YY": year = value < 70 ? 2000 + value : 1900 + value; break; } }); // Datum in UTC erzeugen const date = new Date(Date.UTC(year, month - 1, day)); // Validierung (z.B. 31.02.2025 erkennen) if ( date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day ) { return null; } // ISO-8601 UTC zurückgeben return date.toISOString(); } function combineUtcDateAndTime(dateIso, timeIso) { const date = new Date(dateIso); const time = new Date(timeIso); return new Date(Date.UTC( date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), time.getUTCHours(), time.getUTCMinutes(), time.getUTCSeconds(), time.getUTCMilliseconds() )).toISOString(); } on([dp_date,dp_time], async function (obj) { let dTime= await getState(dp_time).val; let strTime = new Date(dTime).toISOString(); let strDate= parseDate(await getState(dp_date).val,dateFormat); const result = combineUtcDateAndTime(strDate, strTime); await setState(dp_result,result); });zur anzeige des kombinierten datums habe ich dann das folgende basic string widget mit einem binding zur formatierung hinzugefügt

-
Ich habe es doch noch mit Blockly geschafft.
Mit Hilfe von https://forum.iobroker.net/topic/71431/gelöst-dynamischer-cronjob-wie konnte ich den Trigger über die Widgets setzten.Mein abgewandeltes Blockly sieht so aus:
Die DP KE_Boiler_Ein_Datum und KE_Boiler_Ein_Zeit werden vom Widget [Gestylt - Eingabe des Datums] bzw. [Gestylt - Eingabe der Zeit] gefüllt.
Was auffällt ist, dass TT und MM vertauscht sind (siehe debug). Das Datumsformat spuckt hier sicher rein, obwohl ich in den Systemeinstellungen DD.MM.YYYY eingetragen habe.
Besten Dank an Alle
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden