Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. SebasDi

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Profile
    • Following 0
    • Followers 0
    • Topics 3
    • Posts 23
    • Best 1
    • Groups 1

    SebasDi

    @SebasDi

    Schwimmbadbauer /-techniker
    Elektroinstallateur

    1
    Reputation
    23
    Profile views
    23
    Posts
    0
    Followers
    0
    Following
    Joined Last Online
    Location Heidelberg Age 40

    SebasDi Follow
    Starter

    Best posts made by SebasDi

    • RE: Zeiteingabe Vis2 mit s7 verknüpfen

      @paul53

      Da ich aus gesundheitlichen Gründen eine kleine Pause einlegen musste, konnte ich noch kein Feedback geben. Sorry.

      Ich habe heute wieder bei meinem hier beschriebenen Problemfall weiter gesucht und einiges getestet.

      Nach einigen Stunden bin ich nun etwas schlauer und bin auf folgende Lösung gestoßen:

      • folgende Datenpunkte wurden manuell für jeden der 3 Timer angelegt & die Eingabefelder für die Einschaltzeit, Ausschaltzeit & der Button in der Vis2 wurden mit dem zugehörigen manuell angelegten Datenpunkt verknüpft

      1ab73789-41ab-498b-9e51-806dd599f64d-image.png

      Im DB1 meines s7 Adapters sehen die Variablen des Timers1 ECO so aus:

      080c824f-6e25-4044-b456-b5ceb6145ca7-image.png

      • in meiner Vis2 sieht die Wochenschaltuhr für den ECO-Betrieb so aus:

      39c6bb19-b104-47ae-b24b-9434edcf9404-image.png

      • Die Checkboxen für die Aktivierung/Deaktivierung der Wochentage, wurden direkt mit dem verantwortlichen bit (laut eigener VariablenTabelle in der SiemensLOGO!) verknüpft:

      99ab4106-80eb-4847-838b-698d26fe3f95-image.png

      Für eine Wochenschaltuhr in der SiemensLOGO! stehen max. 3 Timer/Zyklen zur Auswahl, um alles übersichtlich zu gestalten habe ich für jeden der Timer ein eigenes Skript erstellt. Im Skript wird geprüft, ob der Wert aus 4 Dezimalzahlen besteht und ob der Wert der Ausschaltzeit größer ist als der Wert der Einschaltzeit. Zudem wird "dezimal" in "BCD" konvertiert, damit die SiemensLOGO! die korrekten Daten gesendet bekommt.
      Hier das Skript für den Timer1:

      46b5d1c9-d203-4584-8e56-1f3c1a957673-image.png

      const idEinschaltzeit = '0_userdata.0.wochenschaltuhren_logo.wochenschaltuhr1_eco.wochenschaltuhr1_einschaltzeit1';
      const idAusschaltzeit = '0_userdata.0.wochenschaltuhren_logo.wochenschaltuhr1_eco.wochenschaltuhr1_ausschaltzeit1';
      const idEinschaltzeitInput = '0_userdata.0.wochenschaltuhren_logo.wochenschaltuhr1_eco.wochenschaltuhr1_einschaltzeit1_input';
      const idAusschaltzeitInput = '0_userdata.0.wochenschaltuhren_logo.wochenschaltuhr1_eco.wochenschaltuhr1_ausschaltzeit1_input';
      const idButton = '0_userdata.0.wochenschaltuhren_logo.wochenschaltuhr1_eco.wochenschaltuhr1_button_uebernehmen1';
      const idS7Einschaltzeit = 's7.1.DBs.DB1.T001_Wochenschaltuhr1_ECO_Einschaltzeit1';
      const idS7Ausschaltzeit = 's7.1.DBs.DB1.T001_Wochenschaltuhr1_ECO_Ausschaltzeit1';
      
      on({id: idButton}, function () {
          const einschaltzeitValue = getState(idEinschaltzeit).val;
          const ausschaltzeitValue = getState(idAusschaltzeit).val;
      
          if (isValidTime(einschaltzeitValue) && isValidTime(ausschaltzeitValue) && ausschaltzeitIsLater(ausschaltzeitValue, einschaltzeitValue)) {
              const bcdEinschaltzeit = toBCD(einschaltzeitValue);
              const bcdAusschaltzeit = toBCD(ausschaltzeitValue);
      
              setState(idEinschaltzeitInput, bcdEinschaltzeit);
              setState(idAusschaltzeitInput, bcdAusschaltzeit);
              setState(idS7Einschaltzeit, bcdEinschaltzeit);
              setState(idS7Ausschaltzeit, bcdAusschaltzeit);
          } else {
              console.warn('Ungültiges Eingabeformat für Uhrzeit oder Ausschaltzeit ist nicht größer als Einschaltzeit.');
          }
      });
      
      function toBCD(value) {
          const hours = Math.floor(value / 100); // Stunden extrahieren
          const minutes = value % 100; // Minuten extrahieren
      
          const bcdHours = decToBCD(hours); // Stunden in BCD konvertieren
          const bcdMinutes = decToBCD(minutes); // Minuten in BCD konvertieren
      
          // Kombiniere die BCD-Werte für Stunden und Minuten
          const bcdTime = (bcdHours << 8) | bcdMinutes;
      
          return bcdTime;
      }
      
      function decToBCD(dec) {
          return ((dec / 10) << 4) | (dec % 10);
      }
      
      function isValidTime(time) {
          return /^\d{4}$/.test(time);
      }
      
      function ausschaltzeitIsLater(ausschaltzeit, einschaltzeit) {
          return parseInt(ausschaltzeit) > parseInt(einschaltzeit);
      }
      

      Die Datenübertragung funktioniert jetzt endlich, wie sie soll. 🙂

      ScreenRecord_Vis2->SiemensLOGO!

      Ich bräuchte nur noch einen Tipp bzw. Hilfe, weshalb folgende Warnungen andauernd erscheinen:

      734b7c20-7ffd-411b-8838-194c4b23dedf-image.png

      posted in Visualisierung
      SebasDi
      SebasDi

    Latest posts made by SebasDi

    • RE: Zeiteingabe Vis2 mit s7 verknüpfen

      @paul53

      Da ich aus gesundheitlichen Gründen eine kleine Pause einlegen musste, konnte ich noch kein Feedback geben. Sorry.

      Ich habe heute wieder bei meinem hier beschriebenen Problemfall weiter gesucht und einiges getestet.

      Nach einigen Stunden bin ich nun etwas schlauer und bin auf folgende Lösung gestoßen:

      • folgende Datenpunkte wurden manuell für jeden der 3 Timer angelegt & die Eingabefelder für die Einschaltzeit, Ausschaltzeit & der Button in der Vis2 wurden mit dem zugehörigen manuell angelegten Datenpunkt verknüpft

      1ab73789-41ab-498b-9e51-806dd599f64d-image.png

      Im DB1 meines s7 Adapters sehen die Variablen des Timers1 ECO so aus:

      080c824f-6e25-4044-b456-b5ceb6145ca7-image.png

      • in meiner Vis2 sieht die Wochenschaltuhr für den ECO-Betrieb so aus:

      39c6bb19-b104-47ae-b24b-9434edcf9404-image.png

      • Die Checkboxen für die Aktivierung/Deaktivierung der Wochentage, wurden direkt mit dem verantwortlichen bit (laut eigener VariablenTabelle in der SiemensLOGO!) verknüpft:

      99ab4106-80eb-4847-838b-698d26fe3f95-image.png

      Für eine Wochenschaltuhr in der SiemensLOGO! stehen max. 3 Timer/Zyklen zur Auswahl, um alles übersichtlich zu gestalten habe ich für jeden der Timer ein eigenes Skript erstellt. Im Skript wird geprüft, ob der Wert aus 4 Dezimalzahlen besteht und ob der Wert der Ausschaltzeit größer ist als der Wert der Einschaltzeit. Zudem wird "dezimal" in "BCD" konvertiert, damit die SiemensLOGO! die korrekten Daten gesendet bekommt.
      Hier das Skript für den Timer1:

      46b5d1c9-d203-4584-8e56-1f3c1a957673-image.png

      const idEinschaltzeit = '0_userdata.0.wochenschaltuhren_logo.wochenschaltuhr1_eco.wochenschaltuhr1_einschaltzeit1';
      const idAusschaltzeit = '0_userdata.0.wochenschaltuhren_logo.wochenschaltuhr1_eco.wochenschaltuhr1_ausschaltzeit1';
      const idEinschaltzeitInput = '0_userdata.0.wochenschaltuhren_logo.wochenschaltuhr1_eco.wochenschaltuhr1_einschaltzeit1_input';
      const idAusschaltzeitInput = '0_userdata.0.wochenschaltuhren_logo.wochenschaltuhr1_eco.wochenschaltuhr1_ausschaltzeit1_input';
      const idButton = '0_userdata.0.wochenschaltuhren_logo.wochenschaltuhr1_eco.wochenschaltuhr1_button_uebernehmen1';
      const idS7Einschaltzeit = 's7.1.DBs.DB1.T001_Wochenschaltuhr1_ECO_Einschaltzeit1';
      const idS7Ausschaltzeit = 's7.1.DBs.DB1.T001_Wochenschaltuhr1_ECO_Ausschaltzeit1';
      
      on({id: idButton}, function () {
          const einschaltzeitValue = getState(idEinschaltzeit).val;
          const ausschaltzeitValue = getState(idAusschaltzeit).val;
      
          if (isValidTime(einschaltzeitValue) && isValidTime(ausschaltzeitValue) && ausschaltzeitIsLater(ausschaltzeitValue, einschaltzeitValue)) {
              const bcdEinschaltzeit = toBCD(einschaltzeitValue);
              const bcdAusschaltzeit = toBCD(ausschaltzeitValue);
      
              setState(idEinschaltzeitInput, bcdEinschaltzeit);
              setState(idAusschaltzeitInput, bcdAusschaltzeit);
              setState(idS7Einschaltzeit, bcdEinschaltzeit);
              setState(idS7Ausschaltzeit, bcdAusschaltzeit);
          } else {
              console.warn('Ungültiges Eingabeformat für Uhrzeit oder Ausschaltzeit ist nicht größer als Einschaltzeit.');
          }
      });
      
      function toBCD(value) {
          const hours = Math.floor(value / 100); // Stunden extrahieren
          const minutes = value % 100; // Minuten extrahieren
      
          const bcdHours = decToBCD(hours); // Stunden in BCD konvertieren
          const bcdMinutes = decToBCD(minutes); // Minuten in BCD konvertieren
      
          // Kombiniere die BCD-Werte für Stunden und Minuten
          const bcdTime = (bcdHours << 8) | bcdMinutes;
      
          return bcdTime;
      }
      
      function decToBCD(dec) {
          return ((dec / 10) << 4) | (dec % 10);
      }
      
      function isValidTime(time) {
          return /^\d{4}$/.test(time);
      }
      
      function ausschaltzeitIsLater(ausschaltzeit, einschaltzeit) {
          return parseInt(ausschaltzeit) > parseInt(einschaltzeit);
      }
      

      Die Datenübertragung funktioniert jetzt endlich, wie sie soll. 🙂

      ScreenRecord_Vis2->SiemensLOGO!

      Ich bräuchte nur noch einen Tipp bzw. Hilfe, weshalb folgende Warnungen andauernd erscheinen:

      734b7c20-7ffd-411b-8838-194c4b23dedf-image.png

      posted in Visualisierung
      SebasDi
      SebasDi
    • RE: Zeiteingabe Vis2 mit s7 verknüpfen

      @homoran

      Das hab ich auch gesehen, dass der Wert um 1 Stunde variiert.

      Ich hab halt echt null Ahnung von Skripten und deren Funktionen. Daher habe ich gerade mal ChatGPT genutzt, was folgendes ausspuckt:

      // Annahme: dateStr enthält das bereitgestellte Datum (z.B., "2024-03-09T16:55:00.000Z")
      
      function formatAndConvertTime(dateStr) {
          const berlinTimezone = 'Europe/Berlin';
          const date = new Date(dateStr);
      
          // Extrahiere Stunden und Minuten
          const hours = date.getHours().toString().padStart(2, '0');
          const minutes = date.getMinutes().toString().padStart(2, '0');
      
          // Formatiere die Uhrzeit
          const formattedTime = `${hours}:${minutes}`;
      
          // Konvertiere die Uhrzeit in die Zeitzone Berlin
          const berlinTime = date.toLocaleTimeString('de-DE', { timeZone: berlinTimezone });
      
          return { formattedTime, berlinTime };
      }
      
      // Beispielaufruf
      const { formattedTime, berlinTime } = formatAndConvertTime("2024-03-09T16:55:00.000Z");
      console.log('Formatted Time:', formattedTime);  // Ausgabe: "16:55"
      console.log('Berlin Time:', berlinTime);  // Ausgabe: Uhrzeit in der Zeitzone Berlin
      

      MOD-EDIT: Code in code-tags gesetzt!

      posted in Visualisierung
      SebasDi
      SebasDi
    • RE: Zeiteingabe Vis2 mit s7 verknüpfen

      @homoran

      2024-03-09T16:55:00.000Z

      Das wird aus dem Eingabefeld übertragen.

      posted in Visualisierung
      SebasDi
      SebasDi
    • RE: Zeiteingabe Vis2 mit s7 verknüpfen

      @homoran

      Nun, ich gehe davon aus, dass ich im Skript, den value "kastrieren muss".
      Also, Jahr, Monat, Tag soll ja nicht verwendet werden., sondern nur "hh:mm"

      Korrekt?

      posted in Visualisierung
      SebasDi
      SebasDi
    • RE: Zeiteingabe Vis2 mit s7 verknüpfen

      @paul53

      DU bist echt der Wahnsinn!
      Hab das Skript eingefügt, Datenpunkte gesetzt, alles verknüpft und Zeitwerte kommen an. 🙂

      Habe jetzt nur ein Problem mit den Widgets von Vis / Vis2.
      Ich glaube, das WIdget das ich verwenden wollte sendet mir einen kompletten Zeitstempel mit Datum rüber anstatt nur die Zeit als "Zahl".

      In der Vis2 sieht es jetzt so aus:

      aec346f4-8860-4841-87ea-390f1c421f12-image.png

      Und in der Objektübersicht kommen die Werte wie folgt an:

      edb6b1d1-e22c-4112-8df2-445178d12ca6-image.png

      51b19879-b2ff-4bc3-a492-102be61013ae-image.png

      posted in Visualisierung
      SebasDi
      SebasDi
    • RE: Zeiteingabe Vis2 mit s7 verknüpfen

      @paul53

      Hallo Paul.

      Die Ein- & Ausschaltzeiten der Wochenschaltuhren in der LOGO können von 00:00 bis 23:59 eingestellt werden.

      Mal wieder herzlichen Dank für deine Hilfe! 🙂

      Ich probiere dein Skript gleich mal aus.

      Was ich dich noch fragen möchte betrifft einen alten Beitrag:

      https://forum.iobroker.net/topic/9457/gelöst-logo-wochenschaltuhr/55

      Hier werden die Uhrzeiten scheinbar irgendwie per Skript umgerechnet - Zumindest verstehe ich das so.

      Das würde bedeuten, dass ich mir dieses Skript dann auch installieren/schreiben muss, richtig?

      posted in Visualisierung
      SebasDi
      SebasDi
    • RE: Zeiteingabe Vis2 mit s7 verknüpfen

      @homoran

      Die Wochentage bekomme ich ja bereits von der Vis2 rüber in die LOGO Wochenschaltuhr.
      Es hängt ja nur an den Ein- und Ausschaltzeiten, die ich nicht transferiert bekomme.

      Am einfachsten wäre ein Eingabefeld (hh:mm) in dem ich die Einschaltzeit eintragen kann, und ein gleiches Feld für die Ausschaltzeit. Dann noch einen Button "Übernehmen" und beide Uhrzeiten fliegen rüber in die Wochenschaltuhr der LOGO.

      Ich bekomme es leider nicht hin, diese "Funktion" zu verknüpfen, die benötigten Datenpunkte zusetzen bzw. die richtigen Einstellungen zu verwenden.

      Vielleicht kann mir hierzu noch jemand anders mit ioBroker & SiemensLOGO! Erfahrung weiterhelfen?

      posted in Visualisierung
      SebasDi
      SebasDi
    • RE: Zeiteingabe Vis2 mit s7 verknüpfen

      @homoran said in Zeiteingabe Vis2 mit s7 verknüpfen:

      Abgesehen davon dass Javascript mit JAVA nichts gemein hat, musst du dir anscheinend erst einmal die Funktionsweise von ioBroker verinnerlichen.

      Sag ich ja, keine Ahnung. 🙂 Sorry.

      Bisher habe ich in den letzten 2 Wochen zumindest die Thematik Buttons, Switches, Bindings diverser Flussschemas realisieren können.

      Jetzt hänge ich halt nur an der Kommunikation diverser Eingabefelder der Vis2, die mir die eingegebenen Werte auf die LOGO übertragen. (Zeiten, Analogwerte, usw.)

      Die Funktion des Programms in der LOGO soll allerdings mit sowie ohne ioBroker funktionieren. Lediglich zum Konfigurieren der Ausstattung bzw. der Anlagenfunktionen ist ioBroker definitiv erforderlich.

      Kannst du mir verraten was in meinem Fall benötigt wird? (Zeiten übertragen)

      posted in Visualisierung
      SebasDi
      SebasDi
    • Zeiteingabe Vis2 mit s7 verknüpfen

      Hallo zusammen.

      Ich bräuchte Hilfe zwecks Werte von Vis2 in die Wochenschaltuhr des S7 Adapter (LOGO! 0BA8) zu übertragen.

      Die Verknüpfung für die Auswahl der Wochentage läuft bereits. (Habe ich via Checkbox für jeden Wochentag gelöst)

      Für die Eingabe der Einschaltzeit und Ausschaltzeit möchte ich gerne ein Zeiteingabefeld nutzen. (wie im Screenshot zu sehn)

      bd402594-3f24-4526-a127-e1c86c641ff7-image.png

      Meine Objekte des s7 Adapter werden wie folgt angezeigt:

      ef48639b-3046-4803-8161-d8acd6f6eff2-image.png

      Im s7 Adapter habe ich den DB1 wie folgt konfiguriert:

      02db884f-bf77-483f-9e95-85fa770809b1-image.png

      Die Variablen in der LOGO!Soft habe ioch wie folgt angelegt:

      7ed91b21-4569-4120-8107-0a0a9dd65c39-image.png

      Ich habe auch bereits diesen Beitrag mehrfach gelesen:

      https://forum.iobroker.net/topic/9457/gelöst-logo-wochenschaltuhr/55

      versteh aber leider nicht was man hier alles machen muss. (Skript erstellen / mehrere Skripte erstellen / was wird dann wie verknüpft!?)

      Habe leider keinerlei JAVA Kenntnisse.

      Danke im Voraus

      posted in Visualisierung
      SebasDi
      SebasDi
    • RE: Button der nur betätigt werden kann wenn Object ID= 0 oder 1

      @paul53

      es läuft!! 🙂

      Oh mein Gott. Endlich!

      Tausend Dank für deine Zeit & kompetente Hilfe!!! 👍 🤛 💪

      Werde dann mal ein paar Skripte schreiben müssen und alles verknüpfen. Aber die Arbeit wird sich lohnen!

      posted in Visualisierung
      SebasDi
      SebasDi
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo