Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. Adapter Entwicklung: Custom datapoint-specific (custom_m.html) - Abfrage beim speichern

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Adapter Entwicklung: Custom datapoint-specific (custom_m.html) - Abfrage beim speichern

Scheduled Pinned Locked Moved Entwicklung
16 Posts 3 Posters 1.1k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ScroungerS Scrounger

    @Bluefox
    Perfekt, vielen Dank! Damit komm ich jetzt sicher weiter.

    Eine Frage hab ich noch, wie kann ich log Ausgaben für den custom erzeugen und wo werden diese dann abgelegt?

    BluefoxB Offline
    BluefoxB Offline
    Bluefox
    wrote on last edited by
    #7

    Участник @Scrounger написал в Adapter Entwicklung: Custom datapoint-specific (custom_m.html) - Abfrage beim speichern:

    custom

    Was meinst du mit für "custom" ??
    Wo in browser bei der Konfiguration oder in back-end?

    1 Reply Last reply
    0
    • ScroungerS Offline
      ScroungerS Offline
      Scrounger
      Developer
      wrote on last edited by
      #8

      @Bluefox
      Ja im Browser bei der Konfiguration, also Front-end.
      Ich möchte code den ich in der custom_m.html eingebe loggen.

      <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

      <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

      BluefoxB 1 Reply Last reply
      0
      • ScroungerS Scrounger

        @Bluefox
        Ja im Browser bei der Konfiguration, also Front-end.
        Ich möchte code den ich in der custom_m.html eingebe loggen.

        BluefoxB Offline
        BluefoxB Offline
        Bluefox
        wrote on last edited by
        #9

        @Scrounger Vielleicht verstehe ich was nicht, aber console.log??? Ne?

        ScroungerS 1 Reply Last reply
        0
        • BluefoxB Bluefox

          @Scrounger Vielleicht verstehe ich was nicht, aber console.log??? Ne?

          ScroungerS Offline
          ScroungerS Offline
          Scrounger
          Developer
          wrote on last edited by Scrounger
          #10

          @Bluefox sagte in Adapter Entwicklung: Custom datapoint-specific (custom_m.html) - Abfrage beim speichern:

          @Scrounger Vielleicht verstehe ich was nicht, aber console.log??? Ne?

          Ne mit console.log schreibt er nix in die "iobroker.2019-05-07.log".

          Eine weitere Frage. Wenn das Object custom settings enabled = true gesetzt ist, dann kann man in der folgenden Funktion nicht mehr auf 'obj' zugreifen - in dem Bsp. will ich die Unit des 'obj' auslesen:

          	if (typeof defaults !== 'undefined') {
          		console.log("Hallo");
          
          		defaults.linkeddevices = function (obj, instanceObj) {
          			return {
          				enabled: false,
          				unit: obj.common.unit
          			};
          		}
          	}
          

          deaktiviert:
          custom_deactivated_2.png
          custom_deactivated.png

          aktiviert:
          custom_activated_2.png
          custom_activated.png

          Ist das ein Bug?

          source findest du jetzt hier: https://github.com/Scrounger/ioBroker.linkeddevices

          <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

          <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

          1 Reply Last reply
          0
          • ScroungerS Offline
            ScroungerS Offline
            Scrounger
            Developer
            wrote on last edited by Scrounger
            #11

            So nachdem ich jetzt bissle den Source code durchstöbert habe, ist es möglich das Objekt für das der custom dialog geöffnet wurde wie folgt zu bekommen:

            	// Objekt holen für das der custom Dialog geöffnet wurde 
            	var currentObj = gMain.objects[gMain.navigateGetParams()];
            

            <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

            <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

            s.bormannS 1 Reply Last reply
            1
            • ScroungerS Scrounger

              So nachdem ich jetzt bissle den Source code durchstöbert habe, ist es möglich das Objekt für das der custom dialog geöffnet wurde wie folgt zu bekommen:

              	// Objekt holen für das der custom Dialog geöffnet wurde 
              	var currentObj = gMain.objects[gMain.navigateGetParams()];
              
              s.bormannS Offline
              s.bormannS Offline
              s.bormann
              Most Active
              wrote on last edited by
              #12

              @Scrounger sagte in Adapter Entwicklung: Custom datapoint-specific (custom_m.html) - Abfrage beim speichern:

              So nachdem ich jetzt bissle den Source code durchstöbert habe, ist es möglich das Objekt für das der custom dialog geöffnet wurde wie folgt zu bekommen:

              	// Objekt holen für das der custom Dialog geöffnet wurde 
              	var currentObj = gMain.objects[gMain.navigateGetParams()];
              

              Hi, stehe vor folgendem Problem:
              Wenn ich dieses Objekt ändere, wird es scheinbar nicht gespeichert. Wie kann man dafür sorgen, dass Änderungen an de Objekt auch gespeichert werden?

              Hintergrund:
              Ich möchte ein Objekt vom Typ {key: "value", key2: "value2"} bearbeiten. Wenn ich den normalen Weg über die <input data-field="meinobjekt" type="text"> gehe, wird das Input-Feld escaped, d.h. aus den ganzen Anführungszeichen im Objekt werden /" gemacht. Deshalb wollte ich das Objekt direkt selbst abspeichern.

              Ideen?

              ScroungerS 1 Reply Last reply
              0
              • s.bormannS s.bormann

                @Scrounger sagte in Adapter Entwicklung: Custom datapoint-specific (custom_m.html) - Abfrage beim speichern:

                So nachdem ich jetzt bissle den Source code durchstöbert habe, ist es möglich das Objekt für das der custom dialog geöffnet wurde wie folgt zu bekommen:

                	// Objekt holen für das der custom Dialog geöffnet wurde 
                	var currentObj = gMain.objects[gMain.navigateGetParams()];
                

                Hi, stehe vor folgendem Problem:
                Wenn ich dieses Objekt ändere, wird es scheinbar nicht gespeichert. Wie kann man dafür sorgen, dass Änderungen an de Objekt auch gespeichert werden?

                Hintergrund:
                Ich möchte ein Objekt vom Typ {key: "value", key2: "value2"} bearbeiten. Wenn ich den normalen Weg über die <input data-field="meinobjekt" type="text"> gehe, wird das Input-Feld escaped, d.h. aus den ganzen Anführungszeichen im Objekt werden /" gemacht. Deshalb wollte ich das Objekt direkt selbst abspeichern.

                Ideen?

                ScroungerS Offline
                ScroungerS Offline
                Scrounger
                Developer
                wrote on last edited by Scrounger
                #13

                @s-bormann
                Im custom dialog musst du entsprechend ein input feld definieren mit dem attribut 'data-field' und dem entsprechenden key, z.B.:

                <input type="text" data-field="key">
                

                Die darin enthaltenen Daten werden dann beim click auf speichern im array custom[adapter.Instance].key im objekt automatisch gespeichert.

                Müsste aber am besten mal deinen Code sehen, um dir ggf. weiterhelfen zu können. Bin mir nicht sicher ob du da irgendein spezial ding machen willst.

                <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

                <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

                s.bormannS 1 Reply Last reply
                0
                • ScroungerS Scrounger

                  @s-bormann
                  Im custom dialog musst du entsprechend ein input feld definieren mit dem attribut 'data-field' und dem entsprechenden key, z.B.:

                  <input type="text" data-field="key">
                  

                  Die darin enthaltenen Daten werden dann beim click auf speichern im array custom[adapter.Instance].key im objekt automatisch gespeichert.

                  Müsste aber am besten mal deinen Code sehen, um dir ggf. weiterhelfen zu können. Bin mir nicht sicher ob du da irgendein spezial ding machen willst.

                  s.bormannS Offline
                  s.bormannS Offline
                  s.bormann
                  Most Active
                  wrote on last edited by
                  #14

                  @Scrounger Hi, danke für die Antwort! Das mit dem input-Feld klappt leider nicht, da ich darin kein Objekt speichern kann, weil ioBroker das ganze escaped. Aber das mit dem custom[adapter.instance].key hilft vielleicht, ggf. kann ich da ja direkt einen Wert abspeichern.
                  Zwischenzeitlich habe ich einen Workaround gefunden - den ich selbst allerdings ein wenig als gebastelt empfinde. Wenn es mit dem custom[adapter.instance].key klappt, werde ich das umstellen. Zu Doku-Zwecken aber hier schon mal meine Lösung:

                      //Init
                      if (typeof customPostInits !== 'undefined') {
                         customPostInits.iqontrol = function ($div, values, instanceObj, type, role) {
                  			var adapter =  $div.data('adapter');
                  			$('#dialog-customs .btn-save').on('click', function(){ 
                  				if($('#tab-customs-settings li[data-adapter="' + adapter + '"] input[data-field="enabled"]').is(":checked")){
                  					(function(){ //Closure--> (everything declared inside keeps its value as ist is at the time the function is created)
                  						var _currentId = gMain.navigateGetParams();
                  						var _currentObj = gMain.objects[_currentId];
                  						var _adapter = adapter;
                  						var _states = states[_adapter]; //<-- Das ist das Object, welches gespeichert werden soll
                  						setTimeout(function(){
                  							if (typeof _currentObj.common.custom == 'undefined') _currentObj.common.custom = {};
                  							if (typeof _currentObj.common.custom[_adapter] == 'undefined') _currentObj.common.custom[_adapter] = {};
                  							_currentObj.common.custom[_adapter].states = _states; //<-- Hier wird das Objekt in den temporären ioBroker-Objekt-Speicher übertragen
                  							gMain.socket.emit('setObject', _currentId, _currentObj, function(err){ //<-- Und hier wird es dann in die Datenbank dauerhaft übertragen
                  								if(err) alert("Errir saving Object");
                  							});
                  						}, 100);	
                  					})(); //<--End Closure
                  				}
                  			}); 
                          }
                      }
                  
                  

                  Das ganze funktioniert. Wenn ich eine gefühlt bessere Lösung habe, werde ich nachberichten.

                  LG und Danke für die Hilfe!

                  ScroungerS 1 Reply Last reply
                  0
                  • s.bormannS s.bormann

                    @Scrounger Hi, danke für die Antwort! Das mit dem input-Feld klappt leider nicht, da ich darin kein Objekt speichern kann, weil ioBroker das ganze escaped. Aber das mit dem custom[adapter.instance].key hilft vielleicht, ggf. kann ich da ja direkt einen Wert abspeichern.
                    Zwischenzeitlich habe ich einen Workaround gefunden - den ich selbst allerdings ein wenig als gebastelt empfinde. Wenn es mit dem custom[adapter.instance].key klappt, werde ich das umstellen. Zu Doku-Zwecken aber hier schon mal meine Lösung:

                        //Init
                        if (typeof customPostInits !== 'undefined') {
                           customPostInits.iqontrol = function ($div, values, instanceObj, type, role) {
                    			var adapter =  $div.data('adapter');
                    			$('#dialog-customs .btn-save').on('click', function(){ 
                    				if($('#tab-customs-settings li[data-adapter="' + adapter + '"] input[data-field="enabled"]').is(":checked")){
                    					(function(){ //Closure--> (everything declared inside keeps its value as ist is at the time the function is created)
                    						var _currentId = gMain.navigateGetParams();
                    						var _currentObj = gMain.objects[_currentId];
                    						var _adapter = adapter;
                    						var _states = states[_adapter]; //<-- Das ist das Object, welches gespeichert werden soll
                    						setTimeout(function(){
                    							if (typeof _currentObj.common.custom == 'undefined') _currentObj.common.custom = {};
                    							if (typeof _currentObj.common.custom[_adapter] == 'undefined') _currentObj.common.custom[_adapter] = {};
                    							_currentObj.common.custom[_adapter].states = _states; //<-- Hier wird das Objekt in den temporären ioBroker-Objekt-Speicher übertragen
                    							gMain.socket.emit('setObject', _currentId, _currentObj, function(err){ //<-- Und hier wird es dann in die Datenbank dauerhaft übertragen
                    								if(err) alert("Errir saving Object");
                    							});
                    						}, 100);	
                    					})(); //<--End Closure
                    				}
                    			}); 
                            }
                        }
                    
                    

                    Das ganze funktioniert. Wenn ich eine gefühlt bessere Lösung habe, werde ich nachberichten.

                    LG und Danke für die Hilfe!

                    ScroungerS Offline
                    ScroungerS Offline
                    Scrounger
                    Developer
                    wrote on last edited by
                    #15

                    @s-bormann
                    Achso du willst ein komplettes Objekt in einem Input Feld speichern?
                    Könntest das Objekt auch als String in den custom Eigenschaften speichern. Dann würde das mit dem input Feld funktionieren.

                    <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

                    <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

                    s.bormannS 1 Reply Last reply
                    0
                    • ScroungerS Scrounger

                      @s-bormann
                      Achso du willst ein komplettes Objekt in einem Input Feld speichern?
                      Könntest das Objekt auch als String in den custom Eigenschaften speichern. Dann würde das mit dem input Feld funktionieren.

                      s.bormannS Offline
                      s.bormannS Offline
                      s.bormann
                      Most Active
                      wrote on last edited by
                      #16

                      @Scrounger sagte in Adapter Entwicklung: Custom datapoint-specific (custom_m.html) - Abfrage beim speichern:

                      @s-bormann
                      Achso du willst ein komplettes Objekt in einem Input Feld speichern?
                      Könntest das Objekt auch als String in den custom Eigenschaften speichern. Dann würde das mit dem input Feld funktionieren.

                      Hi, leider hat genau das nicht geklappt, weil es "escaped" wurde, d.h. aus:
                      '{"key1":"value1", "key2":"value2", ...}' wurde beim Speichern so was ähnliches wie:
                      '{\"key1\":\"value1\", \"key2\":\"value2\", ...}'

                      LG

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      725

                      Online

                      32.4k

                      Users

                      81.4k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe