NEWS
[gelöst]Roomba xml oder json Datei auslesen und auswerten
-
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.
-
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
-
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
-
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
-
Danke Dir Pix, das sieht sehr gut aus, damit kann ich arbeiten. Genau so hatte ich mir das vorgestellt.