NEWS
Auf Telegram Nachricht reagieren
-
Hallo,
Ich komme nicht weiter und vllt kann mir jemand einen Tipp geben.
Ich möchte via Telegram eine Uhrzeit z.B. 04:00 Uhr an meinen Raspberry schicken. Dieser soll dann das nächste mal wenn es vier Uhr Morgens ist etwas ausführen z.b. Lampe an.
In FHEM konnte ich das ganz gut mit einem notify machen aber wie geht es beim ioBroker und Blockly???
Ich muss doch auf das object „request“ von „Telegram.0“ reagieren, oder?
Also:
Falls object (Last Received request) Text = 04:00 Uhr
Schalte Lampe an um 04:00 Uhr.
Was muss ich in Text to Command einstellen? Und wie bekomme ich die Zeit ( wenn das nächste mal 04:00 Uhr) rein?
Wäre schön für Ansätze oder gute Links hilfreich. Habe in der suche nur etwas über versenden von Nachrichten oder zeitverzögert gefunden.
Vielen Dank für eure Hilfe
-
ich habe es in zwei Schritten gemacht:
1. die Telegram Meldung im iobroker zerlegen in User und "Befehl"
var input; var field; var user; on({id: 'telegram.0.communicate.request'}, function (obj) { input = getState('telegram.0.communicate.request').val; fields = input.split(']'); user = fields[0]; setState('variablen.0.telegram.befehl', fields[1]); fields = user.split('['); user = fields[1]; setState('variablen.0.telegram.user', user); });
variablen.0.telegram.befehl
variablen.0.telegram.user
Sind zwei variablen wo ich unter Objekte erstellt habe, dass sie von jedem Program aus zugänglich sind.
2. auf Befehle reagieren
var Datensetzen = 0; // Punkt für 2 Antwort / 1 Abwesenheit / 2 Programm an aus / 3 Weihnachstbeleuchtung / 4 Storen on({id: 'variablen.0.telegram.user'}, function (obj) { switch (getState('variablen.0.telegram.befehl').val) { //Abwesenheit case 'Abwesenheit': sendTo('telegram', {user: getState('variablen.0.telegram.user').val, text: 'Tage?'}); setTimeout(function (obj){Datensetzen=0;}, 20000); setTimeout(function (obj){Datensetzen=1;}, 500); break; // ander case Brak einfügen default: //Abwesenheit Eingabe Zeit if (Datensetzen==1){ //1 steht bei mir für abwesenheit !! musst bei jedem anpassen setState('variablen.0.Abwesenheit', Number(getState('variablen.0.telegram.befehl').val)); sendTo('telegram', {user: getState('variablen.0.telegram.user').val, text: 'Die Abwesenheit ist ' + getState('variablen.0.telegram.befehl').val + ' Tage'}); Datensetzen = 0;} }});
var Datensetzen -> dort mit der Zahl, definierst du welche "if" abfrage du aktivierst als 2 Meldung für 20 Sekunden. Am ende der Abfrage wird es wieder auf 0 gesetzt.
Dort kannst mit:
case… ..... break;
noch x Grundabfragen einstellen
if
dort gibst du dann z.Bsp. die Zeit ein, hast 20 Sekunden zeit, danach wird Datensetzen wieder auf 0 gesetzt
also, Beispiel läuft so
du gibst ein -> Abwesenheit
er antwortet -> Tage?
danach gibst du innert 20 Sekunden die gewünschten Tage ein -> z. Bsp. 2
er bestätigt das er die Variable Tag in Objekte auf "z. Bsp" 2 tage eingestellt hat.
Es gibt wahrscheinlich eleganter Versionen, bin jedoch kein Programmierer.