Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst]Roomba xml oder json Datei auslesen und auswerten

    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

    [gelöst]Roomba xml oder json Datei auslesen und auswerten

    This topic has been deleted. Only users with topic management privileges can see it.
    • coyote
      coyote Most Active last edited by

      Morgen,

      ich möchte gerne eine xml oder json Datei (was einfacher ist) vom Roowifi Modul auslesen und auswerten. Entweder in eine kleine Tabelle oder lieber noch in einzelne Datenpunkte, da ich nicht alle Daten benötige.

      Wichtig wären zum Beispiel erst mal Ladestatus, Strom, Temperatur.

      Die xml sieht so aus:

      ! <response><r0><name>'Bumps Wheeldrops'</name>
      ! <value>3</value></r0>
      ! <r1><name>'Wall'</name>
      ! <value>0</value></r1>
      ! <r2><name>'Cliff Left'</name>
      ! <value>0</value></r2>
      ! <r3><name>'Cliff Front Left'</name>
      ! <value>0</value></r3>
      ! <r4><name>'Cliff Front Right'</name>
      ! <value>0</value></r4>
      ! <r5><name>'Cliff Right'</name>
      ! <value>0</value></r5>
      ! <r6><name>'Virtual Wall'</name>
      ! <value>0</value></r6>
      ! <r7><name>'Motor Overcurrents'</name>
      ! <value>0</value></r7>
      ! <r8><name>'Dirt Detector - Left'</name>
      ! <value>0</value></r8>
      ! <r9><name>'Dirt Detector - Right'</name>
      ! <value>0</value></r9>
      ! <r10><name>'Remote Opcode'</name>
      ! <value>0</value></r10>
      ! <r11><name>'Buttons'</name>
      ! <value>0</value></r11>
      ! <r12><name>'Distance'</name>
      ! <value>0</value></r12>
      ! <r13><name>'Angle'</name>
      ! <value>0</value></r13>
      ! <r14><name>'Charging State'</name>
      ! <value>3</value></r14>
      ! <r15><name>'Voltage'</name>
      ! <value>16198</value></r15>
      ! <r16><name>'Current'</name>
      ! <value>-47</value></r16>
      ! <r17><name>'Temperature'</name>
      ! <value>27</value></r17>
      ! <r18><name>'Charge'</name>
      ! <value>2696</value></r18>
      ! <r19><name>'Capacity'</name>
      ! <value>2696</value></r19></response>

      Dis json so:

      ! "response": {
      ! "r0": {
      ! "name": "Bumps Wheeldrops",
      ! "value": "3"
      ! },
      ! "r1": {
      ! "name": "Wall",
      ! "value": "0"
      ! },
      ! "r2": {
      ! "name": "Cliff Left",
      ! "value": "0"
      ! },
      ! "r3": {
      ! "name": "Cliff Front Left",
      ! "value": "0"
      ! },
      ! "r4": {
      ! "name": "Cliff Front Right",
      ! "value": "0"
      ! },
      ! "r5": {
      ! "name": "Cliff Right",
      ! "value": "0"
      ! },
      ! "r6": {
      ! "name": "Virtual Wall",
      ! "value": "0"
      ! },
      ! "r7": {
      ! "name": "Motor Overcurrents",
      ! "value": "0"
      ! },
      ! "r8": {
      ! "name": "Dirt Detector - Left",
      ! "value": "0"
      ! },
      ! "r9": {
      ! "name": "Dirt Detector - Right",
      ! "value": "0"
      ! },
      ! "r10": {
      ! "name": "Remote Opcode",
      ! "value": "0"
      ! },
      ! "r11": {
      ! "name": "Buttons",
      ! "value": "0"
      ! },
      ! "r12": {
      ! "name": "Distance",
      ! "value": "0"
      ! },
      ! "r13": {
      ! "name": "Angle",
      ! "value": "0"
      ! },
      ! "r14": {
      ! "name": "Charging State",
      ! "value": "3"
      ! },
      ! "r15": {
      ! "name": "Voltage",
      ! "value": "16198"
      ! },
      ! "r16": {
      ! "name": "Current",
      ! "value": "-47"
      ! },
      ! "r17": {
      ! "name": "Temperature",
      ! "value": "27"
      ! },
      ! "r18": {
      ! "name": "Charge",
      ! "value": "2696"
      ! },
      ! "r19": {
      ! "name": "Capacity",
      ! "value": "2696"
      ! }
      ! }
      ! }

      Die xml/json wird einfach über http://IP_des_Moduls/roomba.xml oder roomba.json angefragt.

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Hallo coyote,

        hast du die Suche mal bemüht? Es gibt sogar einen Adapter:

        http://forum.iobroker.net/viewtopic.php … ifi#p14982

        Wenn du dir den ansiehst, findest auch ein paar Befehle für ein Skript: https://github.com/hometm/ioBroker.room ... omba-rw.js

        Gruß

        Pix

        1 Reply Last reply Reply Quote 0
        • coyote
          coyote Most Active last edited by

          Hallo Pix,

          doch den Adapter kenne ich schon und habe ich auch installiert, nur komme ich damit nicht richtig klar. Schau mal in meinen Screenshot mit den Datend es Adapter. Bei Temperatur steht 217 drin? Was ist 217? Die Temperatur beträgt momentan 27°C

          Wenn der Adapter läuft sind auch die Daten auf der Web Page des Roowifi Moduls leer, denke das Teil kommt dann mit beiden Anfragen nicht klar.

          Gut ok, in die JS des Adapters hab ich noch nicht geschaut.

          Trotzdem interessiert es mich generell, wie ich eine xml/json auslesen könnte um diese weiter zu verarbeiten. Ich möchte gerne nur ein paar Daten der Seite zyklisch abrufen und dann in VIS darstellen

          536_roomba.png

          1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            Hallo coyote,

            hier ist das Beispiel für den Homepilot Adapter: http://forum.iobroker.net/viewtopic.php … esen#p7494

            Ich wandel das mal ab für den Roofi:

            ! ````
            /* Roofi einlesen
            Roofi Modul Daten in JS Variablen schreiben
            02.07.2015 erstellt von Pix für Homepilot
            26.08.2016 angepasst für Roofi
            */
            ! var ip = 'xxx.xxx.xxx.xxx'; // IP des Moduls eintragen
            var logging = true; // Weniger Log Ausgaben mit false
            ! // ab hier nix mehr ändern
            var request = require('request');
            ! createState('Roomba.json', {
            def: '',
            read: true,
            write: true,
            desc: 'JSON Ausgabe des RooWifi Moduls',
            name: 'Roofi JSON',
            type: 'string'
            });
            createState('Roomba.Distance', {
            def: 0,
            read: true,
            write: true,
            desc: 'RooWifi Entfernung',
            name: 'Distance',
            type: 'number',
            unit: 'mm'
            });
            createState('Roomba.Angle', {
            def: 0,
            read: true,
            write: true,
            desc: 'RooWifi Richtung',
            name: 'Angle',
            type: 'number',
            unit: '°'
            });
            createState('Roomba.Temperature', {
            def: 0,
            read: true,
            write: true,
            desc: 'RooWifi Temperatur',
            name: 'Temperature',
            type: 'number',
            unit: '°C'
            });
            ! function readRoofi() {
            var link = 'http://' + ip + '/roomba.json';
            log('Start Roofi Daten einlesen');
            request(link, function (error, response, body) {
            if (!error && response.statusCode == 200) {
            var result;
            try{
            result = JSON.parse(body);
            var data = JSON.stringify(result, null, 2);
            if (logging) log(data);
            setState('Roomba.json', data);
            if (logging) log('Kein Fehler beim Einlesen des Roofi Moduls:-D');
            } catch (e) {
            log('Parse Fehler (Roofi Modul):' + e);
            }
            if (result) {
            setState('Roomba.Distance', result.response.r12.value);
            setState('Roomba.Angle', result.response.r13.value);
            setState('Roomba.Temperature', result.response.r17.value);
            // hier entsprechend erweitern

                        // Logging nur zu Testzwecken nötig
                        if (logging) log('Roofi Distanz: ' + result.response.r12.value + 'mm');
                        if (logging) log('Roofi Richtung: ' + result.response.r13.value + '°');
                        if (logging) log('Roofi Temperatur: ' + result.response.r17.value + '°C');
                    }
                } else log('Fehler (Roofi Abfrage: ' + error);
            });   // Ende request 
            log('Daten aus Roofi Modul eingelesen');
            

            }

            ! // Minütlich
            schedule("*/1 * * * *", readRoofi);
            ! // 15 Sekundenabstände
            //schedule({second: [5, 20, 35, 50]}, readRoofi);
            ! // Skriptstart
            readRoofi();
            ! ````
            Erstmal zum Test und zur Veranschaulichung gibt es die Abfragen von drei Werten. Evtl. Musst du das Skript einmal neustarten, damit die States angelegt werden.

            Viel Spaß und Gruß

            Pix

            1 Reply Last reply Reply Quote 0
            • coyote
              coyote Most Active last edited by

              Danke Dir Pix, das sieht sehr gut aus, damit kann ich arbeiten. Genau so hatte ich mir das vorgestellt.

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

              Support us

              ioBroker
              Community Adapters
              Donate

              635
              Online

              31.9k
              Users

              80.3k
              Topics

              1.3m
              Posts

              2
              5
              1188
              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