"HMCCU" Raspberrymatic Alarmmeldungen Programme Variablen Skripte FHEM auswert

Begonnen von Depechem, 08 November 2018, 14:12:58

Vorheriges Thema - Nächstes Thema

Depechem

Hallo, wie ist es mir möglich Beispielsweise "Alarmmeldunge"n der CCU3 (Raspberrymatic) am FHEM zu übergeben?
Beispiel: Die S.USV der verbundenen CCU3 lößt eine Alarmmeldung aus, da der Netzstrom getrennt wurde.
Wie kann diese Meldung in FHEM übertragen werden?

Gruß Thomas
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

Kai-Alfonso

Vielleicht kannst Du aus diesem CCU Programm was ableiten, was Dir hilft? Bei mir verschickt es Alarmmeldungen per Pushover, kann aber auch Email

! Servicemeldungen auslesen und weiter verarbeiten
! v1.95 (c) by alchy

!++++++ SETUP ++++++
! Bitte in Ruhe die naechsten Zeilen durcharbeiten
var WITHTIME = "ja"; ! Wenn ja, wird die Alarmzeit Zeit mitgesendet
! +++++ Servicemeldungen "Kommunikation war gestoert" bestaetigen? ++++++
var ACCK = "ja"; ! ja oder nein, um anstehende "war Kommunikationsstoerungen" zu bestaetigen
! HM Geraet, wessen Systemmeldungen nicht verschickt werden sollen
var BLOCK = ""; ! Seriennummern von Geraeten, welche durch das Script ignoriert werden sollen

!++++++ PUSHBULLET +++++++++
var USE_PUSHBULLET = "nein"; ! ja oder nein fuer die Verwendung PUSHBULLET direkt im Script;
var USER ="++++++++++++++++++++"; ! selbsterklaerend
var DEVICE_IDEN = "+++++++++++++++++++";
var PUSHBULLET_CUXD_ID = "CUX2801001:4"; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?
var TITEL = "Homematic"; !kann jeder nennen wie er will

!++++++ TELEGRAM +++++++++
! Einrichtung siehe https://www.christian-luetgens.de/homematic/telegram/botfather/Chat-Bot.htm
var USE_TELEGRAM = "nein"; ! ja oder nein fuer die Verwendung TELEGRAM direkt im Script;
var CHATID = "++++++++"; ! selbsterklärend
var BOTAPI = "+++++++++++"; ! dito
var TELEGRAM_CUXD_ID = "CUX2801001:2"; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?

!++++++ Prowl Setup fuer die Apfeljuenger +++++++++
! 1. Prowl einrichten ( http://homematic-forum.de/forum/viewtopic.php?f=19&t=7797 )
! 2. cuxd Installation erforderlich
var USE_PROWL = "nein"; ! ja oder nein fuer die Verwendung prowl direkt im Script;
var API_KEY ="DEIN API KEY"; ! selbsterklaerend
var PROWL_CUXD_ID = "CUX2801001:3"; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?
var ANWENDUNG = "Homematic"; !kann jeder nennen wie er will
var KATEGORIE ="Servicemeldung"; !kann jeder nennen wie er will
var TIME_OUT = "10";

!+++++++ Pushover Setup ++++++
! 1. pushover einrichten ( http://homematic-forum.de/forum/viewtopic.php?f=31&t=11579 )
! 2. cuxd Installation erforderlich
var USE_PUSHOVER = "ja"; ! das Übliche
var PUSH_CUXD_ID = "CUX2801001:2"; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?
var USERKENNUNG = "XXXXXXXXXXXXXXXXXXXXXXxx";
var TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var USERDEVICE = ""; ! welches eingerichtete Gerät soll die Meldung bekommen? leer = alle Geraete sonst Namen komma separiert
var RETRY = "30"; !wiederholungen des Alarm bei prio >1
var EXPIRE = "120"; ! wie lange bis verfaellt
var SOUND = "siren"; !Sound nach wahl siehe "https://pushover.net/api#sounds"
var HTML ="1"; ! 1 use html codes at the message
var PRIO = "1";
var PRIO_MAX = "-2"; ! siehe http://homematic-forum.de/forum/viewtopic.php?f=31&t=24618&start=530#p288205

!%u200B ++++++++ Pushsaver Setup ++++++++++++++++
var USE_PUSHSAVER = "nein"; ! das Übliche
string TITEL = "Betreff: Servicemeldung";
string PUSHSAVER_CUXD_ID = "CUX2801001:14";
string MELODIE = "6";
string ICON = "10";
string VIBRATION = "1";
string DEVICE = "++++++++";
string PRIVATEKEY = "+++++++++++++++++";



!+++++++ Setup Mail verschicken mit CUXD und Emailaddon ++++++
! 1. CUXD incl. exec Geraet sind installiert ( http://homematic-forum.de/forum/viewtopic.php?f=37&t=15298 )
! 2. Mailaddon ist installiert eingestellt und funktioniert ( http://www.homematic-inside.de/software/email )
! 3. Im TCL Reiter im MailAddon wird als erste Zeile "set serviceliste [encoding convertfrom utf-8 [lindex $argv 1]]" ohne Anfuehrungsstriche eingegeben
! 4. in Mailvorlage Nr deiner Wahl wird "$serviceliste" ohne Anfuehrungsstriche im Mailtextfeld eingegeben (was da noch steht ist uninteressant)
var USE_MAIL = "nein"; !   ja / nein schicken einer Mail direkt ueber das Script
var MAIL_ID = "01"; !  die VORHER praeparierte Mailvorlage 01 - 50 in der aktuellen Version des mailaddon
var MAIL_CUXD_ID = "CUX2801001:1"; !   die Serial des EXEC Geraete - wer nicht weiss was ich meine, einfach so lassen ist die Standard

!+++++++ Systemvariablen Setup ++++++
! 1. Vor Benutzung Systemvariable vom Typ Zeichenkette in CCU anlegen,
var USE_SYSVAR = "nein"; ! ja / nein Speichern der Ausgabe des Scriptes in Systemvariable
var SYSVAR_NAME = "Meldungen"; ! hier den Namen dieser Variablen eintragen


!+++++++ Eigentlich schon fertig mit dem Setup +++++++++++
!+++++ Batteriezuweisungen inklusive Anzahl !Bitte helfen und fehlende Geraete posten ++++++++++++++++
!+++++ noch nicht integrierte Geraete werden mit unbekannt ausgegeben ++++++++++++++++
string cr2016 = "HM-RC-4\tHM-RC-4-B\tHM-RC-Key3\tHM-RC-Key3-B\tHM-RC-P1\tHM-RC-Sec3\tHM-RC-Sec3-B";
string cr2032 = "HM-PB-2-WM\tHM-PB-4-WM\tHM-PBI-4-FM\tHM-SCI-3-FM\tHM-Sec-TiS\tHM-SwI-3-FM\tHM-Sec-TiS";
string lr14x2 = "HM-Sec-Sir-WM\tHM-OU-CFM-TW";
string lr44x2 = "HM-Sec-SC\tHM-Sec-SC2\tHM-Sec-SC-2\tHM-Sec-RHS";
string lr6x2 = "HM-CC-VD\tHM-CC-RT-DN\tHM-Sec-WDS\tHM-Sec-WDS-2\tHM-CC-TC\tHM-Dis-TD-T\tHB-UW-Sen-THPL-I\tHM-TC-IT-WM-W-EU\tHM-WDS40-TH-I\tHM-WDS40-TH-I-2\tHM-WDS10-TH-O\tHmIP-SMI\tHMIP-eTRV\tHM-WDS30-OT2-SM-2\tHmIP-SMO\tHmIP-SMO-A\tHmIP-SPI\tHmIP-STHD";
string lr6x3 = "HM-Sec-MDIR\tHM-Sec-MDIR-2\tHM-Sec-SD\tHM-Sec-Key\tHM-Sec-Key-S\tHM-Sec-Key-O\tHM-Sen-Wa-Od\tHM-Sen-MDIR\tHM-Sen-MDIR-O\tHM-Sen-MDIR-O-2\tHM-WDS100-C6-O\tHM-WDS100-C6-O-2\tHM-WDS100-C6-O-2\tHmIP-ASIR";
string lr6x4 = "HM-CCU-1\tHM-ES-TX-WM\tHM-WDC7000";
string lr3x1 = "HM-RC-4-2\tHM-RC-4-3\tHM-RC-Key4-2\tHM-RC-Key4-3\tHM-RC-Sec4-2\tHM-RC-Sec4-3\tHM-Sec-RHS-2\tHM-Sec-SCo\tHmIP-KRC4\tHmIP-KRCA\tHmIP-RC8\tHmIP-SRH\tHMIP-SWDO";
string lr3x2 = "HM-Dis-WM55\tHM-Dis-EP-WM55\tHM-PB-2-WM55\tHM-PB-2-WM55-2\tHM-PB-6-WM55\tHM-PBI-2-FM\tHM-RC-8\tHM-Sen-DB-PCB\tHM-Sen-EP\tHM-Sen-MDIR-SM\tHM-Sen-MDIR-WM55\tHM-TC-IT-WM-W-EU\tHM-WDS30-T-O\tHM-WDS30-OT2-SM\tHmIP-STH\tHMIP-WRC2\tHMIP-WRC6\tHMIP-WTH\tHMIP-WTH-2";
string lr3x3 = "HM-PB-4Dis-WM\tHM-PB-4Dis-WM-2\tHM-RC-Dis-H-x-EU\tHM-Sen-LI-O";
string lr3x3a = "HM-RC-19\tHM-RC-19-B\tHM-RC-12\tHM-RC-12-B\tHM-RC-12-W";
string block9 = "HM-LC-Sw1-Ba-PCB\tHM-LC-Sw4-PCB\tHM-MOD-EM-8\tHM-MOD-Re-8\tHM-Sen-RD-O\tHM-OU-CM-PCB\tHM-LC-Sw4-WM";
string fixed    = "HM-Sec-SD-2\tHMIP-SWSD";
string recharge = "HM-Sec-Win\tHM-Sec-SFA-SM";


!+++++++++ Setup nun aber wirklich zu Ende - ab hier Finger weg ;-) ++++++++++++++++++
if ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC")) { (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug [ALCHY ALLINScript START]"); } else {string stdout;string stderr; system.Exec("logger -t script -p user.debug [ALCHY ALLINScript se START]", &stdout, &stderr);}
if  ( dom.GetObject(41).Value() > dom.GetObject(41).LastValue() )   { boolean GO = true; string slist = "NEUE Servicemeldung\n" ;} else { string slist = "ALTE Servicemeldung\n";boolean GO = false; }

object oTmpArray = dom.GetObject(ID_SERVICES);
if(oTmpArray) {
string sTmp;
string sdesc;
string stest;
foreach(sTmp, oTmpArray.EnumIDs()) {
        object oTmp = dom.GetObject(sTmp);
           if (oTmp) {
         if(oTmp.IsTypeOf(OT_ALARMDP) && (oTmp.AlState() == asOncoming)) {
         boolean collect = true;
           object trigDP = dom.GetObject(oTmp.AlTriggerDP());
           object och = dom.GetObject((trigDP.Channel()));
           object odev = dom.GetObject((och.Device()));
           var ival = trigDP.Value();
          time sftime = oTmp.AlOccurrenceTime(); ! erste Meldezeit
          time sltime = oTmp.LastTriggerTime();!letze Meldezeit
      var sdesc = trigDP.HssType();
      var sserial = odev.Address();
if ((sdesc == "STICKY_UNREACH") && (ACCK == "ja")) { oTmp.AlReceipt(); collect = false;}

if ( (BLOCK.Find(sserial)<0)  && (collect) ) {

      ! Uebersetzen der Fehlermeldungen
       
      if (sdesc == "CONFIG_PENDING") {sdesc = "Konfigurationsdaten stehen zum Transfer an"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "LOWBAT") {sdesc = "Batteriestand niedrig"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "STICKY_UNREACH") {sdesc = "hatte Kommunikationsfehler"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "UNREACH") {sdesc = "hat Kommunikationsfehler"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "DEVICE_IN_BOOTLOADER"){sdesc = "Device startet neu"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "UPDATE_PENDING") {sdesc = "Update verfuegbar"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "U_SOURCE_FAIL") {sdesc = "Netzteil ausgefallen"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "USBH_POWERFAIL") {sdesc = "USB-Host deaktiviert"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "ERROR_SABOTAGE") {sdesc = "Sabotage"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "STICKY_SABOTAGE") {sdesc = "hatte Sabotagemeldung"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "ERROR_REDUCED"){sdesc = "Temperatur kritisch (Lastabsenkung)."; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}

        ! Sonderfehler
        if (sdesc == "ERROR") {
        if((odev.HssType()=="HM-Sec-RHS") || (odev.HssType()=="HM-Sec-SC") || (odev.HssType()=="HM-Sec-SC-2") || (odev.HssType()=="HM-Sec-SCo") || (odev.HssType()=="HM-Sec-MD") || (odev.HssType()=="HM-Sec-MDIR") || (odev.HssType()=="HM-Sec-MDIR-2") || (odev.HssType()=="HM-Sec-Sir-WM"))
           {
              if (ival == 7){sdesc = "Sabotage"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
            }
            if ((odev.HssType()=="HM-Sec-Key") || (odev.HssType()=="HM-Sec-Key-S") || (odev.HssType()=="HM-Sec-Key-O"))
            {
              if (ival == 1){sdesc = "Einkuppeln fehlgeschlagen"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 2){sdesc = "Motorlauf abgebrochen"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
            }
           if (odev.HssType()=="HM-CC-VD")
           {
              if (ival == 1){sdesc = "Ventil Antrieb blockiert"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 2){sdesc = "Ventil nicht montiert"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 3){sdesc = "Stellbereich zu klein"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 4){sdesc = "Batteriestand niedrig"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
           }
        }

        if (sdesc == "FAULT_REPORTING") {
           if (odev.HssType()=="HM-CC-RT-DN")
           {
              if (ival == 1) {sdesc = "Ventil blockiert."; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 2) {sdesc = "Einstellbereich Ventil zu gross"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 3) {sdesc = "Einstellbereich Ventil zu klein"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 4) {sdesc = "Kommunikationsfehler"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 6) {sdesc = "Batteriestand niedrig"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 7) {sdesc = "Fehlstellung Ventil"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
           }
        }
        if (sdesc == "Batteriestand niedrig") {
           string batlink = "unbekannt";
           string index;
           foreach (index, cr2016) {if (index == odev.HssType()) {batlink = "1x leere CR2016";}}
           foreach (index, cr2032) {if (index == odev.HssType()) {batlink = "1x leere CR2032";}}
           foreach (index, lr14x2) {if (index == odev.HssType()) {batlink = "2x leere LR14";}}
           foreach (index, lr44x2) {if (index == odev.HssType()) {batlink = "2x leere LR44/AG13";}}
           foreach (index, lr6x2) {if (index == odev.HssType()) {batlink = "2x leere LR6/AA";}}
           foreach (index, lr6x3) {if (index == odev.HssType()) {batlink = "3x leere LR6/AA";}}
           foreach (index, lr6x4) {if (index == odev.HssType()) {batlink = "4x leere LR6/AA";}}
           foreach (index, lr3x1) {if (index == odev.HssType()) {batlink = "1x leere LR3/AAA";}}
           foreach (index, lr3x2) {if (index == odev.HssType()) {batlink = "2x leere LR3/AAA";}}
           foreach (index, lr3x3) {if (index == odev.HssType()) {batlink = "3x leere LR3/AAA";}}
           foreach (index, lr3x3a) {if (index == odev.HssType()) {batlink = "3x leere AAA Akkus - bitte laden";}}
           foreach (index, block9) {if (index == odev.HssType()) {batlink = "9Volt Block leer oder unbestimmt";}}
         foreach (index, fixed) {if (index == odev.HssType()) {batlink = "Festbatterie leer";}}
         foreach (index, recharge) {if (index == odev.HssType()) {batlink = "Akku entladen - bitte aufladen";}}
         
   
       slist = slist   #odev.Name() # " : " # batlink; if ( WITHTIME == "ja") { slist = slist #" seit: "#sftime.Format("%d.%m.%y %H:%M") #"("#sltime.Format("%d.%m.%y %H:%M")#")";}
       }
       else
       {
       slist = slist   #odev.Name() # " : " # sdesc; if ( WITHTIME == "ja") { slist = slist #" seit: "#sftime.Format("%d.%m.%y %H:%M") #"("#sltime.Format("%d.%m.%y %H:%M")#")" ;}
      }
     
}
} } }
if (slist.Length() == 20){
if ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC")) { (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug [ALCHY ALLINScript Abbruch BLOCK]"); } else {string stdout;string stderr; system.Exec("logger -t script -p user.debug [ALCHY ALLINScript se Abbruch BLOCK]", &stdout, &stderr);}
quit;}


! 04.04.2017
! alte langsame Uebersetzung entfernt Leerzeichen kein Problem mehr bei Mail/Pushover/Telegram/ aber bei Pushbullet & Prowl?
! Sonderzeichen u.U. problematisch bei Pushover & Telegram daher Texte umgestellt
! 02.05.2017 neue Uebersetzung hinzugefügt
string Ersetzen = " ;ü;ä;ö;Ü;Ä;Ö;ß";
string ErsetzenDurch = "%20;%C3%BC;%C3%A4;%C3%B6;%C3%9C;%C3%84;%C3%9F";
string message = slist;integer Pos = 0;integer Index = 0;string Split = "";boolean Loop = true;
foreach (Split, Ersetzen.Split(";")) {
Loop = true;
while (Loop) {
Pos = message.Find(Split);
if (Pos == -1) { Loop = false;
}else{message = message.Substr(0,Pos) # ErsetzenDurch.StrValueByIndex(";",Index)  # message.Substr(Pos + Split.Length() , ((message.Length() - Pos) - Split.Length())  );
}}
Index = Index + 1;
}

! Verarbeiten der Daten zum Versand
if (GO)  {
if ( (USE_MAIL == "ja")&&( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#MAIL_CUXD_ID#".CMD_EXEC")) ) { (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#MAIL_CUXD_ID#".CMD_EXEC").State("/etc/config/addons/email/email "#MAIL_ID#" '"#slist#"'"); }
if ( (USE_PUSHOVER == "ja") &&( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSH_CUXD_ID#".CMD_EXEC")) ){ (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSH_CUXD_ID#".CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -s -k -d token='"#TOKEN#"' -d user='"#USERKENNUNG#"' -d device='"#USERDEVICE#"' -d html='"#HTML#"' -d message='"#message#"' -d priority='"#PRIO_MAX#"' -d sound='"#SOUND#"' -d retry='"#RETRY#"' -d expire='"#EXPIRE#"' https://api.pushover.net/1/messages.json"); }
if ( (USE_PUSHBULLET == "ja") &&( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSHBULLET_CUXD_ID#".CMD_EXEC")) ){ (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSHBULLET_CUXD_ID#".CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -u '"#USER#"' -k -d device_iden='"#DEVICE_IDEN#"' -d type=note -d title='"#TITEL#"' -d body='"#slist#"' https://api.pushbullet.com/api/pushes"); }
if ( (USE_TELEGRAM == "ja") &&( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#TELEGRAM_CUXD_ID#".CMD_EXEC")) ){ (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#TELEGRAM_CUXD_ID#".CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -s -k https://api.telegram.org/bot"#BOTAPI#"/sendMessage -d text='"#message#"' -d chat_id="#CHATID); }
if ( (USE_PROWL == "ja") && ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PROWL_CUXD_ID#".CMD_EXEC")) ){ string url="http://prowl.weks.net/publicapi/add?apikey="#API_KEY#"&application="#ANWENDUNG#"&event="#KATEGORIE#"&priority="#PRIO_MAX#"&description="#slist#"&timeout="#TIME_OUT#""; (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PROWL_CUXD_ID#".CMD_EXEC").State("wget -q -O - '"#url#"'"); }
if ( (USE_PUSHSAVER == "ja") && ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSHSAVER_CUXD_ID#".CMD_EXEC")) ){ (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSHSAVER_CUXD_ID#".CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -s -k -d k='"#PRIVATEKEY#"' -d t='"#TITEL#"' -d m='"#message#"' -d s='"#MELODIE#"' -d i='"#ICON#"' -d v='"#VIBRATION#"' -d d='"#DEVICE#"' https://www.pushsafer.com/api");}
if ( (USE_SYSVAR == "ja") && (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME) ){ (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME).State(slist); }
} else { if ( (USE_SYSVAR == "ja") && (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME) ){ (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME).State(slist); }}
if ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC")) { (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug [ALCHY ALLINScript ENDE]"); } else {string stdout;string stderr; system.Exec("logger -t script -p user.debug [ALCHY ALLINScript se ENDE]", &stdout, &stderr);}
}


Edit:

Quelle und neuere Version

https://homematic-forum.de/forum/viewtopic.php?t=24618
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Depechem

Zitat von: Kai-Alfonso am 08 November 2018, 14:23:00
Vielleicht kannst Du aus diesem CCU Programm was ableiten, was Dir hilft? Bei mir verschickt es Alarmmeldungen per Pushover, kann aber auch Email

! Servicemeldungen auslesen und weiter verarbeiten
! v1.95 (c) by alchy

!++++++ SETUP ++++++
! Bitte in Ruhe die naechsten Zeilen durcharbeiten
var WITHTIME = "ja"; ! Wenn ja, wird die Alarmzeit Zeit mitgesendet
! +++++ Servicemeldungen "Kommunikation war gestoert" bestaetigen? ++++++
var ACCK = "ja"; ! ja oder nein, um anstehende "war Kommunikationsstoerungen" zu bestaetigen
! HM Geraet, wessen Systemmeldungen nicht verschickt werden sollen
var BLOCK = ""; ! Seriennummern von Geraeten, welche durch das Script ignoriert werden sollen

!++++++ PUSHBULLET +++++++++
var USE_PUSHBULLET = "nein"; ! ja oder nein fuer die Verwendung PUSHBULLET direkt im Script;
var USER ="++++++++++++++++++++"; ! selbsterklaerend
var DEVICE_IDEN = "+++++++++++++++++++";
var PUSHBULLET_CUXD_ID = "CUX2801001:4"; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?
var TITEL = "Homematic"; !kann jeder nennen wie er will

!++++++ TELEGRAM +++++++++
! Einrichtung siehe https://www.christian-luetgens.de/homematic/telegram/botfather/Chat-Bot.htm
var USE_TELEGRAM = "nein"; ! ja oder nein fuer die Verwendung TELEGRAM direkt im Script;
var CHATID = "++++++++"; ! selbsterklärend
var BOTAPI = "+++++++++++"; ! dito
var TELEGRAM_CUXD_ID = "CUX2801001:2"; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?

!++++++ Prowl Setup fuer die Apfeljuenger +++++++++
! 1. Prowl einrichten ( http://homematic-forum.de/forum/viewtopic.php?f=19&t=7797 )
! 2. cuxd Installation erforderlich
var USE_PROWL = "nein"; ! ja oder nein fuer die Verwendung prowl direkt im Script;
var API_KEY ="DEIN API KEY"; ! selbsterklaerend
var PROWL_CUXD_ID = "CUX2801001:3"; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?
var ANWENDUNG = "Homematic"; !kann jeder nennen wie er will
var KATEGORIE ="Servicemeldung"; !kann jeder nennen wie er will
var TIME_OUT = "10";

!+++++++ Pushover Setup ++++++
! 1. pushover einrichten ( http://homematic-forum.de/forum/viewtopic.php?f=31&t=11579 )
! 2. cuxd Installation erforderlich
var USE_PUSHOVER = "ja"; ! das Übliche
var PUSH_CUXD_ID = "CUX2801001:2"; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?
var USERKENNUNG = "Xxxxxxxxxx";
var TOKEN = "xxxxxxx";
var USERDEVICE = ""; ! welches eingerichtete Gerät soll die Meldung bekommen? leer = alle Geraete sonst Namen komma separiert
var RETRY = "30"; !wiederholungen des Alarm bei prio >1
var EXPIRE = "120"; ! wie lange bis verfaellt
var SOUND = "siren"; !Sound nach wahl siehe "https://pushover.net/api#sounds"
var HTML ="1"; ! 1 use html codes at the message
var PRIO = "1";
var PRIO_MAX = "-2"; ! siehe http://homematic-forum.de/forum/viewtopic.php?f=31&t=24618&start=530#p288205

!%u200B ++++++++ Pushsaver Setup ++++++++++++++++
var USE_PUSHSAVER = "nein"; ! das Übliche
string TITEL = "Betreff: Servicemeldung";
string PUSHSAVER_CUXD_ID = "CUX2801001:14";
string MELODIE = "6";
string ICON = "10";
string VIBRATION = "1";
string DEVICE = "++++++++";
string PRIVATEKEY = "+++++++++++++++++";



!+++++++ Setup Mail verschicken mit CUXD und Emailaddon ++++++
! 1. CUXD incl. exec Geraet sind installiert ( http://homematic-forum.de/forum/viewtopic.php?f=37&t=15298 )
! 2. Mailaddon ist installiert eingestellt und funktioniert ( http://www.homematic-inside.de/software/email )
! 3. Im TCL Reiter im MailAddon wird als erste Zeile "set serviceliste [encoding convertfrom utf-8 [lindex $argv 1]]" ohne Anfuehrungsstriche eingegeben
! 4. in Mailvorlage Nr deiner Wahl wird "$serviceliste" ohne Anfuehrungsstriche im Mailtextfeld eingegeben (was da noch steht ist uninteressant)
var USE_MAIL = "nein"; !   ja / nein schicken einer Mail direkt ueber das Script
var MAIL_ID = "01"; !  die VORHER praeparierte Mailvorlage 01 - 50 in der aktuellen Version des mailaddon
var MAIL_CUXD_ID = "CUX2801001:1"; !   die Serial des EXEC Geraete - wer nicht weiss was ich meine, einfach so lassen ist die Standard

!+++++++ Systemvariablen Setup ++++++
! 1. Vor Benutzung Systemvariable vom Typ Zeichenkette in CCU anlegen,
var USE_SYSVAR = "nein"; ! ja / nein Speichern der Ausgabe des Scriptes in Systemvariable
var SYSVAR_NAME = "Meldungen"; ! hier den Namen dieser Variablen eintragen


!+++++++ Eigentlich schon fertig mit dem Setup +++++++++++
!+++++ Batteriezuweisungen inklusive Anzahl !Bitte helfen und fehlende Geraete posten ++++++++++++++++
!+++++ noch nicht integrierte Geraete werden mit unbekannt ausgegeben ++++++++++++++++
string cr2016 = "HM-RC-4\tHM-RC-4-B\tHM-RC-Key3\tHM-RC-Key3-B\tHM-RC-P1\tHM-RC-Sec3\tHM-RC-Sec3-B";
string cr2032 = "HM-PB-2-WM\tHM-PB-4-WM\tHM-PBI-4-FM\tHM-SCI-3-FM\tHM-Sec-TiS\tHM-SwI-3-FM\tHM-Sec-TiS";
string lr14x2 = "HM-Sec-Sir-WM\tHM-OU-CFM-TW";
string lr44x2 = "HM-Sec-SC\tHM-Sec-SC2\tHM-Sec-SC-2\tHM-Sec-RHS";
string lr6x2 = "HM-CC-VD\tHM-CC-RT-DN\tHM-Sec-WDS\tHM-Sec-WDS-2\tHM-CC-TC\tHM-Dis-TD-T\tHB-UW-Sen-THPL-I\tHM-TC-IT-WM-W-EU\tHM-WDS40-TH-I\tHM-WDS40-TH-I-2\tHM-WDS10-TH-O\tHmIP-SMI\tHMIP-eTRV\tHM-WDS30-OT2-SM-2\tHmIP-SMO\tHmIP-SMO-A\tHmIP-SPI\tHmIP-STHD";
string lr6x3 = "HM-Sec-MDIR\tHM-Sec-MDIR-2\tHM-Sec-SD\tHM-Sec-Key\tHM-Sec-Key-S\tHM-Sec-Key-O\tHM-Sen-Wa-Od\tHM-Sen-MDIR\tHM-Sen-MDIR-O\tHM-Sen-MDIR-O-2\tHM-WDS100-C6-O\tHM-WDS100-C6-O-2\tHM-WDS100-C6-O-2\tHmIP-ASIR";
string lr6x4 = "HM-CCU-1\tHM-ES-TX-WM\tHM-WDC7000";
string lr3x1 = "HM-RC-4-2\tHM-RC-4-3\tHM-RC-Key4-2\tHM-RC-Key4-3\tHM-RC-Sec4-2\tHM-RC-Sec4-3\tHM-Sec-RHS-2\tHM-Sec-SCo\tHmIP-KRC4\tHmIP-KRCA\tHmIP-RC8\tHmIP-SRH\tHMIP-SWDO";
string lr3x2 = "HM-Dis-WM55\tHM-Dis-EP-WM55\tHM-PB-2-WM55\tHM-PB-2-WM55-2\tHM-PB-6-WM55\tHM-PBI-2-FM\tHM-RC-8\tHM-Sen-DB-PCB\tHM-Sen-EP\tHM-Sen-MDIR-SM\tHM-Sen-MDIR-WM55\tHM-TC-IT-WM-W-EU\tHM-WDS30-T-O\tHM-WDS30-OT2-SM\tHmIP-STH\tHMIP-WRC2\tHMIP-WRC6\tHMIP-WTH\tHMIP-WTH-2";
string lr3x3 = "HM-PB-4Dis-WM\tHM-PB-4Dis-WM-2\tHM-RC-Dis-H-x-EU\tHM-Sen-LI-O";
string lr3x3a = "HM-RC-19\tHM-RC-19-B\tHM-RC-12\tHM-RC-12-B\tHM-RC-12-W";
string block9 = "HM-LC-Sw1-Ba-PCB\tHM-LC-Sw4-PCB\tHM-MOD-EM-8\tHM-MOD-Re-8\tHM-Sen-RD-O\tHM-OU-CM-PCB\tHM-LC-Sw4-WM";
string fixed    = "HM-Sec-SD-2\tHMIP-SWSD";
string recharge = "HM-Sec-Win\tHM-Sec-SFA-SM";


!+++++++++ Setup nun aber wirklich zu Ende - ab hier Finger weg ;-) ++++++++++++++++++
if ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC")) { (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug [ALCHY ALLINScript START]"); } else {string stdout;string stderr; system.Exec("logger -t script -p user.debug [ALCHY ALLINScript se START]", &stdout, &stderr);}
if  ( dom.GetObject(41).Value() > dom.GetObject(41).LastValue() )   { boolean GO = true; string slist = "NEUE Servicemeldung\n" ;} else { string slist = "ALTE Servicemeldung\n";boolean GO = false; }

object oTmpArray = dom.GetObject(ID_SERVICES);
if(oTmpArray) {
string sTmp;
string sdesc;
string stest;
foreach(sTmp, oTmpArray.EnumIDs()) {
        object oTmp = dom.GetObject(sTmp);
           if (oTmp) {
         if(oTmp.IsTypeOf(OT_ALARMDP) && (oTmp.AlState() == asOncoming)) {
         boolean collect = true;
           object trigDP = dom.GetObject(oTmp.AlTriggerDP());
           object och = dom.GetObject((trigDP.Channel()));
           object odev = dom.GetObject((och.Device()));
           var ival = trigDP.Value();
          time sftime = oTmp.AlOccurrenceTime(); ! erste Meldezeit
          time sltime = oTmp.LastTriggerTime();!letze Meldezeit
      var sdesc = trigDP.HssType();
      var sserial = odev.Address();
if ((sdesc == "STICKY_UNREACH") && (ACCK == "ja")) { oTmp.AlReceipt(); collect = false;}

if ( (BLOCK.Find(sserial)<0)  && (collect) ) {

      ! Uebersetzen der Fehlermeldungen
       
      if (sdesc == "CONFIG_PENDING") {sdesc = "Konfigurationsdaten stehen zum Transfer an"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "LOWBAT") {sdesc = "Batteriestand niedrig"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "STICKY_UNREACH") {sdesc = "hatte Kommunikationsfehler"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "UNREACH") {sdesc = "hat Kommunikationsfehler"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "DEVICE_IN_BOOTLOADER"){sdesc = "Device startet neu"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "UPDATE_PENDING") {sdesc = "Update verfuegbar"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "U_SOURCE_FAIL") {sdesc = "Netzteil ausgefallen"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "USBH_POWERFAIL") {sdesc = "USB-Host deaktiviert"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "ERROR_SABOTAGE") {sdesc = "Sabotage"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "STICKY_SABOTAGE") {sdesc = "hatte Sabotagemeldung"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
      if (sdesc == "ERROR_REDUCED"){sdesc = "Temperatur kritisch (Lastabsenkung)."; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}

        ! Sonderfehler
        if (sdesc == "ERROR") {
        if((odev.HssType()=="HM-Sec-RHS") || (odev.HssType()=="HM-Sec-SC") || (odev.HssType()=="HM-Sec-SC-2") || (odev.HssType()=="HM-Sec-SCo") || (odev.HssType()=="HM-Sec-MD") || (odev.HssType()=="HM-Sec-MDIR") || (odev.HssType()=="HM-Sec-MDIR-2") || (odev.HssType()=="HM-Sec-Sir-WM"))
           {
              if (ival == 7){sdesc = "Sabotage"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
            }
            if ((odev.HssType()=="HM-Sec-Key") || (odev.HssType()=="HM-Sec-Key-S") || (odev.HssType()=="HM-Sec-Key-O"))
            {
              if (ival == 1){sdesc = "Einkuppeln fehlgeschlagen"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 2){sdesc = "Motorlauf abgebrochen"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
            }
           if (odev.HssType()=="HM-CC-VD")
           {
              if (ival == 1){sdesc = "Ventil Antrieb blockiert"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 2){sdesc = "Ventil nicht montiert"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 3){sdesc = "Stellbereich zu klein"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 4){sdesc = "Batteriestand niedrig"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
           }
        }

        if (sdesc == "FAULT_REPORTING") {
           if (odev.HssType()=="HM-CC-RT-DN")
           {
              if (ival == 1) {sdesc = "Ventil blockiert."; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 2) {sdesc = "Einstellbereich Ventil zu gross"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 3) {sdesc = "Einstellbereich Ventil zu klein"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 4) {sdesc = "Kommunikationsfehler"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 6) {sdesc = "Batteriestand niedrig"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
              if (ival == 7) {sdesc = "Fehlstellung Ventil"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
           }
        }
        if (sdesc == "Batteriestand niedrig") {
           string batlink = "unbekannt";
           string index;
           foreach (index, cr2016) {if (index == odev.HssType()) {batlink = "1x leere CR2016";}}
           foreach (index, cr2032) {if (index == odev.HssType()) {batlink = "1x leere CR2032";}}
           foreach (index, lr14x2) {if (index == odev.HssType()) {batlink = "2x leere LR14";}}
           foreach (index, lr44x2) {if (index == odev.HssType()) {batlink = "2x leere LR44/AG13";}}
           foreach (index, lr6x2) {if (index == odev.HssType()) {batlink = "2x leere LR6/AA";}}
           foreach (index, lr6x3) {if (index == odev.HssType()) {batlink = "3x leere LR6/AA";}}
           foreach (index, lr6x4) {if (index == odev.HssType()) {batlink = "4x leere LR6/AA";}}
           foreach (index, lr3x1) {if (index == odev.HssType()) {batlink = "1x leere LR3/AAA";}}
           foreach (index, lr3x2) {if (index == odev.HssType()) {batlink = "2x leere LR3/AAA";}}
           foreach (index, lr3x3) {if (index == odev.HssType()) {batlink = "3x leere LR3/AAA";}}
           foreach (index, lr3x3a) {if (index == odev.HssType()) {batlink = "3x leere AAA Akkus - bitte laden";}}
           foreach (index, block9) {if (index == odev.HssType()) {batlink = "9Volt Block leer oder unbestimmt";}}
         foreach (index, fixed) {if (index == odev.HssType()) {batlink = "Festbatterie leer";}}
         foreach (index, recharge) {if (index == odev.HssType()) {batlink = "Akku entladen - bitte aufladen";}}
         
   
       slist = slist   #odev.Name() # " : " # batlink; if ( WITHTIME == "ja") { slist = slist #" seit: "#sftime.Format("%d.%m.%y %H:%M") #"("#sltime.Format("%d.%m.%y %H:%M")#")";}
       }
       else
       {
       slist = slist   #odev.Name() # " : " # sdesc; if ( WITHTIME == "ja") { slist = slist #" seit: "#sftime.Format("%d.%m.%y %H:%M") #"("#sltime.Format("%d.%m.%y %H:%M")#")" ;}
      }
     
}
} } }
if (slist.Length() == 20){
if ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC")) { (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug [ALCHY ALLINScript Abbruch BLOCK]"); } else {string stdout;string stderr; system.Exec("logger -t script -p user.debug [ALCHY ALLINScript se Abbruch BLOCK]", &stdout, &stderr);}
quit;}


! 04.04.2017
! alte langsame Uebersetzung entfernt Leerzeichen kein Problem mehr bei Mail/Pushover/Telegram/ aber bei Pushbullet & Prowl?
! Sonderzeichen u.U. problematisch bei Pushover & Telegram daher Texte umgestellt
! 02.05.2017 neue Uebersetzung hinzugefügt
string Ersetzen = " ;ü;ä;ö;Ü;Ä;Ö;ß";
string ErsetzenDurch = "%20;%C3%BC;%C3%A4;%C3%B6;%C3%9C;%C3%84;%C3%9F";
string message = slist;integer Pos = 0;integer Index = 0;string Split = "";boolean Loop = true;
foreach (Split, Ersetzen.Split(";")) {
Loop = true;
while (Loop) {
Pos = message.Find(Split);
if (Pos == -1) { Loop = false;
}else{message = message.Substr(0,Pos) # ErsetzenDurch.StrValueByIndex(";",Index)  # message.Substr(Pos + Split.Length() , ((message.Length() - Pos) - Split.Length())  );
}}
Index = Index + 1;
}

! Verarbeiten der Daten zum Versand
if (GO)  {
if ( (USE_MAIL == "ja")&&( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#MAIL_CUXD_ID#".CMD_EXEC")) ) { (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#MAIL_CUXD_ID#".CMD_EXEC").State("/etc/config/addons/email/email "#MAIL_ID#" '"#slist#"'"); }
if ( (USE_PUSHOVER == "ja") &&( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSH_CUXD_ID#".CMD_EXEC")) ){ (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSH_CUXD_ID#".CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -s -k -d token='"#TOKEN#"' -d user='"#USERKENNUNG#"' -d device='"#USERDEVICE#"' -d html='"#HTML#"' -d message='"#message#"' -d priority='"#PRIO_MAX#"' -d sound='"#SOUND#"' -d retry='"#RETRY#"' -d expire='"#EXPIRE#"' https://api.pushover.net/1/messages.json"); }
if ( (USE_PUSHBULLET == "ja") &&( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSHBULLET_CUXD_ID#".CMD_EXEC")) ){ (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSHBULLET_CUXD_ID#".CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -u '"#USER#"' -k -d device_iden='"#DEVICE_IDEN#"' -d type=note -d title='"#TITEL#"' -d body='"#slist#"' https://api.pushbullet.com/api/pushes"); }
if ( (USE_TELEGRAM == "ja") &&( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#TELEGRAM_CUXD_ID#".CMD_EXEC")) ){ (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#TELEGRAM_CUXD_ID#".CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -s -k https://api.telegram.org/bot"#BOTAPI#"/sendMessage -d text='"#message#"' -d chat_id="#CHATID); }
if ( (USE_PROWL == "ja") && ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PROWL_CUXD_ID#".CMD_EXEC")) ){ string url="http://prowl.weks.net/publicapi/add?apikey="#API_KEY#"&application="#ANWENDUNG#"&event="#KATEGORIE#"&priority="#PRIO_MAX#"&description="#slist#"&timeout="#TIME_OUT#""; (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PROWL_CUXD_ID#".CMD_EXEC").State("wget -q -O - '"#url#"'"); }
if ( (USE_PUSHSAVER == "ja") && ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSHSAVER_CUXD_ID#".CMD_EXEC")) ){ (dom.GetObject(ID_DATAPOINTS)).Get("CUxD."#PUSHSAVER_CUXD_ID#".CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -s -k -d k='"#PRIVATEKEY#"' -d t='"#TITEL#"' -d m='"#message#"' -d s='"#MELODIE#"' -d i='"#ICON#"' -d v='"#VIBRATION#"' -d d='"#DEVICE#"' https://www.pushsafer.com/api");}
if ( (USE_SYSVAR == "ja") && (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME) ){ (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME).State(slist); }
} else { if ( (USE_SYSVAR == "ja") && (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME) ){ (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME).State(slist); }}
if ( (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC")) { (dom.GetObject(ID_DATAPOINTS)).Get("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug [ALCHY ALLINScript ENDE]"); } else {string stdout;string stderr; system.Exec("logger -t script -p user.debug [ALCHY ALLINScript se ENDE]", &stdout, &stderr);}
}


Edit:

Quelle und neuere Version

https://homematic-forum.de/forum/viewtopic.php?t=24618

Danke dir, habe es laut dem link und deinen Einstellungen mal getestet. Leider kommen aber nur "Kommunikatiosfehler" der Servicemeldungen durch.
Die gewünschten Alarmmeldungen "S.USV-Alarm" gar nicht.

RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

zap

Reduziere das Script mal auf das Wesentliche und führe es auf der CCU unter Programme/Script testen aus:

integer c = 0;
object oTmpArray = dom.GetObject(ID_SERVICES);
if(oTmpArray) {
  string sTmp;
  string sdesc;
  string stest;
  foreach(sTmp, oTmpArray.EnumIDs()) {
    object oTmp = dom.GetObject(sTmp);
    if (oTmp) {
      if(oTmp.IsTypeOf(OT_ALARMDP) && (oTmp.AlState() == asOncoming)) {
        boolean collect = true;
        object trigDP = dom.GetObject(oTmp.AlTriggerDP());
        object och = dom.GetObject((trigDP.Channel()));
        object odev = dom.GetObject((och.Device()));
        var ival = trigDP.Value();
        time sftime = oTmp.AlOccurrenceTime();
        time sltime = oTmp.LastTriggerTime();
        var sdesc = trigDP.HssType();
        var sserial = odev.Address();
        c = c+1;
        WriteLine(sftime # ";" # sltime # ";" # sdesc # ";" # sserial);
      }
    }
  }
  Write(c);
}
else {
  Write("ERROR");
}


Ggf. baue ich das noch in HMCCU ein.
2xCCU3 mit ca. 100 Aktoren, Sensoren
Entwicklung: FHEM auf Proxmox Debian VM
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: HMCCU, (Fully, AndroidDB)

Kai-Alfonso

Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Depechem

Zitat von: zap am 09 November 2018, 08:14:58
Reduziere das Script mal auf das Wesentliche und führe es auf der CCU unter Programme/Script testen aus:

integer c = 0;
object oTmpArray = dom.GetObject(ID_SERVICES);
if(oTmpArray) {
  string sTmp;
  string sdesc;
  string stest;
  foreach(sTmp, oTmpArray.EnumIDs()) {
    object oTmp = dom.GetObject(sTmp);
    if (oTmp) {
      if(oTmp.IsTypeOf(OT_ALARMDP) && (oTmp.AlState() == asOncoming)) {
        boolean collect = true;
        object trigDP = dom.GetObject(oTmp.AlTriggerDP());
        object och = dom.GetObject((trigDP.Channel()));
        object odev = dom.GetObject((och.Device()));
        var ival = trigDP.Value();
        time sftime = oTmp.AlOccurrenceTime();
        time sltime = oTmp.LastTriggerTime();
        var sdesc = trigDP.HssType();
        var sserial = odev.Address();
        c = c+1;
        WriteLine(sftime # ";" # sltime # ";" # sdesc # ";" # sserial);
      }
    }
  }
  Write(c);
}
else {
  Write("ERROR");
}


Ggf. baue ich das noch in HMCCU ein.


ich habe deinen Skript in der CCU getestet.
Die Ausgabe in der CCU  bringt keine Fehler.

Es wäre super wenn du etwas in HMCCU implementieren könntest.
Wenn du noch Infos benötigst gib bescheid.

Wäre auch schön wenn du uns auf dem Laufenden halten könntest.

Vile Grüße
Thomas
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

zap

Zitat von: Depechem am 09 November 2018, 10:46:44
ich habe deinen Skript in der CCU getestet.
Die Ausgabe in der CCU  bringt keine Fehler.

Steht denn in der CCU aktuell ein Fehler an?
Alarm- oder Servicemeldung?
2xCCU3 mit ca. 100 Aktoren, Sensoren
Entwicklung: FHEM auf Proxmox Debian VM
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: HMCCU, (Fully, AndroidDB)

Depechem

Zitat von: zap am 09 November 2018, 10:49:20
Steht denn in der CCU aktuell ein Fehler an?
Alarm- oder Servicemeldung?


Ich kann die CCU mal vom Strom trennen damit kommt eine Alarmmeldung der S.USV
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

Depechem

wenn ich eine Alarmmeldung in der CCU anstehen habe und in deinem Skripts bei "Skript bearbeiten" auf "Fehlerüberprüfun" und "Ausführen" klicke kommt folgende Zeile
2018-11-09 10:56:00;2018-11-09 10:56:46;UNREACH;0001D8A98EFFFD
1


wobei ich gerade mitbekomme habe, das es sich dabei scheinbar nicht um die Alarmmeldung bezieht, sondern um eine Servicemeldung.

ICh glaube ich habe herausgefunden das, wenn der Netzstrom weg ist und nur noch über die S.USV gespeist wird, automatisch das Funkmodul nicht mehr HMIP sendet(bzw. die Funkreichweite extrem abnimmt)  :o
Somit kommt eine Servicemeldung
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

BadenPower

Zitat von: zap am 09 November 2018, 08:14:58
Reduziere das Script mal auf das Wesentliche und führe es auf der CCU unter Programme/Script testen aus:
Das Skript hat mehrere Haken:

1. Es liest keine Alarmmeldungen, sondern nur Servicemeldungen aus.
2. AlTriggerDP() muss nicht zwangsläufig eine Objekt-ID enthalten, was in der Folge zu SkriptRuntimeErrors führen kann, da danach mit trigDP.Value() ein nichtvorhandenes Objekt angesprochen werden soll.
3. Das auslösende Objekt versteckt sich nicht unbedingt in AlTriggerDP().
4. HssType() auf das eventuell vorhanden Datenpunkt-Objekt vom Typ OT_HSSDP fünktioniert zwar (noch), ist aber keine gültige Objektmethode des Typs OT_HSSDP. Die richtige Methode würde .HSSID() lauten.


viele Grüße
BadenPower
.
Zitat eines Users per PN:
Die Dummheit eines Forums, vor allem deren Nutzer, läßt sich daran ablesen, wie oft Personen als Troll bezeichnet werden, wenn sie offenkundige Fehlverhalten von anderen Benutzern öffentlich machen.

Depechem

RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

zap

es steht im Backlog, allerdings stehen da auch viele Dinge drin, die wichtiger sind.

Außerdem mache ich das hier in meiner eng bemessenen Freizeit, soll heißen, dann wenn ich gerade nichts anderes vorhabe, das Wetter zu schlecht ist zum Fahrradfahren usw. ;-)

Ach ja, und nebenher gehe ich noch Arbeiten um den ganzen Smarthome-Zoo zu finanzieren.

2xCCU3 mit ca. 100 Aktoren, Sensoren
Entwicklung: FHEM auf Proxmox Debian VM
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: HMCCU, (Fully, AndroidDB)