Navigation

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

    NEWS

    • [erledigt] 15. 05. Wartungsarbeiten am ioBroker Forum

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    N
    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 64
    • Best 3
    • Groups 1

    nerg

    @nerg

    Starter

    4
    Reputation
    29
    Profile views
    64
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    nerg Follow
    Starter

    Best posts made by nerg

    • RE: Admin 6.2 jetzt im Stable

      @stenmic Das scheint ein Problem der mobilen Darstellung zu sein und dass die Konfigurationsmöglichkeit genommen wurde. selbst im Querformat kriege ich keine weiteren Spalten. Gibt es hier eine offizielle Möglichkeit?

      Ich habe gerne mal auf dem Handy einzelne Werte kontrolliert, wenn ich im Haus Sachen kontrolliert habe.

      posted in ioBroker Allgemein
      N
      nerg
    • RE: Material Design Widgets: Wetter View

      Ich habe mir erlaubt, noch die Bewölkung hinzu zu nehmen 🙂 (auch in die Tages-views). In den "kommenden Tagen" wird ein Durchschnitt berechnet für den ganzen Tag. Das möchte ich noch irgendwann so eingrenzen, dass der Durchschnitt nur zwischen SOnnenauf- und Untergang berechnet wird. 🙂

      817bb5de-713b-4f1c-8903-059fa87f1761-grafik.png

      posted in Praktische Anwendungen (Showcase)
      N
      nerg
    • RE: Material Design Widgets: Calendar Widget

      @Scrounger
      Eine Ansicht in diesem Stil:
      d62ce691-19f3-4b7c-b1cd-c6cb6a7cb515-grafik.png

      posted in Visualisierung
      N
      nerg

    Latest posts made by nerg

    • RE: Chat GPT im Javascript Adapter verwenden

      @haus-automatisierung ja das stimmt. wenn man das ganz nochmal probiert, kommt auch wieder anderer Code raus:

      // Funktion, um Anwesenheit der User zu prüfen
      function checkUserPresence() {
          const users = ['user1', 'user2', 'user3']; // Liste der User
          const userPresenceDataPoints = {
              'user1': ['geofence.user1', 'wifi.user1'],
              'user2': ['geofence.user2', 'wifi.user2'],
              'user3': ['geofence.user3', 'wifi.user3']
          };
      
          users.forEach(user => {
              let isPresent = false;
      
              // Überprüfe alle Datenpunkte für jeden User
              userPresenceDataPoints[user].forEach(dp => {
                  if (getState(dp).val) {
                      isPresent = true;
                  }
              });
      
              const userPresenceState = `userdata.0.${user}.presence`;
      
              // Falls der Datenpunkt nicht existiert, lege ihn an
              if (!existsState(userPresenceState)) {
                  createState(userPresenceState, { type: 'boolean', def: false });
              }
      
              // Setze den Anwesenheitsstatus
              setState(userPresenceState, isPresent);
          });
      }
      
      // Die Funktion alle 17 Sekunden ausführen
      schedule("*/17 * * * * *", checkUserPresence);
      
      // Initiale Ausführung beim Start des Skripts
      checkUserPresence();
      
      

      Eventuell muss man die Anweisungen nochmal konkreter fassen.

      //edit: habe ihn nochmal konkreter angewiesen, die docs.md zu befolgen. Probiere es gerne aus: https://chatgpt.com/g/g-y65cMkHAC-iobroker-javascriptgpt

      posted in ioBroker Allgemein
      N
      nerg
    • RE: Chat GPT im Javascript Adapter verwenden

      @haus-automatisierung
      ChatGPT Link
      hier mal ein erster Wurf. Gefüttert mit den Docs aus Github, die auch bei der API genutzt werden und ein paar angepassten Anweisungen.

      // edit: Mit 3 Anweisungen zu diesem Ergebnis:

      // Anwesenheitserkennung für verschiedene User anhand von boolean-Datenpunkten
      
      // Liste der zu überwachenden Datenpunkte für jeden User
      const userPresenceDataPoints = {
          user1: ['geofence.user1', 'wlan.user1'],
          user2: ['geofence.user2', 'wlan.user2'],
          // Weitere User und deren Datenpunkte hier hinzufügen
      };
      
      // Funktion zur Überprüfung der Anwesenheit eines Users
      async function isUserPresent(user, dataPoints) {
          for (let dp of dataPoints) {
              let state = await getStateAsync(dp);
              if (state && state.val === true) {
                  return true;
              }
          }
          return false;
      }
      
      // Funktion zur Überprüfung und Erstellung eines Datenpunkts
      async function checkAndCreateDataPoint(user) {
          const dpPath = `userdata.0.${user}.presence`;
          const dpObj = await getObjectAsync(dpPath);
          if (!dpObj) {
              await setObjectAsync(dpPath, {
                  type: 'state',
                  common: {
                      name: `${user} Presence`,
                      type: 'boolean',
                      role: 'indicator',
                      read: true,
                      write: true,
                  },
                  native: {},
              });
          }
          return dpPath;
      }
      
      // Anwesenheitsprüfung für alle User
      async function checkAllUsersPresence() {
          for (let user in userPresenceDataPoints) {
              let isPresent = await isUserPresent(user, userPresenceDataPoints[user]);
              const dpPath = await checkAndCreateDataPoint(user);
              await setStateAsync(dpPath, isPresent);
              console.log(`${user} ist ${isPresent ? 'anwesend' : 'abwesend'}`);
          }
      }
      
      // Starte die Anwesenheitsprüfung alle 17 Sekunden
      setInterval(checkAllUsersPresence, 17000);
      
      

      habs nicht ausprobiert, aber schaut brauchbar aus.

      posted in ioBroker Allgemein
      N
      nerg
    • RE: Chat GPT im Javascript Adapter verwenden

      @haus-automatisierung ja das stimmt. Blind übernehmen kann man das nicht. Er ist aber auch mit 4o wieder deutlich besser geworden und auch kooperativer.
      Ich glaube custom gpt ist richtig. Ich schau mir das Mal an. Hatte das seinerzeit Mal versucht, da waren die Tokens aber sehr niedrig, die man mitgeben konnte.

      posted in ioBroker Allgemein
      N
      nerg
    • RE: Chat GPT im Javascript Adapter verwenden

      @haus-automatisierung mit ein bisschen Fingerspitzengefühl hab ich ihn bisher ganz gut angeleitet auch ganz ohne Anbindung an die Doku.
      Da ich nur tier1 bei der API habe, sprengt die Doku direkt das token Limit. Im Gegensatz zu Lindner würde ich die Schnittstelle lieber schlecht als gar nicht nutzen 🥴😉

      Edit: falls jemand noch einen chatGPT Plus Account hat, dann könnte der-/diejenige auch einen individuellen iobroker GPT anlegen, der mit der Doku gefüttert wird und ein paar individuelle Anweisungen zur Codeerstellung bekommt. Zur Not würde ich auch noch Mal Plus abschließen, falls da Interesse besteht. Das würde auch die Schwelle reduzieren für Einsteiger

      posted in ioBroker Allgemein
      N
      nerg
    • RE: Chat GPT im Javascript Adapter verwenden

      @haus-automatisierung said in Chat GPT im Javascript Adapter verwenden:

      @oliverio sagte in Chat GPT im Javascript Adapter verwenden:

      wahrscheinlich wurde als context das komplette script mit versendet

      Als Context wird immer die Dokumentation angehangen (als Markdown). Die ist halt alleine schon sehr lang. Und wenn man viele Geräte definiert hat, dann werden die auch noch mitgeliefert, damit ChatCPT auch die richtigen Objekt-IDs, Räume, usw. kennt.

      Das wird ggf. natürlich sehr groß.

      Lässt sich das mit der Dokumentation eigentlich ausschalten? Meiner Erfahrung nach macht GPT auch so ganz gute Skripte

      posted in ioBroker Allgemein
      N
      nerg
    • RE: Material Design Widgets: Wetter View

      In der letzten Beta vom Javascript erhalte ich auf einmal diesen Fehler:

      script.js.common.vis.Material_Wetterview: existsState has been called with id of type "function" but expects a string
      

      Macht nicht so richtig Sinn, wenn ich es überfliege. Die Variablen werden immer mit strings belegt.

      // Edit Die Lösung ist in Zeile 858 (bei mir) in der Funktion createVorschauGraph(maxDays)
      Hier einfach eine Prüfung auf den Typen ergänzen:

      if (typeof i === 'string' && existsState(i) && getState(i).val >= 0) {
      
      posted in Praktische Anwendungen (Showcase)
      N
      nerg
    • RE: Chat GPT im Javascript Adapter verwenden

      @bergjet Das Verhalten ist bei mir identisch. Die Anfrage scheint auch nicht bei der API anzukommen (last used: "never"). Eine Fehlermeldung gibt es allerdings auch nicht im iobroker-log.

      posted in ioBroker Allgemein
      N
      nerg
    • RE: vis 1.x Revived als MIT-Community-Projekt ohne Lizenz!

      Das müsste aber doch auch heißen, dass ich bei Kompatibilitätsproblemen in vis2 dann die Teile aus vis1 als iframe oder ähnliches einbinden kann oder? Das kann ja vielen nochmal den Umstieg erleichtern.

      posted in ioBroker Allgemein
      N
      nerg
    • RE: Lastfluss, Energie animierte Gif

      Hier noch das Skript, falls jemand über den thread stolpert. Durch den Aufruf alle 10 Sekunden gibt es in der Animation alle 10 Sekunden einen "Ruckler"

      // Datenpunkt prüfen und erstellen
      function pruefeUndErstelleDatenpunkt(datenpunkt) {
        if (!existsState(datenpunkt)) {
          createState(datenpunkt, {
            name: "PV Ertrag",
            type: "string",
            role: "text",
            read: true,
            write: false
          });
        }
      }
      
      // Start des Skripts
      const ertragDatenpunkt = 'modbus.0.holdingRegisters.40068_PV_Leistung';
      const ausgabedatenpunkt = '0_userdata.0.vis.pv.pvErtrag';
      
      pruefeUndErstelleDatenpunkt(ausgabedatenpunkt);
      
      // Funktion zum Erstellen des Pfads
      function erstellePfad(ertrag) {
        const pfad = `M5 5 L200 5 A15 15 0 0 1 215 20 L215 90`;
      
        // Farbverlauf und Animationseigenschaften basierend auf dem Ertrag
        let farbverlauf, animationsKlasse, animationsDauer, animationFillMode;
        if (ertrag < 0) {
          farbverlauf = "url(#pv-gradient1)";
          animationsKlasse = "pv-animation";
          animationsDauer = `${(3 - (3 * ertrag / 6000)).toFixed(2)}s`;
          animationFillMode = "both";
        } else if (ertrag === 0) {
          farbverlauf = "black";
          animationsKlasse = "";
          animationsDauer = "0s";
          animationFillMode = "";
        } else if (ertrag > 0) {
          farbverlauf = "url(#pv-gradient2)";
          animationsKlasse = "pv-animation";
          animationsDauer = `${(3 - (3 * ertrag / 9000)).toFixed(2)}s`;
          animationFillMode = "both";
        } else {
          farbverlauf = "none";
          animationsKlasse = "";
          animationsDauer = "";
          animationFillMode = "";
        }
      
        // Pfad erstellen
        const pfadElement = `<path class="${animationsKlasse}" d="${pfad}" fill="none" stroke="${farbverlauf}" stroke-width="5" stroke-dasharray="15 5"></path>`;
        const styleCode = `<style>.pv-animation { stroke-dashoffset: 20; animation: pv-animation-ani ${animationsDauer} infinite linear ${animationFillMode}; } @keyframes pv-animation-ani { 0% { stroke-dashoffset: 20; } 100% { stroke-dashoffset: 0; } }</style>`;
        const svgHTML = `<svg width="99%" height="99%"><defs><linearGradient id="pv-gradient1" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" style="stop-color: red;" /><stop offset="100%" style="stop-color: yellow;" /></linearGradient><linearGradient id="pv-gradient2" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" style="stop-color: darkgreen;" /><stop offset="100%" style="stop-color: lightgreen;" /></linearGradient>${styleCode}</defs>${pfadElement}</svg>`;
      
        return svgHTML;
      }
      
      schedule("*/10 * * * * *", async function () {
        const ertrag = getState(ertragDatenpunkt).val;
        const pfadHTML = erstellePfad(ertrag);
        setState(ausgabedatenpunkt, pfadHTML);
      });
      
      

      Wenn ihr Pfade bauen wollt und wie ich keinen Schimmer habt , dann lege ich euch dringend den Chatbot eures Vertrauens ans Herzen. War super einfach so.

      posted in Visualisierung
      N
      nerg
    • RE: Lastfluss, Energie animierte Gif

      Ich habe mit eurer Vorarbeit und mit Hilfe von Chatgpt auch mal gearbeitet und bin sehr gut ans Ziel gekommen. Wollte nur mal Danke sagen 😉

      Hier einfach mal 2 Linien. Ich bau mir nun ein schönes Skript für den Rest, das mir die Geschwindigkeit hoch und runter baut usw 😉

      <svg width="99%" height="99%">
        <defs>
          <linearGradient id="gradient1" x1="0%" y1="0%" x2="100%" y2="0%">
            <stop offset="0%" style="stop-color: red;" />
            <stop offset="100%" style="stop-color: yellow;" />
          </linearGradient>
        </defs>
        <path class="loading0" 
          d="
          M5 5
          L200 5
          A15 15 0 0 1 215 20
          L215 90
          " 
          fill="none" stroke="url(#gradient1)" stroke-width="5" stroke-dasharray="15 5" />
      </svg>
      
      <svg width="99%" height="99%">
        <defs>
          <linearGradient id="gradient2" x1="0%" y1="0%" x2="100%" y2="0%">
            <stop offset="0%" style="stop-color: darkgreen;" />
            <stop offset="100%" style="stop-color: lightgreen;" />
          </linearGradient>
        </defs>
        <path class="loading1" 
          d="
          M5 305
          L200 305
          A15 15 0 0 1 215 320
          L215 390
          " 
          fill="none" stroke="url(#gradient2)" stroke-width="5" stroke-dasharray="15 5" />
      </svg>
      
      <style>
        .loading0 {
          stroke-dashoffset: 20;
          animation: strokeAni0 0.5s infinite linear;
        }
        
        .loading1 {
          stroke-dashoffset: 40;
          animation: strokeAni1 3s infinite linear;
        }
        
        @keyframes strokeAni0 {
          0% {
            stroke-dashoffset: 20;
          }
          100% {
            stroke-dashoffset: 0;
          }
        }
        
        @keyframes strokeAni1 {
          0% {
            stroke-dashoffset: 40;
          }
          100% {
            stroke-dashoffset: 0;
          }
        }
      </style>
      
      
      posted in Visualisierung
      N
      nerg
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo