Linky-Zähler Verbrauchsdaten

Ich werde versuchen, mich zu behelfen.

Keine Tests im PR, der numerische Typ ist bereits abgedeckt.

Also, ich sehe nicht, wie ich das machen soll (ich habe mir angeschaut, wie es gemacht wird), aber ich weiß nicht, wie ich den Dienst spammen kann.

Außerdem, laut der Lib-Ausgabe (und wenn ich das richtig verstehe), blockiert hier die MQTT-Bibliothek, oder?

Blocked for 36.14090771484375ms, operation started here: [
  '    at Socket.connect (net.js:970:7)',
  '    at Object.connect (net.js:201:17)',
  '    at Object.streamBuilder (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/connect/tcp.js:18:14)',
  '    at MqttClient.wrapper [as streamBuilder] (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/connect/index.js:154:36)',
  '    at MqttClient._setupStream (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:298:22)',
  '    at new MqttClient (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:277:8)',
  '    at Object.connect (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/connect/index.js:156:16)',
  '    at Zigbee2mqttManager.connect (/src/server/services/zigbee2mqtt/lib/connect.js:16:40)',
  '    at Zigbee2mqttManager.init (/src/server/services/zigbee2mqtt/lib/init.js:88:18)',
  '    at async Object.start (/src/server/services/zigbee2mqtt/index.js:17:5)',
  '    at async Service.start (/src/server/lib/service/service.start.js:33:7)'
]

Übrigens verstehe ich den Lifecycle hier nicht ganz. Warum gibt es bei jedem Publish eines Geräts eine Verbindung?

Um den Dienst zu spammen, rufst du in einem Test diese Funktion mit dem Z2M-Objekt deines Lixee TIC auf:

Der zugehörige Test:

In den Tests sieht das Z2M-Gerät, das gesendet wird, so aus:

Versuche, die gleiche Z2M-Nachricht für den Lixee TIC zu erhalten, erstelle eine neue JSON-Datei und erstelle einen neuen Test, der diese JSON-Datei sendet.

Danach geht es Zeile für Zeile, um zu verstehen, was passiert / was zu schwer zu machen ist.

Ich habe einfach mein Gerät in die JSON-Dateien hinzugefügt und diesen Test hinzugefügt (schlimmer als besser)

  it('BIG PAYLOAD', async () => {
    // VORBEREITUNG
    stateManagerGetStub = sinon.stub();
    stateManagerGetStub.onFirstCall().returns(null);
    zigbee2mqttManager.gladys.stateManager.get = stateManagerGetStub;
    // AUSFÜHRUNG
    await zigbee2mqttManager.handleMqttMessage('zigbee2mqtt/0x00158d0005d29aa0', `{"active_enerfy_out_d01":8015,"active_enerfy_out_d02":10819,"active_enerfy_out_d03":4081,"active_enerfy_out_d04":5549,"active_power":1126,"active_power_max":2360,"active_power_ph_b":464,"apparent_power":415,"available_power":6,"average_rms_voltage_meas_period":233,"current_date":"E220524164514","current_index_tarif":2,"current_price":"HEURE PLEINE","current_summ_delivered":28947,"current_tarif":"H PLEINE/CREUSE","current_tier10_summ_delivered":0,"current_tier1_summ_delivered":12307,"current_tier2_summ_delivered":16640,"current_tier3_summ_delivered":0,"current_tier4_summ_delivered":0,"current_tier5_summ_delivered":0,"current_tier6_summ_delivered":0,"current_tier7_summ_delivered":0,"current_tier8_summ_delivered":0,"current_tier9_summ_delivered":0,"device":{"applicationVersion":4,"dateCode":"20220217","friendlyName":"Lixee TIC","hardwareVersion":1,"ieeeAddr":"0x00158d0005d29aa0","manufacturerID":4151,"manufacturerName":"LiXee","model":"ZLinky_TIC","networkAddress":32871,"powerSource":"Mains (single phase)","softwareBuildID":"4000-0005","stackVersion":2,"type":"Router","zclVersion":3},"drawn_v_a_max_n1":2940,"last_seen":"2022-06-24T15:33:28+00:00","linkquality":78,"message1":"PAS DE MESSAGE","message2":"","meter_serial_number":"811775803140","power_threshold":6,"relais":1,"rms_current":2,"rms_voltage":231,"site_id":"XXXXXX","software_revision":2,"status_register":"003A4401","update":{"state":"idle"},"update_available":false}`);
    // BEHAUPTUNG
    assert.calledOnce(gladys.event.emit);
  });

Das bringt alle Tests durcheinander. (discover und handlemqtt)

Kurz gesagt, das ist nicht mein Fachgebiet. (sehr frustrierend, ich verstehe nichts.)

Ist das in deinem Code oder ist das ein Kopierfehler im Forum?

Im Code werde ich durch ein einzelnes Anführungszeichen ersetzen

Ach, aber eigentlich sollte es ein String sein, denke ich, also könnte das normal sein.

Was für einen Fehler hast du sonst noch?

Ja, ich habe gerade die anderen Tests gecheckt, die sind alle so

Der totale Fail, ich habe das Gefühl, dass die Features sich „verschieben“ (GIST, weil es nicht auf dem Forum geht)

https://gist.github.com/VonOx/3408e88d231594fc530bdbabcbe5f71a#file-gistfile1-txt

Offensichtlich ein Problem mit der Array-Größe

Also, was ist normal, was ist das Problem?

Wenn du die Eingabe der Tests änderst, ist es normal, dass die Ausgabe anders ist.

Aber im Grunde ist es egal, ob die Tests im CI durchlaufen oder nicht, die Idee war einfach, diesen Test lokal zu haben, um zu testen, wie die Z2M-Integration auf diesen großen Payload reagiert und zu verstehen, welcher Codeabschnitt diese Event-Loop-Blockaden verursacht.

Aber ich gebe zu, dass es ein Ansatz ist, bei dem man sich ein bisschen auskennen muss :sweat_smile:

Wenn ich die anderen Tests ignoriere, gibt es keine Blockade beim großen Payload

image

Wo es blockiert, weiß ich nicht, ob das hilft (kein Stack)

image

Nichts anderes

Keine Überraschung, es ist der JSON.parse, der blockiert, das ist ein Klassiker, JSON.parse ist eine synchrone, blockierende Operation in JavaScript, bei großen Payloads dauert das.

Aus Neugier, wie sieht dieses JSON aus?

Le Lixee en +

[
  {
    "external_id": "zigbee2mqtt:0x00158d00033e88d5",
    "features": [
      {
        "category": "battery",
        "external_id": "zigbee2mqtt:0x00158d00033e88d5:battery:integer:battery",
        "has_feedback": false,
        "max": 100,
        "min": 0,
        "name": "Battery",
        "read_only": true,
        "selector": "zigbee2mqtt-0x00158d00033e88d5-battery-integer-battery",
        "type": "integer",
        "unit": "percent"
      },
      {
        "category": "button",
        "external_id": "zigbee2mqtt:0x00158d00033e88d5:button:click:action",
        "has_feedback": false,
        "max": 7,
        "min": 0,
        "name": "Action",
        "read_only": true,
        "selector": "zigbee2mqtt-0x00158d00033e88d5-button-click-action",
        "type": "click",
        "unit": null
      },
      {
        "category": "switch",
        "external_id": "zigbee2mqtt:0x00158d00033e88d5:switch:voltage:voltage",
        "has_feedback": false,
        "max": 10000,
        "min": 0,
        "name": "Voltage",
        "read_only": true,
        "selector": "zigbee2mqtt-0x00158d00033e88d5-switch-voltage-voltage",
        "type": "voltage",
        "unit": "millivolt"
      }
    ],
    "model": "WXKG01LM",
    "name": "0x00158d00033e88d5",
    "service_id": "f87b7af2-ca8e-44fc-b754-444354b42fee",
    "should_poll": false
  },
  {
    "name": "0x00158d0004019127",
    "model": "WXKG11LM",
    "external_id": "zigbee2mqtt:0x00158d0004019127",
    "features": [
      {
        "name": "Battery",
        "read_only": true,
        "has_feedback": false,
        "min": 0,
        "max": 100,
        "category": "battery",
        "type": "integer",
        "unit": "percent",
        "external_id": "zigbee2mqtt:0x00158d0004019127:battery:integer:battery",
        "selector": "zigbee2mqtt-0x00158d0004019127-battery-integer-battery"
      },
      {
        "name": "Voltage",
        "read_only": true,
        "has_feedback": false,
        "min": 0,
        "max": 10000,
        "category": "switch",
        "type": "voltage",
        "unit": "millivolt",
        "external_id": "zigbee2mqtt:0x00158d0004019127:switch:voltage:voltage",
        "selector": "zigbee2mqtt-0x00158d0004019127-switch-voltage-voltage"
      }
    ],
    "should_poll": false,
    "service_id": "f87b7af2-ca8e-44fc-b754-444354b42fee"
  },
  {
    "name": "0x00158d00045b2740",
    "model": "WSDCGQ11LM",
    "external_id": "zigbee2mqtt:0x00158d00045b2740",
    "features": [
      {
        "name": "Battery",
        "read_only": true,
        "has_feedback": false,
        "min": 0,
        "max": 100,
        "category": "battery",
        "type": "integer",
        "unit": "percent",
        "external_id": "zigbee2mqtt:0x00158d00045b2740:battery:integer:battery",
        "selector": "zigbee2mqtt-0x00158d00045b2740-battery-integer-battery"
      },
      {
        "name": "Temperature",
        "read_only": true,
        "has_feedback": false,
        "min": -100,
        "max": 150,
        "category": "temperature-sensor",
        "type": "decimal",
        "unit": "celsius",
        "external_id": "zigbee2mqtt:0x00158d00045b2740:temperature-sensor:decimal:temperature",
        "selector": "zigbee2mqtt-0x00158d00045b2740-temperature-sensor-decimal-temperature"
      },
      {
        "name": "Humidity",
        "read_only": true,
        "has_feedback": false,
        "min": 0,
        "max": 100,
        "category": "humidity-sensor",
        "type": "decimal",
        "unit": "percent",
        "external_id": "zigbee2mqtt:0x00158d00045b2740:humidity-sensor:decimal:humidity",
        "selector": "zigbee2mqtt-0x00158d00045b2740-humidity-sensor-decimal-humidity"
      },
      {
        "name": "Alarm",
        "read_only": false,
        "has_feedback": true,
        "min": 0,
        "max": 1,
        "category": "siren",
        "type": "binary",
        "unit": null,
        "external_id": "zigbee2mqtt:0x00158d00045b2740:siren:binary:alarm",
        "selector": "zigbee2mqtt-0x00158d00045b2740-siren-binary-alarm"
      },
      {
        "name": "Pressure",
        "read_only": true,
        "has_feedback": false,
        "min": 0,
        "max": 10000,
        "category": "pressure-sensor",
        "type": "decimal",
        "unit": "hPa",
        "external_id": "zigbee2mqtt:0x00158d00045b2740:pressure-sensor:decimal:pressure",
        "selector": "zigbee2mqtt-0x00158d00045b2740-pressure-sensor-decimal-pressure"
      },
      {
        "name": "Voltage",
        "read_only": true,
        "has_feedback": false,
        "min": 0,
        "max": 10000,
        "category": "switch",
        "type": "voltage",
        "unit": "millivolt",
        "external_id": "zigbee2mqtt:0x00158d00045b2740:switch:voltage:voltage",
        "selector": "zigbee2mqtt-0x00158d00045b2740-switch-voltage-voltage"
      }
    ],
    "should_poll": false,
    "service_id": "f87b7af2-ca8e-44fc-b754-444354b42fee"
  },
  {
    "service_id": "f87b7af2-ca8e-44fc-b754-444354b42fee",
    "name": "0x00158d0005d29aa0",
    "model": "ZLinky_TIC",
    "external_id": "zigbee2mqtt:0x00158d0005d29aa0",
    "should_poll": false,
    "features": [
      {
        "name": "Numéro tarif",
        "selector": "zigbee2mqtt-0x00158d0005d29aa0-energy-sensor-index-current-index-tarif",
        "external_id": "zigbee2mqtt:0x00158d0005d29aa0:energy-sensor:index:current_index_tarif",
        "category": "energy-sensor",
        "type": "index",
        "read_only": true,
        "has_feedback": false,
        "unit": "kilowatt-hour",
        "min": 0,
        "max": 10000
      },
      {
        "name": "Puissance apprente",
        "selector": "zigbee2mqtt-0x00158d0005d29aa0-energy-sensor-power-apparent-power",
        "external_id": "zigbee2mqtt:0x00158d0005d29aa0:energy-sensor:power:apparent_power",
        "category": "energy-sensor",
        "type": "power",
        "read_only": true,
        "has_feedback": false,
        "unit": "volt-ampere",
        "min": 0,
        "max": 10000
      },
      {
        "name": "Index Total",
        "selector": "zigbee2mqtt-0x00158d0005d29aa0-energy-sensor-index-current-summ-delivered",
        "external_id": "zigbee2mqtt:0x00158d0005d29aa0:energy-sensor:index:current_summ_delivered",
        "category": "energy-sensor",
        "type": "index",
        "read_only": true,
        "has_feedback": false,
        "unit": "kilowatt-hour",
        "min": 0,
        "max": 1000000
      },
      {
        "name": "Heures creuses",
        "selector": "zigbee2mqtt-0x00158d0005d29aa0-energy-sensor-index-current-tier1-summ-delivered",
        "external_id": "zigbee2mqtt:0x00158d0005d29aa0:energy-sensor:index:current_tier1_summ_delivered",
        "category": "energy-sensor",
        "type": "index",
        "read_only": true,
        "has_feedback": false,
        "unit": "kilowatt-hour",
        "min": 0,
        "max": 1000000
      },
      {
        "name": "Heures pleines",
        "selector": "zigbee2mqtt-0x00158d0005d29aa0-energy-sensor-index-current-tier2-summ-delivered",
        "external_id": "zigbee2mqtt:0x00158d0005d29aa0:energy-sensor:index:current_tier2_summ_delivered",
        "category": "energy-sensor",
        "type": "index",
        "read_only": true,
        "has_feedback": false,
        "unit": "kilowatt-hour",
        "min": 0,
        "max": 1000000
      }
    ]
  }
]

Oder dieser, ich weiß nicht genau, welcher verwendet wird

[
  {
    "definition": null,
    "endpoints": {
      "1": {
        "bindings": [],
        "clusters": {
          "input": ["genBasic", "genTime", "genOta"],
          "output": ["genPowerCfg", "genPollCtrl", "ssIasZone"]
        },
        "configured_reportings": []
      },
      "242": {
        "bindings": [],
        "clusters": {
          "input": [],
          "output": ["greenPower"]
        },
        "configured_reportings": []
      }
    },
    "friendly_name": "Koordinator",
    "ieee_address": "0x00212effff06ddd8",
    "interview_completed": true,
    "interviewing": false,
    "network_address": 0,
    "supported": false,
    "type": "Koordinator"
  },
  {
    "definition": {
      "description": "MiJia drahtloser Schalter",
      "exposes": [
        {
          "access": 1,
          "description": "Verbleibende Batterie in %",
          "name": "battery",
          "property": "battery",
          "type": "numeric",
          "unit": "%",
          "value_max": 100,
          "value_min": 0
        },
        {
          "access": 1,
          "description": "Ausgelöste Aktion (z. B

Bist du sicher, dass es diese JSON-Dateien sind?

Es sind kleine JSON-Dateien, und ein einfacher Test bei dir ergibt 0,1 ms Parsing-Zeit für diese JSON-Dateien. Das sind meiner Meinung nach nicht die richtigen JSON-Dateien ^^

Ich werde es bearbeiten und dann pushen, denn es ist zu lang für das Forum.

https://pastebin.com/ sinon !

Schau mal, ich habe einen Zweig für das Debugging erstellt

https://github.com/GladysAssistant/Gladys/compare/master...VonOx:Gladys:z2m-debug

Kannst du mir ein Beispiel für einen großen JSON-Body von Zigbee2mqtt auf Pastebin kopieren und einfügen?

Falls es sich um persönliche sensible Daten handelt, kannst du sie mir auch per DM schicken :slight_smile:

Er ist für den Lixee (neuer Zustand) da

Ansonsten ist das Gerät selbst für die Entdeckung bereits auf GitHub

{
    "date_code": "20220217",
    "definition": {
      "description": "Lixee ZLinky",
      "exposes": [
        {
          "access": 1,
          "description": "Seriennummer",
          "name": "ADSC",
          "property": "meter_serial_number",
          "type": "text"
        },
        {
          "access": 1,
          "description": "Name des Lieferantenpreisschemas",
          "name": "NGTF",
          "property": "current_tarif",
          "type": "text"
        },
        {
          "access": 1,
          "description": "Aktuelles Lieferantenpreisetikett",
          "name": "LTARF",
          "property": "current_price",
          "type": "text"
        },
        {
          "access": 1,
          "description": "Aktuelle Tarifindexnummer",
          "name": "NTARF",
          "property": "current_index_tarif",
          "type": "numeric"
        },
        {
          "access": 1,
          "description": "Kunden-Teleinformationsprotokollversion",
          "name": "VTIC",
          "property": "software_revision",
          "type": "numeric"
        },
        {
          "access": 1,
          "description": "Aktuelles Datum und Uhrzeit",
          "name": "DATE",
          "property": "current_date",
          "type": "text"
        },
        {
          "access": 1,
          "description": "Gesamtaktive abgegebene Leistung",
          "name": "EAST",
          "property": "current_summ_delivered",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Gesamtaktive abgegebene Leistung des Anbieters (Index 01)",
          "name": "EASF01",
          "property": "current_tier1_summ_delivered",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Gesamtaktive abgegebene Leistung des Anbieters (Index 02)",
          "name": "EASF02",
          "property": "current_tier2_summ_delivered",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Gesamtaktive abgegebene Leistung des Anbieters (Index 03)",
          "name": "EASF03",
          "property": "current_tier3_summ_delivered",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Gesamtaktive abgegebene Leistung des Anbieters (Index 04)",
          "name": "EASF04",
          "property": "current_tier4_summ_delivered",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Gesamtaktive abgegebene Leistung des Anbieters (Index 05)",
          "name": "EASF05",
          "property": "current_tier5_summ_delivered",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Gesamtaktive abgegebene Leistung des Anbieters (Index 06)",
          "name": "EASF06",
          "property": "current_tier6_summ_delivered",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Gesamtaktive abgegebene Leistung des Anbieters (Index 07)",
          "name": "EASF07",
          "property": "current_tier7_summ_delivered",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Gesamtaktive abgegebene Leistung des Anbieters (Index 08)",
          "name": "EASF08",
          "property": "current_tier8_summ_delivered",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Gesamtaktive abgegebene Leistung des Anbieters (Index 09)",
          "name": "EASF09",
          "property": "current_tier9_summ_delivered",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Gesamtaktive abgegebene Leistung des Anbieters (Index 10)",
          "name": "EASF10",
          "property": "current_tier10_summ_delivered",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Aktive Energie entnommen vom Verteilernetz (Index 01)",
          "name": "EASD01",
          "property": "active_enerfy_out_d01",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Aktive Energie entnommen vom Verteilernetz (Index 02)",
          "name": "EASD02",
          "property": "active_enerfy_out_d02",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Aktive Energie entnommen vom Verteilernetz (Index 03)",
          "name": "EASD03",
          "property": "active_enerfy_out_d03",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Aktive Energie entnommen vom Verteilernetz (Index 04)",
          "name": "EASD04",
          "property": "active_enerfy_out_d04",
          "type": "numeric",
          "unit": "kWh"
        },
        {
          "access": 1,
          "description": "Effektivstrom",
          "name": "IRMS1",
          "property": "rms_current",
          "type": "numeric",
          "unit": "A"
        },
        {
          "access": 1,
          "description": "Effektivspannung",
          "name": "URMS1",
          "property": "rms_voltage",
          "type": "numeric",
          "unit": "V"
        },
        {
          "access": 1,
          "description": "Scheinleistung des Referenzpunkts",
          "name": "PREF",
          "property": "available_power",
          "type": "numeric",
          "unit": "kVA"
        },
        {
          "access": 1,
          "description": "Register der Statuten",
          "name": "STGE",
          "property": "status_register",
          "type": "text"
        },
        {
          "access": 1,
          "description": "Scheinleistungsschwelle",
          "name": "PCOUP",
          "property": "power_threshold",
          "type": "numeric",
          "unit": "kVA"
        },
        {
          "access": 1,
          "description": "Aktueller Punkt der gezogenen Wirkleistungslastkurve",
          "name": "CCASN",
          "property": "active_power",
          "type": "numeric",
          "unit": "W"
        },
        {
          "access": 1,
          "description": "Vorheriger Punkt der gezogenen Wirkleistungslastkurve",
          "name": "CCASN-1",
          "property": "active_power_ph_b",
          "type": "numeric",
          "unit": "W"
        },
        {
          "access": 1,
          "description": "Durchschnittliche Effektivspannung (Phase 1)",
          "name": "UMOY1",
          "property": "average_rms_voltage_meas_period",
          "type": "numeric",
          "unit": "V"
        },
        {
          "access": 1,
          "description": "Unmittelbare abgegebene Scheinleistung",
          "name": "SINSTS",
          "property": "apparent_power",
          "type": "numeric",
          "unit": "VA"
        },
        {
          "access": 1,
          "description": "Abgegebene Scheinleistungs-Spitze",
          "name": "SMAXN",
          "property": "active_power_max",
          "type": "numeric",
          "unit": "VA"
        },
        {
          "access": 1,
          "description": "Abgegebene Scheinleistungs-Maximalwert"}. draw-off n-1",
          "name": "SMAXN-1",
          "property": "drawn_v_a_max_n1",
          "type": "numeric",
          "unit": "VA"
        },
        {
          "access": 1,
          "description": "Kurze Nachricht",
          "name": "MSG1",
          "property": "message1",
          "type": "text"
        },
        {
          "access": 1,
          "description": "Sehr kurze Nachricht",
          "name": "MSG2",
          "property": "message2",
          "type": "text"
        },
        {
          "access": 1,
          "description": "PRM-Nummer",
          "name": "PRM",
          "property": "site_id",
          "type": "text"
        },
        {
          "access": 1,
          "description": "Start mobiler Punkt 1",
          "name": "DPM1",
          "property": "start_mobile_point1",
          "type": "numeric"
        },
        {
          "access": 1,
          "description": "Stopp mobiler Punkt 1",
          "name": "FPM1",
          "property": "stop_mobile_point1",
          "type": "numeric"
        },
        {
          "access": 1,
          "description": "Start mobiler Punkt 2",
          "name": "DPM2",
          "property": "start_mobile_point2",
          "type": "numeric"
        },
        {
          "access": 1,
          "description": "Stopp mobiler Punkt 2",
          "name": "FPM2",
          "property": "stop_mobile_point2",
          "type": "numeric"
        },
        {
          "access": 1,
          "description": "Start mobiler Punkt 3",
          "name": "DPM3",
          "property": "start_mobile_point3",
          "type": "numeric"
        },
        {
          "access": 1,
          "description": "Stopp mobiler Punkt 3",
          "name": "FPM3",
          "property": "stop_mobile_point3",
          "type": "numeric"
        },
        {
          "access": 1,
          "name": "RELAIS",
          "property": "relais",
          "type": "numeric"
        },
        {
          "access": 1,
          "description": "Aktuelle Tagnummer Lieferantenkalender",
          "name": "NJOURF",
          "property": "days_number_current_calendar",
          "type": "numeric"
        },
        {
          "access": 1,
          "description": "Nächste Tagnummer Lieferantenkalender",
          "name": "NJOURF+1",
          "property": "days_number_next_calendar",
          "type": "numeric"
        },
        {
          "access": 1,
          "description": "Profil des nächsten Lieferantenkalendertages",
          "name": "PJOURF+1",
          "property": "days_profile_current_calendar",
          "type": "text"
        },
        {
          "access": 1,
          "description": "Profil des nächsten Check-in-Tages",
          "name": "PPOINTE1",
          "property": "days_profile_next_calendar",
          "type": "text"
        },
        {
          "access": 1,
          "description": "Linkqualität (Signalstärke)",
          "name": "linkquality",
          "property": "linkquality",
          "type": "numeric",
          "unit": "lqi",
          "value_max": 255,
          "value_min": 0
        }
      ],
      "model": "ZLinky_TIC",
      "options": [
        {
          "access": 2,
          "description": "Dieses Gerät unterstützt keine Meldung elektrischer Messungen, daher wird es stattdessen abgefragt. Das Standard-Abfrageintervall beträgt 60 Sekunden. Setzen Sie es auf -1, um es zu deaktivieren.",
          "name": "measurement_poll_interval",
          "property": "measurement_poll_interval",
          "type": "numeric",
          "value_min": -1
        },
        {
          "access": 2,
          "description": "Zähler mit TIC im Standard- oder Historienmodus. Erfordert möglicherweise einen Neustart (Standard: auto)",
          "name": "linky_mode",
          "property": "linky_mode",
          "type": "enum",
          "values": ["auto", "historique", "standard"]
        },
        {
          "access": 2,
          "description": "Leistung mit einphasig oder dreiphasig. Erfordert möglicherweise einen Neustart (Standard: auto)",
          "name": "energy_phase",
          "property": "energy_phase",
          "type": "enum",
          "values": ["auto", "single_phase", "three_phase"]
        },
        {
          "access": 2,
          "description": "Wenn Sie Energie zurück ins Netz einspeisen (funktioniert NUR, wenn linky_mode: standard, Standard: auto)",
          "name": "production",
          "property": "production",
          "type": "enum",
          "values": ["auto", "true", "false"]
        },
        {
          "access": 2,
          "description": "Überschreibt den automatischen Stromtarif. Diese Option schließt unnötige Attribute aus. Öffnen Sie ein Issue, um mehr davon zu unterstützen. Standard: auto",
          "name": "tarif",
          "property": "tarif",
          "type": "enum",
          "values": [
            "Historique - BASE",
            "Historique - HCHP",
            "Historique - EJP",
            "Historique - BBR",
            "Standard - Sem WE Mercredi",
            "Standard - Heure Pleine Heure Creuse",
            "auto"
          ]
        },
        {
          "access": 2,
          "description": "Anzahl der Dezimalstellen für kWh, wirkt sich auf den nächsten Bericht des Geräts aus.",
          "name": "kWh_precision",
          "property": "kWh_precision",
          "type": "numeric",
          "value_max": 3,
          "value_min": 0
        },
        {
          "access": 2,
          "description": "Während der Abfrage werden mehrere Exposes an das Zlinky gleichzeitig angefordert, um die Überlastung des Zigbee-Netzwerks zu reduzieren. Zu viele Anfragen auf einmal könnten die Gerätegrenze überschreiten. Erfordert einen Z2M-Neustart. Standard: 1",
          "name": "measurement_poll_chunk",
          "property": "measurement_poll_chunk",
          "type": "numeric",
          "value_min": 1
        },
        {
          "access": 2,
          "description": "Liste der TIC-Befehle, die exponiert werden sollen (durch Komma getrennt). Gerät nach der Änderung neu konfigurieren. Standard: alle",
          "name": "tic_command_whitelist",
          "property": "tic_command_whitelist",
          "type": "text"
        }
      ],
      "supports_ota": true,
      "vendor": "LiXee"
    },
    "endpoints": {
      "1": {
        "bindings": [
          {
            "cluster": "haElectricalMeasurement",
            "target": {
              "endpoint": 1,
              "ieee_address": "0x00124b0021b95104",
              "type": "endpoint"
            }
          },
          {
            "cluster": "seMetering",
            "target": {
              "endpoint": 1,
              "ieee_address": "0x00124b0021b95104",
              "type": "endpoint"
            }
          },
          {
            "cluster": "haMeterIdentification",
            "target": {
              "endpoint": 1,
              "ieee_address": "0x00124b0021b95104",
              "type": "endpoint"
            }
          },
          {
            "cluster": "liXeePrivate",
            "target": {
              "endpoint": 1,
              "ieee_address": "0x00124b0021b95104",
              "type": "endpoint"
            }
          }
        ],
        "clusters": {
          "input": [
            "genBasic",
            "genIdentify",
            "seMetering",
            "haElectricalMeasurement",
            "haMeterIdentification",
            "liXeePrivate"
          ],
          "output": ["genOta"]
        },
        "configured_reportings": [
          {
            "attribute": "currentSummDelivered",
            "cluster": "seMetering",
            "maximum_report_interval": 900,
            "minimum_report_interval": 60,
            "reportable_change": 100
          },
          {
            "attribute": "currentTier1SummDelivered",
            "cluster": "seMetering",
            "maximum_report_interval": 900,
            "minimum_report_interval": 60,
            "reportable_change": 100
          },
          {
            "attribute": "currentTier2SummDelivered",
            "cluster": "seMetering",
            "maximum_report_interval": 900,
            "minimum_report_interval": 60,
            "reportable_change": 100
          },
          {
            "attribute": "currentTier3SummDelivered",
            "cluster": "seMetering",
            "maximum_report_interval": 900,
            "minimum_report_interval": 60,
            "reportable_change": 100
          },
          {
            "attribute": "rmsCurrent",
            "cluster": "haElectricalMeasurement",
            "maximum_report_interval": 900,
            "minimum_report_interval": 60,
            "reportable_change": 1
          },
          {
            "attribute": "activePower",
            "cluster": "haElectricalMeasurement",
            "maximum_report_interval": 900,
            "minimum_report_interval": 60,
            "reportable_change": 1
          },
          {
            "attribute": "activePowerPhB",
            "cluster": "haElectricalMeasurement",
            "maximum_report_interval": 900,
            "minimum_report_interval": 60,
            "reportable_change": 1
          },
          {
            "attribute": "apparentPower",
            "cluster": "haElectricalMeasurement",
            "maximum_report_interval": 900,
            "minimum_report_interval": 60,
            "reportable_change": 1
          },
          {
            "attribute": "activePowerMax",
            "cluster": "haElectricalMeasurement",
            "maximum_report_interval": 900,
            "minimum_report_interval": 60,
            "reportable_change": 1
          }
        ],
        "scenes": []
      },
      "242": {
        "bindings": [],
        "clusters": { "input": ["greenPower"], "output": ["greenPower"] },
        "configured_reportings": [],
        "scenes": []
      }
    },
    "friendly_name": "Lixee TIC",
    "ieee_address": "0x00158d0005d29aa0",
    "interview_completed": true,
    "interviewing": false,
    "manufacturer": "LiXee",
    "model_id": "ZLinky_TIC\u0000",
    "network_address": 32871,
    "power_source": "Mains (single phase)",
    "software_build_id": "4000-0005",
    "supported": true,
    "type": "Router"
  }

Okay, in diesem Fall ist es nicht das JSON.parse, sondern ein relativ kleines JSON, das eigentlich kein Problem darstellen sollte.

Jetzt müssen wir Zeile für Zeile testen, was Zeit in Anspruch nimmt und blockiert.

Du kannst im Code Folgendes hinzufügen:

console.time('nameOfMyTimer');
// Der Code hier
console.timeEnd('nameOfMyTimer');

(du kannst jeder Stufe einen Namen geben)

Du führst den Test handleMqttMessage einzeln aus und schaust Zeile für Zeile, was am meisten Zeit in Anspruch nimmt.

Es ist mühsam, aber es gibt leider keine andere Methode, um Lösungen zu finden!

Das ist nicht zu gewalttätig

2022-06-27T18:32:27+0200 <log> handleMqttMessage.js:22 (Zigbee2mqttManager.handleMqttMessage) Getting config devices from Zigbee2mqtt
Devices map: 0.264ms
Event: 4.241ms
handleMqttMessage: 7.189ms
Gladys Blocked for 28.98486499786377ms, operation started here: []

EDIT:

Ein zweiter mit dem Parser (ich war im Batteriebetrieb im Energiesparmodus während des vorherigen Tests)

2022-06-27T18:43:39+0200 <log> handleMqttMessage.js:22 (Zigbee2mqttManager.handleMqttMessage) Getting config devices from Zigbee2mqtt
JSONParse: 0.191ms
Devices map: 0.034ms
Event: 1.049ms
handleMqttMessage: 2.195ms