Meldungsanzeige im WebFront

Guten Morgen,
ich nutze dieses geniale Skript jetzt mittlerweile 5 mal in einem Webfront.
Ich habe es also 5 mal kopiert und ausgeführt:
1: wichtige Systemmeldungen
2: Zutritt via ekey
3: Beschattung
4: Beleuchtung
5. Sonstige meldungen

Jetzt habe ich aber das Problem, das ich NUR beim ersten Originalskript die Meldungen durch anklicken löschen kann.
Bei allen anderen Instanzen nicht:
Fehlermeldung:

Beispiel bei Zutrittsmneldungen:

$number = IPS_RunScriptWaitEx(37795, array('action' => 'add', 'text' => $texta, 'expires' => time() - 60, 'removable' => true, 'type' => '3')); 

Hier funktioniert das Löschen durch anklicken nicht. Was mache ich falsch?

UPDATE: Lösung gefunden. IM Meldungsskript selber muss nochmal die Instanz ID des Skripts angegeben werden!!

Danke und lg

Hi,

da das Script ein WebHook verwendet ist es leider so das bei Copy/Paste alle Scripte sich dieses teilen.
Richtig wäre du legst für jedes Script ein eigenen Webhook an und patched dann jedes Script mit dem dazugehörigen Webhook Aufruf.

LG Heiko

Danke Pitti!
Auf das wäre ich nie gekommen :slight_smile:

Also ich habe unter Kerninstanzen/Webhook für jedes Meldungsskript ein eigenes Webhook angelegt:

Muss ich nun im jeweiligen Meldungsskript selber etwas ändern, oder findet das Skript den Hook selber?

Unbenannt2

So wie es im Moment ist funktioniert es leider noch nicht!

lg
Chri

Ja, Du musst in jedem Script den Aufruf anpassen, sollte aber kein großes Ding sein.

Such mal nach „/hook/msg“ und ersetze es dann durch „/hook/msgX“ (X= 1,2,3,4,5) … verstehst was ich meine :wink:

Gruß Heiko

Jop Danke. Ich habe glaube ich auch noch einen anderen Fehler gemacht:

Ich habe im jeweiligen Meldungsskript in die gelb markierte Zeile die Instanz ID des eigenen Meldungsskripts eingetragen.
Muss hier etwa die Webfront Instanz ID eingetragen werden?
Wenn JA: Ich habe 4 verschiedene (Erdgeschoss, Gästebad, Schlafzimmer,…)
Welche trage ich dann ein?

Danke lieber Pitti :slight_smile:
Christian

Pitti. Kann es sein das ich eine alter/andere Version habe.
Kann beim besten Willen kein /hook/ finden:

<? 
################################################################################ 
# Scriptbezeichnung: System.Dashboard.ips.php
# Version: 3.0.20190221
# Author:  Heiko Wilknitz (@Pitti)
#          Original von Horst (12.11.2010)
#          Angepasst für RasPi lueralba (31.3.2015)
#
# Meldungsanzeige im WebFront!
# Dieses Skript dient zur Verwaltung einer Meldungsliste im WebFront.
# Meldungen können hinzugefügt und entfernt werden. Es ist auch möglich,
# Meldungen zu einem bestimmten Zeitpunkt automatisch löschen zu lassen,
# sowie das Löschen von Meldungen durch Klick im WebFront zu aktivieren.
# Mit der Version 2.0 ist es möglich den Button zum Wechseln der Seite
# im Webfront zu benutzen (Typ 4).
#
# ------------------------------ Installation ----------------------------------
#
# Dieses Skript richtet automatisch alle nötigen Objekte bei manueller
# Ausführung ein. Eine weitere manuelle Ausführung setzt alle benötigten Objekte
# wieder auf den Ausgangszustand.
#
# - Neues Skript erstellen
# - Diesen PHP-Code hineinkopieren
# - Skript Abspeichern
# - Webfront ID eintragen (Abschnitt 'Konfiguration')
# - Skript Ausführen
#
# Meldung durch ein anderes Skript hinzufügen lassen:
# ---------------------------------------------------
#
# $number = IPS_RunScriptWaitEx(ObjektID, array('action' => 'add', 'text' => 'Test', 'expires' => time() + 60, 'removable' => true));
# Die Rückgabe des Aufrufes ist die Identifikationsnummer der neuen Nachricht,
# bei Misserfolg wird der Wert 0 zurückgegeben.
#
# Parameter:
# - 'text': Meldungstext
# - 'expires' (optional): Zeitpunkt des automatischen Löschens der Meldung
#          als Unix-Timestamp. Ist der Wert kleiner als die aktuelle Timestamp,
#          wird nicht automatisch gelöscht.
# - 'removable' (optional): Meldung wird bei Klick auf Button gelöscht.
# - 'type' (optional): Art der Meldung ... 0 => Normal(grün),
#          1 => Fehler(rot), 2 => Warnung(gelb), 3 => Todo(blau), 4 => Goto(orange)
# - 'image' (optional): Name des WebFront-Icons (ipsIcon<name>), welches
#          für Meldung verwendet werden soll, Standard ist "Talk"
#          Doku:  https://www.symcon.de/service/dokumentation/komponenten/icons/
#          z.B. Clock, Gear, Alert, etc....
# - 'page' (optional): Nur in Verbindung mit Type 4 - Seitenname
#          HINWEIS: funktioniert nur ohne Parameter 'removable'!!
#
# Meldung durch ein anderes Skript löschen lassen:
# ------------------------------------------------
#
# $success = IPS_RunScriptWaitEx(ObjektID, array('action' => 'remove', 'number' => 123));
# Bei erfolgreichem Löschen wird der Wert 1 zurückgegeben, bei Misserfolg der Wert 0.
#
# Parameter:
# - 'number': Identifikationsnummer der zu löschenden Meldung
#
# Meldung eines bestimmten Types löschen:
# ------------------------------------------------
#
# $success = IPS_RunScriptWaitEx(ObjektID, array('action' => 'removeType', 'type' => x));
# Bei erfolgreichem Löschen wird der Wert 1 zurückgegeben, bei Misserfolg der Wert 0.
#
# Parameter:
# - 'type': Meldungstyp der gelöscht werden soll (x = 0|1|2|3|4)
#
# Alle vorhandenen Meldungen durch ein anderes Skript löschen lassen:
# -------------------------------------------------------------------
#
# $success = IPS_RunScriptWaitEx(ObjektID, array('action' => 'removeAll'));
# Bei erfolgreichem Löschen wird der Wert 1 zurückgegeben, bei Misserfolg der Wert 0.
#
# Eine Meldungen hinzufügen, welche bei Klick auf den Button die Seite wechselt:
# ------------------------------------------------------------------------------
#
# $id = IPS_RunScriptWaitEx(ObjektID , array('action' => 'add', 'text' => $text, 'type' => 4, 'image' => 'Telephone', 'page' => 'catAnrufe'));
# Der Parameter 'page' definiert zu welcher Seite im Webfront gewechselt werden soll.
# Der Name der Seite muss einer existierenden 'Element ID' im konfigurierten Webfront
# entsprechen (z.b. item32435).
#
# ------------------------------ Changelog -------------------------------------
#
# 08.02.2017 - Initalversion (v1.0)
# 17.02.2018 - Neuer Typ 4 zum Wechseln der Seite bei Klick auf Button
#              Umstellung auf Webhook als Ersatz für extra Remove-Script (v2.0)
# 24.02.2018 - über 'fifo' kann man die Reihenfolge der Meldungsausgabe steuern
#            - der Zeitstemmpel wann die Meldung erzeugt wurde wird beim Hover
#              über das Icon angezeigt
#              Doku verbessert (v2.1)
# 26.02.2018 - Flag für Reihenfolge der Meldungsauflistung hinzugefügt (v2.2)
# 04.03.2018 - Hinterlegung einer URL auf den Button (eperimental) (v2.3)
# 21.02.2019 - 3 neue Flags füre die Manupilation der Darstellung hinzugefügt
#              'nomsg' für keine Meldungen, 'noico' für keine Icons und
#              'bfort' für Button vor Text (in Kombi mit NO-ICON) (v3.0)
#
# ----------------------------- Konfigruration ---------------------------------
#
# WebFront Configuration
$wfc	= 19710 /*[Forstern.NET]*/;
#
# First In First Out - erste Meldung wird zuerst dargestellt, sonst
# letzte Meldung zuerst (LIFO).
$fifo	= false;
# Flag, ob angezeigt werden soll das keine Meldung existiert.
$nomsg	= true;
# Flag, ob Icons angezeigt werden soll.
$noico	= true;
# Flag, ob Button vor Text angezeigt werden soll;
# nur in Kombi mit NO ICON Flag verwendtbar
$bfort	= true;
#
################################################################################ 

// INSTALLATION
if ($_IPS['SENDER']=='Execute') {
	install(); 
}
// SCRIPTAUSFUEHRUNG
else if($_IPS['SENDER'] == "RunScript") {
	$result = 0;
	switch ($_IPS['action']) {
		case 'add':
			$expires  = isset($_IPS['expires']) ? $_IPS['expires'] : 0;
			$removable  = isset($_IPS['removable']) ? $_IPS['removable'] : false;
			$text     = isset($_IPS['text']) ? $_IPS['text'] : 'leer';
			$type     = isset($_IPS['type']) ? $_IPS['type'] : 0;
			$image    = isset($_IPS['image']) ? $_IPS['image'] : 'Talk';
			$page     = isset($_IPS['page']) ? $_IPS['page'] : '';
			if (!($expires > time())) { $expires = 0; }
			if (!($removable === true)) { $removable = false; }
			if (!($type > 0)) { $type = 0; }
			if (!(is_string($page))) { $page = ''; }
			if (!($image != '')) { $image = 'Talk'; }
			if (is_string($text) && $text != '') {
				$result = addMessage($text, $expires, $removable, $type, $image, $page);
			}
			break;
		case 'remove':
			$number = isset($_IPS['number']) ? $_IPS['number'] : -1;
			if ($number > 0) {
				$result = removeMessage($number);
			}
			break;
		case 'removeAll':
			$result = removeAllMessages();
			break;
		case 'removeType':
			$type = isset($_IPS['type']) ? $_IPS['type'] : -1;
			if ($type >= 0) {
				$result = removeTypes($type);
			}
			break;
	}
	echo $result;
}
// TIMER EVENT
else if($_IPS['SENDER'] == "TimerEvent") {
	$number = explode('#', IPS_GetName($_IPS['EVENT']));
	$number = $number[1];
	IPS_DeleteEvent($_IPS['EVENT']);
	removeMessage($number);
}
// AUFRUF WEBHOOK
else if($_IPS['SENDER'] == "WebHook") {
	$result = 0;
	switch ($_GET['action']) {
		case 'remove':
			$number = isset($_GET['number']) ? $_GET['number'] : -1;
			if ($number > 0) {
				$result = removeMessage($number);
			}
			break;
		case 'switch':
			$page = isset($_GET['page']) ? $_GET['page'] : '';
			if (is_string($page) && $page !='') {
				$split = explode(',',$page);
				$result = switchPage($wfc, $split[0]);
				if(isset($split[1]) && ($split[1] != '')) {
					sendPopup($wfc, $split[1]);
				}
			}
			break;
	}
	echo $result;
} 

# ------------------------------ Funktionen ------------------------------------

// Alle Meldungen(Daten) löschen und Letzte Meldungsnummer auf 0 setzen
function removeAllMessages () {
	$pid = IPS_GetParent($_IPS['SELF']);
	$did = IPS_GetVariableIDByName('Daten', $pid);
	$mid = IPS_GetVariableIDByName('Meldungen', $pid);
	$lid = IPS_GetVariableIDByName('letzte Meldungsnummer', $pid);
	$ids = IPS_GetChildrenIDs($_IPS['SELF']);
	foreach ($ids as $id) {
		if (IPS_EventExists($id) && substr(IPS_GetName($id), 0, 16) == 'Remove Message #') {
			IPS_DeleteEvent($id);
		}
	}
	SetValueString($did, json_encode(array()));
	SetValueString($mid, 'Keine Meldungen vorhanden!');
	SetValueInteger($lid, 0);
	return 1;
}

// Alle Meldungen eines bestimmten Meldungstyp löschen.
function removeTypes($type) {
	$pid = IPS_GetParent($_IPS['SELF']);
	$did = IPS_GetVariableIDByName('Daten', $pid);
	$result = 0;
	$i = 0;
	$j = 0;
	$data = json_decode(GetValueString($did), true);
	foreach($data as $id => $val) {
		if($val['type'] == $type) {
			if(removeMessage($id)) $i++;
			$j++;
		}
	}
	if ($i == $j) $result = 1;
	return $result;
}

// Meldung mit der Meldungsnummer(number) löschen.
function removeMessage($number) {
	$pid = IPS_GetParent($_IPS['SELF']);
	$did = IPS_GetVariableIDByName('Daten', $pid);
	$result = 0;
	if (IPS_SemaphoreEnter($_IPS['SELF'].'DataUpdate', 2000)) {
		$data = json_decode(GetValueString($did), true);
		if (isset($data[$number])) {
			unset($data[$number]);
			$eid = @IPS_GetEventIDByName('Remove Message #'.$number, $_IPS['SELF']);
			if ($eid !== false) {
				IPS_DeleteEvent($eid);
			}
			SetValueString($did, json_encode($data));
			$result = 1;
		}
		else {
			throwException('Could not remove message #'.$number.': Unknown message number!');
		}
		IPS_SemaphoreLeave($_IPS['SELF'].'DataUpdate');
		renderData($data);
	}
	else {
		throwException('Could not remove message #'.$number.': Semaphore timeout!');
	}
	return $result;
}

// Neue Meldung hinzufügen
function addMessage ($text, $expires, $removable, $type, $image, $page) {
	$pid = IPS_GetParent($_IPS['SELF']);
	$did = IPS_GetVariableIDByName('Daten', $pid);
	$lid = IPS_GetVariableIDByName('letzte Meldungsnummer', $pid);
	$number = 0;
	if (IPS_SemaphoreEnter($_IPS['SELF'].'DataUpdate', 2000)) {
		$data = json_decode(GetValueString($did), true);
		if (!is_array($data)) {
			$data = array();
		} 
		$number = GetValueInteger($lid) + 1;
		$data[$number] = array('timestamp' => time(), 'text' => utf8_encode($text), 'expires' => $expires, 'removable' => $removable, 'type' => $type, 'image' => $image, 'page' => $page); 
		if ($expires > time()) {
			$eid = IPS_CreateEvent(1); 
			IPS_SetParent($eid, $_IPS['SELF']); 
			IPS_SetName($eid, 'Remove Message #'.$number); 
			IPS_SetEventCyclic($eid, 1, 0, 0, 0, 0, 0); 
			if($expires == 0) {
				IPS_SetEventCyclicDateFrom($eid, 0, 0, 0); 
			} else {
				IPS_SetEventCyclicDateFrom($eid, (int)date('j',$expires), (int)date('n', $expires),  (int)date('Y', $expires));
			}
			IPS_SetEventCyclicDateTo($eid, 0, 0, 0);
			if($expires == 0) {
				IPS_SetEventCyclicTimeFrom($eid, 0, 0, 0);
			} else {
				IPS_SetEventCyclicTimeFrom($eid, (int)date("H", $expires), (int)date("i", $expires), (int)date("s", $expires));
			}
			IPS_SetEventCyclicTimeTo($eid, 0, 0, 0);
			IPS_SetEventActive($eid, true);
		}
		SetValueString($did, json_encode($data));
		SetValueInteger($lid, $number);
		IPS_SemaphoreLeave($_IPS['SELF'].'DataUpdate');
		renderData($data);
	}
	else {
		throwException('Could not add message: Semaphore timeout!');
	}
	return $number;
}

// Umschalten zu einer bestimmten Seite im WebFront
function switchPage($wfc, $page) {
	$result = WFC_SwitchPage($wfc, $page);
	return $result;
}

// Popup öffnen für Link-Anzeige (experimental)
function sendPopup($wfc, $url) {
	$result = WFC_SendPopup($wfc, 'Weiterleitung', "<a href='".$url."'>KLICK</a>");
	return $result;
}

// Installationsroutine zum Erzeugen aller notwendigen Variablen.
function install () {
	$pid = IPS_GetParent($_IPS['SELF']);
	$iid = 0;
	if (IPS_InstanceExists($pid)) {
		$instance = IPS_GetInstance($pid);
		if ($instance['ModuleInfo']['ModuleID'] == '{485D0419-BE97-4548-AA9C-C083EB82E61E}') {
			$iid = $pid;
		}
	}
	if ($iid == 0) {
		$iid = IPS_CreateInstance('{485D0419-BE97-4548-AA9C-C083EB82E61E}');
		IPS_SetParent($iid, $pid);
		IPS_SetName($iid, 'Meldungen');
		IPS_SetParent($_IPS['SELF'], $iid);
		$pid = $iid;
	}
	$did = @IPS_GetVariableIDByName('Daten', $pid);
	if ($did === false) {
		$did = IPS_CreateVariable(3);
		IPS_SetParent($did, $pid);
		IPS_SetName($did, 'Daten');
	}
	SetValueString($did, json_encode(array()));
	$mid = @IPS_GetVariableIDByName('Meldungen', $pid);
	if ($mid === false) {
		$mid = IPS_CreateVariable(3);
		IPS_SetParent($mid, $pid);
		IPS_SetName($mid, 'Meldungen');
		IPS_SetVariableCustomProfile($mid, '~HTMLBox');
	}
	$lid = @IPS_GetVariableIDByName('letzte Meldungsnummer', $pid);
	if ($lid === false) {
		$lid = IPS_CreateVariable(1); 
		IPS_SetParent($lid, $pid); 
		IPS_SetName($lid, 'letzte Meldungsnummer'); 
	}
	SetValueInteger($lid, 0);
	$ids = IPS_GetChildrenIDs($_IPS['SELF']);
	foreach ($ids as $id) {
		if (IPS_EventExists($id) && substr(IPS_GetName($id), 0, 16) == 'Remove Message #') {
			IPS_DeleteEvent($id);
		}
	}
	renderData(array());
}

// Meldungen als HTML zusammenbauen.
function renderData ($data) {
global $fifo, $nomsg, $noico, $bfort;
	$pid = IPS_GetParent($_IPS['SELF']);
	$mid = IPS_GetVariableIDByName('Meldungen', $pid);
	$cnt = count($data);
	// Etwas CSS und HTML
	$style = "";
	$style = $style.'<style type="text/css">';
	if($cnt == 0 && $nomsg) {
		$style = $style.'table.msg { width:100%; font-size: 14px;}';
	}
	else {
		$style = $style.'table.msg { width:100%; font-size: 14px; border-collapse: collapse;}';
	}
	if($noico) {
		if($bfort) {
			$style = $style.'td.fst { width: 42px; text-align:center; padding: 2px;  border-left: 1px solid rgba(255, 255, 255, 0.2); border-top: 1px solid rgba(255, 255, 255, 0.1); }';
			$style = $style.'td.lst { padding: 5px; border-right: 1px solid rgba(255, 255, 255, 0.2); border-top: 1px solid rgba(255, 255, 255, 0.1); }';
		}
		else {
			$style = $style.'td.fst { padding: 5px; border-left: 1px solid rgba(255, 255, 255, 0.2); border-top: 1px solid rgba(255, 255, 255, 0.1); }';
			$style = $style.'td.lst { width: 42px; text-align:center; padding: 2px; border-right: 1px solid rgba(255, 255, 255, 0.2); border-top: 1px solid rgba(255, 255, 255, 0.1); }';
		}
	}
	else {
		$style = $style.'td.fst { width: 36px; padding: 2px; border-left: 1px solid rgba(255, 255, 255, 0.2); border-top: 1px solid rgba(255, 255, 255, 0.1); }';
		$style = $style.'td.mid { padding: 2px;  border-top: 1px solid rgba(255, 255, 255, 0.1); }';
		$style = $style.'td.lst { width: 42px; text-align:center; padding: 2px;  border-right: 1px solid rgba(255, 255, 255, 0.2); border-top: 1px solid rgba(255, 255, 255, 0.1); }';
	}
	$style = $style.'tr:last-child { border-bottom: 1px solid rgba(255, 255, 255, 0.2); }';
	$style = $style.'.blue { padding: 5px; color: rgb(0, 0, 0); background-color: rgb(182, 220, 252);  }';
	$style = $style.'.red { padding: 5px; color: rgb(0, 0, 0); background-color: rgb(255, 100, 80);  }';
	$style = $style.'.green { padding: 5px; color: rgb(0, 0, 0); background-color: rgb(166, 255, 210);  }';
	$style = $style.'.yellow { padding: 5px; color: rgb(0, 0, 0); background-color: rgb(240, 250, 50);  }';
	$style = $style.'.orange { padding: 5px; color: rgb(0, 0, 0); background-color: rgb(255, 190, 100);  }';
	$style = $style.'</style>';
	$content = $style;
	$content = $content.'<table class="msg">';

	if ($cnt == 0) {
		// Keine Meldung, dann sagen wir das auch ;-)
		if(!$nomsg) {
			$content = $content.'<tr>';
			$class = 'fst';
			// Icon?
			if(!$noico) {
				$content = $content.'<td class="fst"><img src=\'img/icons/Ok.svg\'></img></td>';
				$class = 'mid';
			}
			// Button vor Text
			if($noico && $bfort) {
				$content = $content.'<td class=\'fst\'><div class=\'green\' onclick=\'alert("Nachricht kann nicht bestätigt werden.");\'><b>OK</b></div></td>';
				$content = $content.'<td class=\'"lst\'>Keine Meldungen vorhanden!</td>';
			}
			// Button nach Text
			else {
				$content = $content.'<td class=\''.$class.'\'>Keine Meldungen vorhanden!</td>';
				$content = $content.'<td class=\'lst\'><div class=\'green\' onclick=\'alert("Nachricht kann nicht bestätigt werden.");\'><b>OK</b></div></td>';
			}
			$content = $content.'</tr>';
		}
		// Keine Meldung, keine Ausgabe
		else {
			$content = $content.'<tr><td></td></tr>';
		}
	}
	else {
		// fifo or lifo
		if(!$fifo) {
			$data = array_reverse($data, true);
		}
		foreach ($data as $number => $message) {
			if ($message['type']) {
				switch ($message['type']) {
					case 4:
						$type = 'orange';
						break;
					case 3:
						$type = 'blue';
						break;
					case 2:
						$type = 'yellow';
						break;
					case 1:
						$type = 'red';
						break;
					default:
						$type = 'green';
						break;
				}
			}
			else {
				$type = 'green';
			}
			if ($message['image']) {
				$title = ' ';
				if (isset($message['timestamp'])) {
					$title .= 'title=\''.date("d.m.Y H:i", $message['timestamp']).'\' ';
				}
				$image = '<img src=\'img/icons/'.$message['image'].'.svg\''.$title.'></img>';
			}
			else {
				$image = '<img src=\'img/icons/Ok.svg\'></img>';
			}
			$content .= '<tr>';
			$class = 'fst';
			// Icon?
			if(!$noico) {
				$content = $content.'<td class="fst">'.$image.'</td>';
				$class = 'mid';
			}
			// Button vor Text
			if($noico && $bfort) {
				if ($message['removable']) {
					$content = $content.'<td class=\'fst\'><div class=\''.$type.'\' onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest();HTTP.open(\'GET\',o.url,true);HTTP.send();};window.xhrGet({ url: \'hook/msg?ts=\' + (new Date()).getTime() + \'&action=remove&number='.$number.'\' });">OK</div></td>';
				}
				elseif ($message['page']) {
					$content = $content.'<td class=\'fst\'><div class=\''.$type.'\' onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest();HTTP.open(\'GET\',o.url,true);HTTP.send();};window.xhrGet({ url: \'hook/msg?ts=\' + (new Date()).getTime() + \'&action=switch&page='.$message['page'].'\' });">OK</div></td>';
				}
				else {
					$content = $content.'<td class=\'fst\'><div class=\''.$type.'\' onclick=\'alert("Nachricht kann nicht bestätigt werden.");\'><b>OK</b></div></td>';
				}
				$content = $content.'<td class="lst">'.utf8_decode($message['text']).'</td>';
			}
			// Button nach Text
			else {
				$content = $content.'<td class="'.$class.'">'.utf8_decode($message['text']).'</td>';
				if ($message['removable']) {
					$content = $content.'<td class=\'lst\'><div class=\''.$type.'\' onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest();HTTP.open(\'GET\',o.url,true);HTTP.send();};window.xhrGet({ url: \'hook/msg?ts=\' + (new Date()).getTime() + \'&action=remove&number='.$number.'\' });">OK</div></td>';
				}
				elseif ($message['page']) {
					$content = $content.'<td class=\'lst\'><div class=\''.$type.'\' onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest();HTTP.open(\'GET\',o.url,true);HTTP.send();};window.xhrGet({ url: \'hook/msg?ts=\' + (new Date()).getTime() + \'&action=switch&page='.$message['page'].'\' });">OK</div></td>';
				}
				else {
					$content = $content.'<td class=\'lst\'><div class=\''.$type.'\' onclick=\'alert("Nachricht kann nicht bestätigt werden.");\'><b>OK</b></div></td>';
				}
			}
			$content .= '</tr>';
		}
	}
	$content = $content. '</table>';
	SetValueString($mid, $content);
}

// Fehlerbehandlung
function throwException($message) {
	IPS_LogMessage(IPS_GetName($_IPS['SELF']), 'MSG:'.$message);
}

?>

Hi Chris,

die $wfc Variable ist wirklich für eine Webfront-Instanz gedacht. Wie Du schon richtig erkannt hast ist das Hinterlegen des Scriptes falsch.
Die Variable macht nur Sinn in Verbindung mit dem Parameter „page“ um bei Button-Klick auf eine Seite im Webfront zu wechseln, ansonsten einfach „0“ eintragen!
Falls doch, natürlich die Webfront-ID wo sich auch die anzuzeigende Seite drin befindet.

Gruß Heiko

Sorry, ja! Ich habe noch paar Spezialsachen bei mir eingebaut :slight_smile:

Such mal nur nach ‚hook/msg‘ (also ohne führendem /)

Gruß Heiko

Pitti, DANKE. Du bist echt der Beste!
Das wars, und meine 5 Meldungsanzeigen schnurren wieder…

Ich wünsche dir einen schönen Tag. Liebe Grüße Christian

1 „Gefällt mir“

Moin, bin gerade beim Aufräumen meines WF und habe das Meldungsskript eingebaut.
Es funktioniert ohne Probleme, endlich ein zentrales Meldungsfenster im WF. Danke an Pitti und allen die bei der Erstellung beteiligt waren. In der letzten Version ist leider der Hinweis auf das WebHook nicht mehr enthalten.
Etwas verwirrt hat mich nur zwischendurch das beim Lesen des Threats über ein Messagedisplay-Modul gesprochen wurde, welches ich aber im Module-Store nicht gefunden habe.
Gruß Gerd

Hallo,
ich versuche mich auch an dem Skript und habe dabei ein Verständnisproblem zur Installation und Funktion.
Bisher habe ich für die Installation folgende Schritte unternommen:

  • Das Skript erstellt (V3.0.20190221) und in diesem Skript die ID der Web Front angepasst
  • einen WebHook mit /hook/msg mit einem Verweis auf das zuvor angelegte Skript erstellt

Alles richtig insoweit oder fehlt noch was?
Variable müssten eigentlich automatisch durch das Skript angelegt werden, richtig?
Wie kann das Meldungsfenster nun aufgerufen bzw. getestet werden?

Danke für Hinweise, Gruß Yansop.

Klingt gut, also aus der Ferne alles gut.

Ja, wurden den unterhalb des Scripts Variablen angelegt?

Im Kopf vom Script ist eine kleine Doku hinsichtlich der Ansteuerung.

$id = IPS_RunScriptWaitEx(ObjektID , ['action' => 'add', 'text' => 'Test Text', 'type' => 4, 'image' => 
 'Telephone' ]);```

Du musst für ObjectID die ID vom Script einsetzen und dann die Variable "Meldungen" einfach mal ins WebFront hängen und schauen was passiert!

Gruß Heiko

Ok, dann haben wir den ersten Fehler im Ablauf meiner Installation, denn wenn ich das Skript ausführe werden keine Variablen unterhalb des Skripts angelegt…

Besteht die Möglichkeit, da ich IPS auf der SymBox betreibe, deshalb keine Variablen nach dem ausführen des Scripts angelegt werden?
Ansonsten fällt mir nichts anderes ein wonach ich suchen könnte…

Was hast Du für eine Version? Grundsätzlich keiner Orobleme beim Anlegen von Variablien?

So, habe inzwischen es soweit hinbekommen, das ich in Zeile 100 (bei der Konfiguration für die ID der WebFront)…

$wfc = 16209 /*[WebFront Configuration ID]*/;

folgenden Fehler erhalte…

Parse error:  syntax error, unexpected '$wfc' (T_VARIABLE) in /mnt/data/symcon/scripts/54028.ips.php on line 100

Edit: Variablen wurden inzwischen angelegt, ich habe wohl eine verbogenes Script erwischt.
Habe nun ein anderes versucht und funktioniert.

Was hast Du für eine Version? Heißt Dein Webfront wirklich ‚WebFront Configuration ID‘?

Und was meinste mit verborgenes Script? Sowas habe ich noch nie gehört?

Gruß Heiko

Verwendete Version: 3.0.20190221

Meine WebFront hat die ID 16209 wie im vorherigen Post zu sehen ist und /[WebFront Configuration ID]/ ist doch nur ein Aus kommentierter Hinweis, oder verstehe ich deine Frage nicht?

Sorry, verwendete IPS Version?

IP-Symcon: Version 5.5