Navigation

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

    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

    J
    • Profile
    • Following 0
    • Followers 0
    • Topics 32
    • Posts 303
    • Best 5
    • Groups 2

    jwerlsdf

    @jwerlsdf

    Starter

    5
    Reputation
    81
    Profile views
    303
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    jwerlsdf Follow
    Pro Starter

    Best posts made by jwerlsdf

    • RE: SDM120 SDM72 SDM630 Modbus RS485 Stromzähler (W)LAN ioBroker

      @klassisch
      Also ich schäme mich ja fast, das zu schreiben, aber ich habe den Fehler gefunden. Ich habe bei der Verkabelung nicht richtig hingeschaut und habe eines der Kabel an die Erde geklemmt und nicht an B.
      Daher vielen Dank fur die Hilfe!!! Es geht nun alles.

      Jetzt habe ich noch eine kleine Frage. Wenn ich noch einen weiteren sdm630 verbaue kann ich vom anderen 630 in die Anschlüsse a und b gehen, sodass ich eine reihenschaltung einstelle und dann nur im sdm auf 002 die id stelle und im adapter ebenfalls auf 2 gehe?

      posted in Praktische Anwendungen (Showcase)
      J
      jwerlsdf
    • RE: [Vorlage] Android Wecker iobroker blockly

      @MisterBlinki
      versuch das mal. Beim export ist wohl ein bisschen zuviel reingekommen:
      Rollo Wecker.txt

      @smile
      Bei fehlen die Wecker-Objekte... Hast du noch weitere Einstellungen drinnen?!
      Wenn ich pushover nicht habe, kann ich dann auch den Versand per telegram zulassen?

      posted in Blockly
      J
      jwerlsdf
    • RE: zum aktuellen Datum Tage addieren

      @maik-0
      geht leider immer noch nicht. Das Datum bleibt auf dem heutigen Stand. Wie gesagt. Mit dem Zahlencode kann ich einen Tag addieren zum aktuellen Datum und es funktioniert. Es geht aber nur nicht mit mehreren Additionen/ Tagen.

      edit:
      Es lag tatsächlich an den "Nullen". Es waren zwei zu wenig. So wäre es richtig:

      86400000
      172800000
      259200000
      345600000
      432000000
      518400000
      604800000
      ...

      posted in Blockly
      J
      jwerlsdf
    • RE: Hilfe bei request -> http Umstellung Sonos Sprachausgabe

      @xbit
      Die sonos App auf die Version 80.x. Ging auch ein Firmware Update der sonos Boxen einher. So ganz genau kann ich es aber nicht mehr sagen. Aber mit dieser neuen Version gingen bei mir alle Probleme los.

      posted in Blockly
      J
      jwerlsdf
    • RE: exec befehl mit root Berechtigung (SONOSAPI)

      Hi,
      Ich hatte ein ähnliches Problem. Bei einem Neustart sollte ein Befehl an raspberry gesendet werden. Das PW sollte dabei mitgegeben werden. Mit blockly habe ich es nicht hinbekommen, mit Java gings.
      Das Skript macht folgendes. Es überprüft den Datenpunkt mpd info connect auf false. Ist dieser auf false, wird sich auf dem raspberry mit pw eingeloggt jnd der sudo Befehl abgewendet.

      Vielleicht hilft dir das Skript weiter. Habe dir noch einige Anmerkungen reingeschri3ben

      const { Client } = require('ssh2'); // Importiere die ssh2 Bibliothek
      
      // Konfiguration für den Raspberry Pi MPD (IP, Benutzername und Passwort)
      const raspberryMPDConfig = {
        host: '192.168.XXX.XX', // IP-Adresse von Raspberry Pi MPD
        port: 22,
        username: 'pi', // Benutzername auf Raspberry Pi MPD
        password: 'XXX' // Passwort für den Benutzer
      };
      
      let sshErrorLogged = false; // Flag, um Fehler nur einmal zu protokollieren
      
      // Funktion, die den Befehl an Raspberry Pi MPD sendet
      function sendCommandToRaspberryMPD() {
        const conn = new Client();
      
        // Verbindung zu Raspberry Pi MPD herstellen
        conn.on('ready', () => {
          // Den Befehl "sudo service mpd start" ausführen
          conn.exec('sudo service mpd start', (err, stream) => {
            if (err) {
              if (!sshErrorLogged) {
                console.error('Fehler beim Ausführen des Befehls:', err); // Fehler nur einmal loggen
                sshErrorLogged = true; // Fehler flag setzen
              }
              conn.end();
              return;
            }
      
            stream.on('data', () => {
              // Keine Ausgabe mehr aufzeichnen
            });
      
            stream.on('close', () => {
              conn.end(); // Verbindung schließen
            });
          });
        }).on('error', () => {
          if (!sshErrorLogged) {
            console.error('Fehler bei der SSH-Verbindung.'); // Fehler nur einmal loggen
            sshErrorLogged = true; // Fehler flag setzen
          }
        }).connect(raspberryMPDConfig);
      }
      
      // Event-Listener für den Datenpunkt mpd.0.info.connection
      on({ id: 'mpd.0.info.connection', val: false }, async (obj) => {
        let value = obj.state.val;  // Der aktuelle Wert des Datenpunkts
        let oldValue = obj.oldState.val;  // Der vorherige Wert des Datenpunkts
      
        if (value === false) {
          sendCommandToRaspberryMPD();
        } else {
          sshErrorLogged = false; // Fehlerflag zurücksetzen, wenn der Wert nicht mehr false ist
        }
      });
      
      posted in Blockly
      J
      jwerlsdf

    Latest posts made by jwerlsdf

    • RE: Test/Support für Adapter rssfeed und vis-2-widgets-rssfeed

      @oliverio
      DAnke, dachte, es geht auch hiermit.
      Jetzt habe ich es mit inventwo gelöst. Nur noch eine Frage dazu, dann höre ich hier auf: Im editor funktioniert der Lauftext, im Runtime leider nicht, bleibt also an der selben stelle stehen. Woran könnte es liegen?

      posted in Tester
      J
      jwerlsdf
    • RE: Test/Support für Adapter rssfeed und vis-2-widgets-rssfeed

      Hallo,
      ich habe VIS1. Wie kann ich denn einen festen Textbaustein im Lauffeld anzeigen lassen? Könnte mir bitte jemand auf die Sprünge helfen?

      posted in Tester
      J
      jwerlsdf
    • RE: exec befehl mit root Berechtigung (SONOSAPI)

      Hi,
      Ich hatte ein ähnliches Problem. Bei einem Neustart sollte ein Befehl an raspberry gesendet werden. Das PW sollte dabei mitgegeben werden. Mit blockly habe ich es nicht hinbekommen, mit Java gings.
      Das Skript macht folgendes. Es überprüft den Datenpunkt mpd info connect auf false. Ist dieser auf false, wird sich auf dem raspberry mit pw eingeloggt jnd der sudo Befehl abgewendet.

      Vielleicht hilft dir das Skript weiter. Habe dir noch einige Anmerkungen reingeschri3ben

      const { Client } = require('ssh2'); // Importiere die ssh2 Bibliothek
      
      // Konfiguration für den Raspberry Pi MPD (IP, Benutzername und Passwort)
      const raspberryMPDConfig = {
        host: '192.168.XXX.XX', // IP-Adresse von Raspberry Pi MPD
        port: 22,
        username: 'pi', // Benutzername auf Raspberry Pi MPD
        password: 'XXX' // Passwort für den Benutzer
      };
      
      let sshErrorLogged = false; // Flag, um Fehler nur einmal zu protokollieren
      
      // Funktion, die den Befehl an Raspberry Pi MPD sendet
      function sendCommandToRaspberryMPD() {
        const conn = new Client();
      
        // Verbindung zu Raspberry Pi MPD herstellen
        conn.on('ready', () => {
          // Den Befehl "sudo service mpd start" ausführen
          conn.exec('sudo service mpd start', (err, stream) => {
            if (err) {
              if (!sshErrorLogged) {
                console.error('Fehler beim Ausführen des Befehls:', err); // Fehler nur einmal loggen
                sshErrorLogged = true; // Fehler flag setzen
              }
              conn.end();
              return;
            }
      
            stream.on('data', () => {
              // Keine Ausgabe mehr aufzeichnen
            });
      
            stream.on('close', () => {
              conn.end(); // Verbindung schließen
            });
          });
        }).on('error', () => {
          if (!sshErrorLogged) {
            console.error('Fehler bei der SSH-Verbindung.'); // Fehler nur einmal loggen
            sshErrorLogged = true; // Fehler flag setzen
          }
        }).connect(raspberryMPDConfig);
      }
      
      // Event-Listener für den Datenpunkt mpd.0.info.connection
      on({ id: 'mpd.0.info.connection', val: false }, async (obj) => {
        let value = obj.state.val;  // Der aktuelle Wert des Datenpunkts
        let oldValue = obj.oldState.val;  // Der vorherige Wert des Datenpunkts
      
        if (value === false) {
          sendCommandToRaspberryMPD();
        } else {
          sshErrorLogged = false; // Fehlerflag zurücksetzen, wenn der Wert nicht mehr false ist
        }
      });
      
      posted in Blockly
      J
      jwerlsdf
    • RE: Real Weather (Bald)

      Hallo,
      es ist schon lange her, aber ich versuche es doch noch einmal hier. Ich hoffe, es kann mir jemand helfen:

      Ich habe den Code folgendermaßen geändert, da dieser Fehler produziert hat. Jetzt schaut der COde bei mir so aus, aber ich bekomme folgenden Fehler:

      ImageNumber ist undefined
      

      Hier der überarbeitetet COde:

      var ImageName, ImageNumber, ImageNumberConverted, NewLink;
      
      on({id: "daswetter.0.NextHours.Location_1.Day_1.current.iconURL", change: "any"}, async function (obj) {
        // Sicherstellen, dass obj.state und obj.state.val existieren
        if (!obj.state || typeof obj.state.val === 'undefined') {
          console.error("obj.state.val ist undefined!");
          return; // Früher zurückkehren, wenn der Wert nicht definiert ist
        }
      
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        
        // Extrahiert den ImageNumber aus der URL
        ImageName = (obj.state ? obj.state.val : "").split('/');
        
        // Sicherstellen, dass ImageName genügend Teile hat
        if (ImageName.length > 6) {
          ImageNumber = ImageName[6]; // Greife auf den 7. Teil der URL zu (Index 6)
        } else {
          console.error("Die URL hat nicht genügend Teile. ImageName:", ImageName);
          return; // Rückgabe, wenn die URL nicht das erwartete Format hat
        }
      
        // Überprüfet, ob ImageNumber existiert und berechnet ImageNumberConverted
        if (ImageNumber) {
          ImageNumberConverted = parseFloat(ImageNumber.slice(0, ImageNumber.length - 4));
        } else {
          console.error("ImageNumber ist undefined");
          return; // Früher zurückkehren, wenn ImageNumber nicht definiert ist
        }
      
        // Berechnet die Zeit für Sonnenaufgang und Sonnenuntergang
        var sunrise = getDateObject(getAstroDate("sunrise", undefined, 0));
        var sunrise_m = sunrise.getHours() * 60 + sunrise.getMinutes();
        var sunset = getDateObject(getAstroDate("sunset", undefined, 0));
        var sunset_m = sunset.getHours() * 60 + sunset.getMinutes();
        var now = new Date();
        var now_m = now.getHours() * 60 + now.getMinutes();
      
        // Setzt den Wert für die Animation
        setState("0_userdata.0.Wetter.WeatherAnimation.WeatherAnimation", ImageNumberConverted);
      
        // Logik für unterschiedliche Tageszeiten
        if (now_m > sunset_m - 60 && now_m <= sunset_m + 60) {
          log("dusk " + sunrise_m + " " + sunset_m);
          setState("0_userdata.0.Wetter.WeatherAnimation.Weatherurl", obj.state.val, true);
        } else if (now_m > sunrise_m - 60 && now_m <= sunrise_m + 60) {
          log("dawn " + sunrise_m + " " + sunset_m);
          NewLink = ['http://192.168.178.70:8082/vis.0/Wetter/WeatherAnimation/', ImageNumberConverted + 50, '.png'].join('');
          setState("0_userdata.0.Wetter.WeatherAnimation.Weatherurl", NewLink, true);
        } else if (now_m > sunrise_m + 60 && now_m <= sunset_m - 60) {
          log("day " + sunrise_m + " " + sunset_m);
          setState("0_userdata.0.Wetter.WeatherAnimation.Weatherurl", obj.state.val, true);
        } else {
          log("night " + sunrise_m + " " + sunset_m);
          NewLink = ['http://192.168.178.70:8082/vis.0/Wetter/WeatherAnimation/', ImageNumberConverted + 50, '.png'].join('');
          setState("0_userdata.0.Wetter.WeatherAnimation.Weatherurl", NewLink, true);
        }
      
        // Konsolenausgaben für Debugging
        console.log("ImageName:", ImageName);
        console.log("ImageNumber:", ImageNumber);
        console.log("ImageNumberConverted:", ImageNumberConverted);
        console.log("sunrise_m:", sunrise_m);
        console.log("sunset_m:", sunset_m);
        console.log("now_m:", now_m);
      });
      

      Ich habe folgenden DAtenpunkte angelegt:

      0_userdata.0.Wetter.WeatherAnimation.WeatherAnimation
      0_userdata.0.Wetter.WeatherAnimation.Weatherurl
      

      Der DAtenpunkt Animation wird befüllt mit einer Zahl, auch die WeatherURL. Aber ich erhalte dann eine z.B. Animation 2 und url http://192.168.178.70:8082/vis.0/Wetter/WeatherAnimation/52.png

      In der VIS wird dann logischerweise auch nicht das richtige Bild angezeigt. Kann mir jemand bitte helfen?

      edit:
      Ich habe den Code wie folgt abgeändert:

      var ImageName, ImageNumber, ImageNumberConverted, NewLink;
      
      on({id: "daswetter.0.NextHours.Location_1.Day_1.current.iconURL", change: "any"}, async function (obj) {
        // Sicherstellen, dass obj.state und obj.state.val existieren
        if (!obj.state || typeof obj.state.val === 'undefined') {
          console.error("obj.state.val ist undefined!");
          return; // Früher zurückkehren, wenn der Wert nicht definiert ist
        }
      
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        
        // Ausgabe der URL, um zu sehen, wie sie aussieht
        console.log("URL:", value);
        
        // Falls die URL leer oder ungültig ist, logge eine Fehlermeldung
        if (!value) {
          console.error("Die URL (obj.state.val) ist leer oder ungültig!");
          return;
        }
        
        // Extrahiere den ImageNumber aus der URL
        ImageName = value.split('/');
        console.log("ImageName Teile:", ImageName); // Ausgabe der Teile nach dem Split
      
        // Versuchen, den Dateinamen zu extrahieren
        if (ImageName.length > 0) {
          // Der Dateiname könnte der letzte Teil der URL sein
          const filename = ImageName[ImageName.length - 1];
          console.log("Dateiname:", filename);
      
          // Versuchen, die Bildnummer aus dem Dateinamen zu extrahieren
          const match = filename.match(/^(\d+)\.png$/); // Annahme: Der Dateiname ist eine Zahl gefolgt von .png
          if (match) {
            ImageNumber = match[1];
            ImageNumberConverted = parseFloat(ImageNumber);
            console.log("Extrahierte Bildnummer:", ImageNumber);
          } else {
            console.error("Kein gültiger Dateiname gefunden");
            return;
          }
        } else {
          console.error("Die URL hat nicht genügend Teile.");
          return; // Rückgabe, wenn die URL nicht das erwartete Format hat
        }
      
        // Berechne die Zeit für Sonnenaufgang und Sonnenuntergang
        var sunrise = getDateObject(getAstroDate("sunrise", undefined, 0));
        var sunrise_m = sunrise.getHours() * 60 + sunrise.getMinutes();
        var sunset = getDateObject(getAstroDate("sunset", undefined, 0));
        var sunset_m = sunset.getHours() * 60 + sunset.getMinutes();
        var now = new Date();
        var now_m = now.getHours() * 60 + now.getMinutes();
      
        // Setze den Wert für die Animation
        setState("0_userdata.0.Wetter.WeatherAnimation.WeatherAnimation", ImageNumberConverted);
      
        // Logik für unterschiedliche Tageszeiten
        if (now_m > sunset_m - 60 && now_m <= sunset_m + 60) {
          log("dusk " + sunrise_m + " " + sunset_m);
          setState("0_userdata.0.Wetter.WeatherAnimation.Weatherurl", obj.state.val, true);
        } else if (now_m > sunrise_m - 60 && now_m <= sunrise_m + 60) {
          log("dawn " + sunrise_m + " " + sunset_m);
          NewLink = ['http://192.168.178.70:8082/vis.0/Wetter/WeatherAnimation/', ImageNumberConverted + 50, '.png'].join('');
          setState("0_userdata.0.Wetter.WeatherAnimation.Weatherurl", NewLink, true);
        } else if (now_m > sunrise_m + 60 && now_m <= sunset_m - 60) {
          log("day " + sunrise_m + " " + sunset_m);
          setState("0_userdata.0.Wetter.WeatherAnimation.Weatherurl", obj.state.val, true);
        } else {
          log("night " + sunrise_m + " " + sunset_m);
          NewLink = ['http://192.168.178.70:8082/vis.0/Wetter/WeatherAnimation/', ImageNumberConverted + 50, '.png'].join('');
          setState("0_userdata.0.Wetter.WeatherAnimation.Weatherurl", NewLink, true);
        }
      
        // Konsolenausgaben für Debugging
        //console.log("ImageName:", ImageName);
        //console.log("ImageNumber:", ImageNumber);
        //console.log("ImageNumberConverted:", ImageNumberConverted);
        //console.log("sunrise_m:", sunrise_m);
        //console.log("sunset_m:", sunset_m);
        //console.log("now_m:", now_m);
      });
      
      

      Jetzt bekomme ich in

      0_userdata.0.Wetter.WeatherAnimation.Weatherurl = /vis.0/main/Wetter/Wetter Hd/2.png
      

      und

      0_userdata.0.Wetter.WeatherAnimation.WeatherAnimation = 2
      

      Außerdem erhalte ich noch folgenden Fehler, den ich schon einmal hatte:

      web.0
      2025-03-25 16:37:01.785	error	Invalid pattern on subscribe: The pattern "id: "daswetter.0.NextHours.Location_1.Day_1.current.iconURL", change: "any"" is not a valid ID pattern
      
      posted in Visualisierung
      J
      jwerlsdf
    • RE: Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden

      @eisbaeeer
      Danke für die Rückmeldung. Ich habe mir den Energiefluss Adapter angeschaut gehabt. Habe es aber dann doch anders gelöst. Jemand anderes hatte es sehr ansprechend mit CSS direkt in VIS gemacht und ich habe das für meinen Teil übernommen. So brauchte ich nicht mehr den Adapter und auch weitere Skripte entfallen dadurch. SourceAnalytix mache ich jetzt die wöchentlichen/ monatlichen Ergebnisse. Mal schauen wie es dann aussieht.

      posted in ioBroker Allgemein
      J
      jwerlsdf
    • RE: Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden

      @eisbaeeer
      ist das mit dem Energiefluss Adapter erstellt worden?
      Könntest du mir bitte diese View zur Verfügung stellen? Danke!

      Monatliche Einträge bekomme ich wohl nicht mit dem SH20T...

      posted in ioBroker Allgemein
      J
      jwerlsdf
    • RE: Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden

      Hat jemand eine VIS gebaut, bei der ich alle Werte so wie in der APP angezeigt bekomme? Da ich nicht alle Werte habe, muss ich wohl mit Zusatzskripten arbeiten?! Wie sähen diese Skripte aus?

      Zweite Frage. Hat jemand die monatlichen Ergebnisse eingebunden? Das funktioniert leider nicht. Ich habe den sungrow sh20T wechselrichter. Die Dat3n lese ich sowohl über den WiNet-S2 als auch über den loggen Port aus.

      posted in ioBroker Allgemein
      J
      jwerlsdf
    • RE: Falsche admin Version obwohl aktuell

      Ergo kann ich über den Befehl iobroker del adapter alle löschen einschließlich admin?

      posted in ioBroker Allgemein
      J
      jwerlsdf
    • RE: Falsche admin Version obwohl aktuell

      @homoran
      Wird nicht der admin beim slave mit installiert? War bei mir so gewesen...

      posted in ioBroker Allgemein
      J
      jwerlsdf
    • RE: Falsche admin Version obwohl aktuell

      @homoran
      Oh danke. Habe tatsächlich die 6er Version installiert gehabt. Habe dort das upgrade ebenfalls durchgeführt. Ich benutze den slave so selten, dass ich es total vergessen habe.

      posted in ioBroker Allgemein
      J
      jwerlsdf
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo