Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Listener/Events/ext. Subscriptions stoppen, wie?

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Listener/Events/ext. Subscriptions stoppen, wie?

    This topic has been deleted. Only users with topic management privileges can see it.
    • AlCalzone
      AlCalzone Developer last edited by

      probiers mal mit

      co2Monitor.disconnect( [callback-Funktion] );
      

      https://github.com/maddindeiss/co2-moni … tor.js#L93

      1 Reply Last reply Reply Quote 0
      • ruhr70
        ruhr70 last edited by

        @AlCalzone:

        probiers mal mit

        co2Monitor.disconnect( [callback-Funktion] );
        

        https://github.com/maddindeiss/co2-moni … tor.js#L93 `

        Danke für das Feedback! Und ich denke, dass ist der Punkt, auf dem es ankommt.

        Ein herber Rückschlag fürs Selbstvertrauen :shock: :oops:

        Da merke ich leider, dass ich nur an den Grundlagen kratze. Ich habe versucht, das sinnvoll einzubauen. Leider fehlen mir die Grundlagen zu Objekte, Methoden, usw. 😞 Das nächste Thema, an dem ich dringend arbeiten muss.

        Keine Ahnung, wie ich das einbaue (…die Callback-Funktion).

        Alle Versuche sind auf einen Fehler gelaufen. Rein Try and Error und den Blick in den module Quellcode.

        Vielleicht hast Du noch einen Anstoß für mich, in welche Richtung ich denken muss und wie die Callback-Funktion aussehen muss. :roll:

        Was wir hier von mir erwartet?

        	disconnect(cb) {
        		try {
        			this.co2Endpoint.stopPoll();
        			this.co2Interface.release(true, (error) => {
        				if(error) {
        					this.emit('error', error);
        				}
        				else {
        					this.co2Device.close();
        					cb(true);
        				}
        			});
        		}
        		catch(error) {
        			throw new Error(error);
        		}
        	}
        
        1 Reply Last reply Reply Quote 0
        • AlCalzone
          AlCalzone Developer last edited by

          Ich glaube, du denkst gerade zu kompliziert. Dort, wo du alle Verbindungen trennst (beim Skript-beenden), machst du folgendes anstatt den Befehlen, die nicht so richtig tun was du willst:

          co2Monitor.disconnect(function() {
          	// weitere Aktionen, die nach dem Disconnect ausgeführt werden sollen.
          	// wenn keine, dann leer lassen.
          });
          
          1 Reply Last reply Reply Quote 0
          • ruhr70
            ruhr70 last edited by

            Danke für Deine Geduld!

            Ich habe jetzt folgendes übernommen und beim Stop des Skripts eingebaut:

            onStop(function skriptStop () {
                log("---------------------- **** Skript wurde gestoppt **** ----------------------");
                co2Monitor.disconnect(function() {
                    log("----- CO2 Monitor DISCONNECTED -----");
                    // weitere Aktionen, die nach dem Disconnect ausgeführt werden sollen.
                    // wenn keine, dann leer lassen.
                });
            }, 100 /*ms*/);
            
            

            Wenn ich das Skript dann stoppe, bekomme ich folgende Fehlermeldungen:

            host.nuc-g7-i7	2017-05-15 22:40:40.004	info	Restart adapter system.adapter.javascript.1 because enabled
            host.nuc-g7-i7	2017-05-15 22:40:40.003	error	instance system.adapter.javascript.1 terminated with code 0 (OK)
            javascript.1	2017-05-15 22:40:39.986	error	
            javascript.1	2017-05-15 22:40:39.986	error	at Device. (C:\ioBroker\node_modules\iobroker.javascript\node_modules\co2-monitor\node_modules\usb\usb.js:200:7)
            javascript.1	2017-05-15 22:40:39.986	error	at Interface.co2Interface.release (C:\ioBroker\node_modules\iobroker.javascript\node_modules\co2-monitor\co2-monitor.js:101:21)
            javascript.1	2017-05-15 22:40:39.986	error	at Device.usb.Device.close (C:\ioBroker\node_modules\iobroker.javascript\node_modules\co2-monitor\node_modules\usb\usb.js:43:7)
            javascript.1	2017-05-15 22:40:39.986	error	at Error (native)
            javascript.1	2017-05-15 22:40:39.986	error	Error: Can't close device with a pending request
            javascript.1	2017-05-15 22:40:39.986	error	uncaught exception: Can't close device with a pending request
            javascript.1	2017-05-15 22:40:39.980	info	script.js.Entwicklung.co2-monitor: ---------------------- **** Skript wurde gestoppt **** ----------------------
            javascript.1	2017-05-15 22:40:39.977	info	Stop script script.js.Entwicklung.co2-monitor
            javascript.1	2017-05-15 22:40:37.654	info	script.js.Entwicklung.co2-monitor: data: {"co2":811,"temperature":"25.038"}
            javascript.1	2017-05-15 22:40:37.654	info	script.js.Entwicklung.co2-monitor: co2: 811
            javascript.1	2017-05-15 22:40:35.278	info	script.js.Entwicklung.co2-monitor: data: {"co2":811,"temperature":"25.038"}
            javascript.1	2017-05-15 22:40:35.278	info	script.js.Entwicklung.co2-monitor: temp: 25.038
            javascript.1	2017-05-15 22:40:32.639	info	script.js.Entwicklung.co2-monitor: data: {"co2":811,"temperature":"25.038"}
            javascript.1	2017-05-15 22:40:32.639	info	script.js.Entwicklung.co2-monitor: co2: 811
            javascript.1	2017-05-15 22:40:30.263	info	script.js.Entwicklung.co2-monitor: temp: 25.038
            javascript.1	2017-05-15 22:40:28.368	info	script.js.Entwicklung.co2-monitor: -------- -------- -------- CO2-Monitor connect erfolgreich gestartet -------- -------- --------
            javascript.1	2017-05-15 22:40:26.295	info	script.js.Entwicklung.co2-monitor: registered 0 subscriptions and 0 schedules
            javascript.1	2017-05-15 22:40:26.150	info	script.js.Entwicklung.co2-monitor: -------- -------- -------- CO2-Monitor Skript gestartet -------- -------- --------
            
            1 Reply Last reply Reply Quote 0
            • AlCalzone
              AlCalzone Developer last edited by

              @ruhr70:

              javascript.1	2017-05-15 22:40:39.986	error	Error: Can't close device with a pending request
              javascript.1	2017-05-15 22:40:39.986	error	uncaught exception: Can't close device with a pending request
              ```` `  
              

              Aus dem Quellcode aus Github wird mir nicht klar, wie man das verhindern kann. Eventuell mal beim Programmierer nachhaken (=> Issue auf Github). Da scheint in dessen Skript nicht sauber aufgeräumt zu werden.

              Die einfachste Lösung wäre ein try-catch-Block, um einen Absturz des JS-Adapters zu verhindern:

              try {
              	co2Monitor.disconnect(function() {
              		log("----- CO2 Monitor DISCONNECTED -----");
              		// weitere Aktionen, die nach dem Disconnect ausgeführt werden sollen.
              		// wenn keine, dann leer lassen.
              	});
              } catch (e) {
              	// hat nicht geklappt
              }
              

              Eventuell könnte man das in einer Schleife bei Fehler wiederholen mit Zeitverzögerung, um mehrere Versuche vorzunehmen, die Verbindung zu kappen.

              1 Reply Last reply Reply Quote 0
              • ruhr70
                ruhr70 last edited by

                Habe try/catch eingebaut. Der Fehler wird nicht abgefangen und bleibt.

                Nun gut. Ich nehme das mal zum Anlass, mich tiefer mit der Materie zu beschäftigen 🙂

                Danke noch einmal für Deine Geduld und Mühe!

                1 Reply Last reply Reply Quote 0
                • blauholsten
                  blauholsten Developer last edited by

                  Hi,

                  Bin zwar auch planlos :roll: , aber callbacks bzw. Asynchrone Funktionen können meines Kenntnisstandes nicht in try/catch abgearbeitet werden. Try catch ist beim Aufruf des Callbacks schon längst abgearbeitet.

                  Um das bei dir abzufangen, musste die try/catch in die callback Funktion.

                  co2Monitor.disconnect(function() {
                        try{
                                log("----- CO2 Monitor DISCONNECTED -----");
                         } catch (e) {
                              log(e);
                     // hat nicht geklappt
                  }
                  });
                  
                  

                  Es ist aber auch möglich das das kompletter Quatsch ist.

                  1 Reply Last reply Reply Quote 0
                  • ruhr70
                    ruhr70 last edited by

                    Klingt logisch.

                    Hab es einfach mal schnell probiert… das Ergebnis ist trotz Logik gleich.

                    host.nuc-g7-i7	2017-05-17 07:03:20.211	info	Restart adapter system.adapter.javascript.1 because enabled
                    host.nuc-g7-i7	2017-05-17 07:03:20.209	error	instance system.adapter.javascript.1 terminated with code 0 (OK)
                    javascript.1	2017-05-17 07:03:20.190	error	
                    javascript.1	2017-05-17 07:03:20.190	error	at Device. (C:\ioBroker\node_modules\iobroker.javascript\node_modules\co2-monitor\node_modules\usb\usb.js:200:7)
                    javascript.1	2017-05-17 07:03:20.190	error	at Interface.co2Interface.release (C:\ioBroker\node_modules\iobroker.javascript\node_modules\co2-monitor\co2-monitor.js:101:21)
                    javascript.1	2017-05-17 07:03:20.190	error	at Device.usb.Device.close (C:\ioBroker\node_modules\iobroker.javascript\node_modules\co2-monitor\node_modules\usb\usb.js:43:7)
                    javascript.1	2017-05-17 07:03:20.190	error	at Error (native)
                    javascript.1	2017-05-17 07:03:20.190	error	Error: Can't close device with a pending request
                    javascript.1	2017-05-17 07:03:20.190	error	uncaught exception: Can't close device with a pending request
                    javascript.1	2017-05-17 07:03:20.185	info	script.js.Entwicklung.co2-monitor: ---------------------- **** Skript wurde gestoppt **** ----------------------
                    javascript.1	2017-05-17 07:03:20.185	info	Stop script script.js.Entwicklung.co2-monitor
                    javascript.1	2017-05-17 07:03:19.137	info	script.js.Entwicklung.co2-monitor: data: {"co2":604,"temperature":"25.663"}
                    javascript.1	2017-05-17 07:03:19.137	info	script.js.Entwicklung.co2-monitor: temp: 25.663
                    javascript.1	2017-05-17 07:03:16.491	info	script.js.Entwicklung.co2-monitor: data: {"co2":604,"temperature":"25.600"}
                    javascript.1	2017-05-17 07:03:16.491	info	script.js.Entwicklung.co2-monitor: co2: 604
                    javascript.1	2017-05-17 07:03:14.124	info	script.js.Entwicklung.co2-monitor: data: {"co2":604,"temperature":"25.600"}
                    javascript.1	2017-05-17 07:03:14.124	info	script.js.Entwicklung.co2-monitor: temp: 25.600
                    javascript.1	2017-05-17 07:03:11.473	info	script.js.Entwicklung.co2-monitor: data: {"co2":604,"temperature":"25.600"}
                    javascript.1	2017-05-17 07:03:11.473	info	script.js.Entwicklung.co2-monitor: co2: 604
                    javascript.1	2017-05-17 07:03:09.105	info	script.js.Entwicklung.co2-monitor: data: {"co2":603,"temperature":"25.600"}
                    javascript.1	2017-05-17 07:03:09.105	info	script.js.Entwicklung.co2-monitor: temp: 25.600
                    javascript.1	2017-05-17 07:03:06.458	info	script.js.Entwicklung.co2-monitor: co2: 603
                    javascript.1	2017-05-17 07:03:03.616	info	script.js.Entwicklung.co2-monitor: -------- -------- -------- CO2-Monitor connect erfolgreich gestartet -------- -------- --------
                    javascript.1	2017-05-17 07:03:01.548	info	script.js.Entwicklung.co2-monitor: registered 0 subscriptions and 0 schedules
                    javascript.1	2017-05-17 07:03:00.547	info	script.js.Entwicklung.co2-monitor: -------- -------- -------- CO2-Monitor Skript gestartet -------- -------- --------
                    javascript.1	2017-05-17 07:03:00.540	info	Start javascript script.js.Entwicklung.co2-monitor
                    
                    1 Reply Last reply Reply Quote 0
                    • AlCalzone
                      AlCalzone Developer last edited by

                      @blauholsten:

                      Asynchrone Funktionen können meines Kenntnisstandes nicht in try/catch abgearbeitet werden. Try catch ist beim Aufruf des Callbacks schon längst abgearbeitet. `
                      Jein. Wenn der Fehler in der Asynchronen Funktion auftritt, bevor sie die Kontrolle an den Aufrufer zurückgibt, sollte es per try-catch abfangbar sein. try-catch im Callback fängt nur Fehler in der eigenen Callback-Funktion ab.

                      In diesem Fall scheint der Fehler zwischendrin aufzutreten:

                      ruhr's code -> 
                      * disconnect -> 
                        |  ruhr's code (nach Aufruf von disconnect)
                        |
                        |__ disconnect arbeitet noch, bzw hat selbst asynchron was aufgerufen
                            |
                            | -> fehler
                            |
                      **    |__ hier käme der Callback
                      

                      Fehler in * und ** lassen sich mit try-catch um disconnect (*) bzw. im callback (**) abfangen.

                      Fehler in internen asynchronen Aktionen der disconnect-Methode nicht.

                      1 Reply Last reply Reply Quote 0
                      • blauholsten
                        blauholsten Developer last edited by

                        Was passiert wenn man sowas schreibt…..?

                        co2Monitor.disconnect(function() {
                           // weitere Aktionen, die nach dem Disconnect ausgeführt werden sollen.
                           // wenn keine, dann leer lassen.
                        }).on ('error', function  (e) { console.error (e);});
                        
                        1 Reply Last reply Reply Quote 0
                        • ruhr70
                          ruhr70 last edited by

                          interessante Erklärungen!

                          ich probiere den Vorschlag nachher aus

                          Gesendet von iPhone mit Tapatalk

                          1 Reply Last reply Reply Quote 0
                          • ruhr70
                            ruhr70 last edited by

                            host.nuc-g7-i7	2017-05-17 16:49:29.792	error	instance system.adapter.javascript.1 terminated with code 0 (OK)
                            javascript.1	2017-05-17 16:49:29.770	error	error in onStop callback: TypeError: Cannot read property 'on' of undefined
                            javascript.1	2017-05-17 16:49:29.770	info	script.js.Entwicklung.co2-monitor: ---------------------- **** Skript wurde gestoppt **** ----------------------
                            
                            1 Reply Last reply Reply Quote 0
                            • AlCalzone
                              AlCalzone Developer last edited by

                              Eine möglichkeit wäre noch (z.b. am Ende des Skripts):

                              process.on('uncaughtException', function (err) {
                                // sicherstellen, dass es wirklich der Fehler aus co2Monitor ist, den wir abfangen wollen. Diesen dann ignorieren oder darauf irgendwie reagieren
                                // Ansonsten Fehler weitergeben per throw err
                              });
                              
                              
                              1 Reply Last reply Reply Quote 0
                              • ruhr70
                                ruhr70 last edited by

                                javascript.1	2017-05-18 20:40:16.857	error	script.js.Entwicklung.co2-monitor: ReferenceError: process is not defined
                                
                                1 Reply Last reply Reply Quote 0
                                • AlCalzone
                                  AlCalzone Developer last edited by

                                  Oh… dann funktioniert das nur in Adaptern. Fürchte, es muss in dem Modul nachgebessert werden.

                                  1 Reply Last reply Reply Quote 0
                                  • R
                                    redoced last edited by

                                    Der stopPoll Aufruf bekommt eigentlich ein callback, was im original code allerdings nicht genutzt wird.

                                    Ändere deinen Code auf folgendes:

                                    
                                    onStop(function skriptStop () {
                                        try{
                                            co2Monitor.co2Endpoint.stopPoll(function(){
                                                log("Polling gestoppt");
                                                co2Monitor.co2Interface.release(true, (error) => {
                                    				if(error) {
                                    					co2Monitor.emit('error', error);
                                    				}
                                    				else {
                                    				    log("Interface released");
                                    					co2Monitor.co2Device.close();
                                    					log("Device geschlossen");
                                    					cb(true);
                                    				}
                                    			});
                                            });
                                        } catch (e) {
                                            log(e);
                                            // hat nicht geklappt
                                        }
                                        log("---------------------- **** Skript wurde gestoppt **** ----------------------");
                                    }, 100 /*ms*/);
                                    
                                    
                                    1 Reply Last reply Reply Quote 0
                                    • ruhr70
                                      ruhr70 last edited by

                                      @redoced:

                                      Der stopPoll Aufruf bekommt eigentlich ein callback, was im original code allerdings nicht genutzt wird.

                                      Ändere deinen Code auf folgendes: `

                                      Danke!!! 😄

                                      Das hat funktioniert :!: . Dein Post hatte ich nicht gesehen. Und als ich nun das Thema noch einmal angehen wollte habe ich ihn zum Glück gefunden.

                                      Hat auf Anhieb geklappt, auch wenn ich keine Ahnung habe, was da abläuft :?

                                      1 Reply Last reply Reply Quote 0
                                      • First post
                                        Last post

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      448
                                      Online

                                      31.7k
                                      Users

                                      79.8k
                                      Topics

                                      1.3m
                                      Posts

                                      5
                                      22
                                      3896
                                      Loading More Posts
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                      The ioBroker Community 2014-2023
                                      logo