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. Entwicklung
  4. Technische Fragen zur Adapterentwicklung

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Technische Fragen zur Adapterentwicklung

Geplant Angeheftet Gesperrt Verschoben Entwicklung
adaptersendto
18 Beiträge 4 Kommentatoren 842 Aufrufe 5 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.
  • PeoplesP Offline
    PeoplesP Offline
    Peoples
    schrieb am zuletzt editiert von Peoples
    #1

    Hi,

    ich habe vor langer Zeit versucht eines meiner Scripte in einen Adapter zu portieren, das gelang mir damals mehr schlecht als recht und ich verlohr dann irgendwann den Antrieb dort weiter zu machen. Nun wollte ich versuchen dort weiter zu machen wo ich damals aufhörte und begann von Neuem.

    Das Adapter-Template hat sich mittlerweile geändert und nun läuft mein Sendto Befehl nicht mehr.

    Ich erzeuge in der main.js eine Liste der vorhandenen Vis-Views und Projekte und möchte die mit Hilfe von Sendto in meine index_.html holen. Damals machte ich das so:

    index_m.html:

               async function getVisContent() {
                    return new Promise(async function (resolve, reject) {
                        const mObj = new Object();
                              mObj.command = 'send';
                              mObj.message = 'getVisData';
    
                       await sendTo('viewswitch.0', 'send', mObj, (visData) => {
                            if(visData.error) {
                                reject('Error: ' + visData.error);
                            } else {
                                resolve(visData);
                            }
                        });
                    });
                }
    

    main.js:

            message: (obj) => {
              
                 if (typeof obj === 'object' && obj.message) {
                     if (obj.command === 'send') {
                         // e.g. send email or pushover or whatever
                         adapter.log.info('send command');
                         
                        
                        // let projectList = readProjects();
                        // let viewList = readViews(adapter.config.visProject);
                         
                         const visData = new Object();
                         visData.projectList = readProjects();
                         visData.viewList = readViews(adapter.config.visProject);
                         
                         // Send response in callback if required
                         if (obj.callback) adapter.sendTo(obj.from, obj.command, visData, obj.callback);
                     }
                 }
             },
    

    Nun hat sich ja der Aufbau der main.js geändert und ich versuche Thema Messagebox so abzuhandeln:

                onMessage(obj) {
    		if (typeof obj === 'object' && obj.message) {
    			if (obj.command === 'send') {
    				this.log.info('send command');
    				const visData = {};//new Object();
    				visData.projectList = this.readProjects();
    				visData.viewList = this.readViews(adapter.config.visProject);
    				// Send response in callback if required
    				if (obj.callback) sendTo(obj.from, obj.command, visData, obj.callback);
    			}
    		}
    

    Bin für jede Hilfe dankbar

    Ich beantworte keine Fragen zu Themen via PN

    AsgothianA OliverIOO 2 Antworten Letzte Antwort
    0
    • PeoplesP Peoples

      Hi,

      ich habe vor langer Zeit versucht eines meiner Scripte in einen Adapter zu portieren, das gelang mir damals mehr schlecht als recht und ich verlohr dann irgendwann den Antrieb dort weiter zu machen. Nun wollte ich versuchen dort weiter zu machen wo ich damals aufhörte und begann von Neuem.

      Das Adapter-Template hat sich mittlerweile geändert und nun läuft mein Sendto Befehl nicht mehr.

      Ich erzeuge in der main.js eine Liste der vorhandenen Vis-Views und Projekte und möchte die mit Hilfe von Sendto in meine index_.html holen. Damals machte ich das so:

      index_m.html:

                 async function getVisContent() {
                      return new Promise(async function (resolve, reject) {
                          const mObj = new Object();
                                mObj.command = 'send';
                                mObj.message = 'getVisData';
      
                         await sendTo('viewswitch.0', 'send', mObj, (visData) => {
                              if(visData.error) {
                                  reject('Error: ' + visData.error);
                              } else {
                                  resolve(visData);
                              }
                          });
                      });
                  }
      

      main.js:

              message: (obj) => {
                
                   if (typeof obj === 'object' && obj.message) {
                       if (obj.command === 'send') {
                           // e.g. send email or pushover or whatever
                           adapter.log.info('send command');
                           
                          
                          // let projectList = readProjects();
                          // let viewList = readViews(adapter.config.visProject);
                           
                           const visData = new Object();
                           visData.projectList = readProjects();
                           visData.viewList = readViews(adapter.config.visProject);
                           
                           // Send response in callback if required
                           if (obj.callback) adapter.sendTo(obj.from, obj.command, visData, obj.callback);
                       }
                   }
               },
      

      Nun hat sich ja der Aufbau der main.js geändert und ich versuche Thema Messagebox so abzuhandeln:

                  onMessage(obj) {
      		if (typeof obj === 'object' && obj.message) {
      			if (obj.command === 'send') {
      				this.log.info('send command');
      				const visData = {};//new Object();
      				visData.projectList = this.readProjects();
      				visData.viewList = this.readViews(adapter.config.visProject);
      				// Send response in callback if required
      				if (obj.callback) sendTo(obj.from, obj.command, visData, obj.callback);
      			}
      		}
      

      Bin für jede Hilfe dankbar

      AsgothianA Offline
      AsgothianA Offline
      Asgothian
      Developer
      schrieb am zuletzt editiert von
      #2

      @peoples hast du das onMessage auch als event Handler eingetragen ? Im Zigbee Adapter haben wir dafür (z.Bsp)
      this.adapter.on('message', this.onMessage.bind(this));

      A,

      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

      PeoplesP 1 Antwort Letzte Antwort
      0
      • AsgothianA Asgothian

        @peoples hast du das onMessage auch als event Handler eingetragen ? Im Zigbee Adapter haben wir dafür (z.Bsp)
        this.adapter.on('message', this.onMessage.bind(this));

        A,

        PeoplesP Offline
        PeoplesP Offline
        Peoples
        schrieb am zuletzt editiert von
        #3

        @asgothian
        Nein, natürlich habe ich das nicht :-)

        Auch wenn das nun das nächste Problem hervorruft, trotzdem Tausend Dank!

        Ich beantworte keine Fragen zu Themen via PN

        1 Antwort Letzte Antwort
        0
        • PeoplesP Offline
          PeoplesP Offline
          Peoples
          schrieb am zuletzt editiert von
          #4

          Und weiter gehts mit meinen Fragen:

          Ich habe im Admin-Bereich zwei Tabs, einen mit Grundeinstellungen und einen mit einer Liste die sich in Abhängigkeit der Auswahl eines "Selects" in den Grundeinstellungen zusammensetzt. Wenn ich nun im Select einen anderen Wert wähle werden die Buttons für Speichern/Speichern & Schließen aktiv. Wenn ich nun "nur" speichern drücke wird natürlich die Liste im zweiten Tab nicht neu geladen obwohl sich die Werte geändert haben.

          Tab 1 mit Auswahl:
          iobroker viewswitch admin tab1.JPG

          Tab 2 mit der generierten Liste:
          iobroker viewswitch admin tab2.JPG

          Hierzu habe ich verschiedene Ideen und brächte mal die Erfahrung von euch welcher Lösungsansatz der beste ist und ggf. wie ich diesen realisieren kann.

          1. Lösungsansatz:
          • Ich lade alle "möglichen" werde die diese Liste jemals haben könnte in verschiedene Tabs und blende die einfach in Abhängigkeit der Select-Auswahl ein bzw aus.
            Finde das aber unnötig da ich ja nicht alle brauche, das würde ich wahrscheinlich hinbekommen.
          1. Lösungsansatz
          • Ich blende den "Speichern" Button aus, so dass man immer "Speichern / Schließen" drücken muss, da bei einem erneuten Öffnen der Adminoberfläche dann auch die
            richtige Liste mitgeladen wird. Finde ich aber auch nicht schön und würde mich als potentiellen Nutzer bestimmt nerven
          1. Lösungsansatz und mein angestrebter
          • Sobald die Auswahl geändert wird, lädt die Liste im zweiten Tab neu und die Ansicht wird aktuallisiert ggf. mit kleiner Meldung während der Ladezeit.
            Nur hier finde ich nichts, wie ich das umsetzen kann. Gibt es eine Möglichkeit den Inhalt eines bestimmten Tabs neu zu laden?

          Gerne her mit eueren Ideen bzw. Lösungsansätzen

          Ich beantworte keine Fragen zu Themen via PN

          Jey CeeJ 1 Antwort Letzte Antwort
          0
          • PeoplesP Peoples

            Und weiter gehts mit meinen Fragen:

            Ich habe im Admin-Bereich zwei Tabs, einen mit Grundeinstellungen und einen mit einer Liste die sich in Abhängigkeit der Auswahl eines "Selects" in den Grundeinstellungen zusammensetzt. Wenn ich nun im Select einen anderen Wert wähle werden die Buttons für Speichern/Speichern & Schließen aktiv. Wenn ich nun "nur" speichern drücke wird natürlich die Liste im zweiten Tab nicht neu geladen obwohl sich die Werte geändert haben.

            Tab 1 mit Auswahl:
            iobroker viewswitch admin tab1.JPG

            Tab 2 mit der generierten Liste:
            iobroker viewswitch admin tab2.JPG

            Hierzu habe ich verschiedene Ideen und brächte mal die Erfahrung von euch welcher Lösungsansatz der beste ist und ggf. wie ich diesen realisieren kann.

            1. Lösungsansatz:
            • Ich lade alle "möglichen" werde die diese Liste jemals haben könnte in verschiedene Tabs und blende die einfach in Abhängigkeit der Select-Auswahl ein bzw aus.
              Finde das aber unnötig da ich ja nicht alle brauche, das würde ich wahrscheinlich hinbekommen.
            1. Lösungsansatz
            • Ich blende den "Speichern" Button aus, so dass man immer "Speichern / Schließen" drücken muss, da bei einem erneuten Öffnen der Adminoberfläche dann auch die
              richtige Liste mitgeladen wird. Finde ich aber auch nicht schön und würde mich als potentiellen Nutzer bestimmt nerven
            1. Lösungsansatz und mein angestrebter
            • Sobald die Auswahl geändert wird, lädt die Liste im zweiten Tab neu und die Ansicht wird aktuallisiert ggf. mit kleiner Meldung während der Ladezeit.
              Nur hier finde ich nichts, wie ich das umsetzen kann. Gibt es eine Möglichkeit den Inhalt eines bestimmten Tabs neu zu laden?

            Gerne her mit eueren Ideen bzw. Lösungsansätzen

            Jey CeeJ Online
            Jey CeeJ Online
            Jey Cee
            Developer
            schrieb am zuletzt editiert von
            #5

            @peoples vielleicht möchtest du dir mal jsonConfig anschauen, das bietet sehr einfach die Möglichkeit die Konfiguration zu Bauen.
            Die ganze Logik liegt dann im Backend und du musst dich nicht um die Optik des Frontend kümmern.

            Schau dazu mal Hier rein, die Konfiguration bietet auch dynamische Elemente die nur gezeigt werden wenn sie nötig sind.

            Und Hier findest du das Schema für die jsonConfig.

            Am Anfang braucht es etwas bis man rein kommt, aber dann ist es wesentlich Komfortabler als in HTML.

            Persönlicher Support
            Spenden -> paypal.me/J3YC33

            PeoplesP 1 Antwort Letzte Antwort
            0
            • Jey CeeJ Jey Cee

              @peoples vielleicht möchtest du dir mal jsonConfig anschauen, das bietet sehr einfach die Möglichkeit die Konfiguration zu Bauen.
              Die ganze Logik liegt dann im Backend und du musst dich nicht um die Optik des Frontend kümmern.

              Schau dazu mal Hier rein, die Konfiguration bietet auch dynamische Elemente die nur gezeigt werden wenn sie nötig sind.

              Und Hier findest du das Schema für die jsonConfig.

              Am Anfang braucht es etwas bis man rein kommt, aber dann ist es wesentlich Komfortabler als in HTML.

              PeoplesP Offline
              PeoplesP Offline
              Peoples
              schrieb am zuletzt editiert von Peoples
              #6

              @jey-cee

              Klar!

              So da ergeben sich wie erwartet die nächsten Fragen:

              • wenn ich die jsonConfig in mein Admin Verzeichnis lege wie schaffe ich es dann oder wo definiere ich dass diese dann auch anstelle der index_m.html genommen wird? Weil wenn ich die Index lösche und einen Upload mache, wird mir die trotzdem weiterhin angezeigt.
              • des Weiteren kann ich mir nicht ganz zusammen reimen wie ich hier die Daten meiner Liste die ja je nach Inhalt dynamisch lange sein kann, angezeigt bekomme.
              • Ich habe gesehen dass bspw. im i.cal Adapter so auch die Objekte erzeugt werden, auch hier stellt sich mir die Frage wie die Objekte so oft erzeugt werden wie events vorhanden sind?

              Da diese Thema wirklich (für mich) schwer verständlich ist, stellt sich mir die Frage ob ich nicht lieber zu Anfang "klassisch" anfangen und später mal "professionell" weitermachen sollte. Wenn es wie oben geschrieben einen einfacheren weg gäbe, wäre das natürlich auf die Kürze angenehmer.

              Ich beantworte keine Fragen zu Themen via PN

              Jey CeeJ 1 Antwort Letzte Antwort
              0
              • PeoplesP Peoples

                @jey-cee

                Klar!

                So da ergeben sich wie erwartet die nächsten Fragen:

                • wenn ich die jsonConfig in mein Admin Verzeichnis lege wie schaffe ich es dann oder wo definiere ich dass diese dann auch anstelle der index_m.html genommen wird? Weil wenn ich die Index lösche und einen Upload mache, wird mir die trotzdem weiterhin angezeigt.
                • des Weiteren kann ich mir nicht ganz zusammen reimen wie ich hier die Daten meiner Liste die ja je nach Inhalt dynamisch lange sein kann, angezeigt bekomme.
                • Ich habe gesehen dass bspw. im i.cal Adapter so auch die Objekte erzeugt werden, auch hier stellt sich mir die Frage wie die Objekte so oft erzeugt werden wie events vorhanden sind?

                Da diese Thema wirklich (für mich) schwer verständlich ist, stellt sich mir die Frage ob ich nicht lieber zu Anfang "klassisch" anfangen und später mal "professionell" weitermachen sollte. Wenn es wie oben geschrieben einen einfacheren weg gäbe, wäre das natürlich auf die Kürze angenehmer.

                Jey CeeJ Online
                Jey CeeJ Online
                Jey Cee
                Developer
                schrieb am zuletzt editiert von
                #7

                @peoples sagte in Technische Fragen zur Adapterentwicklung:

                wenn ich die jsonConfig in mein Admin Verzeichnis lege wie schaffe ich es dann oder wo definiere ich dass diese dann auch anstelle der index_m.html genommen wird? Weil wenn ich die Index lösche und einen Upload mache, wird mir die trotzdem weiterhin angezeigt.

                In der io-package.json musst du folgenden Eintrag hinzufügen:

                "adminUI": {
                            "config": "json"
                        },
                

                @peoples sagte in Technische Fragen zur Adapterentwicklung:

                des Weiteren kann ich mir nicht ganz zusammen reimen wie ich hier die Daten meiner Liste die ja je nach Inhalt dynamisch lange sein kann, angezeigt bekomme.

                Die Kommunikation zwischen Backend und Frontend funktioniert wie jetzt auch mit sendTo.
                In meinem Beispiel hab ich ein selectSendTo verwendet. In der main.js ist dann die entsprechende Funktion in processMessage, was heute onMessage entspricht.

                @peoples sagte in Technische Fragen zur Adapterentwicklung:

                Ich habe gesehen dass bspw. im i.cal Adapter so auch die Objekte erzeugt werden,

                Zuerst einmal hat ical keine jsonConfig, dann stellt sich mir jetzt erstmal die Frage ob du ioBroker Objekte meinst oder im Frontend?

                Persönlicher Support
                Spenden -> paypal.me/J3YC33

                PeoplesP 1 Antwort Letzte Antwort
                0
                • Jey CeeJ Jey Cee

                  @peoples sagte in Technische Fragen zur Adapterentwicklung:

                  wenn ich die jsonConfig in mein Admin Verzeichnis lege wie schaffe ich es dann oder wo definiere ich dass diese dann auch anstelle der index_m.html genommen wird? Weil wenn ich die Index lösche und einen Upload mache, wird mir die trotzdem weiterhin angezeigt.

                  In der io-package.json musst du folgenden Eintrag hinzufügen:

                  "adminUI": {
                              "config": "json"
                          },
                  

                  @peoples sagte in Technische Fragen zur Adapterentwicklung:

                  des Weiteren kann ich mir nicht ganz zusammen reimen wie ich hier die Daten meiner Liste die ja je nach Inhalt dynamisch lange sein kann, angezeigt bekomme.

                  Die Kommunikation zwischen Backend und Frontend funktioniert wie jetzt auch mit sendTo.
                  In meinem Beispiel hab ich ein selectSendTo verwendet. In der main.js ist dann die entsprechende Funktion in processMessage, was heute onMessage entspricht.

                  @peoples sagte in Technische Fragen zur Adapterentwicklung:

                  Ich habe gesehen dass bspw. im i.cal Adapter so auch die Objekte erzeugt werden,

                  Zuerst einmal hat ical keine jsonConfig, dann stellt sich mir jetzt erstmal die Frage ob du ioBroker Objekte meinst oder im Frontend?

                  PeoplesP Offline
                  PeoplesP Offline
                  Peoples
                  schrieb am zuletzt editiert von
                  #8

                  @jey-cee
                  Bei ical meine ich die io-package.json dort steht ab Zeile 194 instance Objects und wie ich es interpretiert habe werden dort die Objekte von Adapter.0... für jeden gefundenen Event erstellt.

                  Nun wollte ich auch gleich meine Datenpunkte, die für jede View erstellt werden ebenfalls auf diese Methode erstellen, anstatt das mit this.setObjectNotExistsAsync zu machen. Nur wie packe ich das in eine Schleife?

                  Viele (wahrscheinlich dumme) Fragen sorry und da kommen bestimmt noch einige

                  Ich beantworte keine Fragen zu Themen via PN

                  Jey CeeJ 1 Antwort Letzte Antwort
                  0
                  • PeoplesP Peoples

                    @jey-cee
                    Bei ical meine ich die io-package.json dort steht ab Zeile 194 instance Objects und wie ich es interpretiert habe werden dort die Objekte von Adapter.0... für jeden gefundenen Event erstellt.

                    Nun wollte ich auch gleich meine Datenpunkte, die für jede View erstellt werden ebenfalls auf diese Methode erstellen, anstatt das mit this.setObjectNotExistsAsync zu machen. Nur wie packe ich das in eine Schleife?

                    Viele (wahrscheinlich dumme) Fragen sorry und da kommen bestimmt noch einige

                    Jey CeeJ Online
                    Jey CeeJ Online
                    Jey Cee
                    Developer
                    schrieb am zuletzt editiert von
                    #9

                    @peoples sagte in Technische Fragen zur Adapterentwicklung:

                    Nun wollte ich auch gleich meine Datenpunkte, die für jede View erstellt werden ebenfalls auf diese Methode erstellen, anstatt das mit this.setObjectNotExistsAsync zu machen. Nur wie packe ich das in eine Schleife?

                    Gar nicht. Die dort eingetragenen Objekte werden beim Anlegen der Instanz einmalig erstellt.

                    @peoples sagte in Technische Fragen zur Adapterentwicklung:

                    Viele (wahrscheinlich dumme) Fragen sorry und da kommen bestimmt noch einige

                    Kein Problem.

                    Persönlicher Support
                    Spenden -> paypal.me/J3YC33

                    PeoplesP 1 Antwort Letzte Antwort
                    0
                    • Jey CeeJ Jey Cee

                      @peoples sagte in Technische Fragen zur Adapterentwicklung:

                      Nun wollte ich auch gleich meine Datenpunkte, die für jede View erstellt werden ebenfalls auf diese Methode erstellen, anstatt das mit this.setObjectNotExistsAsync zu machen. Nur wie packe ich das in eine Schleife?

                      Gar nicht. Die dort eingetragenen Objekte werden beim Anlegen der Instanz einmalig erstellt.

                      @peoples sagte in Technische Fragen zur Adapterentwicklung:

                      Viele (wahrscheinlich dumme) Fragen sorry und da kommen bestimmt noch einige

                      Kein Problem.

                      PeoplesP Offline
                      PeoplesP Offline
                      Peoples
                      schrieb am zuletzt editiert von
                      #10

                      @jey-cee
                      Also es hat zwar einige Zeit gedauert aber ich habe einen Teilerfolg erzielt. Und zwei Fragen dazu, hier ein Ausschnitt der jsonConfig:

                      "type": "tabs",
                          "items": {
                            "Main": {
                              "type": "panel",
                              "label": "Main",
                              "items": {
                                "engine": {
                                  "type": "selectSendTo",
                                  "label": "visProject",
                                  "sm": 2,
                                  "command": "getProjectList"
                                }
                              }
                            },
                      

                      Ich verarbeite nun die sendTo Anfrage, bekomme die gewünschten Werte zurück und es baut sich das Select zusammen.

                      Nun verwende ich in der main.js an anderer Stelle folgenden Aufruf:

                      visData.viewList = await this.readViews(this.config.visProject);
                      

                      Bisher war es so dass "config.visProject" das Select aus dem Admin war und dort der selectierte Wert genommen wurde, aber jetzt wird hier kein Wert mehr erfasst. Muss ich dem jsonConfig-Teil oben noch irgendwas hinzufügen oder ist das

                      "label": "visProject"
                      

                      doch der "Bezeichner" für -> config.visProject?

                      Zweite Frage:
                      das "sm": 2, beeinflusst nur die Dimensionen hat aber keinen Einfluss auf die Funktion oder?
                      Auszug aus dem Schema (All types could have: sm - width in 1/12 of screen on small screen)

                      Das wars dann auch für heute, danke schonmal

                      Ich beantworte keine Fragen zu Themen via PN

                      Jey CeeJ 1 Antwort Letzte Antwort
                      0
                      • PeoplesP Peoples

                        Hi,

                        ich habe vor langer Zeit versucht eines meiner Scripte in einen Adapter zu portieren, das gelang mir damals mehr schlecht als recht und ich verlohr dann irgendwann den Antrieb dort weiter zu machen. Nun wollte ich versuchen dort weiter zu machen wo ich damals aufhörte und begann von Neuem.

                        Das Adapter-Template hat sich mittlerweile geändert und nun läuft mein Sendto Befehl nicht mehr.

                        Ich erzeuge in der main.js eine Liste der vorhandenen Vis-Views und Projekte und möchte die mit Hilfe von Sendto in meine index_.html holen. Damals machte ich das so:

                        index_m.html:

                                   async function getVisContent() {
                                        return new Promise(async function (resolve, reject) {
                                            const mObj = new Object();
                                                  mObj.command = 'send';
                                                  mObj.message = 'getVisData';
                        
                                           await sendTo('viewswitch.0', 'send', mObj, (visData) => {
                                                if(visData.error) {
                                                    reject('Error: ' + visData.error);
                                                } else {
                                                    resolve(visData);
                                                }
                                            });
                                        });
                                    }
                        

                        main.js:

                                message: (obj) => {
                                  
                                     if (typeof obj === 'object' && obj.message) {
                                         if (obj.command === 'send') {
                                             // e.g. send email or pushover or whatever
                                             adapter.log.info('send command');
                                             
                                            
                                            // let projectList = readProjects();
                                            // let viewList = readViews(adapter.config.visProject);
                                             
                                             const visData = new Object();
                                             visData.projectList = readProjects();
                                             visData.viewList = readViews(adapter.config.visProject);
                                             
                                             // Send response in callback if required
                                             if (obj.callback) adapter.sendTo(obj.from, obj.command, visData, obj.callback);
                                         }
                                     }
                                 },
                        

                        Nun hat sich ja der Aufbau der main.js geändert und ich versuche Thema Messagebox so abzuhandeln:

                                    onMessage(obj) {
                        		if (typeof obj === 'object' && obj.message) {
                        			if (obj.command === 'send') {
                        				this.log.info('send command');
                        				const visData = {};//new Object();
                        				visData.projectList = this.readProjects();
                        				visData.viewList = this.readViews(adapter.config.visProject);
                        				// Send response in callback if required
                        				if (obj.callback) sendTo(obj.from, obj.command, visData, obj.callback);
                        			}
                        		}
                        

                        Bin für jede Hilfe dankbar

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

                        @peoples
                        Hast du in io-Package.JSON
                        Auch den Parameter gesetzt?
                        https://github.com/oweitman/ioBroker.tvprogram/blob/8b37570b860faffb77da17b25415ca0fd897b2c8/io-package.json#L238

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

                        PeoplesP 1 Antwort Letzte Antwort
                        0
                        • OliverIOO OliverIO

                          @peoples
                          Hast du in io-Package.JSON
                          Auch den Parameter gesetzt?
                          https://github.com/oweitman/ioBroker.tvprogram/blob/8b37570b860faffb77da17b25415ca0fd897b2c8/io-package.json#L238

                          PeoplesP Offline
                          PeoplesP Offline
                          Peoples
                          schrieb am zuletzt editiert von
                          #12

                          @OliverIO
                          Ja, das select wird ja richtig befüllt, ich kann den selektierten Werd nur nicht über config.... Erfassen.

                          Ich beantworte keine Fragen zu Themen via PN

                          1 Antwort Letzte Antwort
                          0
                          • PeoplesP Peoples

                            @jey-cee
                            Also es hat zwar einige Zeit gedauert aber ich habe einen Teilerfolg erzielt. Und zwei Fragen dazu, hier ein Ausschnitt der jsonConfig:

                            "type": "tabs",
                                "items": {
                                  "Main": {
                                    "type": "panel",
                                    "label": "Main",
                                    "items": {
                                      "engine": {
                                        "type": "selectSendTo",
                                        "label": "visProject",
                                        "sm": 2,
                                        "command": "getProjectList"
                                      }
                                    }
                                  },
                            

                            Ich verarbeite nun die sendTo Anfrage, bekomme die gewünschten Werte zurück und es baut sich das Select zusammen.

                            Nun verwende ich in der main.js an anderer Stelle folgenden Aufruf:

                            visData.viewList = await this.readViews(this.config.visProject);
                            

                            Bisher war es so dass "config.visProject" das Select aus dem Admin war und dort der selectierte Wert genommen wurde, aber jetzt wird hier kein Wert mehr erfasst. Muss ich dem jsonConfig-Teil oben noch irgendwas hinzufügen oder ist das

                            "label": "visProject"
                            

                            doch der "Bezeichner" für -> config.visProject?

                            Zweite Frage:
                            das "sm": 2, beeinflusst nur die Dimensionen hat aber keinen Einfluss auf die Funktion oder?
                            Auszug aus dem Schema (All types could have: sm - width in 1/12 of screen on small screen)

                            Das wars dann auch für heute, danke schonmal

                            Jey CeeJ Online
                            Jey CeeJ Online
                            Jey Cee
                            Developer
                            schrieb am zuletzt editiert von
                            #13

                            @peoples label ist der Text der im Frontend zu dem Feld angezeigt wird.
                            Der key vom Item ist der Name der Konfigurationsvariable. Also in meinem Beispiel engine. Wie bisher auch muss der Name in der io-package unter native eingetragen werden.

                            sm gibt an wieviele Spalten das Element im Grid einnimmt. Das Grid unterteilt sich in 12 Spalten.

                            Persönlicher Support
                            Spenden -> paypal.me/J3YC33

                            PeoplesP 1 Antwort Letzte Antwort
                            1
                            • Jey CeeJ Jey Cee

                              @peoples label ist der Text der im Frontend zu dem Feld angezeigt wird.
                              Der key vom Item ist der Name der Konfigurationsvariable. Also in meinem Beispiel engine. Wie bisher auch muss der Name in der io-package unter native eingetragen werden.

                              sm gibt an wieviele Spalten das Element im Grid einnimmt. Das Grid unterteilt sich in 12 Spalten.

                              PeoplesP Offline
                              PeoplesP Offline
                              Peoples
                              schrieb am zuletzt editiert von Peoples
                              #14

                              @jey-cee
                              Und wie muss ich es dann anstellen, dass ich eine dynamische Liste ausgeben / zusammenBauen kann die folgenden Aufbau hat:

                              | ViewName | - AnzeigeZeit- | Sichtbar in Autoview | -- Ist HomeView -- | --- Ist LockView --- |
                              |----- Text ----| --- Number --- | ------ Checkbox ------ | --- RadioButton --- | --- RadioButton --- |

                              Diese Zeile wiederholt sich je nach Anzahl der Views des gewählten Vis-Projekts.

                              Muss ich dann die ganze "Liste" innerhalb einer Schleife in der main.js erstellen und kann mir den dann wieder über sendTo in die Admin-Oberfläche laden?

                              Schematisch dargestellt so:

                              for ("jede View) {
                               
                                   "viewName": {
                                          "type": "text",
                                          "label": "View Name",
                                        },
                                  "anzeigeZeit": {
                                          "type": "number",
                                          "label": "Anzeigezeit",
                                        },
                                  "sichtbarIAv": {
                                          "type": "checkbox",
                                          "label": "Sichtbar in Autoview",
                                        },
                                  "istHv": {
                                          "type": "radio",
                                          "label": "Ist HomeView",
                                        },
                                  "istLV": {
                                          "type": "radio",
                                          "label": "Anzeigezeit",
                                        }
                              } 
                              

                              Oder wird das anders realisiert? Evtl. kennst du ja sogar einen Adapter der eine Liste auf diese Weise erstellt, dann könnte ich mich daran orientieren?

                              -EDIT-
                              Was ich gerade noch gelesen habe, dass es ja gar kein "radio" gibt sondern nur checkbox, aber ist es dann überhaupt möglich dass nur eine gesetzt ist und sich die anderen automatisch wieder zurücksetzen?

                              Ich beantworte keine Fragen zu Themen via PN

                              Jey CeeJ 1 Antwort Letzte Antwort
                              0
                              • PeoplesP Peoples

                                @jey-cee
                                Und wie muss ich es dann anstellen, dass ich eine dynamische Liste ausgeben / zusammenBauen kann die folgenden Aufbau hat:

                                | ViewName | - AnzeigeZeit- | Sichtbar in Autoview | -- Ist HomeView -- | --- Ist LockView --- |
                                |----- Text ----| --- Number --- | ------ Checkbox ------ | --- RadioButton --- | --- RadioButton --- |

                                Diese Zeile wiederholt sich je nach Anzahl der Views des gewählten Vis-Projekts.

                                Muss ich dann die ganze "Liste" innerhalb einer Schleife in der main.js erstellen und kann mir den dann wieder über sendTo in die Admin-Oberfläche laden?

                                Schematisch dargestellt so:

                                for ("jede View) {
                                 
                                     "viewName": {
                                            "type": "text",
                                            "label": "View Name",
                                          },
                                    "anzeigeZeit": {
                                            "type": "number",
                                            "label": "Anzeigezeit",
                                          },
                                    "sichtbarIAv": {
                                            "type": "checkbox",
                                            "label": "Sichtbar in Autoview",
                                          },
                                    "istHv": {
                                            "type": "radio",
                                            "label": "Ist HomeView",
                                          },
                                    "istLV": {
                                            "type": "radio",
                                            "label": "Anzeigezeit",
                                          }
                                } 
                                

                                Oder wird das anders realisiert? Evtl. kennst du ja sogar einen Adapter der eine Liste auf diese Weise erstellt, dann könnte ich mich daran orientieren?

                                -EDIT-
                                Was ich gerade noch gelesen habe, dass es ja gar kein "radio" gibt sondern nur checkbox, aber ist es dann überhaupt möglich dass nur eine gesetzt ist und sich die anderen automatisch wieder zurücksetzen?

                                Jey CeeJ Online
                                Jey CeeJ Online
                                Jey Cee
                                Developer
                                schrieb am zuletzt editiert von
                                #15

                                @peoples sagte in Technische Fragen zur Adapterentwicklung:

                                Und wie muss ich es dann anstellen, dass ich eine dynamische Liste ausgeben / zusammenBauen kann die folgenden Aufbau hat:

                                Ich hab bisher noch nie eine Tabelle/Liste gebaut. Sieht für mich jetzt erstmal so aus als gibt es keine Möglichkeit eine Tabelle dynamisch zu füllen. Das hatte ich nicht auf dem Schirm.

                                @peoples sagte in Technische Fragen zur Adapterentwicklung:

                                Was ich gerade noch gelesen habe, dass es ja gar kein "radio" gibt sondern nur checkbox, aber ist es dann überhaupt möglich dass nur eine gesetzt ist und sich die anderen automatisch wieder zurücksetzen?

                                Nein. Radio Buttons sind dann noch ein Feature Request.

                                Ich denke hier ist die JSONConfig wohl ausgereizt, die Fehlenden Radio Buttons kann man ersetzen durch ein einfaches Select. Aber für die Tabelle gibt es keinen Ersatz.

                                Persönlicher Support
                                Spenden -> paypal.me/J3YC33

                                PeoplesP 1 Antwort Letzte Antwort
                                0
                                • Jey CeeJ Jey Cee

                                  @peoples sagte in Technische Fragen zur Adapterentwicklung:

                                  Und wie muss ich es dann anstellen, dass ich eine dynamische Liste ausgeben / zusammenBauen kann die folgenden Aufbau hat:

                                  Ich hab bisher noch nie eine Tabelle/Liste gebaut. Sieht für mich jetzt erstmal so aus als gibt es keine Möglichkeit eine Tabelle dynamisch zu füllen. Das hatte ich nicht auf dem Schirm.

                                  @peoples sagte in Technische Fragen zur Adapterentwicklung:

                                  Was ich gerade noch gelesen habe, dass es ja gar kein "radio" gibt sondern nur checkbox, aber ist es dann überhaupt möglich dass nur eine gesetzt ist und sich die anderen automatisch wieder zurücksetzen?

                                  Nein. Radio Buttons sind dann noch ein Feature Request.

                                  Ich denke hier ist die JSONConfig wohl ausgereizt, die Fehlenden Radio Buttons kann man ersetzen durch ein einfaches Select. Aber für die Tabelle gibt es keinen Ersatz.

                                  PeoplesP Offline
                                  PeoplesP Offline
                                  Peoples
                                  schrieb am zuletzt editiert von
                                  #16

                                  @jey-cee
                                  Nun gut, einen Versuch wars allemal wert :-)

                                  Ich beantworte keine Fragen zu Themen via PN

                                  1 Antwort Letzte Antwort
                                  0
                                  • PeoplesP Offline
                                    PeoplesP Offline
                                    Peoples
                                    schrieb am zuletzt editiert von Peoples
                                    #17

                                    Und weiter gehts:

                                    Ich habe mir eine Funktion geschrieben, die Datenpunkte löscht, die nicht mehr benötigt werden (bspw. wenn man ein anderes vorhandenes Projekt wählt):

                                    async deleteVisObjects(arr){
                                        try{
                                            const states = await this.getStatesAsync('Views' + '.*');
                                            for (const idS in states){
                                                let nmb = idS.split('.')[3];
                                    			this.log.info(this.namespace + '.' + nmb);
                                                if(arr.includes(nmb)){
                                                    this.log.debug('View exists in Json: '+idS)
                                                } else {
                                                    this.log.debug('View does NOT exist in Json: '+idS)
                                    				await this.delObjectAsync(nmb);
                                                } 
                                            }
                                        } catch (err) {
                                            this.log.error(err);
                                        }
                                    }
                                    

                                    die Strucktur der Datenpunkte schaut so aus:
                                    viewswitch.png

                                    Wie man sieht, gelingt es mir die Datenpunkte innerhalb der "Channels" zu löschen, nur der leere "Channel" wird nicht mitgelöscht.
                                    Ich habe nun versucht innerhalb der Schleife einfach den Channel zu löschen mit deleteChannel(namespace + '.' + nmb) was dem Namen entspricht, da tut sich aber nichts da er vermutlich noch "Unterobjekte" hat.

                                    Gibt es einen Befehl, der mir den Channel inkl. aller vorhandener States löscht, so als würde ich in der Objekte-Übersicht auf den Mülleimer klicken?

                                    Ich beantworte keine Fragen zu Themen via PN

                                    PeoplesP 1 Antwort Letzte Antwort
                                    0
                                    • PeoplesP Peoples

                                      Und weiter gehts:

                                      Ich habe mir eine Funktion geschrieben, die Datenpunkte löscht, die nicht mehr benötigt werden (bspw. wenn man ein anderes vorhandenes Projekt wählt):

                                      async deleteVisObjects(arr){
                                          try{
                                              const states = await this.getStatesAsync('Views' + '.*');
                                              for (const idS in states){
                                                  let nmb = idS.split('.')[3];
                                      			this.log.info(this.namespace + '.' + nmb);
                                                  if(arr.includes(nmb)){
                                                      this.log.debug('View exists in Json: '+idS)
                                                  } else {
                                                      this.log.debug('View does NOT exist in Json: '+idS)
                                      				await this.delObjectAsync(nmb);
                                                  } 
                                              }
                                          } catch (err) {
                                              this.log.error(err);
                                          }
                                      }
                                      

                                      die Strucktur der Datenpunkte schaut so aus:
                                      viewswitch.png

                                      Wie man sieht, gelingt es mir die Datenpunkte innerhalb der "Channels" zu löschen, nur der leere "Channel" wird nicht mitgelöscht.
                                      Ich habe nun versucht innerhalb der Schleife einfach den Channel zu löschen mit deleteChannel(namespace + '.' + nmb) was dem Namen entspricht, da tut sich aber nichts da er vermutlich noch "Unterobjekte" hat.

                                      Gibt es einen Befehl, der mir den Channel inkl. aller vorhandener States löscht, so als würde ich in der Objekte-Übersicht auf den Mülleimer klicken?

                                      PeoplesP Offline
                                      PeoplesP Offline
                                      Peoples
                                      schrieb am zuletzt editiert von
                                      #18

                                      Keiner ne Idee

                                      Ich beantworte keine Fragen zu Themen via PN

                                      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

                                      675

                                      Online

                                      32.7k

                                      Benutzer

                                      82.3k

                                      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