@BuZZy:
Hab auch mal text2command außen vor gelassen und kurz & schnell ein Script erstellt womit man erstmal nur die Temperatur abfragen kann.
Wenn man nicht genau definiert was man abfragen will dann kommt eine Rückfrage mit Vorschlägen.
Beschäftige mich erst seit 2 Wochen mit Javascript.. Also bitte habt Verständnis falls es "komplizierter" Code ist..
Geht bestimmt noch einfacher aber wie gesagt, bin Javascript Neuling. :mrgreen:
on({id: 'telegram.0.communicate.request', change: 'any'}, function (obj) {
var stateval = getState('telegram.0.communicate.request').val; // Statevalue in Variable schreiben
var benutzer = stateval.substring(1,stateval.indexOf("]")); // Benutzer aus Statevalue extrahieren
var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length); // Befehl/Text aus Statevalue extrahieren
var unbekannt = [ // Array für Antworten bei unbekanntem Befehl
'Ich weiß leider nicht was du meinst.',
'Das habe ich leider nicht verstanden.',
'Tut mir leid. Ich verstehe das nicht.'
];
var zufall = Math.floor(Math.random()*unbekannt.length); // Setzt eine zufällige Zahl für Antworten bei unbekanntem Befehl
//createState('Telegram.Bot.Menu' + benutzer, ''); // EVENTUELL Datenpunkt für "Menüführung" erstellen
//setState('Telegram.Bot.Menu' + benutzer, 'Ich bin hier'); // EVENTUELL Schreiben in welchem Menü der Benutzer sich befindet.
// Ab hier werden die zu beantwortenden Fragen definiert.
// /(?=.*(\bTEMPERATUR\b|\bWARM\b|\bKALT\b))(?=.*(\bWOHNZIMMER\b|\bSTUBE\b)).+/ig
// reagiert auf Sätze in denen die Wörter
// (TEMPERATUR oder WARM oder KALT) UND (WOHNZIMMER oder STUBE) vorhanden sind.
// Klar definierte Abfragen müssen logischerweise oben stehen (Wie ist die Temperatur im Wohnzimmer?),
// damit das Script aufhört zu laufen wenn eine passende Antwort gefunden wurde.
// Unklar definierte Abfragen wo der Bot nachfragen muss was gemeint ist müssen weiter unten definiert werden.
// (Wie ist die Temperatur drin?) - Antwort vom Bot: "Welcher Raum ist gemeint? - Vorschlag 1, Vorschlag 2?"
if (befehl.search(/(?=.*(\bTEMPERATUR\b|\bWARM\b|\bKALT\b))(?=.*(\bWOHNZIMMER\b|\bSTUBE\b)).+/ig) != -1) {
sendTo('telegram', {
user: benutzer,
text: 'Die Temperatur im Wohnzimmer beträgt ' + getState("hm-rpc.0.OEQ0295648.1.TEMPERATURE").val + '°C!',
});
}
else if (befehl.search(/(?=.*(\bTEMPERATUR\b|\bWARM\b|\bKALT\b))(?=.*(\bSCHLAFZIMMER\b)).+/ig) != -1) {
sendTo('telegram', {
user: benutzer,
text: 'Die Temperatur im Schlafzimmer beträgt ' + getState("hm-rpc.0.OEQ0291234.1.TEMPERATURE").val + '°C!',
});
}
else if (befehl.search(/(?=.*(\bTEMPERATUR\b|\bWARM\b|\bKALT\b))(?=.*(\bDRINNE\b|\bDRIN\b|\bIM\b|\bIN\b)).+/ig) != -1) {
sendTo('telegram', {
user: benutzer,
text: 'Für welchen Raum möchtest du die Temperatur abfragen?',
reply_markup: {
inline_keyboard: [
[{ text: 'Wohnzimmer', callback_data: '%TempWohnzimmer'}],
[{ text: 'Schlafzimmer', callback_data: '%TempSchlafzimmer'}]
]
}
});
}
// Ab hier werden die Reaktionen auf die returns zu "unklaren" Fragen definiert.
else if (befehl === "%TempWohnzimmer") {
sendTo('telegram', {
user: benutzer,
text: "Wohnzimmertemperatur angefragt",
answerCallbackQuery: {
text: 'Die Temperatur im Wohnzimmer beträgt ' + getState("hm-rpc.0.OEQ0295648.1.TEMPERATURE").val + '°C!',
showAlert: true
}
});
}
else if (befehl === "%TempSchlafzimmer") {
sendTo('telegram', {
user: benutzer,
text: "Schlafzimmertemperatur angefragt",
answerCallbackQuery: {
text: 'Die Temperatur im Schlafzimmer beträgt ' + getState("hm-rpc.0.OEQ0291234.1.TEMPERATURE").val + '°C!',
showAlert: true
}
});
}
// Wenn überhaupt kein Befehl erkannt wurde dann einen zufälligen Satz aus dem unbekannt Array senden
else {
sendTo('telegram', {user: benutzer, text: unbekannt[zufall]});
}
});
```` `
Top. Genau sowas habe ich gesucht. Vielen Dank.
Was müsste ich in das Script noch reinschreiben, wenn ich über Telegram die Temperatur des Heizungsthermostates einstellen will? Also wenn ich dem Bot schreibe "Stelle Heizung im Wohnzimmer auf 22 Grad"
Hab jetzt schon eine Weile erfolglos gesucht ob ich etwas in der Art finde. Leider hab ich von Javascript so gar keinen Plan. In Blockly bekomme ich auch nur die einfachsten Sachen hin. Bin erst ein paar Tage dabei.
Beste Grüße