Navigation

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

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    J
    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 14
    • Best 1
    • Groups 1

    jpakusch

    @jpakusch

    Starter

    1
    Reputation
    8
    Profile views
    14
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    jpakusch Follow
    Starter

    Best posts made by jpakusch

    • RE: Test Adapter Awtrix-Light (Awtrix 3)

      @mcu said in Test Adapter Awtrix-Light:

      @jpakusch
      https://forum.iobroker.net/topic/65571/test-adapter-awtrix-light/440

      Sorry wenn ich nochmal störe bzw mit Fragen komme die schon besprochen wurden, aber ich scrolle schon seit Stunden durch den thread und versuche ohne Erfolg eine Lösung zu finden.
      Wie gesagt funktioniert dein Codeschnipsel von gestern super um die "nativen" Apps ein- und auszublenden.
      auch die vom awtrix adapter erstellten custom apps kann ich ausblenden.
      Die scheinen dann aber dauerhaft weg zu sein, also ich kann sie mit setzen der visibility auf "true" nicht wieder aktivieren.
      Hast du dafür eine Erklärung bzw. eine Lösung?
      Edit: Was mir gerade einfällt: könnte es klappen, die deaktivierte Custom app einfach per Javascript zu löschen (mittels leerer Payload), der AWtrix Adapter sendet danach normal sein update und sie erscheint wieder?
      Teste ich nachher mal, bin heue leider erst später wieder zu Hause

      Gruß, Jan

      posted in Tester
      J
      jpakusch

    Latest posts made by jpakusch

    • RE: Ostrom Api auslesen

      Screenshot 2025-08-20 123708.png

      posted in Skripten / Logik
      J
      jpakusch
    • Ostrom Api auslesen

      Hallo,

      da ich nirgends was passendes gefunden habe bin ich gerade dabei, mir ein Skript zum Auslesen der Verbrauchsdaten von meinem dynamischen Tarif meines Stromanbieters Ostrom abzufragen. Das ganze ist noch eine sehr frühe Version und ich arbeite noch dran, vermutlich werde ich das skript hier auch noch aktualisieren.

      Was aktuell geht:

      • Monatliche Verbräche abfragen des aktuellen Jahres
      • Tägliche Verbrauchsdaten des aktuellen Monats

      nur eine kleiner Schritt den ich noch gehen möchte: Stündliche Verbrauchsdaten des aktuellen Tages (bzw des gestrigen, der heutige geht noch nicht)

      Bin gespannt ob das hier noch jemanden interessiert, kann dann auch gern bei der Einrichtung helfen, auch wenn es mein erstes Skript mit Javaskript ist (ja ich hatte Hilfe von CHatGPT um mir ein Grundgerüst hinzustellen), verwende sonst eher Blockly oder außerhalb von iobroker Python.
      Bin auch gespannt auf Verbesserungsvorschläge

      const axios = require('axios');
      
      const clientId = getState('javascript.0.ostrom.client_id').val;
      const clientSecret = getState('javascript.0.ostrom.client_secret').val;
      const contractNumber = getState('javascript.0.ostrom.contract_number').val;
      
      async function getToken() {
          try {
              const authHeader = 'Basic ' + Buffer.from(`${clientId}:${clientSecret}`).toString('base64');
              const response = await axios.post(
                  'https://auth.production.ostrom-api.io/oauth2/token',
                  'grant_type=client_credentials',
                  {
                      headers: {
                          'Authorization': authHeader,
                          'Content-Type': 'application/x-www-form-urlencoded',
                          'Accept': 'application/json'
                      }
                  }
              );
      
              return response.data.access_token;
          } catch (err) {
              console.error('❌ Fehler bei getToken: ' + 
                            (err.response ? err.response.status + ' ' + JSON.stringify(err.response.data) : err.message));
              return null;
          }
      }
      
      async function getConsumption(token) {
          try {
              const response = await axios.get(`https://api.ostrom.de/contracts/${contractNumber}/consumption`, {
                  headers: { Authorization: `Bearer ${token}` }
              });
              return response.data;
          } catch (err) {
              console.error('❌ Fehler bei getConsumption:');
              return [];
          }
      }
      async function updateConsumption_monthly() {
          try {
              const token = await getToken();
              if (!token) {
                  console.error('❌ Zugriffstoken konnte nicht abgerufen werden');
                  return;
              }
      
              const contractId = contractNumber
              const startDate = new Date(Date.UTC(new Date().getFullYear(), 0, 1)).toISOString();
              const endDate = new Date(Date.UTC(new Date().getFullYear(), new Date().getMonth() + 1, 0)).toISOString();
      
              const response = await axios.get(
                  `https://production.ostrom-api.io/contracts/${contractId}/energy-consumption`,
                  {
                      headers: {
                          Authorization: `Bearer ${token}`,
                          Accept: 'application/json'
                      },
                      params: {
                          startDate,
                          endDate,
                          resolution: 'MONTH'
                      }
                  }
              );
      
              const consumptionData = response.data.data;
      
              if (!consumptionData || consumptionData.length === 0) {
                  console.warn('⚠️ Keine Verbrauchsdaten verfügbar');
                  return;
              }
      
              for (const item of consumptionData) {
                  const date = new Date(item.date);
                  const year = date.getFullYear();
                  const month = (date.getMonth() + 1).toString().padStart(2, '0');
                  const key = `javascript.0.ostrom.consumption_monthly.${year}_${month}`;
                  const value = item.kWh || 0;
      
                  await createStateAsync(key, value, { type: 'number', read: true, write: false });
                  await setStateAsync(key, value, true);
              }
      
              console.log('✅ monthly Verbrauchsdaten erfolgreich aktualisiert');
      
          } catch (err) {
              console.error('❌ Fehler bei updateConsumption:' +(err.response ? err.response.status + ' ' + JSON.stringify(err.response.data) : err.message));
          }
      }
      
      async function updateConsumption_daily() {
          try {
              const token = await getToken();
              if (!token) {
                  console.error('❌ Zugriffstoken konnte nicht abgerufen werden');
                  return;
              }
      
              const contractId = contractNumber
              const jetzt = new Date();
              //const startDate = new Date(Date.UTC(jetzt.getUTCFullYear(), jetzt.getUTCMonth(), jetzt.getUTCDate()));
              //const endDate =   new Date(Date.UTC(jetzt.getUTCFullYear(), jetzt.getUTCMonth(), jetzt.getUTCDate()+1));
              const startDate = new Date(Date.UTC(new Date().getFullYear(), new Date().getMonth(), 1)).toISOString();
              const endDate =   new Date(Date.UTC(new Date().getFullYear(), new Date().getMonth(), jetzt.getUTCDate())).toISOString();
      
              const response = await axios.get(
                  `https://production.ostrom-api.io/contracts/${contractId}/energy-consumption`,
                  {
                      headers: {
                          Authorization: `Bearer ${token}`,
                          Accept: 'application/json'
                      },
                      params: {
                          startDate,
                          endDate,
                          resolution: 'DAY'
                      }
                  }
              );
      
              const consumptionData = response.data.data;
      
              if (!consumptionData || consumptionData.length === 0) {
                  console.warn('⚠️ Keine Verbrauchsdaten verfügbar');
                  return;
              }
      
              for (const item of consumptionData) {
                  const date = new Date(item.date);
                  const year = date.getFullYear();
                  const month = (date.getMonth() + 1).toString().padStart(2, '0');
                  const day = date.getDate().toString().padStart(2, '0');
                  const key = `javascript.0.ostrom.consumption_daily.${year}.${month}.${day}`;
                  const value = item.kWh || 0;
      
                  await createStateAsync(key, value, { type: 'number', read: true, write: false });
                  await setStateAsync(key, value, true);
              }
      
              console.log('✅ daily Verbrauchsdaten erfolgreich aktualisiert');
      
          } catch (err) {
              console.error('❌ Fehler bei updateConsumption:' +(err.response ? err.response.status + ' ' + JSON.stringify(err.response.data) : err.message));
          }
      }
      
      // Hilfsfunktion für async createState
      function createStateAsync(id, value, options) {
          return new Promise(resolve => {
              if (!existsState(id)) {
                  createState(id, value, options, () => resolve());
              } else {
                  resolve();
              }
          });
      }
      
      updateConsumption_monthly();
      updateConsumption_daily();
      
      // Manueller Trigger
      on({ id: 'javascript.0.ostrom.update', val: true, ack: false }, async () => {
          await updateConsumption_monthly();
          await updateConsumption_daily();
          // Reset Trigger
          setState('javascript.0.ostrom.update', false, true);
      });
      //Monthly täglich updaten
      setInterval(updateConsumption_monthly, 24 * 60 * 60 * 1000);
      setInterval(updateConsumption_daily, 24 * 60 * 60 * 1000);
      
      posted in Skripten / Logik
      J
      jpakusch
    • RE: Test lovelace 4.x

      @garfonso Erstmal Danke für die Antwort!
      ON_Actuual hatte ich befüllt, irgendwie wurde das aber immer wieder entfernt.
      Ich musste dann auch manuell noch die Rolle auf light.Switch setzen, das hat der "Assistent" bei der GEräteerstellung irgendwie nicht gemacht. als mir das aufgefallen war klappte auch alles.

      (da du KNX nutzt, solltest du das Konzept ja kennen, oder? 😉 )
      

      ...Kenn' ick! 😉

      posted in Tester
      J
      jpakusch
    • RE: Test lovelace 4.x

      Hallo Zusammen,

      ich bin seit ein paar Tagen begeistert dabei mir eine Lovelace-Visu für mein IOBroker zu klöppeln.
      Ich habe hier schon den Thread hoch und runter gelesen und auch den "ultimate Guide" durchgearbeitet.
      Vieles klappt danach schon Super.
      Wo es bei mir nun hapert sind Lampen mit Farbsteuerung (Farbtemperatur oder auch RGB Lampen)
      Ich habe die wie hier ja mehrfach Empfohlen über die Geräte in IOBroker angelegt.
      Leider tauchen Sie bei mir gar nicht als Entitäten auf.
      Woran kann das liegen?

      Hier meine Config unter "Geräte:
      Screenshot 2024-12-06 084122.png

      von den gezeigten Geräten tauchen nur die Einhornlichterkette und die Testlampe "Kind 1 LED" vom Typ Dimmer unter entitäten auf.

      und das Ergebnis unter Objekte-Alias:

      Screenshot 2024-12-06 084652.png

      Für einen Schubs in die richtige Richtung wäre ich sehr dankbar!

      Gruß, Jan

      posted in Tester
      J
      jpakusch
    • RE: Smartmeter EFR-Stromzähler, SGM

      @kaptn_nuss Schön wärs, aber leider nein. bisher nichts zu machen.
      Halte mich gern auf dem Laufenden wenn Du was rausbekommst.
      Gruß, Jan

      posted in Hardware
      J
      jpakusch
    • RE: Smartmeter EFR-Stromzähler, SGM

      @ralla66 said in Smartmeter EFR-Stromzähler, SGM:

      welcher Typ A, B oder U ?

      @ralla66 SGM-D4-A920N

      posted in Hardware
      J
      jpakusch
    • RE: Smartmeter EFR-Stromzähler, SGM

      Hallo,

      ich hoffe Ihr könnt mir helfen.
      Ich hatte bislang einen Logarex Zähler den ich mit einer Volkszähler Installation und einem optischen Lesekopf lange problemlos ausgelesen habe

      Nun wurde mein Zähler gegen einen EFR SGM-D4 getauscht.
      Die Volkszähler Sache bekomme ich damit nicht zum Laufen, da dachte ich dass ich das mal den IOBroker machen lasse bei der Gelegenheit, spare ich mir die Volkszähler Installation.

      Ich habe alle Konfigurationen für den SGM-C4 hier aus dem Thread schon getestet. also Werte frei lassen und EFR-JSON eingestellt.
      Habe 9600 8N1 eingestellt, 9600 7E1 etc etc.
      Das gleiche habe ich auch mit der Einstellung SML statt EFR Json versucht.!
      Nicht half dabei, den Adapter grün zu bekommen.
      die optische Schnittstelle spuckt unleserliche Daten aus. Mich wundert, dass EFR immer lesbar erscheint, aber der rest ist einfach kauderwelsch.
      Ich habe ein Bild davon angehängt.
      image.png

      Drehen des Kopfes bzw leichtes Versetzen hilft nicht (Ich bin das herumprobieren vom Logarex Zähler gewohnt), es kommt immer Kauderwelsch.
      Ich bin für jede Hilfe Dankbar!

      Grüße, Jan

      posted in Hardware
      J
      jpakusch
    • RE: Test Adapter Awtrix-Light (Awtrix 3)

      @haus-automatisierung said in Test Adapter Awtrix-Light:

      @jpakusch sagte in Test Adapter Awtrix-Light:

      könnte es klappen, die deaktivierte Custom app einfach per Javascript zu löschen (mittels leerer Payload), der AWtrix Adapter sendet danach normal sein update und sie erscheint wieder?

      Ja, das klappt. Allerdings würde dann z.B. sofort bei einer Wertänderung die App wieder eingeblendet. Würde ich jetzt nicht als bevorzugte Lösung für die Zukunft so sehen. Eventuell baue ich das noch nativ in den Adapter ein, dass man die Apps über Datenpunkte ein- und ausblenden kann.

      Danke für die schnelle Antwort!
      Als Workaround hilft es mir dann aber definitiv! Ich lösche die app einfach erst dann wenn ich sie wieder anzeigen will.
      Danke für die Bereitschaft, das später einzubauen!

      Grüße, Jan

      posted in Tester
      J
      jpakusch
    • RE: Test Adapter Awtrix-Light (Awtrix 3)

      @mcu said in Test Adapter Awtrix-Light:

      @jpakusch
      https://forum.iobroker.net/topic/65571/test-adapter-awtrix-light/440

      Sorry wenn ich nochmal störe bzw mit Fragen komme die schon besprochen wurden, aber ich scrolle schon seit Stunden durch den thread und versuche ohne Erfolg eine Lösung zu finden.
      Wie gesagt funktioniert dein Codeschnipsel von gestern super um die "nativen" Apps ein- und auszublenden.
      auch die vom awtrix adapter erstellten custom apps kann ich ausblenden.
      Die scheinen dann aber dauerhaft weg zu sein, also ich kann sie mit setzen der visibility auf "true" nicht wieder aktivieren.
      Hast du dafür eine Erklärung bzw. eine Lösung?
      Edit: Was mir gerade einfällt: könnte es klappen, die deaktivierte Custom app einfach per Javascript zu löschen (mittels leerer Payload), der AWtrix Adapter sendet danach normal sein update und sie erscheint wieder?
      Teste ich nachher mal, bin heue leider erst später wieder zu Hause

      Gruß, Jan

      posted in Tester
      J
      jpakusch
    • RE: Test Adapter Awtrix-Light (Awtrix 3)

      @mcu
      Vielen Dank!
      Das hat geklappt, damit spiele ich mal weiter rum!

      Gruß, Jan

      posted in Tester
      J
      jpakusch
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo