Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. Skripten / Logik
  4. JavaScript
  5. Skript aufteilen möglich?

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    552

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    5.4k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.4k

Skript aufteilen möglich?

Geplant Angeheftet Gesperrt Verschoben JavaScript
20 Beiträge 10 Kommentatoren 382 Aufrufe 9 Watching
  • Ä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.
  • HomoranH Homoran

    @BertDerKleine sagte in Skript aufteilen möglich?:

    Hallo,
    gibt es heute in 2026 eine Möglichkeit, ein größeres Skript in mehrere Module aufzuteilen?

    Ich habe nur einen 8 Jahre alten Thread gefunden dazu, damals ging es noch nicht.

    was genau meinst du damit?

    BertDerKleineB Offline
    BertDerKleineB Offline
    BertDerKleine
    schrieb am zuletzt editiert von
    #3

    @Homoran sagte in Skript aufteilen möglich?:

    was genau meinst du damit?

    Langes Javaskript in zwei kleinere Skripte aufteilen. Soll trotzdem noch weiter funktionieren. zB Hauptfunktionen in A, Nebenfunktionen in B oder was auch immer als Splitkriterium.

    HomoranH 1 Antwort Letzte Antwort
    0
    • ThisoftT Offline
      ThisoftT Offline
      Thisoft
      schrieb am zuletzt editiert von
      #4

      Klar geht das. Du musst dich natürlich selbst darum kümmern dass alle Daten/Werte die übergreifend benötigt werden in DP's geschrieben bzw. von dort gelesen werden.

      22 HM-Geräte; PivCCU2 auf RasPi

      ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

      1 Antwort Letzte Antwort
      0
      • BertDerKleineB BertDerKleine

        @Homoran sagte in Skript aufteilen möglich?:

        was genau meinst du damit?

        Langes Javaskript in zwei kleinere Skripte aufteilen. Soll trotzdem noch weiter funktionieren. zB Hauptfunktionen in A, Nebenfunktionen in B oder was auch immer als Splitkriterium.

        HomoranH Nicht stören
        HomoranH Nicht stören
        Homoran
        Global Moderator Administrators
        schrieb am zuletzt editiert von
        #5

        @BertDerKleine sagte in Skript aufteilen möglich?:

        @Homoran sagte in Skript aufteilen möglich?:

        was genau meinst du damit?

        Langes Javaskript in zwei kleinere Skripte aufteilen. Soll trotzdem noch weiter funktionieren. zB Hauptfunktionen in A, Nebenfunktionen in B oder was auch immer als Splitkriterium.

        Was willst du damit bewirken?
        Was macht das "lange" Skript?
        Hat es nur "zu viele" Zeilen?
        kann man das dann ggf. über den Aufruf von immer gleichen Funktionen kürzen?

        kein Support per PN! - Fragen im Forum stellen -
        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
        Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

        1 Antwort Letzte Antwort
        1
        • BertDerKleineB BertDerKleine

          Hallo,
          gibt es heute in 2026 eine Möglichkeit, ein größeres Skript in mehrere Module aufzuteilen?

          Ich habe nur einen 8 Jahre alten Thread gefunden dazu, damals ging es noch nicht.

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von
          #6

          @BertDerKleine

          Am besten zeigst du mal dein Script, dann kann man bessere Empfehlungen abgeben.
          Bitte auch mal schreiben warum du aufteilen möchtest obwohl es so funktioniert.

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

          OliverIOO 1 Antwort Letzte Antwort
          3
          • T Nicht stören
            T Nicht stören
            ticaki
            schrieb am zuletzt editiert von
            #7

            Es gibt im Forum mehrere Topics die sich damit befassen und es gelöst haben. Ich weiß aber nicht mehr wie und ich finde sie auch nicht mit der suche.

            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

            Spenden

            1 Antwort Letzte Antwort
            0
            • ofri2607O Online
              ofri2607O Online
              ofri2607
              schrieb am zuletzt editiert von
              #8

              @bertderkleine
              Meinst du in der Richtung https://forum.iobroker.net/post/1316079

              1 Antwort Letzte Antwort
              0
              • BertDerKleineB BertDerKleine

                Hallo,
                gibt es heute in 2026 eine Möglichkeit, ein größeres Skript in mehrere Module aufzuteilen?

                Ich habe nur einen 8 Jahre alten Thread gefunden dazu, damals ging es noch nicht.

                arteckA Offline
                arteckA Offline
                arteck
                Developer Most Active
                schrieb am zuletzt editiert von
                #9

                @BertDerKleine sagte in Skript aufteilen möglich?:

                gibt es heute in 2026 eine Möglichkeit, ein größeres Skript in mehrere Module aufzuteilen?

                Ich habe nur einen 8 Jahre alten Thread gefunden dazu, damals ging es noch nicht.

                was soll das heissen.. ein script kannst du immer aufteilen, warum auch nicht

                muss man nur wissen nur wie

                zigbee hab ich, zwave auch, nuc's genauso und HA auch

                BananaJoeB 1 Antwort Letzte Antwort
                0
                • arteckA arteck

                  @BertDerKleine sagte in Skript aufteilen möglich?:

                  gibt es heute in 2026 eine Möglichkeit, ein größeres Skript in mehrere Module aufzuteilen?

                  Ich habe nur einen 8 Jahre alten Thread gefunden dazu, damals ging es noch nicht.

                  was soll das heissen.. ein script kannst du immer aufteilen, warum auch nicht

                  muss man nur wissen nur wie

                  BananaJoeB Online
                  BananaJoeB Online
                  BananaJoe
                  Most Active
                  schrieb am zuletzt editiert von
                  #10

                  @arteck sagte in Skript aufteilen möglich?:

                  was soll das heissen.. ein script kannst du immer aufteilen, warum auch nicht

                  muss man nur wissen nur wie

                  Genau dem "wie" hat er doch gefragt :-) Wenn du es weist ... nur zu

                  ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                  BertDerKleineB arteckA 2 Antworten Letzte Antwort
                  1
                  • ilovegymI Offline
                    ilovegymI Offline
                    ilovegym
                    schrieb am zuletzt editiert von
                    #11

                    Ich mach das z.bsp. bei meinem Unifi-API Script, da schreibe ich mir Werte in verschiedene Index.json , die ich dann mit anderen scripts auswerte. So spare ich mir States und hab das etwas getrennt, was für die Selektivität besser ist.
                    Andererseits ist die Struktur und Kommentarfunktion im Script wichtig, damit man weiß, was man da verbrochen hat.. solange die Funktionen nicht selbsterklärend sind…

                    ilovegym66 – ioBroker Projekte & Automationen
                    GitHub: https://github.com/Ilovegym66 | Austausch im Discord: https://discord.gg/yC65zjr5uq

                    1 Antwort Letzte Antwort
                    0
                    • T Nicht stören
                      T Nicht stören
                      ticaki
                      schrieb am zuletzt editiert von
                      #12

                      Alle Möglichkeiten aufzuzählen macht das ganze imho nur unübersichtlich - der TE sollte sich dazu mal melden (der javascript-adapter hat auch ein messagesystem :) )

                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                      Spenden

                      1 Antwort Letzte Antwort
                      0
                      • BananaJoeB BananaJoe

                        @arteck sagte in Skript aufteilen möglich?:

                        was soll das heissen.. ein script kannst du immer aufteilen, warum auch nicht

                        muss man nur wissen nur wie

                        Genau dem "wie" hat er doch gefragt :-) Wenn du es weist ... nur zu

                        BertDerKleineB Offline
                        BertDerKleineB Offline
                        BertDerKleine
                        schrieb am zuletzt editiert von BertDerKleine
                        #13

                        @BananaJoe sagte in Skript aufteilen möglich?:

                        Genau dem "wie" hat er doch gefragt :-) Wenn du es weist ... nur zu

                        Richtig!

                        Ich wiederhole nochmal was die Intention ist:

                        Langes Javaskript in zwei kleinere Skripte aufteilen. Soll trotzdem noch weiter funktionieren. zB Hauptfunktionen in A, Nebenfunktionen in B oder was auch immer als Splitkriterium.
                        

                        Soweit ich das in dem Uraltthread gelesen habe, werden alle globalen Skripte immer überall mitgeladen. Das gefällt mir nicht, daher sind simple globale Skripte keine Antwort auf meine Frage.

                        Nachdem hier bisher keine besonders hilfreichen Tips kamen, habe ich die Maschinen gefragt und die sind der Meinung, man könnte das mit "onMessage / messageToAsync." lösen.

                        Beispiel wäre so ein Szenario, wo ich eine Hilfsfunktion eben in ein zweites lokales Skript auslagere:

                        // === Skript A: History Helper ===
                        // Liefert Durchschnitt + Median eines Datenpunkts für ein Zeitfenster
                        
                        onMessage('getHistoryStats', async (data, callback) => {
                            const { stateId, hours } = data;                     // z.B. { stateId: '0_userdata.0.temperatur', hours: 24 }
                            
                            if (!stateId || !hours) {
                                return callback({ error: 'stateId und hours fehlen' });
                            }
                        
                            const end   = Date.now();
                            const start = end - hours * 60 * 60 * 1000;
                        
                            getHistory(stateId, {
                                start: start,
                                end:   end,
                                aggregate: 'none',        // alle Rohwerte holen (für Median nötig)
                                count: 0                  // kein Limit
                            }, (err, result) => {
                                if (err) {
                                    log(`[HistoryHelper] Fehler bei ${stateId}: ${err}`, 'error');
                                    return callback({ error: err.toString() });
                                }
                        
                                // Nur gültige Werte
                                const values = result
                                    .map(r => r.val)
                                    .filter(v => v !== null && v !== undefined && !isNaN(v));
                        
                                if (values.length === 0) {
                                    return callback({ average: null, median: null, count: 0 });
                                }
                        
                                // Durchschnitt
                                const average = values.reduce((a, b) => a + b, 0) / values.length;
                        
                                // Median
                                const sorted = [...values].sort((a, b) => a - b);
                                const mid = Math.floor(sorted.length / 2);
                                const median = sorted.length % 2 === 0 
                                    ? (sorted[mid - 1] + sorted[mid]) / 2 
                                    : sorted[mid];
                        
                                log(`[HistoryHelper] ${stateId} | ${values.length} Werte | Ø ${average.toFixed(2)} | Median ${median.toFixed(2)}`);
                        
                                callback({
                                    average: Number(average.toFixed(2)),
                                    median:  Number(median.toFixed(2)),
                                    count:   values.length
                                });
                            });
                        });
                        
                        log('✅ History-Helper gestartet – wartet auf "getHistoryStats" Nachrichten');
                        

                        und das Hauptskript:

                        // === Skript B: Daily Report ===
                        // Wird jeden Tag um 23:59 ausgelöst, holt für zwei Datenpunkte die Stats
                        // und verschickt eine E-Mail
                        
                        const dp1 = '0_userdata.0.temperatur_wohnzimmer';   // ← hier deine ersten DP-ID
                        const dp2 = '0_userdata.0.feuchtigkeit_bad';        // ← hier deine zweite DP-ID
                        
                        // Trigger: jeden Tag um 23:59 (Tagesende)
                        schedule('59 23 * * *', async () => {
                            log('🕙 Tagesende – starte History-Statistik...');
                        
                            const hours = 24;   // letze 24 Stunden
                        
                            try {
                                // Parallele Abfragen (schnell)
                                const [res1, res2] = await Promise.all([
                                    messageToAsync(
                                        { instance: 0, script: 'script.js.history_helper', message: 'getHistoryStats' },
                                        { stateId: dp1, hours: hours }
                                    ),
                                    messageToAsync(
                                        { instance: 0, script: 'script.js.history_helper', message: 'getHistoryStats' },
                                        { stateId: dp2, hours: hours }
                                    )
                                ]);
                        
                                // E-Mail zusammenbauen
                                const text = `
                        Tagesbericht – letzte 24 Stunden (${new Date().toLocaleDateString('de-DE')})
                        
                        ${dp1}:
                          • Durchschnitt: ${res1.average ?? '—'} 
                          • Median:      ${res1.median ?? '—'} 
                          • Werte:       ${res1.count}
                        
                        ${dp2}:
                          • Durchschnitt: ${res2.average ?? '—'} 
                          • Median:      ${res2.median ?? '—'} 
                          • Werte:       ${res2.count}
                                `.trim();
                        
                                // E-Mail versenden (E-Mail-Adapter muss konfiguriert sein!)
                                sendTo('email.0', 'send', {
                                    to:      'deine@email.de',          // ← deine Empfängeradresse
                                    subject: 'ioBroker Tagesbericht ' + new Date().toLocaleDateString('de-DE'),
                                    text:    text
                                });
                        
                                log('✅ E-Mail mit History-Statistik versendet');
                        
                            } catch (e) {
                                log(`❌ Fehler im Daily-Report: ${e}`, 'error');
                            }
                        });
                        
                        log('✅ Daily-Report-Skript geladen – Cron-Job um 23:59 aktiv');
                        

                        Ist das also der beste Weg, um die Aufgabe aus Post #3 und in diesem Beispiel zu lösen, wenn ich ein Skript aufteilen will und die Funktionen ohne "globale Skripte" anderswo wiederverwenden will?

                        So könnte ich den Durchschnittsberechner auslagern.

                        HomoranH 1 Antwort Letzte Antwort
                        0
                        • OliverIOO OliverIO

                          @BertDerKleine

                          Am besten zeigst du mal dein Script, dann kann man bessere Empfehlungen abgeben.
                          Bitte auch mal schreiben warum du aufteilen möchtest obwohl es so funktioniert.

                          OliverIOO Offline
                          OliverIOO Offline
                          OliverIO
                          schrieb am zuletzt editiert von
                          #14

                          @BertDerKleine sagte in Skript aufteilen möglich?:

                          Nachdem hier bisher keine besonders hilfreichen Tips kamen

                          viel mitwirkung war von deiner seite allerdings auch nicht da

                          @oliverio sagte in Skript aufteilen möglich?:

                          Am besten zeigst du mal dein Script, dann kann man bessere Empfehlungen abgeben.
                          Bitte auch mal schreiben warum du aufteilen möchtest obwohl es so funktioniert.

                          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
                          • T Nicht stören
                            T Nicht stören
                            ticaki
                            schrieb am zuletzt editiert von ticaki
                            #15

                            Nächstes Mal beschreibe etwas mehr was du vorhast - das Messagesystem hab ich in meinem letzten Beitrag erwähnt. Wieso soll ich aber da viel Text zu schreiben wenn ich nicht weiß ob es passen könnte.

                            Wäre mir aber zu komplex - würde es wie ilovegym mit states und json machen. (vielleicht macht er es auch mit fs - das wäre mir dann zu umständlich)

                            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                            Spenden

                            1 Antwort Letzte Antwort
                            0
                            • BertDerKleineB BertDerKleine

                              @BananaJoe sagte in Skript aufteilen möglich?:

                              Genau dem "wie" hat er doch gefragt :-) Wenn du es weist ... nur zu

                              Richtig!

                              Ich wiederhole nochmal was die Intention ist:

                              Langes Javaskript in zwei kleinere Skripte aufteilen. Soll trotzdem noch weiter funktionieren. zB Hauptfunktionen in A, Nebenfunktionen in B oder was auch immer als Splitkriterium.
                              

                              Soweit ich das in dem Uraltthread gelesen habe, werden alle globalen Skripte immer überall mitgeladen. Das gefällt mir nicht, daher sind simple globale Skripte keine Antwort auf meine Frage.

                              Nachdem hier bisher keine besonders hilfreichen Tips kamen, habe ich die Maschinen gefragt und die sind der Meinung, man könnte das mit "onMessage / messageToAsync." lösen.

                              Beispiel wäre so ein Szenario, wo ich eine Hilfsfunktion eben in ein zweites lokales Skript auslagere:

                              // === Skript A: History Helper ===
                              // Liefert Durchschnitt + Median eines Datenpunkts für ein Zeitfenster
                              
                              onMessage('getHistoryStats', async (data, callback) => {
                                  const { stateId, hours } = data;                     // z.B. { stateId: '0_userdata.0.temperatur', hours: 24 }
                                  
                                  if (!stateId || !hours) {
                                      return callback({ error: 'stateId und hours fehlen' });
                                  }
                              
                                  const end   = Date.now();
                                  const start = end - hours * 60 * 60 * 1000;
                              
                                  getHistory(stateId, {
                                      start: start,
                                      end:   end,
                                      aggregate: 'none',        // alle Rohwerte holen (für Median nötig)
                                      count: 0                  // kein Limit
                                  }, (err, result) => {
                                      if (err) {
                                          log(`[HistoryHelper] Fehler bei ${stateId}: ${err}`, 'error');
                                          return callback({ error: err.toString() });
                                      }
                              
                                      // Nur gültige Werte
                                      const values = result
                                          .map(r => r.val)
                                          .filter(v => v !== null && v !== undefined && !isNaN(v));
                              
                                      if (values.length === 0) {
                                          return callback({ average: null, median: null, count: 0 });
                                      }
                              
                                      // Durchschnitt
                                      const average = values.reduce((a, b) => a + b, 0) / values.length;
                              
                                      // Median
                                      const sorted = [...values].sort((a, b) => a - b);
                                      const mid = Math.floor(sorted.length / 2);
                                      const median = sorted.length % 2 === 0 
                                          ? (sorted[mid - 1] + sorted[mid]) / 2 
                                          : sorted[mid];
                              
                                      log(`[HistoryHelper] ${stateId} | ${values.length} Werte | Ø ${average.toFixed(2)} | Median ${median.toFixed(2)}`);
                              
                                      callback({
                                          average: Number(average.toFixed(2)),
                                          median:  Number(median.toFixed(2)),
                                          count:   values.length
                                      });
                                  });
                              });
                              
                              log('✅ History-Helper gestartet – wartet auf "getHistoryStats" Nachrichten');
                              

                              und das Hauptskript:

                              // === Skript B: Daily Report ===
                              // Wird jeden Tag um 23:59 ausgelöst, holt für zwei Datenpunkte die Stats
                              // und verschickt eine E-Mail
                              
                              const dp1 = '0_userdata.0.temperatur_wohnzimmer';   // ← hier deine ersten DP-ID
                              const dp2 = '0_userdata.0.feuchtigkeit_bad';        // ← hier deine zweite DP-ID
                              
                              // Trigger: jeden Tag um 23:59 (Tagesende)
                              schedule('59 23 * * *', async () => {
                                  log('🕙 Tagesende – starte History-Statistik...');
                              
                                  const hours = 24;   // letze 24 Stunden
                              
                                  try {
                                      // Parallele Abfragen (schnell)
                                      const [res1, res2] = await Promise.all([
                                          messageToAsync(
                                              { instance: 0, script: 'script.js.history_helper', message: 'getHistoryStats' },
                                              { stateId: dp1, hours: hours }
                                          ),
                                          messageToAsync(
                                              { instance: 0, script: 'script.js.history_helper', message: 'getHistoryStats' },
                                              { stateId: dp2, hours: hours }
                                          )
                                      ]);
                              
                                      // E-Mail zusammenbauen
                                      const text = `
                              Tagesbericht – letzte 24 Stunden (${new Date().toLocaleDateString('de-DE')})
                              
                              ${dp1}:
                                • Durchschnitt: ${res1.average ?? '—'} 
                                • Median:      ${res1.median ?? '—'} 
                                • Werte:       ${res1.count}
                              
                              ${dp2}:
                                • Durchschnitt: ${res2.average ?? '—'} 
                                • Median:      ${res2.median ?? '—'} 
                                • Werte:       ${res2.count}
                                      `.trim();
                              
                                      // E-Mail versenden (E-Mail-Adapter muss konfiguriert sein!)
                                      sendTo('email.0', 'send', {
                                          to:      'deine@email.de',          // ← deine Empfängeradresse
                                          subject: 'ioBroker Tagesbericht ' + new Date().toLocaleDateString('de-DE'),
                                          text:    text
                                      });
                              
                                      log('✅ E-Mail mit History-Statistik versendet');
                              
                                  } catch (e) {
                                      log(`❌ Fehler im Daily-Report: ${e}`, 'error');
                                  }
                              });
                              
                              log('✅ Daily-Report-Skript geladen – Cron-Job um 23:59 aktiv');
                              

                              Ist das also der beste Weg, um die Aufgabe aus Post #3 und in diesem Beispiel zu lösen, wenn ich ein Skript aufteilen will und die Funktionen ohne "globale Skripte" anderswo wiederverwenden will?

                              So könnte ich den Durchschnittsberechner auslagern.

                              HomoranH Nicht stören
                              HomoranH Nicht stören
                              Homoran
                              Global Moderator Administrators
                              schrieb am zuletzt editiert von
                              #16

                              @BertDerKleine sagte in Skript aufteilen möglich?:

                              Ich wiederhole nochmal was die Intention ist:

                              Langes Javaskript in zwei kleinere Skripte aufteilen. Soll trotzdem noch weiter funktionieren. zB Hauptfunktionen in A, Nebenfunktionen in B oder was auch immer als Splitkriterium.

                              Leider hat diese "Beschreibung" keinerlei Aussagekraft, was du mit "lang" und "weiter funktionieren" meinen könntest.

                              kein Support per PN! - Fragen im Forum stellen -
                              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                              Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
                              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                              1 Antwort Letzte Antwort
                              0
                              • BananaJoeB BananaJoe

                                @arteck sagte in Skript aufteilen möglich?:

                                was soll das heissen.. ein script kannst du immer aufteilen, warum auch nicht

                                muss man nur wissen nur wie

                                Genau dem "wie" hat er doch gefragt :-) Wenn du es weist ... nur zu

                                arteckA Offline
                                arteckA Offline
                                arteck
                                Developer Most Active
                                schrieb zuletzt editiert von
                                #17

                                @BananaJoe nenen da steht

                                damals ging es noch nicht.

                                das rauf bezog sich meine Antwort ausserdem.. wiso ging es nach seiner Aussage nicht ? das will ich wissen

                                wo kein Script da keine ..na du weisst schon

                                zigbee hab ich, zwave auch, nuc's genauso und HA auch

                                1 Antwort Letzte Antwort
                                0
                                • P Offline
                                  P Offline
                                  ple
                                  schrieb zuletzt editiert von ple
                                  #18

                                  Ich muss den Thread mal kapern :-)
                                  Ich habe da so eine ähnliche Anforderung oder besser gesagt würde mich das eh mal interessieren, ob sowas irgendwie möglich ist oder was der best pratice wäre.
                                  Ich habe z.B. ein Login für supabase um testweise mal Daten in die Postgres DB in der cloud zu schreiben. ein weit entfernter Gedanke von mir ist, alles States oder zumindest die notwendigen in Supabase zu haben und mal schauen was man dann so machen kann.
                                  Naja, jedenfalls habe ich ein Login um mir einen Token zu holen.

                                  // =============================================
                                  // Login & Init
                                  // =============================================
                                  function initSupabase() {
                                      supabase = createClient(supabaseUrl, supabaseKey, {
                                          auth: { autoRefreshToken: true, persistSession: false }
                                      });
                                      console.log('Supabase Client initialisiert');
                                  }
                                  
                                  async function login() {
                                      try {
                                          console.log(`Login für ${Email}...`);
                                          const { data, error } = await supabase.auth.signInWithPassword({
                                              email: Email,
                                              password: Password
                                          });
                                  
                                          if (error) throw error;
                                  
                                          const token = data.session?.access_token;
                                          if (!token) throw new Error('Kein Token erhalten');
                                  
                                          const payload = JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString());
                                          currentKkunde = payload.kKunde || 0;
                                          console.log(` Login OK | kKunde = ${currentKkunde}`);
                                  
                                          authenticatedClient = createClient(supabaseUrl, supabaseKey, {
                                              global: { headers: { Authorization: `Bearer ${token}` } }
                                          });
                                  
                                          return token;
                                      } catch (err) {
                                          console.error('Login fehlgeschlagen', err);
                                          return null;
                                      }
                                  }
                                  

                                  das wollte ich gerne in einem Script auslagern, was ich dann aufrufen kann. Klar, ist nicht viel Code, aber interessiert mich halt
                                  Zukünftig könnte dann eine Main Function die Daten alle holen, updaten , insert, löschen, Durchschnitt und noch ne Menge mehr machen.
                                  Wenn ich mir den SQL Adapter Main ansehe mit 3500 Zeilen, da frage ich mich, mit welchen Editor arbeitet man da? Man scrollt ja hin und her.
                                  https://github.com/ioBroker/ioBroker.sql/blob/master/main.js

                                  Intel Nuc + Proxmox

                                  T OliverIOO 2 Antworten Letzte Antwort
                                  0
                                  • P ple

                                    Ich muss den Thread mal kapern :-)
                                    Ich habe da so eine ähnliche Anforderung oder besser gesagt würde mich das eh mal interessieren, ob sowas irgendwie möglich ist oder was der best pratice wäre.
                                    Ich habe z.B. ein Login für supabase um testweise mal Daten in die Postgres DB in der cloud zu schreiben. ein weit entfernter Gedanke von mir ist, alles States oder zumindest die notwendigen in Supabase zu haben und mal schauen was man dann so machen kann.
                                    Naja, jedenfalls habe ich ein Login um mir einen Token zu holen.

                                    // =============================================
                                    // Login & Init
                                    // =============================================
                                    function initSupabase() {
                                        supabase = createClient(supabaseUrl, supabaseKey, {
                                            auth: { autoRefreshToken: true, persistSession: false }
                                        });
                                        console.log('Supabase Client initialisiert');
                                    }
                                    
                                    async function login() {
                                        try {
                                            console.log(`Login für ${Email}...`);
                                            const { data, error } = await supabase.auth.signInWithPassword({
                                                email: Email,
                                                password: Password
                                            });
                                    
                                            if (error) throw error;
                                    
                                            const token = data.session?.access_token;
                                            if (!token) throw new Error('Kein Token erhalten');
                                    
                                            const payload = JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString());
                                            currentKkunde = payload.kKunde || 0;
                                            console.log(` Login OK | kKunde = ${currentKkunde}`);
                                    
                                            authenticatedClient = createClient(supabaseUrl, supabaseKey, {
                                                global: { headers: { Authorization: `Bearer ${token}` } }
                                            });
                                    
                                            return token;
                                        } catch (err) {
                                            console.error('Login fehlgeschlagen', err);
                                            return null;
                                        }
                                    }
                                    

                                    das wollte ich gerne in einem Script auslagern, was ich dann aufrufen kann. Klar, ist nicht viel Code, aber interessiert mich halt
                                    Zukünftig könnte dann eine Main Function die Daten alle holen, updaten , insert, löschen, Durchschnitt und noch ne Menge mehr machen.
                                    Wenn ich mir den SQL Adapter Main ansehe mit 3500 Zeilen, da frage ich mich, mit welchen Editor arbeitet man da? Man scrollt ja hin und her.
                                    https://github.com/ioBroker/ioBroker.sql/blob/master/main.js

                                    T Nicht stören
                                    T Nicht stören
                                    ticaki
                                    schrieb zuletzt editiert von
                                    #19

                                    @ple sagte in Skript aufteilen möglich?:

                                    das wollte ich gerne in einem Script auslagern, was ich dann aufrufen kann. Klar, ist nicht viel Code, aber interessiert mich halt
                                    Zukünftig könnte dann eine Main Function die Daten alle holen, updaten , insert, löschen, Durchschnitt und noch ne Menge mehr machen.
                                    Wenn ich mir den SQL Adapter Main ansehe mit 3500 Zeilen, da frage ich mich, mit welchen Editor arbeitet man da? Man scrollt ja hin und her.
                                    https://github.com/ioBroker/ioBroker.sql/blob/master/main.js

                                    Als Editor arbeiten viele mit vscode - gibt dafür auch ein Plugin um iobroker scripte zu bearbeiten.

                                    Ausgelagerte Funktionen gehen nur über global oder ne lib

                                    global: ist ein globales script das in jedes andere Skript kopiert wird
                                    lib: ist ne externe js datei - hab aber vergessen wie das geht.

                                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                    Spenden

                                    1 Antwort Letzte Antwort
                                    0
                                    • P ple

                                      Ich muss den Thread mal kapern :-)
                                      Ich habe da so eine ähnliche Anforderung oder besser gesagt würde mich das eh mal interessieren, ob sowas irgendwie möglich ist oder was der best pratice wäre.
                                      Ich habe z.B. ein Login für supabase um testweise mal Daten in die Postgres DB in der cloud zu schreiben. ein weit entfernter Gedanke von mir ist, alles States oder zumindest die notwendigen in Supabase zu haben und mal schauen was man dann so machen kann.
                                      Naja, jedenfalls habe ich ein Login um mir einen Token zu holen.

                                      // =============================================
                                      // Login & Init
                                      // =============================================
                                      function initSupabase() {
                                          supabase = createClient(supabaseUrl, supabaseKey, {
                                              auth: { autoRefreshToken: true, persistSession: false }
                                          });
                                          console.log('Supabase Client initialisiert');
                                      }
                                      
                                      async function login() {
                                          try {
                                              console.log(`Login für ${Email}...`);
                                              const { data, error } = await supabase.auth.signInWithPassword({
                                                  email: Email,
                                                  password: Password
                                              });
                                      
                                              if (error) throw error;
                                      
                                              const token = data.session?.access_token;
                                              if (!token) throw new Error('Kein Token erhalten');
                                      
                                              const payload = JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString());
                                              currentKkunde = payload.kKunde || 0;
                                              console.log(` Login OK | kKunde = ${currentKkunde}`);
                                      
                                              authenticatedClient = createClient(supabaseUrl, supabaseKey, {
                                                  global: { headers: { Authorization: `Bearer ${token}` } }
                                              });
                                      
                                              return token;
                                          } catch (err) {
                                              console.error('Login fehlgeschlagen', err);
                                              return null;
                                          }
                                      }
                                      

                                      das wollte ich gerne in einem Script auslagern, was ich dann aufrufen kann. Klar, ist nicht viel Code, aber interessiert mich halt
                                      Zukünftig könnte dann eine Main Function die Daten alle holen, updaten , insert, löschen, Durchschnitt und noch ne Menge mehr machen.
                                      Wenn ich mir den SQL Adapter Main ansehe mit 3500 Zeilen, da frage ich mich, mit welchen Editor arbeitet man da? Man scrollt ja hin und her.
                                      https://github.com/ioBroker/ioBroker.sql/blob/master/main.js

                                      OliverIOO Offline
                                      OliverIOO Offline
                                      OliverIO
                                      schrieb zuletzt editiert von
                                      #20

                                      @ple

                                      Du könntest ein Service Script laufen lassen, das alles mit supabase macht, also anmelden, abrufen, schreiben etc.

                                      So wie @ticaki oben vorgeschlagen hat horcht dieses Skript dann auf bestimmte befehlsworte, führt die jeweilige Aktion aus und gibt die Daten zurück, ohne das sichnjedes einzelne Skripte um die supabase Details kümmern muss.

                                      Klar kann man auch einzelne Programmatiken lokal ablegen und auch einbinden. Da gibt es hier im Forum Beispiele dazu. Müsste ich suchen wenn das das Ziel wäre.
                                      Dann könnte man noch ein öffentliches npm Paket machen, das finde ich nicht so optimal, theoretisch auch ein privates Paket, das habe ich noch nie ausprobiert.
                                      Wenn ich etwas umfangreicheres benötige, mit mehreren Dateien, dann würde ich lieber einen eigenen Adapter machen, da hat man dann alle Möglichkeiten.

                                      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
                                      Antworten
                                      • In einem neuen Thema antworten
                                      Anmelden zum Antworten
                                      • Älteste zuerst
                                      • Neuste zuerst
                                      • Meiste Stimmen


                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      366

                                      Online

                                      32.7k

                                      Benutzer

                                      82.5k

                                      Themen

                                      1.3m

                                      Beiträge
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                      ioBroker Community 2014-2025
                                      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