Meldungsanzeige im WebFront

Hallo,

ich habe da noch eine Idee was mach noch erweiter könnte. In einem Meldesystem in der Industrie gibt es sowas.

Wenn eine Störung ansteht, gibt es eine Meldung (Frabe Rot), man kann diese Meldung quittieren, steht diese Störung aber noch weiter an wird die (Frabe Gelb), steht diese Meldung nicht mehr an, wird die Meldung automatisch gelöscht.

Des Weiteren könnte man eine Variable (INT) ausgeben die Besagt. 0 = Keine Störung, 1 = Störungen vorhanden aber quittiert, 2 = neue Störung vorhanden

Hallo Thomas,

ich habe das ganze heute nochmal mit Pushover und deinem Script aus Post #90 versucht.
Auch dort werden die Werte nicht übergeben. Ich glaube das Problem liegt vielleicht woanders…

Anbei ein Screen mit den ObjektID´s.

<?

// Telegram -> Meldungen im WF
$telegram = 46682 /*[WORK\Telegram -> Meldungen im WF\Telegram -> Meldungen im WF]*/;

IPS_RunScriptEx ($telegram , Array("type" => "push", "gruppe" => "info" , "nachricht" => "Info - allgemeiner Hinweis"));

?>
<?

//Hier test Nachricht 
#$nachricht = "Dieses ist eine Test Nachricht";

// Telegram
$TelegramID = 22786 /*[Module\TelegramMessenger IPS]*/;					// ID vom Telegram-Modul
$UserID = 123456;

// Schalter im Webfront ob Pushnachrichten versendet werden sollen
$id_pushnachricht_empfangen = 48490 /*[WORK\Telegram -> Meldungen im WF\Push empfangen]*/;

// ID des Webfront Meldungen Scriptes
$webfront_meldung = 44387 /*[WORK\Telegram -> Meldungen im WF\Meldungen\Thomas Meldungen im WF]*/;

// Type - ob anzeige nur im Webfront oder auch als Push Nachricht
        if(!isset($type)) { $type = "push"; }
            if ( GetValue($id_pushnachricht_empfangen) == true  && $type == "push") {
                $pushnachricht = true;
            } else {
                $pushnachricht = false;
            }
    
    // Zeitpunkt des automatischen Löschens der Meldung
        if(!isset($verfall)) { $expires = strtotime("+1 Day"); } else { $expires = strtotime($verfall); }
    
    // keine Gruppe gesetzt
        if(!isset($gruppe)) { $gruppe = "info"; }
    
    // Inhalt
        if(!isset($nachricht)) { $nachricht = "Es wurde keine Nachricht angegeben.";}
    
    
    // Soll ein Bild mit gesendet werden?
    // Abfrage unen, falls nicht mit angegeben
    if(!isset($bild)) { $bild = "";}
    
    // Seiten Sprug Adresse
    if(!isset($seite)) { $seite = ""; }

    // Zuordnung der Meldung zu den Applications -> aus "Meldungsanzeige im Webfront"
        //  0 => Normal(grün), 1 => Fehler(rot), 2 => Warnung(gelb), 3 => Todo(blau), 4 => Goto(orange) 
        $type = Array (
            "system"        => "3",
            "info"            => "0",
            "wetter"        => "2",
            "alarm"            => "1",
            "sicherheit"    => "3",
            "geraete"         => "0",
            "telefon"         => "0",
            "seite"            => "4",
            
        );

        $icon = Array ( 
            "system"        => "IPS",
            "info"             => "Information",
            "wetter"        => "Rainfall",
            "alarm"            => "Alert",
            "sicherheit"    => "Warning",
            "geraete"        => "Gear",
            "telefon"        => "Telephone",
            "seite"            => "IPS",
        );

    // Pushover Daten
		/*$token = Array (
            "system"        => "ID_TELEGRAM_BOT",
            "seite"        => "ID_TELEGRAM_BOT",
            "info"             => "ID_TELEGRAM_BOT",
            "wetter"        => "ID_TELEGRAM_BOT",
            "alarm"            => "ID_TELEGRAM_BOT",
            "sicherheit"        => "ID_TELEGRAM_BOT",
            "geraete"         => "ID_TELEGRAM_BOT",
            "telefon"         => "ID_TELEGRAM_BOT",
        );*/
	
	
if($pushnachricht) {

        $post = array(
			//"token"            => "$token[$gruppe]",
            "user"            => $UserID,
            "message"        => $nachricht,
            "expire"        => $expires,
            );

            // Bild 
            if((isset($bild)) and ($bild != "")) { 
                $file = new CURLFile($bild,'image/jpg','Bild');
                $post["attachment"] = $file;
            }
			}
			
		
	Telegram_SendText($TelegramID, $nachricht, $UserID, $ParseMode='HTML');
	IPS_LogMessage("Telegram", utf8_decode($nachricht));


// Nachrichten im Webfront anzeigen
$message = IPS_RunScriptEx($webfront_meldung, array('action' => 'add', 'text' => $nachricht, 'expires' => $expires, 'removable' => true, 'type' => $type[$gruppe], 'bild' => $bild, 'icon' => $icon[$gruppe], 'page' => $seite));

?>

Beste Grüße
Kai

Moin,

kann ich so nicht nachvollziehen, worann es klemmt. :frowning:

Wird den „nur“ die Variable nachricht nicht übergeben? Oder ggf. alle Variablen nicht?

Probiere doch mal bitte ganz oben im Empfang Script:

// Empfang Übergabe

$werte = "Type: " . $_IPS['type'] . " Gruppe: " . $_IPS['gruppe'] . " Nachricht: " . $_IPS['nachricht'];

IPS_LogMessage("Test Empfaang", $werte);

// Telegram -> Meldungen im WF
$telegram = 27771 /*[Laboratorium\Test Übergabe\empfangen]*/;

IPS_RunScriptEx ($telegram , Array("type" => "push", "gruppe" => "info" , "nachricht" => "Info - allgemeiner Hinweis"));


Bei der Ersten Meldung habe ich das Empfangsscript ausgeführt, da keine Variablen übergeben wurden bleiben die Werte leer. Darunter habe ich „dein“ Sende Aufruf ausgeführt und dann kommen auch die Daten bei mir an.

Dann sollte im Log sowas auftauchen …

Gruß
Thomas

Hallo Thomas,

alle Variablen werden nicht übergeben.

unter den IPS-Meldungen erhalte ich jetzt folgendes Ergebnis…

In Telegram bzw. bei der Meldungsanzeige bleibt die Nachricht „Es wurden keine Nachrichten angegeben.“

Ich hab keinen Plan :banghead:

Beste Grüße
Kai

Hi,

habe das selbe Problem gehabt. Bekam immer die Meldung

Undefined Index: ScriptID

Wenn man „hardcoded“ die ID des Hauptskriptes einträgt funktioniert das Löschen per OK-Button

<? 
################################################################################ 
# Scriptbezeichnung: System.DashboardHook.ips.php 
# Version:    1.0 
# Author:    Heiko (Pitti) 
#            (Kopie von removeMessage.php)  
# 
# Dieses Skript ist Erforderlich,  
# damit Meldungen per Klick im WebFront gelöscht werden können. 
# 
# Installation:  
# -------------  
# 
# Dieses Skript vorzugsweise unter dem selben Vater-Objekt wie das  
# Meldungsanzeige-Script erstellen. 
# 
# Danach unter 'Kern Instancen' -> 'WebHook' einen neuen Hook hinzufügen:  
#  - 'hook/remove' => <dieses Script>  
# 
# Man kann den Hook auch anders benennen, aber dann bitte im Meldungs-Script 
# in der Funktion 'renderData' den Aufruf anpassen!!! 
# 
################################################################################ 

$ScriptID = 23253  /*[Allgemein\Messaging\Meldungen\Messaging]*/; #$_GET['ScriptID']; 
$number = $_GET['number']; 

IPS_LogMessage("Message",$number);
IPS_LogMessage("Message",$ScriptID);

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

################################################################################ 
?>

Hi Thomas,
das mit der Zeitanzeige finde ich auch super. Magst du den Part posten wo man schrauben muss um dein Ergebnis zu erhalten?

Hi sunni2002,

das ist aber noch das alte Script wo es getrennte Scripts für Löschen und Meldungsverwaltung gibt! Ab Version 2 ist das alles über ein Script gelöst wo der Webhook auf dieses zeigt …

Pitti

Alles klar. Danke!
Habe mich durch den Thread gehantelt, wo es mit den Versionen ziemlich unübersichtlich geworden ist. Vielleicht kann man die Letztversion im 1. Post aktuell halten?

Danke, für deine Rückmeldung. Klasse Teil! :slight_smile:

Ja, habe ich mir auch schon gedacht das zu trennen in Grundversion und Erweiterungs-Thread. Es soll ja jeder gern seine Anpassungen vornehmen, aber dann wird es schwer mit der Fehlerbehebung und Updats! Ich schau mal!

Danke Pitti

Hallo,

Grundsätzlich finde ich das Meldungs-System wirklich super ! Leider habe ich ein kleines Problem. Beim Hinzufügen einer Meldung bekomme ich im Webfront eine Fehlermeldung und die Seite lädt neu… Es handelt sich um folgenden Fehler : „Cannot Find Object with ID : 76543“ Die ID Entspricht der ID des Timers, welcher für das löschen der Meldung angelegt wird… Ich habe die Zeile :

IPS_SetParent($eventID, $_IPS[‚SELF‘]);

In der Funktion addMessage ausgemacht … Leider finde ich derzeit keine Lösung … ;-(

Ich wäre für jede Hilfe dankbar …

Gruß

Klaus

Bin gestern leider nicht dazu gekommen es mir anzuschauen, melde mich aber noch.

Ciao Heiko

Habe es mir gerade mal schnell angeschaut.

Das ist doch diese Stelle …


if ($expires > time()) {
			$eventID = IPS_CreateEvent(1);
			IPS_SetParent($eventID, $_IPS['SELF']);
			IPS_SetName($eventID, 'Remove Message #'.$number);

Wenn ich Deine Zeilen richtig interpretiere wird ja in der Zeile davor das Event erzeugt mit ID 76543, richtig?

Sicher das es die Event ID ist? Das muss dann ein Seiteneffekt sein, weil ein Fehler da kann ich nicht erkennen :frowning:

Ciao Heiko

Moin Pitti,

vielen Dank für das sehr nützliche Skript :slight_smile:

Mir ist aufgefallen, dass ab der V 2.2 in der Dokumentation dieser Satz fehlt:

#Zusätzlich muss noch die Webfront ID 
# eingetragen werden und die notwendige Webhook "/hook/msg" angelegt werden. 

Ich habe danach gesucht, da ich zuerst den WebHook /hook/remove angelegt hatte und das nicht funktionierte bis ich den o. g. Satz gefunden habe :wink:

Gruß
Hans

Hi Hans,

ups, da hast Du Recht, bei möglichen Updates ist es wieder dabei :wink:

Ciao Heiko

Moin Heiko,

zwischenzeitlich habe ich deine tolle Idee und das Skript umgesetzt für IPSView. Funktioniert perfekt :slight_smile:

Da ich mich mit dem WF nie weiter beschäftigt habe ist mir nicht ganz klar, wie das mit dem Seitenwechsel funktionieren soll :frowning: Ist es so gedacht, dass wenn eine solche Meldung auftaucht und das WF der Meldungsanzeige angezeigt wird, dass dann ein automatischer Wechsel zum Ziel WF erfolgen soll? So werde ich mir das jetzt in IPSView implementieren.

Diese Fehlermeldung von Klaus kann ich unter FF und IE bestätigen.

Es kommt zunächst der Hinweis

Trying reconnect in a few sconds ...

dann

Verbindung verloren. 

und danach die Cannot find object Meldung für das Event. Das WF startet neu und alles wird korrekt angezeigt.

Bei der nicht browserbasierten IPSView Implementierung passiert dies nicht. Ich vermute daher ein Timing Problem mit dem Browser.

Gruß
Hans

Hallo Hans,

freut mich das es auch in der „recycelten“ Version funktioniert :slight_smile:

Jein, ich hatte damit initial eine Hinweis anzweigen wollen wenn in meiner Abwesenheit neue Anrufe kamen und wollte dann auf die Seite mit der Anruferliste wechseln. Also wenn man auf den OK-Button drückt, nicht automatisch!

Kannst Du mal genau beschreiben wie man genau den Fehler reproduzieren kann! Also wie erzeugst Du die neue Meldung und wie kommt dann der Fehler? Also hast Du den Browser offen und führst in der Konsole ein Script aus das eine Meldung erzeugt, oder wie?

Danke Heiko

Hallo Heiko,

ja, es ist ganz einfach mit deinem Originalskript zu reproduzieren auch mit dem ungoogled Chrome. Konsole offen und WF offen. Dann

IPS_RunScriptWaitEx(14999 /*[Zeit-Scripte\Meldungsanzeige\Meldungen\Meldungsanzeige WF Pitti]*/, array('action' => 'add', 'text' => 'Testmeldung', 'expires' => time() + 180, 'removable' => true, 'type' => 0));;

Danach erscheint dies

Meldung_1.JPG

und dann ist wieder alles ok.

Kann man bei der WF Erstellung was falsch machen? Dort habe ich als Startkategorie die Kategorie angegeben unter der alles liegt.

Gruß
Hans

Danke Hans, werde es mal versuchen zu reproduzieren!

Falsch machen ist „relativ“ :smiley: Du mußt nur die „Meldungen“-Variable ins WF einbinden, das sollte reichen!

Gruß Heiko

Hi Hans,

habe es gerade mal im FF, MS Edge, Chrome ausprobiert - fehlerfrei :confused: (über Connect Dienst)

Kannst Du mir mal dein Script 1:1 schicken (PN), dann versuche ich mal zu vergleichen ob es Unterschiede gibt!

Danke Pitti

Hi Heiko,

ich reproduziere das mit deinem Originalskript. Das kann ich dir aber schicken wenn du das möchtest :wink:

Vielleicht ist folgender HInweis aber wichtiger für dich. Bei mir funktioniert es nämlich, wenn ich in der addMessage Funktion die Semaphoren Befehle auskommentiere und das Skript mit RunScriptEx aufrufe.

Dann tritt der Fehler erst auf, wenn ich viele Meldungen per Schleife erzeuge und es kann auch Müll passieren, da die Datenintegrität für den Zugriff der parallel laufenden Prozesse aufgehoben wird.

Gruß
Hans