Antworten
Mai 22, 2017 - 07:23
Mai 22, 2017 - 10:40
rein theoretisch ist dies möglich. Allerdings sind die Inhalte der Tasks für den Automation Manager so umfangreich (verschiedene Gerätetypen, Bedingungen und Abhängigkeiten), dass man Tasks ohne den CREATOr nicht wirklich sinnvoll anlegen kann.
Liebe Grüße,
Mona
Mai 31, 2017 - 05:59
1) Zuerst musst Du den entsprechenden Task auslesen. Dies geht über folgenden HTTP-Befehl:
http://{{IP:PORT}}/cmd?XC_FNC=GetTask&id=1&auth=12345
ID bezeichnet hier die Task-ID, auth bezeichnet das Passwort
Nun erhälst du eine Antwort. Z.B.:
{"XC_SUC":{"id":1,"name":"T1","active":true,"isAlarmTask":false,"root":{"type":
"root","if":[{"type":"timer","time":"20:00","week":"1111111","op":"="}],"then":
[{"type":"action","subtype":"command","gateway":{"sys":"aio","name":"zl V5+","ip":"192.XXX.XX.XXX","port":80,"username":"user","password":"12345","mac"
:"40-XX-XX-XX-XX-87","version":"EA","firmware":"1.0.11_BETA3","rfmode":"","gate
way_vendor":"mediola","sid":"9403F352A72E2730C7722CC6FAB7B95C","__neoIndex":14}
,"command":{"type":"enum","name":"led blue","ref":{"value":"ledBlue"}}}],"else":[]}}}
Das JSON Objekt von XC_SUC ist dann der entsprechende Task.
2) Nun musst Du das "timer"-Objekt anpassen und dann mit einem HTTP POST Request den Task aktualisieren. Im POST Body des HTTP Requests musst du dabei den kompletten Inhalt des Tasks mitgeben.
z.B. :
(das "data"-Feld ist der Task )
http://{{IP:PORT}}/cmd
{
"XC_FNC":"UpdateTask",
"auth":"123456",
"data": {
"id": 1,
"name": "ok task",
"root": {
"type": "root",
"if": [
{
"type": "device.status",
"device": {
"sys":"hm",
"address":"HM-Sec-SCo.BidCos-RF.LEQ1232568"
},
"status": "state",
"op": "=",
"value": "open"
}
],
"then": [
{
"type": "condition",
"if": [
{
"type": "device.status",
"device": {
"sys":"hm",
"address":"HM-LC-Sw1-Pl-2.BidCos-RF.LEQ0197107"
},
"status": "state",
"op": "=",
"value": "off"
},
{
"type": "logic.operator",
"op": "AND"
},
{
"type": "device.status",
"device": {
"sys":"hm",
"address":"HM-OU-CFM-Pl.BidCos-RF.JEQ0741376"
},
"status": "chime",
"op": "=",
"value": "off"
}
],
"then": [
{
"type": "action",
"subtype": "command",
"device": {
"sys":"hm",
"address":"HM-OU-CFM-Pl.BidCos-RF.JEQ0741376"
},
"command": {
"value":"vChannel02"
}
}
]
}
]
}
}
}
Ich hoffe ich konnte Dir damit weiterhelfen.
Liebe Grüße,
Mona
Jun 02, 2017 - 10:24
kann mir jemand aufzeigen, wie ich einen http post request senden kann?
Mona hat mir den Weg zu den Daten gezeigt, aber das weiter Vorgehen ist mir nicht klar.
Vielen dank für jede Hilfe
Peter
Quelle: htt post request
Jun 03, 2017 - 13:13
leider habe ich es gestern nicht geschafft mit deinem script zu spielen, jetzt erst habe ich etwas rumprobiert, mit php und curl
so wie mona eda beschrieben hat musste das so gehen in php.
Muss aber dazu sagen, ich verstehe nicht so ganz was du damit bezwecken willst, auch wenn ich die ganze kommentare gelesen habe.
Nun gut, es geht mich auch nicht so an :)
dieses script sollte funktionieren sobald du mit dem tool config neo 1.4.9 dem server einen passwort vergeben hast, diesen musst du dann auch im script eintragen, ob es ohne läuft musst du testen :)
Ich habe einen task wie du im Neo AM manager angelegt, bei mir ist die id dann 10, das musst du auch bei dir anpassen, auch die ip adresse des servers
nun das php script:
<?php
//Url vom Neo Server
$url = 'http://ip-neo_server:8088/cmd';
//cURL initialisieren.
$ch = curl_init($url);
// JSON Daten wie du sie haben willst
$someJSON = '{
"XC_FNC":"UpdateTask",
"auth":"deinpasswort_neoserver",
"data": {
"id":10,"name":"testAstro","active":true,"isAlarmTask":false,"root":{"type":"ro
ot","if":[{"type":"timer","time":"22:00","week":"0010100","op":"="}],"then":[{"
type":"action","subtype":"wait","value":4000}],"else":[]}}} ';
//cURL sagen wir senden einen POST request.
curl_setopt($ch, CURLOPT_POST, 1);
//Unsere JSON daten an POST felder anhängen.
curl_setopt($ch, CURLOPT_POSTFIELDS, $someJSON);
//setzen von content type auf typ application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
//request ausführen
$result = curl_exec($ch);
?>
so jetzt musste in der antwort stehen:
{"XC_SUC":""}
wenn du kein passwort vergeben hast dann sollte es mit dieser zeile so klappen
"auth":"",
oder auch nicht :)dann musst du es so versuchen:
$someJSON = '{
"XC_FNC":"UpdateTask",
"data": {
"id":10,"name":"testAstro","active":true,"isAlarmTask":false,"root":{"type":"ro
ot","if":[{"type":"timer","time":"22:00","week":"0010100","op":"="}],"then":[{"
type":"action","subtype":"wait","value":4000}],"else":[]}}} ';
wie gesagt deine task id und alles so anpassen..
viel spass damit was auch du machen willst, auch wenn nicht finde ich, jetzt wissen wir wie man es mit php senden kann :)
anmerkung: der task im automation manager bleibt unverändert, nur im neo server wird dieser änderungen nehmen
diese kannst du ansehen wenn du wieder den befehl sendest
http://{{IP:PORT}}/cmd?XC_FNC=GetTask&id=1&auth=12345
Von
Danke,
dachte so z.B. den Zeitpunkt eines Sobald Auslöser per http eingeben, ist das auch möglich?
Gruss
Peter
Von
Das wird nicht möglich sein denke ich
Neuen Kommentar hinzufügen