Hallo
Da MiBu schon die idee mit ccu umgesetzt hat, habe ich einwenig mit dem Automation Manager von Neo gespielt und das mit dem Keypad umgesetzt. Der zähler ist auch im neo live zu sehen.
Ich habe Keypad eingesetzt, möglich wäre auch zwei buttons zu verwenden, +/- und die Minuten einzustellen in schritten.
Was man braucht sind:
2 variablen vom typ string auf dem Gateway erzeugen, zuerst einen raum anlegen mit dem namen CountdownTimer
dann die variable mit dem namen MinutenTimer vom typ string
sofort nach anlegen dieser variable , einen button im neo anlegen, aktion Variable MinutenTimer wert setzen 0 (null)
und noch eine hilfsvariable mit dem namen TasteTimer.
so:
- Bildschirmfoto 2017-04-23 um 11.45.52.png (22.89 KiB) 10723 mal betrachtet
Dann brauchen wir eine Makro gruppe mit dem Namen Keypad
und dort die makros von 0-9 sowie * und #
zum testen habe ich nur die keys 0,1,2 stern und raute angelegt, wer das ganze will muss die makros dann erweitern, sowie den task auch, dazu aber später noch.
so z.b.
Die taste stern setzt die minuten auf null, falls man sich vertippt hat, und sendet noch einen http befehl auf neo server, welcher den task mit dem namen timer auf inaktiv schaltet.
und sieht so aus, immer die im des neo servers anpassen
Code: Alles auswählen
http://192.168.1.20:8088/tm/http?timer=off&auth=Passwort
im makro für die stern taste gibt es diese befehle:
variable TasteTimer auf on
und http befehl:
Code: Alles auswählen
http://192.168.1.20:8088/tm/http?timer=on&auth=Passwort
für das makro raute taste gibt es die folgenden befehle
variable TasteTimer auf on
den http befehl
Code: Alles auswählen
http://192.168.1.20:8088/tm/http?timer=on&auth=Passwort
und den eigentlichen befehl den man schalten will, also schalter oder was auch immer auf on
bei mir ist das die variable on/off auf on
die tasten 0-2 bzw. wer den ganzen keypad erweitern will sehen so aus
für 0:
variable TasteTimer auf 0 setzen
und http befehl:
Code: Alles auswählen
http://192.168.1.20:8088/tm/http?taste=0&auth=Passwort
mit dem http befehl wird im task reagiert
dazu noch das script taste0:
Code: Alles auswählen
getDeviceStatus(
"CountdownTimer",
"MinutenTimer",
{"value":"state"},
function(err, status) {
if(!err) {
if (status == "0") {
status = '';
}
status = status + '0';
executeDeviceCommand(
"CountdownTimer",
"MinutenTimer",
{"value":"setValue","ext":status},
function(err) {
err && console.error(err);
}
);
}
}
);
für jede zahl braucht man einen script, nur in der zeile
tauscht man die 0 gegen die tasten nummer, z.b. für taste 1 wäre die zeile dann
und legt neues script mit dem namen taste1 bzw. bis 9
Dann legen wir einen neuen task mit dem namen Keypad der dann so aussieht
in sobald block bei http befehlen für tasten so eintragen
Code: Alles auswählen
http://192.168.1.20:8088/tm/http?taste=0&auth=Passwort
also für alle 9 nummerntasten musste dann im sobald block ein http stehen, und dann nur taste=0 mit der nummer ersetzen
- Bildschirmfoto 2017-04-23 um 13.48.38.png (21.85 KiB) 10705 mal betrachtet
bei timer=on und timer off folgendes eintragen
Code: Alles auswählen
http://192.168.1.20:8088/tm/http?timer=on&auth=Passwort
Code: Alles auswählen
http://192.168.1.20:8088/tm/http?timer=off&auth=Passwort
IMMER die ipadresse eueren neo server
für weitere tasten 3-9 muss man dementsprechend die falls blöcke einfügen, nach taste 2
für diese dann die scripte taste3 - taste9 anlegen und im falls blöcken in dann teil zuweisen.
unten bei abfrage der variable TasteTimer auf den wert on ist http befehl (GET) mit folgender url drin
Code: Alles auswählen
http://192.168.1.20:8088/cmd?XC_FNC=setTaskActive&id=5&active=true
und wird gesendet sobald man die raute taste klickt, dann wird die minutenzahl übernommen und der task timer aktiviert
bei abfrage auf off wert der TasteTimer wird diese http befehl eingefügt
Code: Alles auswählen
http://192.168.1.20:8088/cmd?XC_FNC=setTaskActive&id=5&active=false
WICHTIG: die id= anpassen, diese ist die id des tasks timer, bei mir ist das die 5, bei euch hängt es von anzahl der tasks im AM
das kann man hier sehen:
bei task übersicht:
- Bildschirmfoto 2017-04-23 um 13.05.45.png (9.07 KiB) 10710 mal betrachtet
Dieser task, timer sieht so aus, also den so wie im bild anlegen mit dem namen timer:
also in sobald block benutzen wir das neue interval block, es zählt die zeit und immer wenn die angegebene zeit vergeht, führt das was im dann block ist.
und hier ist im dann block das script mit dem namen MinutenDown, also ein script mit dem namen erstellen und diesen code einfügen:
MinutenDown
Code: Alles auswählen
// diese funktion sendet ein http befehl und wird unten benutzt aus dem script einen task activ/inactiv zu schalten
const getContent = function(url) {
return new Promise((resolve, reject) => {
const lib = url.startsWith('https') ? require('https') : require('http');
const request = lib.get(url, (response) => {
if (response.statusCode < 200 || response.statusCode > 299) {
reject(new Error('Failed to load page, status code: ' + response.statusCode));
}
const body = [];
response.on('data', (chunk) => body.push(chunk));
response.on('end', () => resolve(body.join('')));
});
request.on('error', (err) => reject(err));
});
};
// inhalt der Variable MinutenTimer geprüft
getDeviceStatus(
"CountdownTimer", //raumname
"MinutenTimer", //variablenname
{"value":"state"},
function(err, status) {
if(!err) {
//minuten zahl wird jede 60 sekunden um 1 veringert
status = parseFloat( status ) - 1;
if (status === 0) {
// hier ist die aufruf der funktion oben um den task mit id=5 auf inaktiv zu schalten, sobald die minuten auf null sind
getContent('http://192.168.1.20:8088/cmd?XC_FNC=setTaskActive&id=5&active=false')
.then((html) => console.log(html))
.catch((err) => console.error(err));
// hier wird der schalter oder variable wieder auf off geschaltet wenn die zeit abgelaufen ist
// in meinem fall einfach eine variable vom typ on/off
executeDeviceCommand(
"mediola",
"ONOFF [0A]",
{"value":"off"},
function(err) {
err && console.error(err);
}
);
}
//hier werden die minuten wieder in die Variable MinutenTimer geschrieben
executeDeviceCommand(
"CountdownTimer",
"MinutenTimer",
{"value":"setValue","ext":status},
function(err) {
err && console.error(err);
}
);
}
}
);
diesen teil von code ersetzt man mit einem eigenem codesnippet aus dem script editor, je nach dem was geschaltet worden ist in dem makro für raute taste (oben bei mir war es die variable ON/OFF
Code: Alles auswählen
// hier wird der schalter oder variable wieder auf off geschaltet wenn die zeit abgelaufen ist
// in meinem fall einfach eine variable vom typ on/off
executeDeviceCommand(
"mediola",
"ONOFF [0A]",
{"value":"off"},
function(err) {
err && console.error(err);
}
);
und den snippet erzeugt man dan so:
am besten neues script erstellen, spaichern braucht man nicht
und den erzeugten code, oben ersetzen
so den task abspeichern und alles auf neo server übertragen.
Im neo legt man jetzt einen Keypad und einen text mit dem status der variable MinutenTimer, jeder taste des keypads einen makro als aktion zuweisen
wie im bld
wenn man die fernbedienung startet und z.b. 1 klickt und dann nochmal 1, werden dann 11 angezeigt, dann die raute klickt wird der countdown gestartet und nach eine minute musst die anzeige dann
10 sein bis auf 0, bei null wird dann das entsprechende auf off gehen.
Wie gesagt das was man schalten will muss in dem raute makro auf on geschaltet werden
und dann auf off in MinutenDown script auf off.
Hoffe das ich nicht etwas vergessen habe