Meldungsanzeige im WebFront

<?php
/*******************************************************************************************************************************

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.


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
- Skript Ausführen


Meldung durch ein anderes Skript hinzufügen lassen:
---------------------------------------------------

$number = IPS_RunScriptWaitEx(12345, 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): Anzeige eines Buttons zum Löschen der Meldung im WebFront.


Meldung durch ein anderes Skript löschen lassen:
------------------------------------------------

$success = IPS_RunScriptWaitEx(12345, 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


Alle vorhandenen Meldungen durch ein anderes Skript löschen lassen:
-------------------------------------------------------------------

$success = IPS_RunScriptWaitEx(12345, array('action' => 'removeAll'));
Bei erfolgreichem Löschen wird der Wert 1 zurückgegeben, bei Misserfolg der Wert 0.

*******************************************************************************************************************************/


switch ($IPS_SENDER)
{
    case 'Execute':
        install();
        break;
        
    case 'RunScript':
        $result = 0;
        switch ($action)
        {
            case 'remove':
                if (isset($number) && $number > 0)
                {
                    $result = removeMessage($number);
                }
                break;
                
            case 'add':
                if (!(isset($expires) && $expires > time())) { $expires = 0; }
                if (!(isset($removable) && $removable === true)) { $removable = false; }
                if (isset($text) && is_string($text) && $text != '')
                {
                    $result = addMessage($text, $expires, $removable);
                }
                break;
                
            case 'removeAll':
                $result = removeAllMessages();
                break;
        }
        echo $result;
        break;
        
    case 'TimerEvent':
        $number = explode('#', IPS_GetName($IPS_EVENT));
        $number = $number[1];
        IPS_DeleteEvent($IPS_EVENT);
        removeMessage($number);
        break;
}

function removeAllMessages ()
{
    global $IPS_SELF;
    
    $ParentID = IPS_GetParent($IPS_SELF);
    $DataID = IPS_GetVariableIDByName('Daten', $ParentID);
    $MessagesID = IPS_GetVariableIDByName('Meldungen', $ParentID);
    $LastNumberID = IPS_GetVariableIDByName('letzte Meldungsnummer', $ParentID);
    
    $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($DataID, json_encode(array()));
    SetValueString($MessagesID, 'Keine Meldungen vorhanden!');
    SetValueInteger($LastNumberID, 0);
    
    return 1;
}

function removeMessage ($number)
{
    global $IPS_SELF;
    
    $ParentID = IPS_GetParent($IPS_SELF);
    $DataID = IPS_GetVariableIDByName('Daten', $ParentID);
    
    $result = 0;
    
    if (IPS_SemaphoreEnter($IPS_SELF.'DataUpdate', 2000))
    {
        $data = json_decode(GetValueString($DataID), true);
        if (isset($data[$number]))
        {
            unset($data[$number]);
            $eventID = @IPS_GetEventIDByName('Remove Message #'.$number, $IPS_SELF);
            if ($eventID !== false)
            {
                IPS_DeleteEvent($eventID);
            }
            SetValueString($DataID, 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;
}

function addMessage ($text, $expires, $removable)
{
    global $IPS_SELF;
    
    $ParentID = IPS_GetParent($IPS_SELF);
    $DataID = IPS_GetVariableIDByName('Daten', $ParentID);
    $LastNumberID = IPS_GetVariableIDByName('letzte Meldungsnummer', $ParentID);
    
    $number = 0;
    
    if (IPS_SemaphoreEnter($IPS_SELF.'DataUpdate', 2000))
    {
        $data = json_decode(GetValueString($DataID), true);
        if (!is_array($data))
        {
            $data = array();
        }
        $number = GetValueInteger($LastNumberID) + 1;
        $data[$number] = array('text' => utf8_encode($text), 'expires' => $expires, 'removable' => $removable);
        if ($expires > time())
        {
            $eventID = IPS_CreateEvent(1);
            IPS_SetParent($eventID, $IPS_SELF);
            IPS_SetName($eventID, 'Remove Message #'.$number);
            IPS_SetEventCyclic($eventID, 1, 0, 0, 0, 0, 0);
            IPS_SetEventCyclicDateBounds($eventID, mktime(0, 0, 0, date('n', $expires), date('j', $expires), date('Y', $expires)), 0);
            IPS_SetEventCyclicTimeBounds($eventID, mktime(date('H', $expires), date('i', $expires), date('s', $expires)), 0);
            IPS_SetEventActive($eventID, true);
        }
        SetValueString($DataID, json_encode($data));
        SetValueInteger($LastNumberID, $number);
        IPS_SemaphoreLeave($IPS_SELF.'DataUpdate');
        renderData($data);
    }
    else
    {
        throwException('Could not add message: Semaphore timeout!');
    }
    
    return $number;
}

function install ()
{
    global $IPS_SELF;
    
    IPS_SetHidden($IPS_SELF, true);
    
    $ParentID = IPS_GetParent($IPS_SELF);
    
    $instanceID = 0;
    if (IPS_InstanceExists($ParentID))
    {
        $instance = IPS_GetInstance($ParentID);
        if ($instance['ModuleInfo']['ModuleID'] == '{485D0419-BE97-4548-AA9C-C083EB82E61E}')
        {
            $instanceID = $ParentID;
        }
    }
    if ($instanceID == 0)
    {
        $instanceID = IPS_CreateInstance('{485D0419-BE97-4548-AA9C-C083EB82E61E}');
        IPS_SetParent($instanceID, $ParentID);
        IPS_SetName($instanceID, 'Meldungen');
        IPS_SetParent($IPS_SELF, $instanceID);
        $ParentID = $instanceID;
    }
    
    $DataID = @IPS_GetVariableIDByName('Daten', $ParentID);
    if ($DataID === false)
    {
        $DataID = IPS_CreateVariable(3);
        IPS_SetParent($DataID, $ParentID);
        IPS_SetName($DataID, 'Daten');
    }
    SetValueString($DataID, json_encode(array()));
    
    $MessagesID = @IPS_GetVariableIDByName('Meldungen', $ParentID);
    if ($MessagesID === false)
    {
        $MessagesID = IPS_CreateVariable(3);
        IPS_SetParent($MessagesID, $ParentID);
        IPS_SetName($MessagesID, 'Meldungen');
        IPS_SetVariableCustomProfile($MessagesID, '~HTMLBox');
    }
    SetValueString($MessagesID, 'Keine Meldungen vorhanden!');
    
    $LastNumberID = @IPS_GetVariableIDByName('letzte Meldungsnummer', $ParentID);
    if ($LastNumberID === false)
    {
        $LastNumberID = IPS_CreateVariable(1);
        IPS_SetParent($LastNumberID, $ParentID);
        IPS_SetName($LastNumberID, 'letzte Meldungsnummer');
    }
    SetValueInteger($LastNumberID, 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);
        }
    }
}

function renderData ($data)
{
    global $IPS_SELF;
    
    $ParentID = IPS_GetParent($IPS_SELF);
    $DataID = IPS_GetVariableIDByName('Daten', $ParentID);
    $MessagesID = IPS_GetVariableIDByName('Meldungen', $ParentID);
    
    $content = "";
    
    if (count($data) == 0)
    {
        $content = 'Keine Meldungen vorhanden!';
    }
    else
    {
        $content = '<table style="width: 100%;"><tbody>';
        foreach ($data as $number => $message)
        {
            $content .= '<tr>';
            if ($message['removable'])
            {
                $content .= '<td style="line-height: 25px;">'.utf8_decode($message['text']).'</td><td align="right"><div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest();HTTP.open(\'GET\',o.url,true);HTTP.send();};window.xhrGet({ url: \'user/removeMessage.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$IPS_SELF.'&number='.$number.'\' });" style="border:1px solid #3B3B4D; margin:0px; padding:3px; text-align:center; width: 100px;">OK</div></td>';
            }
            else
            {
                $content .= '<td style="line-height: 25px;" colspan="2">'.utf8_decode($message['text']).'</td>';
            }
            $content .= '</tr>';
        }
        $content .= '</tbody></table>';
    }
    
    SetValueString($MessagesID, $content);
}

function throwException ($message)
{
    global $IPS_SELF;
    
    IPS_LogMessage($IPS_SELF, $message);
}
?>
<?php
/*******************************************************************************************************************************

Meldungsanzeige im WebFront
===========================

Dieses Skript ist Erforderlich, damit Meldungen per Klick im WebFront gelöscht werden können.
Es ist unter IP-Symcon/webfront/user/removeMessage.php zu kopieren.

*******************************************************************************************************************************/

$ScriptID = $_GET['ScriptID'];
$number = $_GET['number'];

if ($ScriptID > 0 && $number >= 0)
{
    IPS_RunScriptWaitEx((int)$ScriptID, array('action' => 'remove', 'number' => $number));
}
?>

Guten Morgen!

Nettes Script :slight_smile:
aber wenn ich eine Meldung durch ein anderes Script löschen will, brauch ich ja die Nummer dazu. muss ich diese also in eine extra Variable mitspeichern, oder wie finde ich sonst die Meldungsnummer zum löschen raus?
Wär eventuell nicht schlecht, wenn man sich selber eine Nummer anlegen kann mit der man die Meldung löscht.
noch was wäre nett, wenn wir schon bei wünsch dir was sind g:
ein Bild mit angeben zb. Information.png, Warning.png … und die dann in einer neuen Tabellenspalte vor dem Meldungstext mit anzeigen

hallo…
hab mich heute ein bisschen ins Script eingelesen und gebastelt… und meine Wünsche sind alle erledigt :wink:

Na dann enthalt es uns doch nicht vor… :smiley:

ups… na klar g
hier noch mal das abgeänderte Script:


<?php
/*******************************************************************************************************************************

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.


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
- Skript Ausführen


Meldung durch ein anderes Skript hinzufügen lassen:
---------------------------------------------------

$number = IPS_RunScriptWaitEx(xxxxx, 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): Anzeige eines Buttons zum Löschen der Meldung im WebFront.


Meldung durch ein anderes Skript löschen lassen:
------------------------------------------------

$success = IPS_RunScriptWaitEx(xxxxx, 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


Alle vorhandenen Meldungen durch ein anderes Skript löschen lassen:
-------------------------------------------------------------------

$success = IPS_RunScriptWaitEx(xxxxx, array('action' => 'removeAll'));
Bei erfolgreichem Löschen wird der Wert 1 zurückgegeben, bei Misserfolg der Wert 0.

*******************************************************************************************************************************/


switch ($IPS_SENDER)
{
    case 'Execute':
        install();
        break;

    case 'RunScript':
        $result = 0;
        switch ($action)
        {
            case 'remove':
                if (isset($number) && $number > 0)
                {
                    $result = removeMessage($number);
                }
                break;
				case 'rmMsgNum':
                if (isset($msgnum) && $msgnum > 0)
                {
						  $result = removeMsgNum($msgnum);
					 }
					 break;

            case 'add':
                if (!(isset($expires) && $expires > time())) { $expires = 0; }
                if (!(isset($removable) && $removable === true)) { $removable = false; }
                if (!(isset($msgnum) && $msgnum > 0)) { $msgnum = 0; }
                if (!(isset($img) && $img != '')) { $img = ''; }
                if (isset($text) && is_string($text) && $text != '')
                {
                    $result = addMessage($text, $expires, $removable, $msgnum, $img);
                }
                break;

            case 'removeAll':
                $result = removeAllMessages();
                break;
        }
        echo $result;
        break;

    case 'TimerEvent':
        $number = explode('#', IPS_GetName($IPS_EVENT));
        $number = $number[1];
        IPS_DeleteEvent($IPS_EVENT);
        removeMessage($number);
        break;
}

function removeAllMessages ()
{
    global $IPS_SELF;

    $ParentID = IPS_GetParent($IPS_SELF);
    $DataID = IPS_GetVariableIDByName('Daten', $ParentID);
    $MessagesID = IPS_GetVariableIDByName('Meldungen', $ParentID);
    $LastNumberID = IPS_GetVariableIDByName('letzte Meldungsnummer', $ParentID);

    $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($DataID, json_encode(array()));
    SetValueString($MessagesID, 'Keine Meldungen vorhanden!');
    SetValueInteger($LastNumberID, 0);

    return 1;
}

function removeMsgNum($msgnum) {
/* Loescht Meldungen anhand der Meldungsnummer, es werden dabei alle Meldungen mit der gleichen Nummer geloescht */
    global $IPS_SELF;

    $ParentID = IPS_GetParent($IPS_SELF);
    $DataID = IPS_GetVariableIDByName('Daten', $ParentID);

    $result = 0;
	 $i = 0;
	 $j = 0;
    $data = json_decode(GetValueString($DataID), true);
	 
	 if(!empty($msgnum)) {
		 foreach($data as $dataid => $dataval) {
		 	 if($dataval['msgnum'] == $msgnum) {
		   	 if(removeMessage($dataid)) $i++;
		   	 $j++;
			 }
	 	 }
	 	 if ($i == $j) $result = 1;
	 }
  return $result;
}

function removeMessage ($number)
{
    global $IPS_SELF;

    $ParentID = IPS_GetParent($IPS_SELF);
    $DataID = IPS_GetVariableIDByName('Daten', $ParentID);

    $result = 0;

    if (IPS_SemaphoreEnter($IPS_SELF.'DataUpdate', 2000))
    {
        $data = json_decode(GetValueString($DataID), true);

		  if (isset($data[$number]))
        {
            unset($data[$number]);
            $eventID = @IPS_GetEventIDByName('Remove Message #'.$number, $IPS_SELF);
            if ($eventID !== false)
            {
                IPS_DeleteEvent($eventID);
            }
            SetValueString($DataID, 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;
}

function addMessage ($text, $expires, $removable, $msgnum, $img)
{
    global $IPS_SELF;

    $ParentID = IPS_GetParent($IPS_SELF);
    $DataID = IPS_GetVariableIDByName('Daten', $ParentID);
    $LastNumberID = IPS_GetVariableIDByName('letzte Meldungsnummer', $ParentID);

    $number = 0;

    if (IPS_SemaphoreEnter($IPS_SELF.'DataUpdate', 2000))
    {
        $data = json_decode(GetValueString($DataID), true);
        if (!is_array($data))
        {
            $data = array();
        }
        $number = GetValueInteger($LastNumberID) + 1;
        $data[$number] = array('text' => utf8_encode($text), 'expires' => $expires, 'removable' => $removable, 'msgnum' => $msgnum, 'img' => $img);
        if ($expires > time())
        {
            $eventID = IPS_CreateEvent(1);
            IPS_SetParent($eventID, $IPS_SELF);
            IPS_SetName($eventID, 'Remove Message #'.$number);
            IPS_SetEventCyclic($eventID, 1, 0, 0, 0, 0, 0);
            IPS_SetEventCyclicDateBounds($eventID, mktime(0, 0, 0, date('n', $expires), date('j', $expires), date('Y', $expires)), 0);
            IPS_SetEventCyclicTimeBounds($eventID, mktime(date('H', $expires), date('i', $expires), date('s', $expires)), 0);
            IPS_SetEventActive($eventID, true);
        }
        SetValueString($DataID, json_encode($data));
        SetValueInteger($LastNumberID, $number);
        IPS_SemaphoreLeave($IPS_SELF.'DataUpdate');
        renderData($data);
    }
    else
    {
        throwException('Could not add message: Semaphore timeout!');
    }

    return $number;
}

function install ()
{
    global $IPS_SELF;

    IPS_SetHidden($IPS_SELF, true);

    $ParentID = IPS_GetParent($IPS_SELF);

    $instanceID = 0;
    if (IPS_InstanceExists($ParentID))
    {
        $instance = IPS_GetInstance($ParentID);
        if ($instance['ModuleInfo']['ModuleID'] == '{485D0419-BE97-4548-AA9C-C083EB82E61E}')
        {
            $instanceID = $ParentID;
        }
    }
    if ($instanceID == 0)
    {
        $instanceID = IPS_CreateInstance('{485D0419-BE97-4548-AA9C-C083EB82E61E}');
        IPS_SetParent($instanceID, $ParentID);
        IPS_SetName($instanceID, 'Meldungen');
        IPS_SetParent($IPS_SELF, $instanceID);
        $ParentID = $instanceID;
    }

    $DataID = @IPS_GetVariableIDByName('Daten', $ParentID);
    if ($DataID === false)
    {
        $DataID = IPS_CreateVariable(3);
        IPS_SetParent($DataID, $ParentID);
        IPS_SetName($DataID, 'Daten');
    }
    SetValueString($DataID, json_encode(array()));

    $MessagesID = @IPS_GetVariableIDByName('Meldungen', $ParentID);
    if ($MessagesID === false)
    {
        $MessagesID = IPS_CreateVariable(3);
        IPS_SetParent($MessagesID, $ParentID);
        IPS_SetName($MessagesID, 'Meldungen');
        IPS_SetVariableCustomProfile($MessagesID, '~HTMLBox');
    }
    SetValueString($MessagesID, 'Keine Meldungen vorhanden!');

    $LastNumberID = @IPS_GetVariableIDByName('letzte Meldungsnummer', $ParentID);
    if ($LastNumberID === false)
    {
        $LastNumberID = IPS_CreateVariable(1);
        IPS_SetParent($LastNumberID, $ParentID);
        IPS_SetName($LastNumberID, 'letzte Meldungsnummer');
    }
    SetValueInteger($LastNumberID, 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);
        }
    }
}

function renderData ($data)
{
    global $IPS_SELF;

    $ParentID = IPS_GetParent($IPS_SELF);
    $DataID = IPS_GetVariableIDByName('Daten', $ParentID);
    $MessagesID = IPS_GetVariableIDByName('Meldungen', $ParentID);

    $content = "";

    if (count($data) == 0)
    {
        $content = 'Keine Meldungen vorhanden!';
    }
    else
    {
        $content = '<table style="width: 100%;"><tbody>';
        foreach ($data as $number => $message)
        {
				if ($message['img']) {
				  $cont_img = '<img src="data/icon.php?name='.$message['img'].'&theme=png" class="iconImage" />';
				} else {
				  $cont_img = ' ';
				}
            $content .= '<tr>';
            if ($message['removable'])
            {
                $content .= '<td style="width:20px;">'.$cont_img.'</td><td style="line-height: 25px;">'.utf8_decode($message['text']).'</td><td align="right"><div onclick="dojo.xhrGet({ url: \'user/removeMessage.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$IPS_SELF.'&number='.$number.'\' });" style="border:1px solid #3B3B4D; margin:0px; padding:3px; text-align:center; width: 100px;">OK</div></td>';
            }
            else
            {
                $content .= '<td style="width:20px;">'.$cont_img.'</td><td style="line-height: 25px;" colspan="2">'.utf8_decode($message['text']).'</td>';
            }
            $content .= '</tr>';
        }
        $content .= '</tbody></table>';
    }

    SetValueString($MessagesID, $content);
}

function throwException ($message)
{
    global $IPS_SELF;

    IPS_LogMessage($IPS_SELF, $message);
}
?>

ich habe bei der Funktion addMessage 2 Parameter hinzugefügt
einmal $msgnum für eine Meldungsnummer und einmal $img …
Funktion renderData wurde fürs bild angepasst.
eine neue Funktion dazugebastelt: removeMsgNum($msgnum)

und oben im ersten Switch beim case RunScript einen neuen Case „rmMsgNum“ zum löschen über die Meldungsnummer
und den case „add“ angepasst für die 2 Parameter

eine Meldung wird erzeugt mit:
IPS_RunScriptWaitEx(xxxxxx, array(‚action‘ => ‚add‘, ‚text‘ => 'Testmeldung ', ‚expires‘ => time() + 0, ‚removable‘ => true, ‚msgnum‘ => 100, ‚img‘ => ‚Information‘));

und eine Meldung übers Script mittels Meldungsnummer löschen:
IPS_RunScriptWaitEx(xxxxx, array(‚action‘ => ‚rmMsgNum‘, ‚msgnum‘ => 100));
gibt true zurück wenn alle Meldungen mit der gleichen Nummer gelöscht worden sind

hoffe man kennt sich ein bissal aus g

Hallo Christian,

kann man das so ändern, das wenn ich 2 mal die selbe Nummer sende, nur der Text des letzten sendens angeziegt wird. Also wenn die Nummer schon vorhanden ist, den ersten Text löschen und den zweiten anzeigen.

Gruß Uwe

Guten morgen!

dazu müsstest du im Case „Add“ einfach nur

removeMsgNum($msgnum);

hinzufügen
bei mir in der Zeile 86…
der ganze Case sieht dann so aus:


case 'add':
                if (!(isset($expires) && $expires > time())) { $expires = 0; }
                if (!(isset($removable) && $removable === true)) { $removable = false; }
                if (!(isset($msgnum) && $msgnum > 0)) { $msgnum = 0; }
                if (!(isset($img) && $img != '')) { $img = ''; }
                if (isset($text) && is_string($text) && $text != '')
                {
                    removeMsgNum($msgnum);
                    $result = addMessage($text, $expires, $removable, $msgnum, $img);
                }
                break;

Hallo Christian,

danke für die Info, läuft gut.

Was ich jetzt noch gesehen habe das die Variable „letzte Meldungsnummer“ immer höher wird.

Es wäre schön wenn man noch eine Variable hätte die angibt, das eine Meldung da ist.

Gruß Uwe

man könnte sicher eine Variable anlegen und diese bei der Funktion addMessage hochzählen und bei der Funktion removeMessage runterzählen lassen
bei der Funktion removeAllMessages dann einfach auf 0 setzen

Gemeint war, so bald überhaupt eine Meldung da ist, eine Variable auf „true“ setzten. Um irgendeine weiter Aktion auszuführen.

Wenn ich mir deine Skriptänderung mal ansehe, ist ja einiges vom original Skript über oder ? Kannst du mal eine bereinigtes Skript hier einstellen.

Gruß Uwe

naja, das originalscript wird schon noch gebraucht g
ich hab ja nur eine zusätzliche funktion dazugebastelt und beim originalen ein paar dinge hinzugefügt

OK,

aber zB. die Variable „letzte Meldungsnummer“ geht immer höher und setzt sich nicht mehr zurück, da du ja Nummer vorgibst bei dem Skripaufruf, braucht mann die Variable doch nicht mehr oder?

Diese wird zwar im Skript noch für ein Array benutzt, aber wenn die Nummer im höher geht, wirds irgendwann mal am Ende sein Oder?

Muß du nicht mit deinem „removeMsgNum“ auch die passende „letzte Meldungsnummer“ zurück setzen?

doch, die wird noch für die events benötigt, also wenn man die meldung nach zb. 60 Sek. wieder löschen will.
dazu kannst ja die selbst erstellte nummer nicht verwenden, weil du da ja auch mehrmals die gleiche angeben kannst.

Hallo

ich hab das script soweit eingebunden. Aber zum Laufen hab ich es noch nicht bekommen. Bzw weis ich nicht wie man die Einträge starten kann.

wo kommt dieser eintrag rein?
In das Script, dass z.B. das Licht einschaltet oder in das Scirpt, dass die Meldungen generiert. Scheinbar muss ja das xxxxx durch eine ID ersetzt werden oder?

$number = IPS_RunScriptWaitEx(xxxxx, array(‚action‘ => ‚add‘, ‚text‘ => ‚Test‘, ‚expires‘ => time() + 60, ‚removable‘ => true));

Danke schonmal

vorab mal vielen Dank für das geniale Script. Funktioniert 1a bzw. funktionierte.

Ich hab ein Update auf die IPS Version 2.4 durchgeführt, alles funktioniert perfekt. Ausnahme ist, dass ich existierende Meldungen auf dem iPad nicht mehr anklicken kann (der „OK“-Button). Komischerweise ist’s mit FF kein Problem (andere Browser hab ich noch nicht probiert).

Da sich ja am generieren des HTML Source soweit nix geändert hat, vermute ich fast, dass es an der Dojo Version liegen könnte.

Hat jemand evtl. eine Lösung für das Problem?

Dankeschön :slight_smile:

SUPER SCRIPT !
DANKE !
Läuft unter IPS2.4 mit FF (wie bereits oben erwähnt) super.

Hallo,
ich brauche Hilfe.Habe das script angelegt und wird auch im WF visualisiert.
Habe aber nicht kapiert welche ID ich im script zum Anlegen einer Meldung benutzen soll.Kann das jemand erklären?

Auslösescript, Ereignis Störung Gerät xy

IPS_RunScriptWaitEx(14978 /[Program\Meldungsanzeige\Meldungsanzeige\Meldungsanzeige]/, array(‚action‘ => ‚add‘, ‚text‘ => 'Testmeldung ', ‚expires‘ => time() + 0, ‚removable‘ => true, ‚msgnum‘ => 100, ‚img‘ => ‚Information‘));

Hallo,

erstmal vielen Dank für das Skript. Ich habe - wie auch bereits vorher geschrieben wurde - das Problem, dass das Bestätigen von Meldungen mittels dojo unter Android und iOs nicht funktioniert. Am DesktopPC geht es ohne Probleme.

Hat vielleicht jemand inzwischen eine Lösung dafür, oder einen Hinweis, woran es liegen könnte?

Viele Grüße,
hirschbrat

Hallo zusammen!

Habe gestern mal auf die 2.5 Beta gewechselt, haut auch alles soweit hin.

Nur bei den Meldungen hier, kann ich den OK-Button nicht mehr klicken. Da es bis zum Update funktioniert hat, kann wohl nicht am Script liegen, nehm ich mal an.
Ich vermute mal, es liegt am Dojo.
Hier mal der Inhalt, der String-Variable:

<tr>
	<td style="width:20px;"> </td><td style="line-height: 25px;">Alle quittierbaren Meldungen quittieren</td>
	<td align="right"><div onclick="dojo.xhrGet({ url: 'user/removeMessage.php?ts=' + (new Date()).getTime() + '&ScriptID=11862&action=removeRemovable' });" style="border:1px solid #3B3B4D; margin:0px; padding:3px; text-align:center; width: 40px;">OK</div></td>
</tr><tr>
	<td style="width:20px;"><img src="data/icon.php?name=Hackerl&theme=png" class="iconImage" /></td>
	<td style="line-height: 25px;">05.12.11 20:29:02 [Wohnung 1] Wohnzimmer Fenster links => Geschlossen</td>
	<td align="right"><div onclick="dojo.xhrGet({ url: 'user/removeMessage.php?ts=' + (new Date()).getTime() + '&ScriptID=11862&number=2' });" style="border:1px solid #3B3B4D; margin:0px; padding:3px; text-align:center; width: 40px;">OK</div></td>
</tr><tr>

Hat vl. jemand einen Tipp, bzw. das selbe Problem?
Habs übrigens mit IE9, FF4 und Chrome getestet -> funktioniert nirgens.

Gruß,
Christian.

Tipp nicht aber Problem.

Mal suchen ob dojo mit PHP 5.4 ein Problem hat.