Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. [Done] Snips.ai - mqtt und JSON parsen - iobroker Absturz

    NEWS

    • [erledigt] 15. 05. Wartungsarbeiten am ioBroker Forum

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Done] Snips.ai - mqtt und JSON parsen - iobroker Absturz

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

      Update, auch wenn snips mittlerweile nicht mehr weiterentwickelt wird:
      Das Problem war, das snips über mqtt auch den kompletten Audioverkehr bereitstellt. Das wusste ich nicht und der iobroker hat auf das komplette "Hermes" Topic subscribed. Das war dann ein "bisschen" viel Traffic für den Raspberry. 😉
      Man darf nur auf folgende Topics subscriben:
      hermes/asr/#,hermes/nlu/#,hermes/tts/#,hermes/dialogueManager/#
      Dann geht's


      Original Post:

      Hallo Zusammen!

      Ich habe hier ein Problem mit dem ich nicht mehr weiter komme, aber Ihr könnt mir bestimmt helfen! Iobroker friert mir immer ein wenn ich den mqtt Adapter installiere und per Javascript ein JSON parsen möchte. Ich frag mich ob das an Überlastung des Pi liegt oder ob ich ne falsche Abfrage mache, die die Kiste überlastet.

      Ich habe iobroker auf einem Pi 3B installiert, also 1GB RAM. Ich nutze recht viele Adapter, der Speicher ist also ziemlich voll, aktuell sind noch 100-200 MB frei. In der aktuellen Konfiguration läuft aber alles noch recht flüssig.

      Jetzt wollte ich aber snips.ai anbinden, das ist ein Sprachassistent wie Alexa, allerdings offline, ohne Cloud Anbindung. Snips läuft auf einem zweiten Pi und schickt nach erkanntem Sprachbefehl ein JSON mit dem bereits in einzelne Teile zerlegten Satz per MQTT. Dieses JSON habe ich dann mittels MQTT Adapter abgegriffen und es wird automatisch in ein Objekt geschrieben. Wenn dieses Objekt aktualisiert wird, soll der Javascript Adapter das JSON parsen, und den zerlegten Text in einzelne Objekte ablegen. Klappt auch soweit ganz gut. Zumindest ein paar Minuten lang.

      Danach wird iobroker und der gesamte PI immer langsamer und dann hängt sich iobroker auf (im admin drehen sich dann nur noch bunte Kreise und irgendwann ist der admin gar nicht mehr erreichbar).

      Dann hilft auch kein Neustart mehr, ich muss dann ein Backup einspielen ohne den MQTT Adapter und ohne das Script.

      Dinge die mir aufgefallen sind:

      Nach Installation des MQTT Adapters fahren alle Rollläden wie wild hoch und runter. Anscheinend werden die Javascripte auch per MQTT verschickt (?) jedenfalls taucht in der Objektstruktur vom MQTT Adapter wieder ein Unterpunkt „javascript“ auf mit allen (oder zumindest einigen) meiner Skripte. Hab den MQTT Adapter dann auf das Topic „mqtt.0.hermes/#“ beschränkt, dann hören die Rollläden wieder auf Mist zu machen, hat mich aber gewundert.

      Der PI ist über putty auch nur noch extrem langsam zu erreichen. Unter Linux „top“ eingegeben sieht man, dass der iobroker-jscontroller teilweise 200% CPU Last erzeugt und ~30% Ram braucht. Wie gesagt, admin ist dann nicht mehr erreichbar.

      Hier das Skript das ich verwende um das JSON in Objekte zu schreiben: (Hab ich mir aus dem Internet besorgt und etwas angepasst.

      on({id: 'mqtt.0.hermes.nlu.intentParsed', change: "any"}, function (obj) {
              var room
              var brightness
              var device
      
         //der try ist wichtig das der adapter nicht abschmiert bei einem fehler, hiermit pasen wird die json in ein object
         try {obj = JSON.parse(getState('mqtt.0.hermes.nlu.intentParsed').val);
         } catch (e) {
                 console.error('Cannot parse: ' + getState('mqtt.0.hermes.nlu.intentParsed').val);
                 return;
          }
      
         room = obj.id;
         brightness = obj.intent.intentName;
         device = obj.slots[0].value.value;
      
        setState('javascript.0.eigene_variablen.snips.Licht.room', (room));
        setState('javascript.0.eigene_variablen.snips.Licht.brightness', (brightness));
        setState('javascript.0.eigene_variablen.snips.Licht.device', (device));
        // setState('javascript.0.eigene_variablen.snips.Licht.Lichtstaerke', (Lichtstaerke));
      
      });
      
      

      Ein Beispiel JSON hab ich leider gerade nicht, hab den PI ja wieder zurückgesetzt auf den alten Stand. Das JSON ist aber ein "normales" JSON das unter anderem die Werte für room, brightness, device innerhalb eines Arrays übergibt.

      Überlege jetzt, ob ich mit iobroker vom PI auf einen NUC mit Proxmox umziehen muss wegen mangelnder Performance oder ob ich einen Fehler gemacht habe.

      Vielen Dank für eure Hilfe!

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

        Habe zwar gerade zu deiner wirklichen Frage keine Idee aber ein Kommentar zu deinem Skript: wenn du in der trigger Funktion auf den neuen Wert den getriggerten States zugreifen willst bitte obj.state.val nutzen anstelle getState. Sonst kann es sein das du nicht den neuen Wert bekommst.

        JavaScript kannst du auf debug stellen, dann siehst du mehr was dein JavaScript tut und ggf MQTT Adapter auf debug.

        Gesendet vom Handy …

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

        Support us

        ioBroker
        Community Adapters
        Donate

        676
        Online

        31.6k
        Users

        79.5k
        Topics

        1.3m
        Posts

        absturz hermes mqtt snips
        2
        2
        353
        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