NEWS
[Frage] Wie Json nach Website login auslesen
-
Hi Leute,
ich möchte mal damit beginnen die Daten meines Oilfox von der Oilfox Website aus zu lesen. Hier für muss man sich "einloggen" und im Anschluss ein Json - File abfragen. Nur leider fehlt mir hier Grundlegend das Wissen wie ich so etwas am besten anstelle.
Zu dem Thema gibt es auch schon einige Beiträge in anderen Foren jedoch möchte ich das Ganze so realisieren dass ich dann später evtl. mal einen Adapter daraus zu basteln.
Hier mal ein Login versuch der auch ein Ergebnis liefert welches ich jedoch nicht so wirklich zu intepretieren weis und auch keine Ahnung habe wie ich da jetzt weiter machen müsste:
var request = require('request'); var callback; request.post({ url: `https://api.oilfox.io/v2/backoffice/session`, body: JSON.stringify({ method: 'Session.login', params:{ username: 'xxxxxxxxx', password: 'xxxxxxxxx' } }) }, (err, response, body) => { if (err) { log(err); } else{ log(JSON.stringify(response)); } });
Das ganze ergibt dann folgende Ausgabe:
javascript.0 script.js.Sitelogin: registered 2 subscriptions and 0 schedules 15:16:42.713 [info] javascript.0 script.js.Sitelogin: {"statusCode":415,"body":"{\"errorCode\":415}","headers":{"date":"Sat, 10 Nov 2018 14:16:14 GMT","content-type":"application/json;charset=UTF-8","content-length":"17","connection":"close","access-control-allow-origin":"*","access-control-allow-credentials":"true","access-control-allow-methods":"GET,HEAD,OPTIONS,POST,PUT,DELETE","access-control-allow-headers":"Access-Control-Allow-Headers, Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, X-Auth-Token, Partner-Id","x-content-type-options":"nosniff","x-xss-protection":"1; mode=block","cache-control":"no-cache, no-store, max-age=0, must-revalidate","pragma":"no-cache","expires":"0","x-frame-options":"DENY"},"request":{"uri":{"protocol":"https:","slashes":true,"auth":null,"host":"api.oilfox.io","port":443,"hostname":"api.oilfox.io","hash":null,"search":null,"query":null,"pathname":"/v2/backoffice/session","path":"/v2/backoffice/session","href":"https://api.oilfox.io/v2/backoffice/session"},"method":"POST","headers":{"content-length":95}}} 15:16:45.011 [info] javascript.0 Stop script script.js.Sitelogin
Vielleicht kann mir hier jemand von den Profis mal weiter helfen den Start zu finden /schaffen. So könnte ich mich dann um den Rest kümmern
Ergänzend noch der Beitrag von Chollf00 aus dem anderen Forum vieleicht hilft es:
! https://smarthome.schimmer-media.de/for … #post19323
! Hallo Leute,
! ich habe gestern einmal mit einen Kollegen ein bisschen mit der Api von Oilfox gespielt.
! … und zwar haben wir uns das Github Projekt von Codeking zum Beispiel genommen, der ein Modul für Symcon gebaut hat.
! Ich habe dann einige Aufrufe von der Konsole gemacht. Was das war, zeige ich weiter unten.
! Momentan läuft es bei mit jetzt mit dem parser.io vom iobroker, der lokal einfach eine txt-Datei ausliest. Diese befülle ich einfach mit dem curl Aufruf. Dieser Aufruf wird alle 24h mit dem cron aufgerufen und das Ergebnis in meine Textdatei geschrieben.
! Ist zwar mit der Brust ins Auge, aber ich habe meine Ergebnisse schon einmal im System.
! Jetzt wäre es natürlich toll, wenn einer von Euch, der programmieren kann, einfach diese Informationen nehmen könnte und für den ioBroker ein schönes Modul backen könnte.
! Hier meine Textergebnisse, die ich über meinen Kollegen bekommen habe:
! Benötigt wird der Account mit Name und Passwort, um sich beim Oilfox konto zu legitimieren.
! ````
token=curl -d '{"email":"<user>","password":"<passwd>"}' -H "Content-Type: application/json -H "Connection: Keep-Alive" -H "User-Agent: okhttp/3.2.0" -X POST https://api.oilfox.io/v2/backoffice/session | tail -2 | head -1 | cut -d '"' -f4
;curl -H "X-Auth-Token: $token" -H "Connection: Keep-Alive" -H "User-Agent: okhttp/3.2.0" -H "Content-Type: application/json" https://api.oilfox.io/v2/user/summary</passwd></user>>! Diese Ausgabe liefert alle Daten eines Users (Ich habe die Daten etwas in der Ausgabe gekürzt.). Aber das Muster der Datenbank ist klar zu erkennen. Er liefert alle Ölstände und Ölpreise der letzten Monate, inklusive eines Forecasts, wie lange unter dem aktuellen Verbrauch der Tankinhalt noch ausreicht. >! ```` { "id": „<id>", "firstName": „ <vorname>", "lastName": „<name>", "email": „<user>", "country": "DE", "zipCode": „<plz>", "devices": [ { "id": „<id>„, "hwid": „<oilfoxhwid>„, "name": "Mein Tank", "tankShape": "SQUARED", "tankHeight": 155, "tankVolume": 7500, "tankOffset": 0, "tankIsUsableVolume": true, "tankUsableVolume": 7500, "productId": "ce49beb2-3b00-8fdf-b817-6f468e7f9036", "notificationInfoEnabled": false, "notificationInfoPercentage": 13, "notificationAlertEnabled": true, "notificationAlertPercentage": 5, "address": { "id": „<kundenid>", "country": "DE", "zipCode": „<plz>„ }, "partner": { "id": "ac669376-3709-11e7-a919-92ebcb67fe33", "name": "Neukunden", "termsOfInstallation": "Datenschutzerklärung für die mobene OilFox-App\nBei der Nutzung der mobene OilFox-App („App") werden personenbezogene Daten erhoben, gespeichert und verarbeitet. Hier informieren wir Sie zum Datenschutz und unserem Umgang mit Ihren …. und die wir Ihnen in Zukunft mitteilen werden. Wenn Sie weitere Informationen wünschen, wenden Sie sich bitte an die Ihnen bekannten Ansprechpartner, an unsere Zentrale oder an unseren Datenschutzbeauftragten. Diese helfen Ihnen gerne weiter.\n", "legalLink": "https://www.mobene.de/oilfox/rechtliches", "backgroundColor": "#4a84b5", "logoUrl": "https://s3.eu-central-1.amazonaws.com/oilfox-files/mobene_logo.png", "minimumLiters": 500, "isOrderingEnabled": true, "htmlTermsOrder": "Ich habe die [Widerrufsbelehrung](https://www.mobene.de/agb/widerrufsrecht.html) zum Heizölverkauf im Fernabsatz zur Kenntnis genommen und akzeptiere die [allgemeinen Verkaufs- und Lieferbedingungen](https://www.mobene.de/agb.html)", "country": "DE", "phone": "0800/1861861", "fontPrimaryColor": "#ffffff", "fontSecondaryColor": "#2c4f6c", "priceHistoryFontColor": "#000000", "iconHighlightColor": "#92b5d2", "primaryProducts": [ { "id": "ce49beb2-3b00-8fdf-b817-6f468e7f9036", "name": "Heizöl Mobene Group", "measurementInterval": 1440 } ] }, "measurementIntervalInSeconds": 86400, "metering": { "value": 143, "fillingPercentage": 4, "liters": 300, "currentOilHeight": 12, "serverDate": 1534454691900, "battery": 100 }, "chartData": { "consumptionData": [ { "year": 2017, "month": 9, "fillingPercentage": 0, "liters": 0 }, ... { "year": 2018, "month": 8, "fillingPercentage": 4, "liters": 300 } ], "priceData": [ { "price": 57.72601, "year": 2017, "month": 9 }, ... { "price": 69.5006, "year": 2018, "month": 7 }, { "price": 70.81, "year": 2018, "month": 8 } ], "forecastData": [ { "year": 2018, "month": 9, "fillingPercentage": 1, "liters": 148 } ], "emptyAt": 1538265600000 } } ]</plz></kundenid></oilfoxhwid></id></plz></user></name></vorname></id>
! Das bedeutet, man kann sogar, wie in der App den aktuellen Ölpreis in der Tabelle mit anzeigen.
! Mein Vorgehen ist im Moment wie oben beschrieben.
! 1. Der cron ruft einmal am Tag meine Datei oilfox auf mit folgendem Befehltoken=`curl -d '{"email":"<user>","password":"<passwd>"}' -H "Content-Type: application/json -H "Connection: Keep-Alive" -H "User-Agent: okhttp/3.2.0" -X POST https://api.oilfox.io/v2/backoffice/session | tail -2 | head -1 | cut -d '"' -f4`;curl -H "X-Auth-Token: $token" -H "Connection: Keep-Alive" -H "User-Agent: okhttp/3.2.0" -H "Content-Type: application/json" https://api.oilfox.io/v2/user/summary | grep liters | tail -2 | head -1 | cut -d ":" -f2 | sed -e "s/ //g" > /<path>/oilliter.txt</path></passwd></user>
damit steht die aktuelle Literzahl meines Tanke in der Datei oilliter.
! 2. Diese Datei parse ich über das parser.io Modul vom iobroker und habe dann den Wert entsprechend in meinem System.
! Mein Dank geht an meinen Arbeitskollegen, der mir diesen einfach Weg aufgezeigt und erstellt hat. Vielen Dank nochmal …
! Man kann das zwar so jetzt in dieser Form weiterführen und alle Werte entsprechend aufbereiten, aber es ist ein wenig umständlich.
! Ich denke mit diesen Informationen sollte in diesem Forum doch einer zu finden sein, der das in ein ordentliches iobroker Modul umbauen kann.
! Für eine Erwähnung wäre ich natürlich dankbar und würde auch gerne meine Ideen mit einbringen -
Oder weis jemand evtl. einen Thread der sich um ein ähnliches Thema dreht?