String aufbauen / Skript

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Wustaja
Beiträge: 11
Registriert: 12.02.2017, 21:54

String aufbauen / Skript

Beitrag von Wustaja » 21.08.2017, 15:11

Hallo,

ich habe negative Erfahrungen mit dem Verbinden zwischen Text und Variablen gemacht.
Wenn ich mehrere Variablen in einen String einbauen möchte und dazwischen Trennzeichen haben will, so bricht das SKript tw. ab.

Laut Anleitung kann man entweder Hash # oder Plus + verwenden.
Beides geht jedoch nicht.

Bsp: PushText = "Objekt: " # string_objectname # " Wert: " # string_objectvalue # " Date/Time: " # string_CurTime;

gleiches wurde auch mit Plus versucht. Ergbnis ist zumindest, dass keine MEssage gesendet wird. Wenn ich den String reduziere auf einen Text "xy" und eine Variable geht es noch.

Code: Alles auswählen

string s_CurTime = system.Date("%H:%M:%S");
string s_error_type; 
string s_error_message = "";
string s_device;
string PushoverText;
string s_KnownIssue = dom.GetObject("d_warning_error_text").Value();


if (s_error_type == "UPDATE_PENDING") {
  s_error_message = "> Update verfügbar";
}
if (s_error_type == "CONFIG_PENDING") {
  s_error_message = "> Konfigurationsdaten stehen zur Übertragung an";
}

PushoverText = s_device # ": " # s_error_message # " - " # s_CurTime;

if (s_KnownIssue <> PushoverText)
{
  if (s_error_message != "") 
  {
    !Send BOT Message and E-Mail    
    dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot*******/sendMessage -d text='"#PushoverText#"' -d chat_id=*******");
  }
}


Habt Ihr Tipps?

Gruß
sbo
Zuletzt geändert von Wustaja am 21.08.2017, 15:32, insgesamt 1-mal geändert.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: String aufbauen / Skript

Beitrag von alchy » 21.08.2017, 15:21

Kannst du bitte ein Script komplett posten, wo du der Meinung bist, es muss funktionieren, oder soll das schon alles sein?

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

Re: String aufbauen / Skript

Beitrag von fischmir » 21.08.2017, 15:21

Hallo,

ja, gleich zwei

1.) Code zukünftig bitte in Code-Tags posten:

Code: Alles auswählen

sieht dann so aus
2.) Am besten, du postest mal dein ganzes Script und nicht nur einen Ausschnitt. Zudem die Frage was genau heißt "negative Erfahrungen"?

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

String aufbauen / Skript

Beitrag von DrTob » 21.08.2017, 15:35

Spontane Vermutung: eine der Variablen ist null.

Zum Unterschied + gegenüber #:


Code: Alles auswählen

integer a = 1;
integer b = 2;

string out1 = a + b;
string out2 = a # b;
Danach ist out1 = 3 und out2 = "12"
Zuletzt geändert von DrTob am 22.08.2017, 07:20, insgesamt 2-mal geändert.

Wustaja
Beiträge: 11
Registriert: 12.02.2017, 21:54

Re: String aufbauen / Skript

Beitrag von Wustaja » 21.08.2017, 15:36

Variablen sind alle OK, habe Sie ausgegeben und geprüft.

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Re: String aufbauen / Skript

Beitrag von DrTob » 21.08.2017, 15:40

Dann wird der Fehler an einer anderen Stelle liegen.

Wustaja
Beiträge: 11
Registriert: 12.02.2017, 21:54

Re: String aufbauen / Skript

Beitrag von Wustaja » 21.08.2017, 15:41

Fehler an anderer Stelle? Dachte ich auch, habe Haltepunkte zum Prüfen gesetzt. Bis zum BOT-Versand läuft das Skript sauber.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: String aufbauen / Skript

Beitrag von alchy » 21.08.2017, 16:23

Ohne es jetzt komplett gecheckt zu haben. Lass mal bitte das > in Strings weg.

Wenn ich zu Hause bin, schau ich es mir richtig an. Das wird schon.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: String aufbauen / Skript

Beitrag von alchy » 21.08.2017, 22:46

DrTob hat geschrieben: Zum Unterschied + gegenüber #:
falsche Sprache. Da fehlt dann noch ein "eger" hinten dran. :mrgreen:

Code: Alles auswählen

integer a = 1;
integer b = 2;

string out1 = a + b;
string out2 = a # b;
@Wustaja
das ist nicht das was ich geschrieben habe. Das Script ist zumindest soweit ohne Fehler, damit es funktionieren kann oder könnte.
Sofern eben deine s_error_message nicht leer ist, solltest du eine Nachricht bekommen zumindest mit der aktuellen Uhrzeit im System.
Allerdings zeigt es mir, das du dich ags. mit den Servicemeldungen beschäftigen willst - da macht es vielleicht Sinn die Suche im Forum zu verwenden.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

robsdobs
Beiträge: 510
Registriert: 08.08.2015, 22:52
Danksagung erhalten: 1 Mal

Re: String aufbauen / Skript

Beitrag von robsdobs » 21.08.2017, 22:55

Bist du sicher das es am Verbinden des Strings liegt?

Wenn du Nachrichten über Pushover oder Telegram sendest, dürfen diese bestimmte Zeichen nicht enthalten. Genauer gesagt müssen bestimmte Zeichen entsprechend codiert sein. Andernfalls geht die Nachricht nicht raus oder der Dienst nimmt diese nicht an. Telegram ist heir besonders restriktiv.

Beispiele sind deutsche Umlaute wie äöü. Auch alle anderen Sonderzeichen. Beispielsweise ein simples ">" macht Probleme.

Wenn du im Forum suchst findest du Beispiele für das Ersetzen der Zeichen.

Hier mal ein Beispiel:

Code: Alles auswählen

string tmpB = "";string tmpC = "";
++++ Umwandlung von Sonderzeichen gem. UTF-8 +++++
foreach(tmpC, message_Telegram.Split("%")){tmpB = tmpB + tmpC + "%25";}
if(message_Telegram.Substr(message_Telegram.Length()-1, message_Telegram.Length()-1) <> "%"){message_Telegram = tmpB.Substr(0, tmpB.Length()-3);}
else{message_Telegram = tmpB;}
tmpB = "";
foreach(tmpC, message_Telegram.Split(" ")){tmpB = tmpB + tmpC + "%20";};
if(message_Telegram.Substr(message_Telegram.Length()-1, message_Telegram.Length()-1) <> " "){message_Telegram = tmpB.Substr(0, tmpB.Length()-3);}
else{message_Telegram = tmpB;}
tmpB = "";

foreach(tmpC, message_Telegram.Split("&")){tmpB = tmpB + tmpC + "%26";};
if(message_Telegram.Substr(message_Telegram.Length()-1, message_Telegram.Length()-1) <> "&"){message_Telegram = tmpB.Substr(0, tmpB.Length()-3);}
else{message_Telegram = tmpB;}
tmpB = "";
foreach(tmpC, message_Telegram.Split("Ä")){tmpB = tmpB + tmpC + "%C3%84";}
if(message_Telegram.Substr(message_Telegram.Length()-1, message_Telegram.Length()-1) <> "Ä"){message_Telegram = tmpB.Substr(0, tmpB.Length()-6);}
else{message_Telegram = tmpB;}
tmpB = "";
foreach(tmpC, message_Telegram.Split("Ö")){tmpB = tmpB + tmpC + "%C3%96";}
if(message_Telegram.Substr(message_Telegram.Length()-1, message_Telegram.Length()-1) <> "Ö"){message_Telegram = tmpB.Substr(0, tmpB.Length()-6);}
else{message_Telegram = tmpB;}
tmpB = "";
foreach(tmpC, message_Telegram.Split("Ü")){tmpB = tmpB + tmpC + "%C3%9C";}
if(message_Telegram.Substr(message_Telegram.Length()-1, message_Telegram.Length()-1) <> "Ü"){message_Telegram = tmpB.Substr(0, tmpB.Length()-6);}
else{message_Telegram = tmpB;}
tmpB = "";
foreach(tmpC, message_Telegram.Split("ä")){tmpB = tmpB + tmpC + "%C3%A4";}
if(message_Telegram.Substr(message_Telegram.Length()-1, message_Telegram.Length()-1) <> "ä"){message_Telegram = tmpB.Substr(0, tmpB.Length()-6);}
else{message_Telegram = tmpB;}
tmpB = "";
foreach(tmpC, message_Telegram.Split("ö")){tmpB = tmpB + tmpC + "%C3%B6";}
if(message_Telegram.Substr(message_Telegram.Length()-1, message_Telegram.Length()-1) <> "ö"){message_Telegram = tmpB.Substr(0, tmpB.Length()-6);}
else{message_Telegram = tmpB;}
tmpB = "";
foreach(tmpC, message_Telegram.Split("ü")){tmpB = tmpB + tmpC + "%C3%BC";}
if(message_Telegram.Substr(message_Telegram.Length()-1, message_Telegram.Length()-1) <> "ü"){message_Telegram = tmpB.Substr(0, tmpB.Length()-6);}
else{message_Telegram = tmpB;}
tmpB = "";
foreach(tmpC, message_Telegram.Split("ß")){tmpB = tmpB + tmpC + "%C3%9F";}
if(message_Telegram.Substr(message_Telegram.Length()-1, message_Telegram.Length()-1) <> "ß"){message_Telegram = tmpB.Substr(0, tmpB.Length()-6);}
else{message_Telegram = tmpB;}
tmpB = "";
foreach(tmpC, message_Telegram.Split("°")){tmpB = tmpB + tmpC + "%C2%B0";}
if(message_Telegram.Substr(message_Telegram.Length()-1, message_Telegram.Length()-1) <> "°"){message_Telegram = tmpB.Substr(0, tmpB.Length()-6);}
else{message_Telegram = tmpB;}
tmpB = "";
foreach(tmpC, message_Telegram.Split("²")){tmpB = tmpB + tmpC + "%C2%B2";}
if(message_Telegram.Substr(message_Telegram.Length()-1, message_Telegram.Length()-1) <> "²"){message_Telegram = tmpB.Substr(0, tmpB.Length()-6);}
else{message_Telegram = tmpB;}
tmpB = "";
foreach(tmpC, message_Telegram.Split("³")){tmpB = tmpB + tmpC + "%C2%B3";}
if(message_Telegram.Substr(message_Telegram.Length()-1, message_Telegram.Length()-1) <> "³"){message_Telegram = tmpB.Substr(0, tmpB.Length()-6);}
else{message_Telegram = tmpB;}
tmpB = "";
Zuletzt geändert von robsdobs am 22.08.2017, 08:32, insgesamt 1-mal geändert.
sehr selten im Forum

Antworten

Zurück zu „HomeMatic allgemein“