NEWS
HTTP POST request an LaMetric-Time (Notification)
-
Hallo zusammen,
meine Idee war meine LaMetric-Time (eine smarte LED-Uhr) zu benutzen um mir im lokalen Netzwerk aus ioBroker heraus Nachrichten über Skripte schicken lassen zu können.
Mit curl funktioniert dies schon mit folgendem Kommando in der Linux-Konsole:
curl -X POST -u "dev:<your api/key/here="">" -H "Content-Type: application/json" -d " { \"model\": { \"frames\": [ { \"icon\":\"a2867\", \"text\":\"Hello\!\"} ] } }" http://<ip address="">:8080/api/v2/device/notifications</ip></your>
(wie auf der Seite des Herstellers beschrieben: http://lametric-documentation.readthedo … ation.html).
Jetzt müsste ich nur noch schaffen das aus dem Skript heraus auszuführen, hier mein Ansatz:
var request = require('request'); request.post({ //"laMetric" ist im Router vermerkt und somit bekannt. url: 'http://laMetric:8080/api/v2/device/notifications', dev: '039739ce993d7cc61ea7bd44d63defa434858d4c8d1k422134257e59191a0a18', form: '{ \"model\": { \"frames\": [ { \"icon\":\"a2867\", \"text\":\"Hello\!\"} ] } }', }, function(error, response, body) { if (error) log(error, 'error'); });
Wenn das Skript läuft gibt es zwar keinen Fehler, aber funktionieren tut es auch nicht.
Ich sitz da jetzt schon eine Weile dran und bin so langsam am verzweifeln. Wenn es nur ein unbedeutender Fehler ist tut mir das Leid, aber man lernt schließlich dazu.
Schon einmal vielen Dank im Voraus!
-
Hi,
was passiert wenn du unter….
if (error) log(error, 'error');
Noch
log(response) schreibst?
-
Das Ergebnis ist eine neue Zeile im Log, hier steht aber nur das die Response ein Objekt ist und keine näheren Infos:
` > 15:01:05.156 [info] javascript.0 Start javascript script.js.LaMetric.Skript115:01:05.157 [info] javascript.0 script.js.LaMetric.Skript1: registered 0 subscriptions and 0 schedules
15:01:05.168 [info] javascript.0 script.js.LaMetric.Skript1: [object Object]
15:01:05.872 [info] javascript.0 Stop script script.js.LaMetric.Skript1 `
Hilft das etwas? :?UPDATE: Habe etwas herausgefunden, steht weiter unten…
-
Warum stückelst du den curl Befahl nicht in Javascript zusammen und rufst ihn dort mit
exec('curl …') einfach auf?
var cmd = 'curl .....'; exec(cmd);
-
Gute Idee, aber aus einem Grund den ich nicht finden kann geht auch das nicht. Er scheint den Befehl jedoch auszuführen, Ich bekomme folgende Ausgabe im Log:
15:48:22.060 [info] javascript.0 script.js.LaMetric.Skript2: exec: curl -X POST -u "dev:039739ce963d7cc61ea7bd44d63defa434838d4c8d1f422134257e59191a7a18" -H "Content-Type: application/json" -d " { "model": { "frames": [ { "icon":"a2867", "text":"Hello!"} ] } }" http://192.168.2.106:8080/api/v2/device/notifications
Aber es funktioniert nicht. Wenn ich mich allerdings über Putty mit der Konsole der RaspberryPi verbinde geht der gleiche Befehl ohne Probleme. IoBroker läuft bei mir aber auf root. Muss ich trotzdem noch berechtigungen geben?
-
<size size="150">UPDATE:</size>
Zurück zum vorherigen Ansatz:
var request = require('request'); request.post({ dev: '039739ce963d7cc61ea7bd44d63defa434838d4c8d1f422134257e59191a7a18', contentType: 'application/json', url: 'http://laMetric:8080/api/v2/device/notifications', form: '{ \"model\": { \"frames\": [ { \"icon\":\"a2867\", \"text\":\"Hello\!\"} ] } }', }, function(error, response, body) { if (error) log(error, 'error'); log(response); log(body); });
Log(body) erzeugt die folgende Ausgabe im Log:
> 15:56:25.848 [info] javascript.0 script.js.LaMetric.Skript1: { "errors":[ { "message":"Authorization is required" } ] }
Es scheint also ein Problem mit dem API-Key zu geben.Habt ihr vielleicht eine Idee, wie man diesen als User bzw. Passwort übermitteln kann? (Bei curl entspricht das dem Parameter "-u").
Auf der Entwickler-Website steht folgendes:
` > In order to send a notification you must do HTTP POST request to http://<lametric_time_ip_address>:8080/api/v2/device/notifications endpoint with headers:Authorization: Basic <base64(dev:api_key)>Content-Type: application/json
and body:
{
"model": {
"frames": [
{
"icon":"a2867",
"text":"Hello!"
}
]
}
}</base64(dev:api_key)></lametric_time_ip_address> `
Wisst ihr wie das in js umzusetzten ist? Schon einmal Danke für eure Zeit.
-
<size size="150">Lösung:</size>
Die Authentifizierung kann in der URL stattfinden…
> http://dev:<api-key>@<lametric-ip>:8080/api/v2/device/notifications</lametric-ip></api-key>
-
Hi,
ich werd mich hier mal einklinken, da ich seit heute auch ein Besitzer von Lametric bin 8-)
Ich wollte damit einfach mal etwas rumspielen und teste das Teil gerade in Verbindung mit meinem Xiaomi Cube Controller. Also wenn ich den Cube um 90° drehe, soll eine andere Funktion gewählt werden, zb Licht.. beim nächsten mal Rollos. Das funktioniert auch ganz gut, bisher wurde das über Sprache am Tablet gesagt, nervt aber etwas. Nun habe ich den Codeschnipsel in Blockly eingefügt (Funktionen - Javascript) und funktioniert auch soweit erstmal…
Nun meine erste Frage: Das "i" am Anfang kann man nicht irgendwie deaktivieren oder ? Es dauert mir noch zu lange, bis der Text angezeigt wird
Von meinem Gedanken, den prozentualen Einstellungswert zb vom Licht Darzustellen (während des Drehens, sagen wir im Sekundentakt), sollte ich wohl abkommen...
Dann hätte ich gern als Text den Inhalt einer Variable, welche sich testweise unter 'javascript.0.Meine_Variablen.Text' befindet.
Wie müsste ich also die Zeile
form: '{ "model": { "frames": [ { "icon":"a2867", "text":"Mein Text"} ] } }',
anpassen ?
-
Ich habe seit gestern auch einen LaMetric und macht schon ziemlich Spaß damit Sachen zu entdecken. Aber man möchte ja mehr als nur den Standard.
Mit diesen http Sachen kenne ich mich leider nicht so aus. Würde gerne bei bestimmten Ereignissen einen Text anzeigen lassen.
Beim Sonos gibt es ja eine http api. Diese muss man bloß auf dem Raspi installieren und starten. Dann mittels einfachen curl Befehlen konnte ich abgelegte soundfiles abspielen lassen.
Vielleicht kann mir ja jemand erklären wie man hier vorgeht
-
Kann mir vielleicht jemand sagen wie die Zeile in http also im Browser reinzuschreiben ist?
Aus dem Terminal mit curl klappt es schon. Wäre super nett !
-
Kann mir vielleicht jemand sagen wie die Zeile in http also im Browser reinzuschreiben ist?
Aus dem Terminal mit curl klappt es schon. Wäre super nett ! ` Hast du den Adapter von lametric installiert? Google mal nach github iobroker lametric.. Das funktioniert dann sehr einfach mit blockly
Gesendet von meinem F5121 mit Tapatalk
-
Kann mir vielleicht jemand sagen wie die Zeile in http also im Browser reinzuschreiben ist?
Aus dem Terminal mit curl klappt es schon. Wäre super nett ! ` Hast du den Adapter von lametric installiert? Google mal nach github iobroker lametric.. Das funktioniert dann sehr einfach mit blockly
Gesendet von meinem F5121 mit Tapatalk `
Bisher nicht. Habe momentan einfach keine Zeit. Aber Danke für den Tipp ich behalte das mal im Hinterkopf. Iobroker habe ich aber den Adapter nicht. Und über blockly weiß ich bisher auch noch nichts.