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. Tester
  4. Test Adapter mytime

NEWS

  • Der neue Monatsrückblick für Mai und Juni 2026 ist online!
    BluefoxB
    Bluefox
    7
    1
    211

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

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

Test Adapter mytime

Geplant Angeheftet Gesperrt Verschoben Tester
adaptermytimetestwidget
575 Beiträge 51 Kommentatoren 177.2k Aufrufe 61 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.
  • Ro75R Ro75

    @OliverIO sagte:

    Beschreibe den String mal genauer.

    00:00:03:38 (Tage:Stunden:Minuten:Sekunden) - meine ablaufende Zeit für einen Timer - die einfachste Version zur Darstellung - hier ist es nicht so einfach. Ich kann über die Alex den Timer verändern oder abbrechen - eine Berechnung ist da glaube ich nicht so cool

    oder

    11:05:46 (Stunden:Minuten:Sekunden) - Zeit - auch hier die einfachste Darstellung - mit Client/Server ist dieses Problem gelöst

    Ro75.

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

    @Ro75

    Und der datenpunkt String zählt dann hoch/runter?

    Lese dir mal diesen Abschnitt durch.
    Damit kannst du die Endzeit setzen
    Insbesondere die Zeile zu #!ISO-Date
    Oder einfach auch nur
    =!value

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

    Ro75R 1 Antwort Letzte Antwort
    0
    • Ro75R Online
      Ro75R Online
      Ro75
      schrieb zuletzt editiert von
      #566

      korrekt.

      Ro75.

      SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

      1 Antwort Letzte Antwort
      0
      • OliverIOO OliverIO

        @Ro75

        Und der datenpunkt String zählt dann hoch/runter?

        Lese dir mal diesen Abschnitt durch.
        Damit kannst du die Endzeit setzen
        Insbesondere die Zeile zu #!ISO-Date
        Oder einfach auch nur
        =!value

        Ro75R Online
        Ro75R Online
        Ro75
        schrieb zuletzt editiert von
        #567

        @OliverIO sagte:

        Damit kannst du die Endzeit setzen

        nur leider ist diese flexibel.

        Ro75.

        SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

        OliverIOO 1 Antwort Letzte Antwort
        0
        • Ro75R Ro75

          @OliverIO sagte:

          Damit kannst du die Endzeit setzen

          nur leider ist diese flexibel.

          Ro75.

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb zuletzt editiert von
          #568

          @Ro75

          Dann den =!value Befehl
          Eigentlich ist ja alles flexibel
          Wenn sich die Ende Zeit ändert, dann ändert sich doch auch die Restlaufzeit

          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
          • Ro75R Online
            Ro75R Online
            Ro75
            schrieb zuletzt editiert von
            #569

            Es tut mir leid, aber daraus werde ich gerade nicht schlau und die Readme ergibt sich mir nicht.

            Ro75.

            SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

            OliverIOO 1 Antwort Letzte Antwort
            0
            • Ro75R Ro75

              Es tut mir leid, aber daraus werde ich gerade nicht schlau und die Readme ergibt sich mir nicht.

              Ro75.

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

              @Ro75

              Du legst im Mytime Adapter ein Countdown Timer mit beliebigen Werten an.
              Der legt dir eine datenpunkt Struktur an.
              Du machst im JavaScript Adapter ein trigger auf deinen String datenpunkt der bspw 11:05:46 enthält.
              Immer wenn sich dein datenpunkt tatsächlich ändert schreibst du in den cmd datenpunkt in den Mytime datenpunkten den folgenden Wert rein:
              =!11:05:46

              Das Format von value ist hier beschrieben
              https://github.com/oweitman/ioBroker.mytime/blob/main/README.md#format-of-the-value-for-setting-the-countdown-timer

              Jede Stelle, also sec,min,etc. zählt für sich und wird mit der jeweiligen Wertigkeit addiert, daher geht auch 1:120, was dann 3 Minuten ergibt. Aber das ist für dich eher nicht relevant.

              Der unterschied mit und ohne ! Ist das die Änderung im timer sofort wirksam werden und nicht erst beim nächsten Start

              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
              • Ro75R Online
                Ro75R Online
                Ro75
                schrieb zuletzt editiert von Ro75
                #571

                Probiere ich aus. Sage dir dann bescheid.

                Ro75.

                EDIT: Keine Ahnung. Ich bekomms nicht hin. Entweder zu komplex, ich verstehe es nicht oder bin zu blöd.

                SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

                OliverIOO 1 Antwort Letzte Antwort
                0
                • Ro75R Ro75

                  Probiere ich aus. Sage dir dann bescheid.

                  Ro75.

                  EDIT: Keine Ahnung. Ich bekomms nicht hin. Entweder zu komplex, ich verstehe es nicht oder bin zu blöd.

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

                  @Ro75

                  ok

                  1. countdowntimer anlegen
                    decdde8d-7113-4c87-a531-56475521b4d7-image.jpeg

                  ich habe gerade festgestellt, das beim speichern bei mir die datenpunkte nicht angelegt werden. wenn das bei dir auch so ist, dann bitte noch setdp drücken.

                  2a)
                  für die simulation habe ich mir ein skript schreiben lassen, das sekündlich bei mir einen datenpunkt aktualisiert. das ist das was bei dir mit alexa oder so passiert.
                  das brauchst du eigentlich nicht, aber ich lege es bei, das du es selbst ausprobieren kannst, wie es bei mir funktioniert.

                  // ============================================================
                  // Skript 1: Countdown sekündlich aktualisieren
                  // Schreibt den Countdown nach:
                  // 0_userdata.0.alexatimer
                  // ============================================================
                  
                  const countdownState = '0_userdata.0.alexatimer';
                  
                  // Beispiel: 1 Stunde, 23 Minuten und 45 Sekunden
                  const countdownDurationSeconds =
                     (1 * 60 * 60) +
                     (23 * 60) +
                     45;
                  
                  let countdownInterval = null;
                  let countdownEndTime = null;
                  
                  
                  /**
                  * Wandelt Sekunden in Stunden:Minuten:Sekunden um.
                  *
                  * Beispiel:
                  * 5025 Sekunden -> 1:23:45
                  */
                  function formatCountdown(totalSeconds) {
                     const remainingSeconds = Math.max(
                         0,
                         Math.floor(totalSeconds)
                     );
                  
                     const hours = Math.floor(remainingSeconds / 3600);
                  
                     const minutes = Math.floor(
                         (remainingSeconds % 3600) / 60
                     );
                  
                     const seconds = remainingSeconds % 60;
                  
                     return (
                         hours +
                         ':' +
                         String(minutes).padStart(2, '0') +
                         ':' +
                         String(seconds).padStart(2, '0')
                     );
                  }
                  
                  
                  /**
                  * Aktualisiert den Countdown-Datenpunkt.
                  */
                  function updateCountdown() {
                     const remainingSeconds = Math.max(
                         0,
                         Math.ceil(
                             (countdownEndTime - Date.now()) / 1000
                         )
                     );
                  
                     const formattedCountdown =
                         formatCountdown(remainingSeconds);
                  
                     setState(
                         countdownState,
                         formattedCountdown,
                         true
                     );
                  
                     if (remainingSeconds <= 0) {
                         clearInterval(countdownInterval);
                         countdownInterval = null;
                  
                         log('Countdown ist beendet.', 'info');
                     }
                  }
                  
                  
                  /**
                  * Startet den Countdown.
                  */
                  function startCountdown() {
                     countdownEndTime =
                         Date.now() + (countdownDurationSeconds * 1000);
                  
                     // Sofort ersten Wert schreiben
                     updateCountdown();
                  
                     // Danach jede Sekunde aktualisieren
                     countdownInterval = setInterval(
                         updateCountdown,
                         1000
                     );
                  }
                  
                  
                  // Datenpunkt anlegen und Countdown starten
                  createState(
                     countdownState,
                     '0:00:00',
                     {
                         name: 'Alexa Timer Countdown',
                         type: 'string',
                         role: 'text',
                         read: true,
                         write: true
                     },
                     () => {
                         startCountdown();
                     }
                  );
                  
                  
                  // Timer beim Stoppen des Skripts beenden
                  onStop(
                     () => {
                         if (countdownInterval !== null) {
                             clearInterval(countdownInterval);
                             countdownInterval = null;
                         }
                     },
                     1000
                  );
                  

                  2b)
                  Hier das skript das auf deinen alexadatenpunkt horcht. Hier
                  0_userdata.0.alexatimer
                  und dann den mytimer datenpunkt beschreibt. hier
                  mytime.0.Countdowns.alexa.cmd
                  beides am anfang zum konfigurieren.
                  da ist jetzt viel kommentar und logging drin. das kann man noch entschlacken.

                  // ============================================================
                  // Skript 2: Countdown-Datenpunkt überwachen
                  //
                  // Liest Änderungen von:
                  // 0_userdata.0.alexatimer
                  //
                  // Schreibt den bereinigten Wert mit Präfix "=!" nach:
                  // mytime.0.Countdowns.alexa.cmd
                  // ============================================================
                  
                  const countdownState = '0_userdata.0.alexatimer';
                  const commandState = 'mytime.0.Countdowns.alexa.cmd';
                  
                  
                  /**
                  * Bereinigt den Datenpunktinhalt.
                  *
                  * Entfernt:
                  * - Leerzeichen
                  * - Tabs
                  * - Zeilenumbrüche
                  * - ein bereits vorhandenes Präfix "=!"
                  */
                  function cleanCountdownValue(value) {
                     return String(value)
                         .trim()
                         .replace(/\s+/g, '')
                         .replace(/^=!+/, '');
                  }
                  
                  
                  /**
                  * Reagiert nur auf tatsächliche Wertänderungen.
                  */
                  on(
                     {
                         id: countdownState,
                         change: 'ne'
                     },
                     (obj) => {
                         if (
                             !obj ||
                             !obj.state ||
                             obj.state.val === null ||
                             obj.state.val === undefined
                         ) {
                             return;
                         }
                  
                         const cleanedValue =
                             cleanCountdownValue(obj.state.val);
                  
                         if (cleanedValue === '') {
                             log(
                                 `Der Inhalt von ${countdownState} ist nach der Bereinigung leer.`,
                                 'warn'
                             );
                  
                             return;
                         }
                  
                         const commandValue =
                             '=!' + cleanedValue;
                  
                         setState(
                             commandState,
                             commandValue,
                             false,
                             (error) => {
                                 if (error) {
                                     log(
                                         `Fehler beim Schreiben nach ${commandState}: ${error}`,
                                         'error'
                                     );
                  
                                     return;
                                 }
                  
                                 log(
                                     `${commandState} wurde auf "${commandValue}" gesetzt.`,
                                     'debug'
                                 );
                             }
                         );
                     }
                  );
                  

                  1. in vis habe ich das widget mytime countdown flipclock genommen
                    und dort den datenpunkt des mytime alexa countdown eingestellt.
                    welchen unterdatenpunkt du nimmst ist egal. das widget sucht sich seine datenpunkte dann selbst zusammen.
                    a1342dff-0ec7-42d2-9b70-9c92cdf1f3f5-image.jpeg

                  [{"tpl":"tplMyTimeCountdownFlip","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","countdown_showsec":"true","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"countdown_oid":"mytime.0.Countdowns.alexa.action","countdown_showmin":true,"countdown_showhrs":true},"style":{"left":"111px","top":"86px","width":"502px","height":"120px"},"widgetSet":"mytime"}]
                  

                  Ergebnis sieht dann so aus:

                  5a267779-959f-4940-9d06-d4453debb3f1-20260721-1036-26.4326649.mp4

                  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
                  1
                  • Ro75R Online
                    Ro75R Online
                    Ro75
                    schrieb zuletzt editiert von
                    #573

                    Danke für das Beispiel. Der entscheidende Punkte war setState mit false. Jetzt geht es. Danke.

                    Ro75.

                    SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

                    OliverIOO 1 Antwort Letzte Antwort
                    0
                    • Ro75R Ro75

                      Danke für das Beispiel. Der entscheidende Punkte war setState mit false. Jetzt geht es. Danke.

                      Ro75.

                      OliverIOO Offline
                      OliverIOO Offline
                      OliverIO
                      schrieb zuletzt editiert von
                      #574

                      @Ro75 sagte:

                      setState mit false

                      ja, true bleibt bei gemanagten datenpunkten dem adapter vorbehalten, sonst würde der adapter endlos auf datenpunktänderungen reagieren.
                      das true/false betrifft den ack(nowledged)/bestätigt status des datenpunkts.
                      ein adapter reagiert auf ack=false und bestätigt dann den datenpunkt mit ack=true (auf diese änderung reagiert er dann nicht mehr)

                      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
                      • OliverIOO Offline
                        OliverIOO Offline
                        OliverIO
                        schrieb zuletzt editiert von
                        #575

                        Neue Version 2.5.0

                        • Die FlipClock widgets (countdown und clock) sind nun über die css-Einstellung des widgets über Schriftgroße/Font-Size einstellbar. Daher ist das transform nicht mehr notwendig.
                        • Es wurden die default-Einstellungen der widgets etwas optimiert, so das man immer eine Anzeige hat, auch wenn noch kein Datenpunkt ausgewählt wurde.

                        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
                        2

                        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

                        380

                        Online

                        33.0k

                        Benutzer

                        83.4k

                        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