Meldungsanzeige im WebFront

Sehe gerade das RemoveTypes selbst nicht den Semaphore nutzt, nur die jedesmal aufgerufene Funktion RemoveMessage :eek:

Werde mal schauen ob ich das umbauen kann und dann müsstest Du mal testen!

Gruß Heiko

Einzelne Meldungen kann ich ohne Probleme mit einem Klick löschen.

Hi Pitti, gibts da schon was Neues? Will nur mal nachfragen, mach dir keinen Stress…

lg

Hallo Leute,

habe mich mal auf den Weg gemacht hieraus ein Modul zu erstellen. Wird noch ein paar Stunden Arbeit sein, aber ist machbar. Im Laufe der Jahre sind hier verschiedene Ansätze gemacht worden und das Skript nicht nur weiter sondern auch in verschiedene Richtungen erweitert worden.

Ein Sachverhalt hat mich nachdenklich gemacht: In der jetzigen Version wird als Rückgabe auf ein „add“ eine MessageID zurückgegeben. Diese müsste ich mir dann beim jeweiligen „Auftraggeber“ merken.
Ich hatte das so in Erinnerung, dass ich im aufrufenden Skript selbst eine MessageID vorgeben kann. Dort habe ich dann immer die jeweilige ObjektID des „Auftraggebers“ genommen, die ist im IPS eindeutig und muss nicht extra gesichert werden und kann daher auch nicht so schnell „vergessen“ werden…

Meinungen dazu?

Joachim

…vielleicht kann mich mal jemand an einer Stelle unterstützen, an der ich nicht so bewandert bin.
Die „Originalzeile“ lautet:

$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>';

Der „Link“ für den Hook lautet hier

url: \'hook/msg

Im Modul heißt er etwa so:

$HookLink = "hook/IPS2MessageDisplay_".$this->InstanceID;

Bekomme es nicht hin, den einen gegen den anderen zu tauschen…:cool:

Joachim

…ich führe meinen Monolog einmal weiter.:rolleyes:

Das Modul ist im Prinzip soweit funktionsfähig. Es geht ab jetzt noch um ein paar Details.

Bisher ist es ja so, das bei einem Klick auf den Button

  • nichts passiert bzw. die Meldung erscheint, dass diese Nachricht nicht bestätigt werden kann
  • die Meldung verschwindet bzw. bestätigt wird
  • der Sprung zu einer bestimmten Seite im Webfront erfolgt

Bestätigung der Meldung und der Sprung zu einer bestimmten Seite im Webfront sollten sich nicht ausschließen, von daher würde ich es gerne so machen, dass ein weiterer Button angezeigt wird, wenn ein Webfront-Ziel gesetzt wird.

Jemand dabei der mich dabei unterstützt? Dieser HTML-Kram ist nicht so mein Ding…

Joachim

…habe es jetzt dann doch durch try-and-error hinbekommen.

Was noch nicht richtig läuft ist der Part mit dem Zeitstempel:

if ($Message['Image']) {
					$title = ' ';
                			if ($ShowTime == true) {
                    				$title .= 'title=\''.date("d.m.Y H:i", $Message['Timestamp']).'\' ';      
					}
                			$Image = '<img src=\'img/icons/'.$Message['Image'].'.svg\''.$title.'></img>';
					//$Image = '<img src=\'img/icons/'.$Message['Image'].'.svg\'></img>';
				}
				else {
					$Image = '<img src=\'img/icons/Ok.svg\'></img>';
				}

Wer es mal ausprobieren möchte:
GitHub - Joey-1970/IPS2MessageDisplay: IP-Symcon MessageDisplay für das Webfront

Habe mich hier sehr stark an dem Skript hier orientiert, eine Änderung ist die "Verfallszeit der Meldung, diese wird nur in Sekunden angegeben.
Beispielaufrufe:

IPS2MessageDisplay_Add(13207, 12340, "Test 0", 0, false, 0, "Bulb", "item3807");

IPS2MessageDisplay_Add(13207, 12341, "Test 1", 30, true, 1, "Bike", "");

IPS2MessageDisplay_Add(13207, 12342, "Test 2", 0, true, 2, "Tree", "");

Joachim

…die bisherigen Fragestellungen sind bereits gelöst.

Jetzt geht es noch mal um Folgendes:
Im Skript ist der Pfad zu den Icons mit „img/icons/Iconname.svg“ (Ursprung wohl usr/share/symcon/webfront) angegeben. Wenn der Skin ein anderer ist (z.B. der LightSkin) dann sind die weißen Standardicons nicht mehr sichtbar. Der Skinname lässt sich ermitteln, der Pfad sollte dann angepasst werden an den Skin, leider funktioniert Skinname/img/icons/Iconname.svg (wohl var/lib/symcon/webfront) nicht.

Icons aus der Standardinstallation: „usr/share/symcon/webfront)/img/icons/Iconname.svg“
Icons aus dem gewähltem Skin: „var/lib/symcon/webfront/SkinLight/img/icons/Iconname.svg“

Aber: schaue ich in den zuletzt genannten Ordner sind dort nur zwei Icons. Woher bezieht der LightSkin sein schwarzen Icons? Und wie würde man da rankommen?

Joachim

morgen,

finde ich gut das du aus de Meldungsanzeige ein Modul machst.
ich logge so gut wie alles mit und deswegen kommt da pro tag schon einiges zusammen.
bei der jetzigen Version habe ich immer wenn es viele Meldungen im Speicher gibt, mühe einzelne Meldungen zu löschen, also z.b. wenn ich nur alle Warnmeldungen (2: gelb) löschen möchte. dann hängt sich IPS nämlich auf.

ist das beim neuen modul gelöst?

lg

…probiere es doch mal aus…[emoji6]

Im Kern arbeitet das Modul etwas anders als das Skript, einen expliziten „Stresstest“ habe ich noch nicht gemacht.

Aus meiner Sicht ist bis auf die Farbe der Icons (siehe oben) erst einmal alles „gebrauchsfertig“…

Joachim

Hallo,

die Frage ist will man hier einen eigenen Logging Mechanismus abbilden oder eine reine Anzeige von x-belibiegen Dinge darstellen zu können.

Was versteht man unter logging? Logging sehe eher so an wie IP Symcon es eh schon anbietet und der Umfang ist natürlich im seinen Funktionen viel mehr ausgeprägter als die hier angesetzte Logik.

Ich persönlich sehe das in der Form nicht als Logging funktionalität sondern eher für aktuelle Zustände darstellen zu können die sich auf Dauer wieder auflösen bzw. quittiert werden können.

Gruß

Gesendet von meinem SM-G975F mit Tapatalk

ja mach ich! Danke

…das sehe ich genauso, gewisse Aktionen wie z.b. Alarmanlage scharf/unscharf, Zutritt Haustür, Schadstoffgrenzwertüberschreitungen usw., will ich aber nur manuelle löschen bzw. quittieren.

ich schätze mal so 150 aufwärts bringen dann einen absturz beim löschen… (altes Skript)
trotzdem kommen da nach ein paar tagen, wenn ich nicht zuhause bin, zu viele Einträge zusammen

…ich habe hier aus diesem „Endlos-Thread“ versucht ein „Best-of“ zu machen. Einiges ist sicherlich noch integrierbar.

Bin gespannt auf das Ergebnis des „Stresstests“.

@IPS-Team: Würde mich über einen Tipp freuen, wo ich die zum Skin (z.B. LIghtSkin) gehörende Icons finde…:rolleyes:
(auf dem Raspberry Pi habe ich der Verzeichnisstruktur diese nicht gefunden)

Joachim

…das Modul MessageDisplay ist jetzt zur „SplitterInstanz“ aufgestiegen. Hintergrund: Es gibt ein neues „MessageDisplaySupporter-Modul“ dass die Eingaben deutlich vereinfacht, wann und in welcher Form die Meldung erscheint kann in vielen Fällen durch dieses Modul - quasi ohne eigene Skripte - generiert werden.
Gibt noch einige Ideen zur Erweiterung, aber alles Step-by-Step.

Wie war das Ergebnis des Stresstests?

Joachim

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