Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Mit Widget Gestylt Daten addieren

NEWS

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    985

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    3.4k

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    3.2k

Mit Widget Gestylt Daten addieren

Geplant Angeheftet Gesperrt Verschoben Blockly
4 Beiträge 2 Kommentatoren 148 Aufrufe 1 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T Online
    T Online
    tom_33
    schrieb zuletzt editiert von
    #1

    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

    OliverIOO 1 Antwort Letzte Antwort
    0
    • T tom_33

      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

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb zuletzt editiert von OliverIO
      #2

      @tom_33

      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

      [
       {
         "tpl": "tplValueString",
         "data": {
           "bindings": [],
           "oid": "",
           "html_prepend": "{0_userdata.0.mystring;momentDate(DD.MM.YYYY HH:mm:ss)}"
         },
         "style": {
           "bindings": [],
           "left": 265,
           "top": 168,
           "width": "190px",
           "height": "30px"
         },
         "widgetSet": "basic",
         "_id": "i000001"
       }
      ]
      

      d669b364-3ccb-44d4-bc3b-4ad0ab6b5881-image.jpeg

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      1 Antwort Letzte Antwort
      0
      • T Online
        T Online
        tom_33
        schrieb zuletzt editiert von
        #3

        Hallo Oliver!

        Vielen Dank für den Vorschlag. Ich hoffe, ich kann ihn morgen umsetzten. Vor allem gefällt mir das basic string widget

        1 Antwort Letzte Antwort
        0
        • T Online
          T Online
          tom_33
          schrieb zuletzt editiert von tom_33
          #4

          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:

          <block xmlns="https://developers.google.com/blockly/xml" type="on_ext" id="}{npwZ~)?o^j89Z[d$[A" x="-37" y="671">
           <mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation>
           <field name="CONDITION">ne</field>
           <field name="ACK_CONDITION"></field>
           <value name="OID0">
             <shadow type="field_oid" id="I4*WB%Cx5+:qi#P!N;e8">
               <field name="oid">0_userdata.0.Meine_Datenpunkte.KELLER.KE_Boiler_Ein_Zeit</field>
             </shadow>
           </value>
           <value name="OID1">
             <shadow type="field_oid" id="MW;(2TRn`+@j},m4tSHq">
               <field name="oid">0_userdata.0.Meine_Datenpunkte.KELLER.KE_Boiler_Ein_Datum</field>
             </shadow>
           </value>
           <statement name="STATEMENT">
             <block type="schedule_clear" id="^t5@A`yzm:5}LI9E7JR`">
               <field name="NAME">Boiler_Kalender_Ein</field>
               <next>
                 <block type="controls_if" id="ynG%=fCq8A!s-HjfP|(H">
                   <value name="IF0">
                     <block type="logic_compare" id="9j?!g_E=*#NE5*-i5$nt">
                       <field name="OP">EQ</field>
                       <value name="A">
                         <block type="get_value" id="+#BX82++qXEwqL*ZE,ag">
                           <field name="ATTR">val</field>
                           <field name="OID">0_userdata.0.Meine_Datenpunkte.KELLER.KE_Boiler_IO</field>
                         </block>
                       </value>
                       <value name="B">
                         <block type="logic_boolean" id="dVLNGUB^rObfCtlrXW90">
                           <field name="BOOL">FALSE</field>
                         </block>
                       </value>
                     </block>
                   </value>
                   <statement name="DO0">
                     <block type="variables_set" id="{z#7S_cd!.T/fRCtJV/5">
                       <field name="VAR" id="%n44K3YM4$/I{$uvi)nS">Datum_Ein</field>
                       <value name="VALUE">
                         <block type="get_value" id="U6T1Ou%7|L)Dz_2,`SR2">
                           <field name="ATTR">val</field>
                           <field name="OID">0_userdata.0.Meine_Datenpunkte.KELLER.KE_Boiler_Ein_Datum</field>
                         </block>
                       </value>
                       <next>
                         <block type="variables_set" id="*n,cQoPWid~3R8!T.G)E">
                           <field name="VAR" id="*i3J=ool0in]}j9z#86_">Zeit_Ein</field>
                           <value name="VALUE">
                             <block type="get_value" id="2C5@UbFjAzAI1YW3o`82">
                               <field name="ATTR">val</field>
                               <field name="OID">0_userdata.0.Meine_Datenpunkte.KELLER.KE_Boiler_Ein_Zeit</field>
                             </block>
                           </value>
                           <next>
                             <block type="schedule_create" id="@BGLkM/w^_e7]DvXON@f">
                               <field name="NAME">Boiler_Kalender_Ein</field>
                               <value name="SCHEDULE">
                                 <shadow type="field_cron" id="},uocH)Cp{8z._K3NRc=">
                                   <field name="CRON">* * * * *</field>
                                 </shadow>
                                 <block type="cron_builder" id="o]ND+a|O8N):B/(2yGXB">
                                   <mutation xmlns="http://www.w3.org/1999/xhtml" seconds="false" as_line="false"></mutation>
                                   <field name="LINE">FALSE</field>
                                   <field name="WITH_SECONDS">FALSE</field>
                                   <value name="DOW">
                                     <shadow type="text" id="Q`~Gxe,u:{c1T0,A.zaK">
                                       <field name="TEXT">*</field>
                                     </shadow>
                                   </value>
                                   <value name="MONTHS">
                                     <shadow type="text" id=";UsQ2RM-!oy(|]YDZ+UL">
                                       <field name="TEXT">7</field>
                                     </shadow>
                                     <block type="convert_from_date" id="Tg^)Y}dgH@dYC]jbgQzq">
                                       <mutation xmlns="http://www.w3.org/1999/xhtml" format="true" language="false"></mutation>
                                       <field name="OPTION">custom</field>
                                       <field name="FORMAT">TT</field>
                                       <value name="VALUE">
                                         <block type="get_value" id="u:D)YCPATfaXV7-S!*nc">
                                           <field name="ATTR">val</field>
                                           <field name="OID">0_userdata.0.Meine_Datenpunkte.KELLER.KE_Boiler_Ein_Datum</field>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                   <value name="DAYS">
                                     <shadow type="text" id="=}6*2%k.%~M/T+Gzsf-N">
                                       <field name="TEXT">1</field>
                                     </shadow>
                                     <block type="convert_from_date" id="SdSxSOTuyj=F9I#h+QAQ">
                                       <mutation xmlns="http://www.w3.org/1999/xhtml" format="true" language="false"></mutation>
                                       <field name="OPTION">custom</field>
                                       <field name="FORMAT">MM</field>
                                       <value name="VALUE">
                                         <block type="get_value" id="r{B`Y}GN%TQ`WTxW[nnh">
                                           <field name="ATTR">val</field>
                                           <field name="OID">0_userdata.0.Meine_Datenpunkte.KELLER.KE_Boiler_Ein_Datum</field>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                   <value name="HOURS">
                                     <shadow type="text" id="30TLG.po?]%8leAt^wqI">
                                       <field name="TEXT">8</field>
                                     </shadow>
                                     <block type="convert_from_date" id="-M@YF2@vo]4H_y68N)WB">
                                       <mutation xmlns="http://www.w3.org/1999/xhtml" format="true" language="false"></mutation>
                                       <field name="OPTION">custom</field>
                                       <field name="FORMAT">SS</field>
                                       <value name="VALUE">
                                         <block type="get_value" id="?P`[Sf-8ud5T{3grPz8k">
                                           <field name="ATTR">val</field>
                                           <field name="OID">0_userdata.0.Meine_Datenpunkte.KELLER.KE_Boiler_Ein_Zeit</field>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                   <value name="MINUTES">
                                     <shadow type="text" id="=rh|g,;_6)1(o.44o+u)">
                                       <field name="TEXT">23</field>
                                     </shadow>
                                     <block type="convert_from_date" id="@6`o/g78VN`Z.%B(yoRG">
                                       <mutation xmlns="http://www.w3.org/1999/xhtml" format="true" language="false"></mutation>
                                       <field name="OPTION">custom</field>
                                       <field name="FORMAT">mm</field>
                                       <value name="VALUE">
                                         <block type="get_value" id="K1H^w0pJ%F.XR4yypEiK">
                                           <field name="ATTR">val</field>
                                           <field name="OID">0_userdata.0.Meine_Datenpunkte.KELLER.KE_Boiler_Ein_Zeit</field>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                 </block>
                               </value>
                               <statement name="STATEMENT">
                                 <block type="control" id="@,}3]Ea%@wK;IPgV3b!r">
                                   <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                   <field name="OID">0_userdata.0.Meine_Datenpunkte.KELLER.KE_Boiler_IO</field>
                                   <field name="WITH_DELAY">FALSE</field>
                                   <value name="VALUE">
                                     <block type="logic_boolean" id="DOu6Xm(DT6k[7(pipb0]">
                                       <field name="BOOL">TRUE</field>
                                     </block>
                                   </value>
                                 </block>
                               </statement>
                             </block>
                           </next>
                         </block>
                       </next>
                     </block>
                   </statement>
                 </block>
               </next>
             </block>
           </statement>
          </block>
          


          9b006eb4-08f5-4212-8638-6273fcc81852-image.jpeg

          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

          1 Antwort Letzte Antwort
          0

          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
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          501

          Online

          33.0k

          Benutzer

          83.3k

          Themen

          1.3m

          Beiträge
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
          ioBroker Community 2014-2026
          logo
          • Anmelden

          • Du hast noch kein Konto? Registrieren

          • Anmelden oder registrieren, um zu suchen
          • Erster Beitrag
            Letzter Beitrag
          0
          • Home
          • Aktuell
          • Tags
          • Ungelesen 0
          • Kategorien
          • Unreplied
          • Beliebt
          • GitHub
          • Docu
          • Hilfe