Urlaubs/Party Modus einstellen über IPS

Hallo zusammen,

hat jemand ein funktionierendes Script um bei einem HomaticIP Gerät (CCU3 + HmIP-BWTH Wandthermostat)
den Party/Urlaubsmodus mit einer Start u. Endzeit zu aktivieren?

folgendes habe ich ohne Erfolg probiert:

HM_WriteValueString($IPS_DeviceID, ‚PARTY_TIME_START‘, ‚2022_10_13 07:30‘);
HM_WriteValueString($IPS_DeviceID, ‚PARTY_TIME_END‘, ‚2022_10_13 08:00‘);
HM_WriteValueFloat($IPS_DeviceID, ‚SET_POINT_TEMPERATURE‘, $Temp);
HM_WriteValueInteger($IPS_DeviceID, „SET_POINT_MODE“, „2“);

Bin für jede Hilfe dankbar :grin:

Die Lösung ist ein Homematic Script im RemoteScript Interface von [Nall-chan] laufen zu lassen.

Habe leider ein Problem in der letzten Zeile jemand eine Idee?

$HMScript = ‚string stdErr=„“; string stdOut=„“; string TCL=„“;‘ . PHP_EOL
.‚TCL= TCL # " {SET_POINT_MODE {i4 2}}";‘ . PHP_EOL
.‚TCL= TCL # " {SET_POINT_TEMPERATURE {double 12.50}}";‘ . PHP_EOL
.‚TCL= TCL # " {PARTY_TIME_START {2023_01_24 19:30}}";‘ . PHP_EOL
.‚TCL= TCL # " {PARTY_TIME_END {2023_01_24 20:00}}";‘ . PHP_EOL
.‚object oCHANNEL= dom.GetObject (ID_CHANNELS).Get („HmIP-BWTH 000C9F298AE2D8:1“);‘ . PHP_EOL
.‚object oIFace= dom.GetObject (oCHANNEL.Interface () );‘ . PHP_EOL
.‚string sTCL= ^puts [xmlrpc ^ #oIFace.InterfaceUrl()# ^/ putParamset [list string "^#oCHANNEL.Address()#^"] [list string "VALUES"] [list struct "^#TCL#^"]]^;‘ . PHP_EOL
.‚system.Exec („/bin/sh -c ‚echo "load tclrpc.so; " # sTCL # "" |tclsh‘“,&stdOut,&stdErr);‘ . PHP_EOL;

Funktioniert bei WTH, BWTH u. ETRV von Homematic

$Temp = (Integer Wert 5-30)
$Startzeit = „2024_01_05 08:00“;
$Endzeit = „2024_04_06 09:00“;

$HMScript = ‚string stdErr=„“; string stdOut=„“; string TCL=„“;‘ . PHP_EOL
.‚TCL= TCL # " {SET_POINT_MODE {i4 2}}";‘ . PHP_EOL
.‚TCL= TCL # " {SET_POINT_TEMPERATURE {double ‚.$Temp.‘}}";‘ . PHP_EOL
.‚TCL= TCL # " {PARTY_TIME_START {‘.$Startzeit.‚}}";‘ . PHP_EOL
.‚TCL= TCL # " {PARTY_TIME_END {‘.$Endzeit.‚}}";‘ . PHP_EOL
.‚object oCHANNEL= dom.GetObject (ID_CHANNELS).Get („HmIP-BWTH xxxxxxxxxxxxxx:1“);‘ . PHP_EOL
.‚object oIFace= dom.GetObject (oCHANNEL.Interface () );‘ . PHP_EOL
.‚string sTCL= ^puts [xmlrpc ^ #oIFace.InterfaceUrl()# ^/ putParamset [list string "^#oCHANNEL.Address()#^"] [list string "VALUES"] [list struct "^#TCL#^"]]^;‘ . PHP_EOL
.‚system.Exec ("/bin/sh -c 'echo "load tclrpc.so; " # sTCL # „" |tclsh'“,&stdOut,&stdErr);‘ . PHP_EOL;

$HMScriptResult = HM_RunScript(ID /[HomeMatic RemoteScript Interface]/, $HMScript);
var_dump(json_decode($HMScriptResult));

Leider wird der Code oben nicht richtig dargestellt anbei der Screenshot.

Folgendes ist ebenfalls verfügbar bei Interesse:
Urlaub für alle Thermostate aktivieren/deaktivieren
Globale Bediensperre
Offset
Optimum Start/Stop
Servicemeldungen Text/Anzahl
Firmware
Wochenplan

Anbei ein paar Screenshots
Urlaub Alle

@KahmannFrilla klasse Arbeit - ich hätte definitiv Interesse an deinen Lösungen für die globale Bediensperre, Servicemeldungen und vor allem für die Wochenprogramme auf den Thermostaten - magst du sie hier teilen?

Gruß

Irgendwie kommt mir das Bild mit dem Wochenprogramm bekannt vor :rofl: :rofl: :rofl:

/* Werbung Anfang :laughing:
Ohne Script geht es mit der aktuellen Beta Version von dem Modul:

Werbung Ende */
Michael

2 „Gefällt mir“

Hallo Luca,

bitte lade das Homematic Extended Modul von Nall-chan.
Ein tolles Modul VIELEN DANK an Nall-chan !!! :+1:
Modul

Ich verwende die Systemvariablen u. das RemoteScript Interface (neue Instanz) siehe Screenshot:

Objektbaum

In den Systemvariablen sind auch die Servicemeldungen enthalten.

Bediensperre (ToggleButton):
Wichtig: Den ObjektNamen bei mir „Thermostat Nr.1“ findest du im Homematic Webmenü!

> <?php
> 
> $Status = GetValueBoolean(XXXXX);
> 
> if ($Status == true) {
> $HMScript = 'object obj = devices.Get("Thermostat Nr.1");' . PHP_EOL
> .'xmlrpc.PutParamset (obj.Interface(), obj.Address()#":0", "MASTER", "GLOBAL_BUTTON_LOCK", "true");' . PHP_EOL;
> 
> $HMScriptResult = HM_RunScript(XXXXX /*[HomeMatic RemoteScript Interface]*/, $HMScript);  
> var_dump(json_decode($HMScriptResult));  
> }
> else {
> $HMScript = 'object obj = devices.Get("Thermostat Nr.1");' . PHP_EOL
> .'xmlrpc.PutParamset (obj.Interface(), obj.Address()#":0", "MASTER", "GLOBAL_BUTTON_LOCK", "false");' . PHP_EOL;
> 
> $HMScriptResult = HM_RunScript(XXXXX /*[HomeMatic RemoteScript Interface]*/, $HMScript);  
> var_dump(json_decode($HMScriptResult));  
> }
> 
> ?>

Die Wochenprofile sind von
Author: Heiko Wilknitz (@Pitti)
Basierend auf Zapp (2011) for the IPS Community
Erweitert von Swifty (Heizungs_Scripte v 0.1 - 15.02.2014)
Wochenprofile Webfront

Klasse Arbeit an alle VIELEN DANK!!! :+1:

Habe etwas Code verändert damit auch das BWTH und WTH-1 funktioniert:

//lesen
// HmIP-WTH-2 || HMIP-eTRV || HmIP-eTRV-2 || HmIP-eTRV-B-2 R4M Profil auslesen (1-3 von 6)	
	if($type == "HmIP-WTH-2" or $type =="HmIP-eTRV-2" or $type == "HMIP-eTRV" or $type =="HmIP-eTRV-B-2 R4M") {
		$params = ReadParamSet($if, $serial, $channel);
		// 3 Profile
		for ($p=1; $p<=3; $p++) {
			foreach($days as $day) {
				$thisEndTimes 	= array();
				$thisValues		= array();
				$timePrevious 	= "00:00";
				for($index 	= 1; $index <= 13; $index++) {
					$keyTemp 	= "P". $p ."_TEMPERATURE_".strtoupper($day)."_".$index;
					$keyTO 		= "P". $p ."_ENDTIME_".strtoupper($day)."_".$index;
					$thisTemp 	= $params[$keyTemp];
					$thisTO 		= $params[$keyTO];
					$thisTime 	= date('H:i', mktime(0, $thisTO)); // $timePassed + TO
					if ($thisTO >= 1440) $thisTime = "24:00";
					$timePrevious = $thisTime;
					array_push($thisEndTimes,	$thisTime);
					array_push($thisValues,		$thisTemp);
					if($thisTO >= 1440) break;
				}
				$temp["P".$p][$day]['EndTimes'] 	= $thisEndTimes;
				$temp["P".$p][$day]['Values'] 	= $thisValues;
			}
		}
		if($weekprofil > 0 and $weekprofil <= 3) {
			return $temp["P".$weekprofil];
		}
		else {
			return $temp;
		}
	}

	// HmIP-BWTH 18.10.22	
	if($type == "HmIP-BWTH" or $type =="HmIP-WTH-1") {
		$params = ReadParamSet($if, $serial, $channel);
		// 6 Profile
		for ($p=1; $p<=6; $p++) {
			foreach($days as $day) {
				$thisEndTimes 	= array();
				$thisValues		= array();
				$timePrevious 	= "00:00";
				for($index 	= 1; $index <= 13; $index++) {
					$keyTemp 	= "P". $p ."_TEMPERATURE_".strtoupper($day)."_".$index;
					$keyTO 		= "P". $p ."_ENDTIME_".strtoupper($day)."_".$index;
					$thisTemp 	= $params[$keyTemp];
					$thisTO 		= $params[$keyTO];
					$thisTime 	= date('H:i', mktime(0, $thisTO)); // $timePassed + TO
					if ($thisTO >= 1440) $thisTime = "24:00";
					$timePrevious = $thisTime;
					array_push($thisEndTimes,	$thisTime);
					array_push($thisValues,		$thisTemp);
					if($thisTO >= 1440) break;
				}
				$temp["P".$p][$day]['EndTimes'] 	= $thisEndTimes;
				$temp["P".$p][$day]['Values'] 	= $thisValues;
			}
		}
		if($weekprofil > 0 and $weekprofil <= 6) {
			return $temp["P".$weekprofil];
		}
		else {
			return $temp;
		}
	} //Ende 18.10.22


	echo $type;
	if($type != "HM-CC-RT-DN" and $type != "HM-CC-TC" and $type != "HM-TC-IT-WM-W-EU" and $type != "HmIP-WTH-2" and $type != "HMIP-eTRV" and $type != "HmIP-eTRV-2") {
		die("Error: ReadTempProfile() Device $device is not of Type HM-CC-TC,HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HmIP-WTH-2, HMIP-eTRV or HmIP-eTRV-2!");
	}
}


//schreiben
// HmIP-WTH-2 || HMIP-eTRV || HmIP-eTRV-2 Profil schreiben (1-3 von 6)	
	if($type == "HmIP-WTH-2" or $type =="HmIP-eTRV-2" or $type == "HMIP-eTRV" or $type =="HmIP-eTRV-B-2 R4M") {
		$prefix="P".$weekprofile."_";
		$params = new xmlrpcval();
		foreach ($profile as $day => $values) {
			$timePrevious = "00:00";
			for ($index=1; $index <= count($values['EndTimes']); $index++) {
				$key = $prefix ."TEMPERATURE_".strtoupper($day)."_".$index;
				$temp = array($key => new xmlrpcval($values['Values'][$index-1], "double"));
				$params->addStruct($temp);
				$key = $prefix ."ENDTIME_".strtoupper($day)."_".$index;
				if ($index>13) break; // nur 13 Tages - Timeslots
				if ($values['EndTimes'][$index-1] > $timePrevious) {
					// Convert end time to Timeout
					$thisDayStart = mktime(0, 0);
					$timeEndArray = explode(":", $values['EndTimes'][$index-1]);
					if ($timeEndArray[1] % 5) die("Error: Invalid End Time (must be 10mn increments) for $day at index $index in HMXML_setTempProfile()<br>
");
					$timeEndts = mktime($timeEndArray[0], $timeEndArray[1]);
					$timeout = (($timeEndts - $thisDayStart)/60); // TODO, works  ?
					$paramTime = array($key => new xmlrpcval("$timeout", "int")); // i4
					$params->addStruct($paramTime);
				}
				else {
					die("Error: Invalid End Time for $day at index $index in WriteTempProfile()!");
				}
				$timePrevious = $values['EndTimes'][$index-1];
			}
		}
		$request = new xmlrpcmsg("putParamset",
			array(new xmlrpcval("$serial:$channel", "string"),
					new xmlrpcval("MASTER", "string"), $params));
		//var_dump($params);
		$result = Send($request, $if);
		return true;
	}

	// HmIP-BWT 18.08.22 schreiben (1-6)	
	if($type == "HmIP-BWTH" or $type =="HmIP-WTH-1") {
		$prefix="P".$weekprofile."_";
		$params = new xmlrpcval();
		foreach ($profile as $day => $values) {
			$timePrevious = "00:00";
			for ($index=1; $index <= count($values['EndTimes']); $index++) {
				$key = $prefix ."TEMPERATURE_".strtoupper($day)."_".$index;
				$temp = array($key => new xmlrpcval($values['Values'][$index-1], "double"));
				$params->addStruct($temp);
				$key = $prefix ."ENDTIME_".strtoupper($day)."_".$index;
				if ($index>13) break; // nur 13 Tages - Timeslots
				if ($values['EndTimes'][$index-1] > $timePrevious) {
					// Convert end time to Timeout
					$thisDayStart = mktime(0, 0);
					$timeEndArray = explode(":", $values['EndTimes'][$index-1]);
					if ($timeEndArray[1] % 5) die("Error: Invalid End Time (must be 10mn increments) for $day at index $index in HMXML_setTempProfile()<br>
");
					$timeEndts = mktime($timeEndArray[0], $timeEndArray[1]);
					$timeout = (($timeEndts - $thisDayStart)/60); // TODO, works  ?
					$paramTime = array($key => new xmlrpcval("$timeout", "int")); // i4
					$params->addStruct($paramTime);
				}
				else {
					die("Error: Invalid End Time for $day at index $index in WriteTempProfile()!");
				}
				$timePrevious = $values['EndTimes'][$index-1];
			}
		}
		$request = new xmlrpcmsg("putParamset",
			array(new xmlrpcval("$serial:$channel", "string"),
					new xmlrpcval("MASTER", "string"), $params));
		//var_dump($params);
		$result = Send($request, $if);
		return true;
	} //Ende 18.08.22

	if($type != "HM-CC-RT-DN" and $type != "HM-CC-TC" and $type != "HM-TC-IT-WM-W-EU" and $type != "HmIP-WTH-2" and $type != "HMIP-eTRV" and $type != "HmIP-eTRV-2") {
		die("Error: WriteTempProfile() Device $device is not of Type HM-CC-TC,HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HmIP-WTH-2, HMIP-eTRV or HmIP-eTRV-2!");
	}
}

Und Wochenplan sind in der Beta enthalten.
Braucht man gar kein Script mehr :wink:
Über den Extended Konfigurator die gewünschten Geräte anlegen und die Konfiguration nach Wünschen anpassen, fertig.
Michael

Tolle Sache hätte mir viel Arbeit erspart :sweat_smile:
Habe eine Ewigkeit mit dem Urlaubsmodus per xlrmpc verbracht.

HM Gruppen sind zwingend erforderlich oder kommt da noch was?

Hallo,

wie kommt ihr an diese Infos von der CCU (z.B. Servicemeldungen_Text) ?
grafik

ich habe nur meine eigenen Variablen, die ich in der CCU angelgt habe.
grafik

wenn ich das RemoteScript Interface einfüge, dann ist diese leider leer. :thinking:

Danke

Gruß Jürgen

HM Systemvariablen erstellen:
„Servicemeldungen_Text“ Typ=Zeichenkette
„Servicemeldungen_Anzahl“ Typ=Zahl

Ein HM-Script erstellen:

Script1:

! Servicemeldungen auslesen und weiter verarbeiten
! v1.996 (c) by alchy Servicemeldungen *allinclusive* Script - HomeMatic-Forum / FHZ-Forum
!++++++ 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
var CR = „ja“; !0 Zeilenvorschub zwischen einzelne Servicemeldungen
! HM Geraet, wessen Systemmeldungen nicht verschickt werden sollen
var BLOCK = „“; ! Seriennummern von Geraeten, welche durch das Script ignoriert werden sollen mit Leerzeichen getrennt.

!++++++ 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;
string CHATID = „+++++++“;
string BOTAPI = „++++++++++++++++++++++++“;

var TELEGRAM_CUXD_ID = „CUX2801001:2“; !welches CUXD.EXEC Geraet mit Kanal soll verwendet werden ?

!++++++ Prowl Setup fuer die Apfeljuenger +++++++++
! 1. Prowl einrichten ( Growl Prowl Nachrichten zu IOS Geräten - HomeMatic-Forum / FHZ-Forum )
! 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 ( Pushnachrichten mit Pushover an Android bzw. iOS - HomeMatic-Forum / FHZ-Forum )
! 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 = „+++++++++++++++++++++“; ! Your User Key
var TOKEN = „+++++++++++++++++++++++++++++++“; ! Application API Token/Key
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 „Pushover: API
var HTML =„1“; ! 1 use html codes at the message
var PRIO = „1“;
var PRIO_MAX = „-2“; ! siehe Servicemeldungen *allinclusive* Script - Seite 54 - HomeMatic-Forum / FHZ-Forum

!%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 = „+++++++++++++++++“;

!++++++ WHATSAPP +++++++++
var USE_WHATSAPP = „nein“;
var WA_PHONE = „+49++++++“;
var WA_CUXD_ID = „CUX2801001:1“;
var WA_APIKEY = „+++++++“;

!+++++++ Setup Mail verschicken mit CUXD und Emailaddon ++++++
! 1. CUXD incl. exec Geraet sind installiert ( CUxD 2.11 - HomeMatic-Forum / FHZ-Forum )
! 2. Mailaddon ist installiert eingestellt und funktioniert ( E-Mail AddOn - HomeMatic-INSIDE )
! 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) TCL verwenden wird angehakt
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 = „Servicemeldungen_Text“; ! 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\tZEL STG RM HS 4“;
string cr2032 = „HmIP-DLS\tHM-PB-2-WM\tHM-PB-4-WM\tHM-PBI-4-FM\tHM-SCI-3-FM\tHM-Sec-TiS\tHM-SwI-3-FM\tHmIP-FCI1“;
string lr14x2 = „HM-Sec-Sir-WM\tHM-OU-CFM-TW“;
string lr14x3 = „HmIP-MP3P“;
string lr44x2 = „HM-Sec-SC\tHM-Sec-SC2\tHM-Sec-SC-2\tHM-Sec-RHS\tHmIP-WRCC2“;
string lr6x2 = „HmIP-STI\tHmIP-eTRV-C\tHM-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-WDS40-TH-I\tHM-WDS40-TH-I-2\tHM-WDS10-TH-O\tHmIP-SMI\tHmIP-eTRV\tHMIP-eTRV\tHM-WDS30-OT2-SM-2\tHmIP-SMO\tHmIP-SMO-A\tHmIP-SPI\tHmIP-eTRV-2\tHmIP-SPDR\tHmIP-SWD\tHmIP-WGC“;
string lr6x3 = „HM-Sec-MDIR-3\tHmIP-SWO-PL\tHM-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\tHmIP-ASIR\tHmIP-SWO-B“;
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-SRH\tHMIP-SWDO\tHmIP-SWDO“;
string lr3x2 = „HmIP-SMI55\tHmIP-RC8\tHmIP-STHO\tHmIP-STHO-A\tHM-TC-IT-WM-W-EU\tHM-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-WDS30-T-O\tHM-WDS30-OT2-SM\tHmIP-STH\tHmIP-STHD\tHmIP-WRC2\tHMIP-WRC2\tHmIP-WRC6\tHmIP-WTH\tHMIP-WTH\tHmIP-WTH-2\tHmIP-SAM\tHmIP-SLO\tHmIP-SWDO-I\tHMIP-SWDO-I\tHmIP-FCI6“;
string lr3x3 = „HmIP-DLD\tHM-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\tHmIP-SWSD“;
string recharge = „HM-Sec-Win\tHM-Sec-SFA-SM“;

!+++++++++ Setup nun aber wirklich zu Ende - ab hier Finger weg :wink: ++++++++++++++++++
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“ ;if (CR == „ja“){ slist = slist #„\r\n“;}} else { string slist = „ALTE Servicemeldung“;if (CR == „ja“){ slist = slist #„\r\n\r\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 == "LOW_BAT") ) {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") ) {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;}}
  if (sdesc == "ERROR_NON_FLAT_POSITIONING"){sdesc = "Fehler Lageerkennung"; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
  if (sdesc == "ERROR_OVERLOAD"){sdesc = "Aktor überlastet."; PRIO = 1; if (PRIO >= PRIO_MAX){PRIO_MAX = PRIO;}}
  if (sdesc == "ERROR_JAMMED"){sdesc = "Schliessmechanismus blockiert."; 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-MDIR-3") || (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, lr14x3) {if (index == odev.HssType()) {batlink = "3x 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() # " : "; if (CR == "ja"){ slist = slist #"\r\n";} slist = slist #batlink#" "; if ( WITHTIME == "ja") { if (CR == "ja"){ slist = slist #"\r\n";} slist = slist #oTmp.AlCounter() #" mal seit: "#sftime.Format("%d.%m.%y %H:%M") #" ( zuletzt: "#sltime.Format("%d.%m.%y %H:%M")#")";}
   }
   else
   {
   slist = slist #odev.Name() # " : " ; if (CR == "ja"){ slist = slist #"\r\n";} slist = slist #sdesc#" "; if ( WITHTIME == "ja") { if (CR == "ja"){ slist = slist #"\r\n";} slist = slist #oTmp.AlCounter() #" mal seit: "#sftime.Format("%d.%m.%y %H:%M") #" ( zuletzt: "#sltime.Format("%d.%m.%y %H:%M")#")" ;}
   }

if (CR == „ja“){ slist = slist #„\r\n\r\n“;}
}
} } }
if (slist.Length() <= 25) {
if ( (USE_SYSVAR == „ja“) && (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME) ){ (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(SYSVAR_NAME).State(„“); }
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“#slist.Length()#„]“); } else {string stdout;string stderr; system.Exec(„logger -t script -p user.debug [ALCHY ALLINScript se Abbruch BLOCK „#slist.Length()#“]“, &stdout, &stderr);}
quit;}

string message = slist.ToUTF8().UriEncode();

! 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 ( (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 Mails raus]“); } else {string stdout;string stderr; system.Exec(„logger -t script -p user.debug [ALCHY ALLINScript se Mail raus]“, &stdout, &stderr);}
}
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(„LD_LIBRARY_PATH=/usr/local/lib/ /usr/bin/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(„LD_LIBRARY_PATH=/usr/local/lib/ /usr/bin/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(„LD_LIBRARY_PATH=/usr/local/lib/ /usr/bin/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(„LD_LIBRARY_PATH=/usr/local/lib/ /usr/bin/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_WHATSAPP == „ja“) &&( (dom.GetObject(ID_DATAPOINTS)).Get(„CUxD.“#WA_CUXD_ID#„.CMD_EXEC“)) ){ (dom.GetObject(ID_DATAPOINTS)).Get(„CUxD.“#WA_CUXD_ID#„.CMD_EXEC“).State(„LD_LIBRARY_PATH=/usr/local/lib/ /usr/bin/curl -s -k ‚https://api.callmebot.com/whatsapp.php?phone=„#WA_PHONE#“&text=„#message#“&apikey=„#WA_APIKEY#“‘“);}
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);}
}
WriteLine("slist: "#slist);
WriteLine("message: "#message);

Script2:

var Anzahl = dom.GetObject(41).Value();
WriteLine(Anzahl);
dom.GetObject(‚Servicemeldungen_Anzahl‘).State(Anzahl);

Hallo Frilla,

danke für die ausführilche DOKU zu den Systemledungen von Homematic nach IPS :+1:.
Habe wie in der Beschreibung die SW CUx-Daemon (V2.11) auf der CCU3 installiert. Läuft !
Die Variablen alle angelegt


Dein Vorgabe Script habe ich 1 zu 1 eingetragen
Aber ankommen tut leider nichts.

Möcht eigentlich nur die Meldungen und die Anzahl in IPS haben

Ich glaube beim Setup vom Scritpt habe ich nicht den richtigen Durchblick !

Danke

Gruß Jürgen

Kontrolliere mal die Sicherheitseinstellungen auf der CCU :wink:

Homematic

Die Scripte sollten passen.
Bei Auslösung einer neuen Servicemeldung solltest du diese in deine IPS Variable bekommen.