Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. Skript: TypeError: Converting circular structure to JSON

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Skript: TypeError: Converting circular structure to JSON

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

      Systemdata Bitte Ausfüllen
      Hardwaresystem: NUC
      Arbeitsspeicher: 4GB
      Festplattenart: HDD
      Betriebssystem: Ubuntu / Docker
      Node-Version: 10.x.x
      Nodejs-Version: 14.18.3
      NPM-Version: 6.14.15
      Installationsart: Docker
      Image genutzt: Nein
      Ort/Name der Imagedatei: Link

      Zur Steuerung meines AV Receivers nutze ich dieses Skript.

      var host, port, message;
      let socketClient;
      
      host = '10.10.21.14';
      port = 84;
      
      // PowerON
      on({id: 'fakeroku.0.lyngdorf.keys.Select', change: "any"}, async function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if (getState("fakeroku.0.lyngdorf.keys.Select").val) {
          await Send_mesage_via_TCP(host, port, '!POWERONMAIN\r');
        }
      });
      
      // PowerOFF
      on({id: 'fakeroku.0.lyngdorf.keys.Home', change: "any"}, async function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if (getState("fakeroku.0.lyngdorf.keys.Home").val) {
          await Send_mesage_via_TCP(host, port, '!POWEROFFMAIN\r');
        }
      });
      
      // Vol+
      on({id: 'fakeroku.0.lyngdorf.keys.Up', change: "any"}, async function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if (getState("fakeroku.0.lyngdorf.keys.Up").val) {
          await Send_mesage_via_TCP(host, port, '!VOL+\r!VOL+\r');
        }
      });
      
      // Vol-
      on({id: 'fakeroku.0.lyngdorf.keys.Down', change: "any"}, async function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if (getState("fakeroku.0.lyngdorf.keys.Down").val) {
          await Send_mesage_via_TCP(host, port, '!VOL-\r!VOL-\r');
        }
      });
      ...
      
      async function Send_mesage_via_TCP(host, port, message) {
          // Create the socket client if it was not already created
          if (!socketClient) {
              console.log('create new connection.');
              var net = require('net');
              socketClient = net.connect({ host: host, port: port });
      
              // On disconnect
              socketClient.on("end", () => {
                  console.log("Disconnected from API");
                  socketClient.destroy();
                  socketClient = null;
              });
      
              // Wait until connection is established
              await once(socketClient, "connect");
          }
      
          // Send the message
          socketClient.write(message);
      
          // Listen for the response
          const data = await once(socketClient, "data");
          //const response = JSON.parse(data).result;
      };
      

      Das Skript steuert den AV Receiver via TCP Befehlen. Das klappt soweit seit Monaten bestens. Seit einigen Tagen erhalte ich im Log diese Fehler:

      2022-03-13 19:33:30.286  - info: javascript.0 (135) script.js.common.Lyngdorf.Fernbedienung: getState(id=fakeroku.0.lyngdorf.keys.Down, timerId=undefined) => {"val":true,"ack":true,"ts":1647196410285,"q":0,"from":"system.adapter.fakeroku.0","user":"system.user.admin","lc":1647196410285}
      2022-03-13 19:33:30.287  - error: javascript.0 (135) script.js.common.Lyngdorf.Fernbedienung: TypeError: Converting circular structure to JSON
      2022-03-13 19:33:30.287  - error: javascript.0 (135)     --> starting at object with constructor 'Socket'
      2022-03-13 19:33:30.287  - error: javascript.0 (135)     |     property '_writableState' -> object with constructor 'WritableState'
      2022-03-13 19:33:30.287  - error: javascript.0 (135)     |     property 'afterWriteTickInfo' -> object with constructor 'Object'
      2022-03-13 19:33:30.287  - error: javascript.0 (135)     --- property 'stream' closes the circle
      2022-03-13 19:33:30.288  - error: javascript.0 (135)     at JSON.stringify (<anonymous>)
      2022-03-13 19:33:30.288  - error: javascript.0 (135)     at Object.subscribe (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1109:65)
      2022-03-13 19:33:30.288  - error: javascript.0 (135)     at _once (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1191:46)
      2022-03-13 19:33:30.288  - error: javascript.0 (135)     at /opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1199:47
      2022-03-13 19:33:30.288  - error: javascript.0 (135)     at new Promise (<anonymous>)
      2022-03-13 19:33:30.288  - error: javascript.0 (135)     at once (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1199:24)
      2022-03-13 19:33:30.288  - error: javascript.0 (135)     at Send_mesage_via_TCP (script.js.common.Lyngdorf.Fernbedienung:155:24)
      2022-03-13 19:33:30.288  - error: javascript.0 (135)     at Object.<anonymous> (script.js.common.Lyngdorf.Fernbedienung:39:11)
      2022-03-13 19:33:30.288  - error: javascript.0 (135)     at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1082:38)
      2022-03-13 19:33:30.288  - error: javascript.0 (135)     at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:530:29)
      2022-03-13 19:33:30.288  - error: javascript.0 (135)     at Immediate.<anonymous> (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5909:56)
      2022-03-13 19:33:30.288  - error: javascript.0 (135)     at processImmediate (internal/timers.js:464:21)
      

      Ich kann es nicht mit Gewissheit sagen. Ich denke aber, dass Fehler erstmalig mit dem Update auf js-controller 4 aufgetreten ist. Sicher bin ich aber nicht.

      Der Fehler im Log wird mit jedem Lauf des Skripts geschrieben. Hat jemand eine Idee?

      Ergänzung: Ich habe noch etwas getestet und festgestellt, dass die Fehlermeldung mit der "verbose" Option im Skript Editor im Zusammenhang steht. Ist diese aktiviert, erscheinen die Fehler im Protokoll.

      Danke und Grüße

      Michael

      Sokomoto OliverIO 2 Replies Last reply Reply Quote 0
      • Sokomoto
        Sokomoto @abcklaus last edited by

        @abcklaus sagte in Skript: TypeError: Converting circular structure to JSON:

        dass die Fehlermeldung mit der "verbose" Option im Skript Editor im Zusammenhang steht

        Die Option verbose, erweitert nur die Log Ausgabe. Ich denke der meckert über die doppelte VAR Deklaration.

        Einmal am Anfang:

        var host, port, message;  // Die VAR message ist hier überflüssig
        

        und bei :

        async function Send_mesage_via_TCP(host, port, message)
        

        Das sind unterschiedliche Variablen auch wenn sie gleich heißen.

        Du kannst das auch so schreiben:

        'use strict';
        
        let socketClient;
        let host = '10.10.21.14';
        let port = 84;
         
        // PowerON
        on({id: 'fakeroku.0.lyngdorf.keys.Select', val: true}, async function (obj) {
          
            await Send_mesage_via_TCP('!POWERONMAIN\r');
        });
         
        // PowerOFF
        on({id: 'fakeroku.0.lyngdorf.keys.Home', val: true}, async function (obj) {
        
            await Send_mesage_via_TCP('!POWEROFFMAIN\r');
        });
         
        // Vol+
        on({id: 'fakeroku.0.lyngdorf.keys.Up', val: true}, async function (obj) {
        
            await Send_mesage_via_TCP('!VOL+\r!VOL+\r');
        });
         
        // Vol-
        on({id: 'fakeroku.0.lyngdorf.keys.Down', val: true}, async function (obj) {
          
            await Send_mesage_via_TCP('!VOL-\r!VOL-\r');
        });
        
         
        async function Send_mesage_via_TCP(message) {
            // Create the socket client if it was not already created
            if (!socketClient) {
                console.log('create new connection.');
                const net = require('net');
                socketClient = net.connect({ host: host, port: port });
         
                // On disconnect
                socketClient.on("end", () => {
                    console.log("Disconnected from API");
                    socketClient.destroy();
                    socketClient = null;
                });
         
                // Wait until connection is established
                await once(socketClient, "connect");
            }
         
            // Send the message
            socketClient.write(message);
         
            // Listen for the response
            const data = await once(socketClient, "data");
            //const response = JSON.parse(data).result;
        };
        

        tschuess

        1 Reply Last reply Reply Quote 0
        • OliverIO
          OliverIO @abcklaus last edited by

          @abcklaus sagte in Skript: TypeError: Converting circular structure to JSON:

          Also meiner Meinung nach liegt es nicht an dem was @Sokomoto schreibt.
          Gemäß Stack trace passiert der Fehler bei der Verarbeitung der Rückmeldung per once (Zeile 12 des logs).
          Die Rückmeldung wird dann per JSON.stringify (Zeile 7) versucht in einen String umzuwandeln.
          Allerdings scheint das ein Objekt zu sein, welches auf sich selber verweist und daher nicht umgewandelt werden kann.
          Interessant wäre es, was da enthalten ist.
          Evtl könntest du die Rückmeldung mal in einen Buffer speichern und da mal reinschauen. Buffer sind meist ein Array mit 8bit Werten, die den jeweiligen zeichencode darstellen. etwas aufpassen muss man bei utf8 kodierten Zeichenketten
          die net-Bibliothek kann die daten als string und als Buffer zurückgeben
          https://nodejs.org/api/buffer.html

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

          Support us

          ioBroker
          Community Adapters
          Donate

          548
          Online

          31.9k
          Users

          80.1k
          Topics

          1.3m
          Posts

          3
          3
          195
          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