Homematic: How to get the service messages?

Hey there,

I would like to bind the CCU2 service messages to an openhab item.

Is there any way how it can be done?

Greetings Nic

Any new for this topic?
does anybody have a solution?

I am not sure whether the CCU send events for service message all. So maybe it’s not possible to get these messages.
Do you know whether it’s possible @gerrieg

Found some CCU scripts which shall write service messages in system variables. These could be read though Gateway-Extras Thing.
Unfortunately these script seems not to work. I am not getting anything visible in system variable.
Below the script, just in case somebody can have a look at it. I m not so familiar with CCU scripts.

! nServicemeldungen auslesen und weiter verarbeiten
! v1.8 (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 = "nein"; ! ja oder nein, um anstehende "war Kommunikationsstoerungen" zu bestaetigen
! HM Geraet, wessen Systemmeldungen nicht verschickt werden sollen
var BLOCK = "JEQ009311 NEP987654321"; ! 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 +++++++++
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 = "nein"; ! das Ăśbliche
var PUSH_CUXD_ID = "CUX2801001:2"; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?
var USERKENNUNG = "++++++++++++++++++";
var TOKEN = "+++++++++++++++++";
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

!+++++++ 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 = "ja"; ! ja / nein Speichern der Ausgabe des Scriptes in Systemvariable
var SYSVAR_NAME = "ServiceMeldungenNow"; ! 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;}
! Testausgabe
stest = stest #"oTmp:" #oTmp # "\r\t trigDP: " #trigDP #"\r\t Kanal:" #och.Name() #"\r\t Gerät:" #odev.Name() #"\r\t ival:" #ival #"\r\t erste Meldezeit:" #sftime #"\r\t letzte Meldezeit: "# sltime #"\r\t sdesc:" #sdesc #"\r\t sserial:" #sserial#"\r\n"; 

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  #"\n"  #odev.Name() # " : " # batlink; if ( WITHTIME == "ja") { slist = slist #" seit: "#sftime #"("#sltime#")";}
       }
       else
       {
       slist = slist  #"\n"  #odev.Name() # " : " # sdesc; if ( WITHTIME == "ja") { slist = slist #" seit: "#sftime #"("#sltime#")" ;}
      }
     
}
} } } 


! 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%96;%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_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);}
}

There is no event but a API for this. I can implement a switch in the Gateway-Extras Thing to load the service messages and write them into a virtual datapoint of the corresponding device. With a cron-rule you can turn the switch on to (re-)load the service messages in certain intervals. I will implement it after my vacation.

2 Likes

The script above fills in the system variable following multiline text:

ALTE Servicemeldung

Wohnzimmer Remote Kamin : Konfigurationsdaten stehen zum Transfer an seit: 2017-06-05 16:50:05(2017-06-05 16:50:05)
SchlĂĽssel FB1 : LOW_BAT seit: 2017-07-04 21:12:45(2017-07-08 14:07:24)

Would be much better if would output a json format.
For the moment I do not have a clue what to do with this information. My basic intension was to evaluate “LOW_BAT” status without having to create items for the batty devices channels.

Are system variables, listed as channels under GatewayExtras automaticaly reloaded on change?

No, you have to trigger a variables reload because the CCU does not send an event if a variable content is changed.
But there is a bug in the current version that has been fixed with this PR https://github.com/openhab/openhab2-addons/pull/2419 (not merged yet)

I think it would be a better idea to create simple script to trigger this from CCU side and not schedule cron job.
@gerrieg: would it be a good idea to accompany the extension of GatewayExtra wit a CCU script and instruction to install in order to trigger automatic refresh. Such a script shouldn’t be that complicated.

You can do this already, you can use the virtual switches in the CCU. Just update such a switch to ON if something changes in the CCU. In openHab, create a rule that listens to the switch and trigger a refresh (once the PR has been merged).

I played with the service message API today. It’s useless to implement, because we already have all informations in the available channels. e.g. a low battery is indicated with a simple LOWBAT=true message. The LOWBAT datapoint is already available as channel. The same is with CONFIG_PENDING and UNREACH/STICKY_UNREACH.
So if one of these channels are true, this is the service message.

This would imply that I have to create items for each of these channels.
Some overhead.
It would be great if would be possible to group all these into a single (OR-d) channel, somehow.

A virtual OR-d datapoint SERVICE_MESSAGE, very good idea, will implement soon.

What about virtual or-d LOWBAT, CONFIG_PENDING, UNREACH, STICKY_UNREACH?
Once this is set true, one can go to CCU web n inspect what’s going on in detail.

What about virtual or-d LOWBAT, CONFIG_PENDING, UNREACH, STICKY_UNREACH?

What do you mean? These datapoints are already available. The idea was, to create a single datapoint called SERVICE_MESSAGE and OR all these datapoints into it.
Or did i misunderstand you?

Ok, this would be perfect.

added:
I would be better to have 3 data points, for each of the above system message types, and or-ed accross all items.
This means if one of the devices gets a LOW_BAT, UNREACH,… I get a trigger.

Sorry, but I cannot follow your discussion. I haven’t found any channel in OpenHab that represents the four datapoints, except LOWBAT for battery devices. Is there any documentation for how to manage service messages?
Thanks

Not sure if this is still relevant, but if the checkbox “Show advanced” is activated…

… it shows the entire list of channels, which also contains the ones mentioned above (e.g. unreach, update pending, etc)