Moin zusammen,
ich brauche bitte eure Hilfe!!
Ich bin seit Wochen damit beschäftigt das Telegram Script fehlerfrei zum laufen zu bekommen aber irgendwie gelingt es mir nicht.
Ich bin eigentlich größtenteils bei dem Standard Script geblieben, habe natürlich nur meine Geräte und an zwei Stellen Custom Keyboards eingefügt.
Wie ihr sicher an einigen Stellen, z.B. meiner Fenster Statusabfrage, erkennt, bin ich ein totaler Script newbie und habe daher keine Idee woher mein Fehler kommen kann.
Das Script läuft immer für ein paar Tage ohne Probleme. Dann führt es aber zum Absturz der CCU2. Und ab dann geht es auch nicht mehr. Ich kann die CCU Neustarten so oft ich will. Sobald ich das Script ausführe hängt sich der ReGaHss weg. Das die Neustarts nichts mehr nützen spricht ja eigentlich gegen das Problem mit mehr als 200 Variablen in Scripten.
Nun kann ich das Script nur wieder zum Laufen bringen, wenn ich das Programm lösche, es neu anlege, das Original Script von hier kopiere und dann nach und nach meine Anpassungen einfüge.
Selbst wenn ich nach dem fertigstellen des Scripts die funktionsfähige Version in einer Textdatei sichere und das Script dann ein paar Tage später,nachdem die CCU sich zerlegt hat, 1:1 kopiere und die WebUI die Fehlerprüfung durchführen lasse, hängt die CCU sich wieder auf. Dann bleibt nur der Neubau des Scripts.
Ich hoffe ich konnte das Problem einigermaßen verständlich beschreiben.
Es hört sich etwas verrückt an aber genau so verhält es sich.
Hier mein Script. Ich hoffe ich habe alles wichtige gexxxxt:
Code: Alles auswählen
! ### Telegram-Bot Version 0.1.3 ###
!
! ########## Info START ##########
! - das Script erstellt automatisch die benötigten SysVars, wenn diese nicht vorhanden sind. !!!NICHT selber erstellen!!!
! - Du benötigst UNBEDINGT einen eingerichteten CUxD-Timer und einen CUxD-Exec.
! - der CUxd-Timer läuft komplett im Hintergrund ohne extra Programm und wird lediglich beim nächsten Aufruf dieses Scripts auf Status geprüft.
! ########## Info ENDE ##########
! ########## Config START ##########
string chatid = "xxx"; ! chat_id des Empfängers
string botAPI = "xxx"; ! API des eingerichteten Test-Bots
var url = "https://api.telegram.org/bot"#botAPI#"/getUpdates";
var cURL="LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl";
var cuxd_dev="CUX2801003:10"; ! Adresse des benutzten CUxD-Exec-Devices für Telegram !!!und NUR dafür!!!
var cuxd_rand="CUX2801003:16"; ! Adresse des benutzten CUxD-Exec-Devices für die Zufallszahl
var cuxd_timer="CUX2800001:1"; ! Adresse des benutzten CUxD-Timer-Devices für den Timer
var password="xxx"; ! Passwort für sichere Abfragen (z.B. Ausgabe der verfügbaren Befehle)
var heizung="BidCos-RF.MEQ0272050:1"; ! Beispiel-Aktor für Status- und Schalt-Befehle
integer timerTAN_max = "300"; ! maximale Gültigkeit der TAN in Sekunden
! ########## Config ENDE ##########
! ########## Script START ##########
! +++++ Deklaration weiterer interner Variablen +++++
string message; string message_tmp; string message_index; string message_state;
integer timerTAN = dom.GetObject("CUxD."#cuxd_timer#".TIMER_GET").State();
if (timerTAN > 0) {
var mTAN = dom.GetObject("Telegram-TAN-Jan").Value();
}
else {
dom.GetObject("Telegram-TAN-Jan").State("");
var mTAN = "";
}
! ### Telegram-Meldungen START ###
string svName = "Telegram-Text-Jan";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtString);
svObj.ValueSubType(istChar8859);
svObj.DPInfo("Telegram-Text der übertragen der soll");
svObj.ValueUnit("");
svObj.State("");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else {
string message = dom.GetObject("Telegram-Text-Jan").Value();
string custk = dom.GetObject("Telegram-ck-Jan").Value();
if (message != "") {
! +++++ Umwandlung von Sonderzeichen gem. UTF-8 (Code by dtp)+++++
foreach(message_index,message.Split(" ")){message_tmp = message_tmp + message_index + "%20";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("Ä")){message_tmp = message_tmp + message_index + "%C3%84";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("Ö")){message_tmp = message_tmp + message_index + "%C3%96";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("Ü")){message_tmp = message_tmp + message_index + "%C3%9C";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("ä")){message_tmp = message_tmp + message_index + "%C3%A4";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("ö")){message_tmp = message_tmp + message_index + "%C3%B6";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("ü")){message_tmp = message_tmp + message_index + "%C3%BC";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("ß")){message_tmp = message_tmp + message_index + "%C3%9F";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("°")){message_tmp = message_tmp + message_index + "%C2%B0";}
message = message_tmp; message_tmp = "";
! Kürzen der Nachricht um die jeweils am Ende angefügten Umwandlungscodes
message = message.Substr(0, message.Length()-51);
dom.GetObject("CUxD."#cuxd_dev#".CMD_EXEC").State(cURL#" -s -k https://api.telegram.org/bot"#botAPI#"/sendMessage -d text='"#message#"' -d chat_id="#chatid#" -d parse_mode=html -d disable_notification=0 -d reply_markup="#custk#"");
dom.GetObject("CUxD."#cuxd_dev#".CMD_EXEC").State(cURL#" -s -k -L " # url #"?offset="# ausgabe_update_id);
message = "";
custk = "";
dom.GetObject("Telegram-Text-Jan").State("");
dom.GetObject("Telegram-ck-Jan").State("");
}
}
! ### Telegram-Meldungen Ende ###
dom.GetObject("CUxD."#cuxd_dev#".CMD_SETS").State(cURL#" -s -k -L " # url);
dom.GetObject("CUxD."#cuxd_dev#".CMD_QUERY_RET").State(1);
string rueckgabe = dom.GetObject("CUxD."#cuxd_dev#".CMD_RETS").State();
integer anfang_chatid = rueckgabe.Find("chat")+12;
integer ende_chatid = rueckgabe.Find("chat")+21;
string ausgabe_chatid = rueckgabe.Substr(anfang_chatid,ende_chatid-anfang_chatid);
if (ausgabe_chatid != chatid) {
integer anfang_update_id = rueckgabe.Find("update_id")+11;
integer ende_update_id = rueckgabe.Find("update_id")+20;
string ausgabe_update_id = rueckgabe.Substr(anfang_update_id,ende_update_id-anfang_update_id);
ausgabe_update_id=(ausgabe_update_id.ToInteger()+1); ! update_id um 1 erhöhen (um später die Nachricht zu löschen)
dom.GetObject("CUxD."#cuxd_dev#".CMD_EXEC").State(cURL#" -s -k -L " # url #"?offset="#ausgabe_update_id);
string rueckgabe= "";
quit;
}
integer anfang_cpx = rueckgabe.Find("update_id");
if (anfang_cpx != "-1") {
integer anfang_update_id = rueckgabe.Find("update_id")+11;
integer ende_update_id = rueckgabe.Find("update_id")+20;
string ausgabe_update_id = rueckgabe.Substr(anfang_update_id,ende_update_id-anfang_update_id);
ausgabe_update_id=(ausgabe_update_id.ToInteger()+1); ! update_id um 1 erhöhen (um später die Nachricht zu löschen)
integer anfang_text = rueckgabe.Find("text")+7;
integer ende_text = rueckgabe.Find("}}]}")-1;
string ausgabe_text = rueckgabe.Substr(anfang_text,ende_text-anfang_text);
if (ausgabe_text == "Hallo Haus") {
string message = "Hallo Jan, was kann ich für die tun? Mit Hilfe erhältst du eine Übersicht!";
}
if (ausgabe_text == "Hilfe") {
string message = "Na, wie heisst das Zauberwort?";
}
if (ausgabe_text == "Hilfe "#password) {
string message = "<b>Status-Befehle:</b>\nGartenlicht\nFenster EG\nFenster 1.OG\nFenster 2.OG\nAlarmanlage\nTV-Licht\n\n<b>Schalt-Befehle:</b>\nGartenlicht ein|aus\nAlarmanlage ein|aus\nTV-Licht ein|aus\nBewaesserung min.";
}
if (ausgabe_text == "Status Gartenlicht") {
if (dom.GetObject("BidCos-RF.MEQ1810058:1.STATE").Value() == "true") { string message_state = "eingeschaltet"; } else { string message_state = "ausgeschaltet"; }
string message = "Das Gartenlicht ist "#message_state;
}
if (ausgabe_text == "Status Fenster 1.OG") {
if (dom.GetObject("BidCos-RF.JEQ0219257:4.LED_STATUS").Value() == 2) { string message_state = "Alle Fenster im 1.OG sind geschlossen"; } else {
if (dom.GetObject("BidCos-RF.MEQ0216114:2.STATE").Value() == "true") { string message_state6 = "Das Schlafzimmer Fenster"; } else { string message_state6 = ""; }
if (dom.GetObject("BidCos-RF.LEQ0919607:1.STATE").Value() == "true") { string message_state5 = "Das linke Schlafzimmer Velux Fenster
, "#message_state6; } else { string message_state5 = ""#message_state6; }
if (dom.GetObject("BidCos-RF.LEQ0917807:1.STATE").Value() == "true") { string message_state4 = "Das rechte Schlafzimmer Velux Fenster
"#message_state5; } else { string message_state4 = ""#message_state5; }
if (dom.GetObject("BidCos-RF.MEQ0216116:2.STATE").Value() == "true") { string message_state3 = "Das Kinderzimmer Fenster
"#message_state4; } else { string message_state3 = ""#message_state4; }
if (dom.GetObject("BidCos-RF.LEQ0917980:1.STATE").Value() == "true") { string message_state2 = "Das Badezimmer Fenster
"#message_state3; } else { string message_state2 = ""#message_state3; }
if (dom.GetObject("BidCos-RF.LEQ0918115:1STATE").Value() == "true") { string message_state = "Folgende Fenster sind offen:
Das Arbeitszimmer Fenster
"#message_state2; } else { string message_state = "Folgende Fenster sind offen:
"#message_state2; }
}
string message = ""#message_state;
}
if (ausgabe_text == "Status Fenster EG") {
if (dom.GetObject("BidCos-RF.JEQ0219257:3.LED_STATUS").Value() == 2) { string message_state = "Alle Fenster im EG sind geschlossen"; } else {
if (dom.GetObject("BidCos-RF.MEQ0216084:2.STATE").Value() == "true") { string message_state4 = "Die HWR Tür"; } else { string message_state4 = ""; }
if (dom.GetObject("BidCos-RF.MEQ0216104:2.STATE").Value() == "true") { string message_state3 = "Das Küchenfenster
"#message_state4; } else { string message_state3 = ""#message_state4; }
if (dom.GetObject("BidCos-RF.MEQ0216118:2.STATE").Value() == "true") { string message_state2 = "Die Schiebetür im Wohnzimmer
"#message_state3; } else { string message_state2 = ""#message_state3; }
if (dom.GetObject("BidCos-RF.MEQ0216117:2.STATE").Value() == "true") { string message_state = "Folgende Fenster/Türen sind offen:
Das Wohnzimmer Fenster
"#message_state2; } else { string message_state = "Folgende Fenster sind offen:
"#message_state2; }
}
string message = ""#message_state;
}
if (ausgabe_text == "Status Fenster 2.OG") {
if (dom.GetObject("BidCos-RF.JEQ0219257:5.LED_STATUS").Value() == 2) { string message_state = "Alle Fenster im 2.OG sind geschlossen"; } else {
if (dom.GetObject("BidCos-RF.LEQ0918971:1.STATE").Value() == "true") { string message_state2 = "Das Dachbodenfenster rechts"; } else { string message_state2 = ""; }
if (dom.GetObject("BidCos-RF.LEQ0919049:1.STATE").Value() == "true") { string message_state = "Folgende Fenster sind offen:
Das Dachbodenfenster links
"#message_state2; } else { string message_state = "Folgende Fenster sind offen:
"#message_state2; }}
string message = ""#message_state;
}
if (ausgabe_text == "Status Alarmanlage") {
if (dom.GetObject("Alarm EG").State() == "true") { string message_state = "eingeschaltet"; } else { string message_state = "ausgeschaltet";}
string message = "Die Alarmanlage ist "#message_state;
}
if (ausgabe_text == "Bewaesserung deaktivieren") {
dom.GetObject("Bewässerung").State(0);
string message = "Die Bewässerung wurde deaktiviert!";
}
if (ausgabe_text == "Danke") {
string message = "kein Problem!";
}
if (ausgabe_text == "getTAN") {
dom.GetObject("CUxD."#cuxd_rand#".RAND").State(255);
integer rand = dom.GetObject("CUxD."#cuxd_rand#".RAND").State().ToInteger();
integer anfang_date = rueckgabe.Find("date")+11;
integer ende_date = rueckgabe.Find("date")+16;
string ausgabe_date = rueckgabe.Substr(anfang_date,ende_date-anfang_date);
integer bTAN=(ausgabe_date.ToInteger()*rand);
string keybtan = ("{%22keyboard%22:[[%22getTAN%22,%22Hilfe%20bitte%22],[%22Gartenlicht%20ein%20"#bTAN#"%22,%22Gartenlicht%20aus%20"#bTAN#"%22],[%22Alarmanlage%20ein%20"#bTAN#"%22,%22Alarmanlage%20aus%20"#bTAN#"%22],[%22TV-Licht%20ein%20"#bTAN#"%22,%22TV-Licht%20aus%20"#bTAN#"%22]],%22one_time_keyboard%22:true}");
dom.GetObject("CUxD."#cuxd_dev#".CMD_EXEC").State(cURL#" -s -k https://api.telegram.org/bot"#botAPI#"/sendMessage -d text='"#bTAN#"' -d chat_id="#chatid#" -d parse_mode=html -d disable_notification=0 -d reply_markup="#keybtan#"");
dom.GetObject("CUxD."#cuxd_dev#".CMD_EXEC").State(cURL#" -s -k -L " # url #"?offset="# ausgabe_update_id);
string svName = "Telegram-TAN-Jan";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtString);
svObj.ValueSubType(istChar8859);
svObj.DPInfo("aktuelle Telegram-TAN"); ! Beschreibung darf nicht leer ("") sein!
svObj.ValueUnit("");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
svObj.State(bTAN);
dom.GetObject("CUxD."#cuxd_timer#".TIMER_SET").State(timerTAN_max);
quit;
}
! was jetzt kommt, wird NUR ausgeführt, wenn eine mTAN vorhanden ist
if (mTAN != "") {
if (ausgabe_text == "Gartenlicht ein "#mTAN) {
dom.GetObject("BidCos-RF.MEQ1810058:1.STATE").State(1);
string message = "Das Gartenlicht ist nun eingeschaltet!";
}
if (ausgabe_text == "Gartenlicht aus "#mTAN) {
dom.GetObject("BidCos-RF.MEQ1810058:1.STATE").State(0);
string message = "Das Gartenlicht ist nun ausgeschaltet!";
}
if (ausgabe_text == "TV-Licht ein "#mTAN) {
dom.GetObject("BidCos-RF.LEQ0746761:1.STATE").State(1);
string message = "Das TV-Licht ist nun eingeschaltet!";
}
if (ausgabe_text == "TV-Licht aus "#mTAN) {
dom.GetObject("BidCos-RF.LEQ0746761:1.STATE").State(0);
string message = "Das TV-Licht ist nun ausgeschaltet!";
}
if (ausgabe_text == "Alarmanlage ein "#mTAN) {
dom.GetObject("Alarm EG").State(1);
dom.GetObject("Alarm 1.OG").State(1);
dom.GetObject("Alarm 2.OG").State(1);
string message = "Die Alarmanlage ist an!";
}
if (ausgabe_text == "Alarmanlage aus "#mTAN) {
dom.GetObject("Alarm EG").State(0);
dom.GetObject("Alarm 1.OG").State(0);
dom.GetObject("Alarm 2.OG").State(0);
string message = "Die Alarmanlage ist aus!";
}
if (ausgabe_text == "Bewaesserung 5 "#mTAN) {
dom.GetObject("BidCos-RF.BidCoS-RF:10.PRESS_SHORT").State(1);
string message = "5 minütige Bewässerung gestartet!";
}
if (ausgabe_text == "Bewaesserung 7 "#mTAN) {
dom.GetObject("BidCos-RF.BidCoS-RF:5.PRESS_SHORT").State(1);
string message = "7 minütige Bewässerung gestartet!";
}
if (ausgabe_text == "Bewaesserung 10 "#mTAN) {
dom.GetObject("BidCos-RF.BidCoS-RF:6.PRESS_SHORT").State(1);
string message = "10 minütige Bewässerung gestartet!";
}
}
else {
dom.GetObject("CUxD."#cuxd_dev#".CMD_EXEC").State(cURL#" -s -k -L " # url #"?offset="#ausgabe_update_id);
}
! Ende der Schalt-Befehle
if (message != "") {
! +++++ Umwandlung von Sonderzeichen gem. UTF-8 (Code by dtp)+++++
foreach(message_index,message.Split(" ")){message_tmp = message_tmp + message_index + "%20";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("Ä")){message_tmp = message_tmp + message_index + "%C3%84";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("Ö")){message_tmp = message_tmp + message_index + "%C3%96";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("Ü")){message_tmp = message_tmp + message_index + "%C3%9C";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("ä")){message_tmp = message_tmp + message_index + "%C3%A4";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("ö")){message_tmp = message_tmp + message_index + "%C3%B6";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("ü")){message_tmp = message_tmp + message_index + "%C3%BC";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("ß")){message_tmp = message_tmp + message_index + "%C3%9F";}
message = message_tmp; message_tmp = "";
foreach(message_index,message.Split("°")){message_tmp = message_tmp + message_index + "%C2%B0";}
message = message_tmp; message_tmp = "";
! Kürzen der Nachricht um die jeweils am Ende angefügten Umwandlungscodes
message = message.Substr(0, message.Length()-51);
dom.GetObject("CUxD."#cuxd_dev#".CMD_EXEC").State(cURL#" -s -k https://api.telegram.org/bot"#botAPI#"/sendMessage -d parse_mode='HTML' -d text='"#message#"' -d chat_id="#chatid);
dom.GetObject("CUxD."#cuxd_dev#".CMD_EXEC").State(cURL#" -s -k -L " # url #"?offset="# ausgabe_update_id);
message = "";
}
else {
dom.GetObject("CUxD."#cuxd_dev#".CMD_EXEC").State(cURL#" -s -k -L " # url #"?offset="#ausgabe_update_id);
}
}
Vielen Dank für eure Hilfe!!!!
Gruß Jan