Antworten
Dez 23, 2017 - 06:35
Du musst einen http request an AM senden, nur so kannst du darauf reagieren.
Dez 23, 2017 - 07:11
WICHTIG: Als Auslöser können ausschließlich Gerätestatus von Geräten verwendet werden, die über folgende Gateways bzw. Systeme in NEO integriert sind:
- AIO Gateways
- HomeMatic CCU
- Logitech Harmony Hub
- Netatmo Wetterstation (inkl. Zusatzmodulen und Healthy Home Coach)
- DoorBird
Von auf 23.12.2017 07:19:56 | Gefällt mir (0) | Melden
ich denke er hat die frage schlecht definiert....in der api zur nuki bridge gibt es eine möglichkeit eine callback url zu setzen
so:
http://192.168.1.50:8080/callback/add
und dann zb. so eine callback url zu setzen:
http://192.168.1.77:80/tm/http?test=1&auth=gatewaypasswort
diese ist die url vom taskmanager im sobaldblock
diese url wird von der brigge gesendet wenn die nuki status ändert
Von auf 23.12.2017 07:23:32 | Gefällt mir (0) | Melden
Dann muss er ja nur ein HTTP Request im NEO Automation setzten und die Callback URL einmalig per Hand an NUKI übergeben, dann sollte auch der Automation Manger einen Task starten können.
Von auf 23.12.2017 07:28:27 | Gefällt mir (0) | Melden
jetzt könnte man einen script im falls block ausführen welches den status der nuki abfragt und wenn dieser locked ist eine action machen im script
also die url mit script abfragen:
beispiel url für die bridge:
http://192.168.1.50:8080/lockState?nukiId=1&token=123456
der script musst dann so aussehen
const https = require("http");
const url =
"http://192.168.1.50:8080/lockState?nukiId=1&token=123456";
https.get(url, res => {
res.setEncoding("utf8");
let body = "";
res.on("data", data => {
body += data;
});
res.on("end", () => {
body = JSON.parse(body);
console.log(body );
// hier jetzt das body auswerten und aktion einfügen
});
});
Von auf 23.12.2017 07:32:33 | Gefällt mir (0) | Melden
ja er will ja nicht egal welchen status reagieren sondern bestimmten
da muss er das json was im body steht nach status durchsuchen und mit if anweisungen dann eine aktion aus dem scripteditor starten.
so z.b.
executeDeviceCommand(
"A-Wohnzimmer",
"AHeizung",
{"value":"off"},
function(err) {
err && console.error(err.message);
}
);
Von auf 23.12.2017 08:04:41 | Gefällt mir (0) | Melden
also wäre das ganze script dann so:
const https = require("http");
const url =
"http://192.168.1.50:8080/lockState?nukiId=1&token=123456";
https.get(url, res => {
res.setEncoding("utf8");
let body = "";
res.on("data", data => {
body += data;
});
res.on("end", () => {
body = JSON.parse(body);
console.log(body );
console.log(body.stateName );
if (stuff.stateName == "locked" ) {
console.log(stuff.state);
//hier die aktion mit dem zahnrad im script editor einfügen
//das ist ein beispiel von mir
executeDeviceCommand(
"A-Wohnzimmer",
"AHeizung",
{"value":"off"},
function(err) {
err && console.error(err.message);
}
);
//bis hier
}
});
});
Von auf 23.12.2017 08:09:16 | Gefällt mir (1) | Melden
stuff mit body ersetzen bei
if (stuff.stateName == "locked" )
so
if (body.stateName == "locked" )
und
hier
console.log(stuff.state);
so
console.log(body.state);
das ganze wieder:
const http = require("http");
const url ="http://192.168.1.50:8080/lockState?nukiId=1&token=123456";
http.get(url, res => {
res.setEncoding("utf8");
let body = "";
res.on("data", data => {
body += data;
});
res.on("end", () => {
body = JSON.parse(body);
console.log(body );
console.log(body.stateName );
if (body.stateName == "locked" ) {
console.log(body.state);
//hier die aktion mit dem zahnrad im script editor einfügen
//das ist ein beispiel von mir
executeDeviceCommand(
"A-Wohnzimmer",
"AHeizung",
{"value":"off"},
function(err) {
err && console.error(err.message);
}
);
//bis hier
}
});
});
Von auf 23.12.2017 09:59:42 | Gefällt mir (0) | Melden
Danke für das Script - es funktioniert, wenn ich es isoliert teste.
Ich schaffe aber nicht die Registrierung dieser speziellen URL in NUKI (SYNTAX: http://192.168.1.77:80/tm/http?test=1&auth=gatewaypasswort). Andere schon zB nur http://192.168.1.77:80/tm/.
Woran kann das liegen?
Von auf 23.12.2017 10:12:40 | Gefällt mir (0) | Melden
https://nuki.io/wp-content/uploads/2016/04/20170619-Bridge-API-v1.6.pdf
wenn du dort auf seite 11 siehst bei example muss die url encoded sein denke ich
also hier testen und versuchen
https://www.urlencoder.org/
Von auf 23.12.2017 10:16:15 | Gefällt mir (0) | Melden
so lautet es im beispiel
http://192.168.1.50:8080/callback/add?url=http%3A%2F%2F192.168.1.77%3A80%2Ftm%2Fhttp%3Ftest%3D1%26auth%3Dgatewaypasswort&token=123456
Von auf 23.12.2017 17:51:57 | Gefällt mir (0) | Melden
JA das mit dem Encoding war richtig, JECOHC dürfen NUR die Zeichen & und ? die in der Mitte sind ".... :8088/tm/http?test=1&at=...." encoder eingegeben werden.
1) Script funktioniert (im Editor PLAY)
2) Send to URL (das AutomationMangers) kann in NUKI (s.o Encoded) eingegeben werden
3) in Nuki Bridge kann man diese URL auch Listen
4) die URL bei Einlage im Browser führt das Script aus :)
(auch nur, wenn den NUKI State der richtige ist :)
ABER
Wenn das NUKI die Funktion ausführt, funktioniert die Sache NICHT!!!
Was kann hier der Fehler sein (der JSON)?
Von auf 24.12.2017 04:34:42 | Gefällt mir (1) | Melden
Das liegt daran das nuki auf diese url ein post sendet mit einem json.....und automatin manager erwartet einen get befehl...mit post kann er nichts anfangen....also bleibt dir die möglichkeit mit pullen, das wäre mit einem intervall block im sobald block und dem script was läuft.
Dann wäre noch eine möglichkeit wenn du einen php server hast ein php script zu machen
welches den post request json auswertet und dann ein http befehl an AM sendet....jetzt braucht man kein script mehr im AM im dann teil, sondern kann dierkt eine aktion im falls block einfügen.
Von auf 24.12.2017 04:45:45 | Gefällt mir (0) | Melden
ah ja und noch die iftt lösung :)
das mit pullen ist nicht so gut weil dann die baterrie leidet.
Von auf 24.12.2017 06:53:01 | Gefällt mir (0) | Melden
Unterstützt der NEO Automation Manager keinen POST als Trigger?
Von auf 24.12.2017 06:57:07 | Gefällt mir (0) | Melden
nein man kann es auch nicht auswählen....auch kann man nicht auf die geposteten daten reagieren.
Von auf 24.12.2017 07:06:43 | Gefällt mir (0) | Melden
Na ja da gibt es dann ja noch viele Baustellen zu beheben bis man das Ding vollständig sinnvoll nutzen kann. So lange muss man dann wohl wie von Dir vorgeschlagen den Weg über eine Zwischenlösung gehen die dann GET absetzt. Entweder eigenen PHP Server oder wie oben erwähnt über IPS.
Von auf 24.12.2017 07:07:01 | Gefällt mir (0) | Melden
hier der php code, dateiname nuki.php
<?php
echo "nuki test";
$data = file_get_contents('php://input');
$msg = json_decode($data);
//hier die ip des gateways server und der rest im sobaldblock
$url = "http://192.168.1.77:80/tm/http?state=$msg->state&auth=gatewaypassword";
$content = file_get_contents($url);
?>
jetzt in der api bridge diese url als request adden:
http://phpserver/nuki.php
im automation manager im sobald block so einen http request machen das die url so aussieht
http://192.168.1.77:80/tm/http?state=1&auth=gatewaypassword";
also einfach den voreingestellten test in state umbennenen, bei wert muss 1 bleiben falls auf 1 reagiert werden soll
falls auf andere statis reagiert werden soll dann den wert so ersetzen....
dann eine aktion einfügen im taskeditor welche was macht wenn locked...
jetzt kann man mehrere tasks anlegen mit entsprechenden statis
und aktions entsprechend.
Von auf 24.12.2017 07:12:40 | Gefällt mir (0) | Melden
ja ganz viele baustellen...am besten mediola intergriert noch einen php server in das gateway, dann haben sie solche probleme gelöst :)
Von auf 25.12.2017 10:44:37 | Gefällt mir (0) | Melden
Also ich weiss nicht ... die letzte Version funktioniert bei mir nicht. Ich fasse noch mal zusammen, wie mein CODE konkret aussieht: Meine Geräte, beispielhaft:
PHP Server: http://192.168.100.100
Verzeichnis: http://192.168.100.100/nuki.php
Automation Manager Server: 192.168.100.100
HTTP Request: http://192.168.100.100:8088/tm/http?state=1&at=123456789
gatewaypassword=123456789
NUKI Bridge: 192.168.100.200
NUKI Token: ABCDEFGH
NUKI.PHP FILE
<?php
echo "nuki test";
$data = file_get_contents('php://input');
$msg = json_decode($data);
$url = "http://192.168.100.100:8088/tm/http?state=$msg->state&at=123456789";
$content = file_get_contents($url);
?>
NUKI BRIDGE URL-Registrierung:
http://192.168.100.200:8080/callback/add?url=http://192.168.100.100/nuki.php&token=ABCDEFGH
FOLGENDE FRAGEN:
- ist der Code wirklich: ... auth= ... (bei mit sagt Automation Manager: .... at= ..... )
- soll es wirklich sein ??? .... =$msg->state& .... (s. oben)
- warum sagst DU Port :80 ???
Von auf 25.12.2017 11:08:18 | Gefällt mir (0) | Melden
der code can azúth sein und at, mache mit at sollte gehen
der port beim gateway server is 80
wenn du den neo server auf dem pi hast oder sonstwo dann ist anderer port
$msg->state entspricht einer 1 wenn locked
du kannst die zeile zum test so machen
$url = "http://192.168.100.100:8088/tm/http?state=1&at=123456789";
wenn du im browser jetzt nuki.php aufrufst sollte der task reagieren
Von auf 25.12.2017 11:23:52 | Gefällt mir (0) | Melden
also das php script kann man erstmal so zum testen schreiben
<?php
echo "nuki test";
$data = "{"state": 1, "stateName": "locked", "batteryCritical": false, "success": true}";
//$data = file_get_contents('php://input');
$msg = json_decode($data);
$url = "http://192.168.100.100:8088/tm/http?state=$msg->state&at=123456789";
$content = file_get_contents($url);
?>
rufe jetzt wieder die url im browser auf
http://192.168.100.100/nuki.php
Von auf 25.12.2017 12:29:43 | Gefällt mir (0) | Melden
VERSION 1 (a) löst aus + (b) ECHO
$data = file_get_contents('php://input');
$url = "http://192.168.100.100:8088/tm/http?state=1&at=123456789";
VERSION 2 (a) löst NICHT aus + (b) KEIN Echo
$data = "{"state": 1, "stateName": "locked", "batteryCritical": false, "success": true}";
$url = "http://192.168.100.100:8088/tm/http?state=1&at=123456789";
VERSION 3 (a) löst NICHT aus + (b) ECHO
$data = file_get_contents('php://input');
$url = "http://192.168.100.100:8088/tm/http?state=$msg->state&at=123456789";
VERSION 4 (a) löst NICHT aus + (b) KEIN Echo
$data = "{"state": 1, "stateName": "locked", "batteryCritical": false, "success": true}";
$url = "http://192.168.100.100:8088/tm/http?state=$msg->state&at=123456789";
müssen wir vielleicht mit "stateName" und "locked"arbeiten?
Von auf 25.12.2017 12:31:04 | Gefällt mir (0) | Melden
bei "Auslösung" sprach ich im Post zuvor nur über den URL-Test mit Browser
Von auf 25.12.2017 13:27:50 | Gefällt mir (0) | Melden
wo ist die zeile
$msg = json_decode($data);
Von auf 25.12.2017 13:29:10 | Gefällt mir (0) | Melden
die ist eh da, ich habe nur die 2 Zeilen geschrieben die variiert wurden
Von auf 25.12.2017 13:29:44 | Gefällt mir (0) | Melden
ok warte kurz ich teste gleich was
Von auf 25.12.2017 13:33:24 | Gefällt mir (0) | Melden
die zeile muss so sein:
$data = '{"state": 1, "stateName": "locked", "batteryCritical": false, "success": true}';
Von auf 25.12.2017 13:34:28 | Gefällt mir (0) | Melden
also version 4 ist wichtig
Von auf 25.12.2017 13:39:49 | Gefällt mir (0) | Melden
Also diese Zeile Funktioniert jetzt (VERSION4) bei Eingabe der URL (.../nuki.php) in den Browser. Beim Sperren des Schlosses tut sich nichts :(
Von auf 25.12.2017 13:43:51 | Gefällt mir (0) | Melden
kann auch nicht denn diese zeile ist auskommentiert:
//$data = file_get_contents('php://input');
und das hier
$data = '{"state": 1, "stateName": "locked", "batteryCritical": false, "success": true}';
war nur zum testen ob der $msg->state die 1 liefert und das tut er
normaler weise musste das script oben was ich gepostet habe funktionieren
Von auf 25.12.2017 13:45:39 | Gefällt mir (0) | Melden
warte kurz ich schreibe dir kleines script zum testen
Von auf 25.12.2017 13:49:09 | Gefällt mir (0) | Melden
Habe nun getestet, ob das funktioniert .... übergabe JSON an nuki.php .... FUNKTIONIERTE
curl -d ‚{„state“: 1, „stateName“: locked, "batteryCritical": false, "success": true}' -H "Content-Type: application/json" -X POST http://192.168.100.100:80/nuki.php
Das SCHLOSS bewirkt aber keine Auslösung
Von auf 25.12.2017 13:52:03 | Gefällt mir (0) | Melden
<?php
$data = file_get_contents('php://input');
$msg = json_decode($data);
file_put_contents("test.dat", 1);
?>
leg dir eine datei auf dem webserver wo nuki.php ist mit dem namen test.dat
inhalt sollte eine 0 sein (zahl)
nenne diese php datei test.php
und mache jetzt aufruf über webbrowser
Von auf 25.12.2017 13:54:20 | Gefällt mir (0) | Melden
wenn du die datei test.dat jetzt öffnest musste der inhalt 1 sein
Von auf 25.12.2017 13:56:27 | Gefällt mir (0) | Melden
melde dich ob es so war...
Von auf 25.12.2017 13:56:42 | Gefällt mir (0) | Melden
Das letzte war nun MEIN Fehler :) !
Ich hatte bei der NUKI Port Url bei "http://..." nur "http:/...." geschrieben !!!
Vielen DANK noch für die tolle HILFE!!!!! Jetzt funktioniert alles!
ps.:
aber die Sache mit dem AM ist wirklich mehr schwierig als einfach (für Nicht Programmierer wie mich)
Von auf 25.12.2017 13:57:40 | Gefällt mir (0) | Melden
wollte ich schon sagen das fehler bei dir war :))))
Von auf 25.12.2017 14:00:36 | Gefällt mir (1) | Melden
nein wenn man keine zeichen vergisst dann eher nicht :)
ja für jemanden der nicht viel macht mit so was schon....ich würde sagen er ist für programmierer nicht die beste wahl...hätten sie das bei mediola besser gamacht, wäre der umgang über php nicht nötig....
Neuen Kommentar hinzufügen
Von
ich würde aber gerne nicht über IFTTT gehen und das intern im LAN lösen.
Von
dann mach es :)
kannst aber etwa links zur api callbacks geben.....wie willst du im AM task vorgehen? Mit interval?
bischen mehr musst du erklären...
Neuen Kommentar hinzufügen