IPSView 6.x und verschiedene Clients

Hallo da draussen,
ich nutze IPSView hier auf verschiedenen Betriebssystemen und verschiedenen Clients: Windows, iOS, iPadOS und macOS.
Leider funktioniert auf macOS die HTML-Box (noch?) nicht. Da ich natürlich nicht für jeden Client eine eigene IPSView schreiben möchte (ist mittlerweile sehr umfangreich geworden), habe ich zu den Seiten mit HTML-Boxen jeweils eine Alternative mit Textboxen erstellt.
Nun suche ich eine Möglichkeit, dass IPSView „erkennt“, dass es auf macOS „läuft“ und statt der HTML-Box-Seite die Text-Box-Seite aufruft, entweder durch Aufruf einer eigenen Seite oder aber über eine Seite, die alle Boxen enthält und je nach Client nur die passenden Boxen anzeigt.
Dabei muss bedacht werden, dass gegebenenfalls mehrere verschiedene Clients gleichzeitig aktiv sind, wodurch die Nutzung der Versteckt- oder SichtbarkeitsVariablen nicht infrage kommt. Die hätte Auswirkung auf alle Clients.
Ist so etwas über Workflows realisierbar (mit denen ich bisher noch überhaupt keine Erfahrungen und Kenntnisse habe)?
LG
Andreas

Hier suche ich auch schon seit längerer Zeit nach einer Möglichkeit, dass IPS View erkennt, auf welchem Client es läuft und man diese Erkennung über den View Designer nutzen kann. Leider ist mir keine Möglichkeit bekannt. Daher ein :+1: dafür …

Technisch gesehen, wäre die Info im HTTP-Header „user-agent“ enthalten. Wo der Browser dem Webserver (ip-symcon webfront) mitteilt welcher Browser und von welchem OS es ist und welche Sprache, etc.
Hatte in einer Webapplikation mal das Problem mit dem PDF öffnen, dass auf dem ios nicht korrekt dargestellt wurde, dann hatte ich was programmiert für die Unterscheidung.

Die Frage ist nur, wie kommt man im IPS-View an diese Infos heran. Hat man Zugriff auf die Server-Variablen bzw. die HTTP-Header ?

Aktuell steht im Skript bei Verwendung von ViewConnect die ViewID zur Verfügung, durch ViewCopy könnte Ihr jedem Client eine eigene View erstellen :wink:

„user-agent“ ist ja letztendlich auch nicht wirklich eindeutig.

@APieroth
Deine Anforderung ist mir noch nicht klar - selbst wenn ich den Client irgendwo mitgebe ändert das noch nichts am Snapshot den der Client zur Darstellung der Werte verwendet.

Wenn Dein HTML so „einfach“ ist, dass Du die Info auch mit einer TextBox darstellen kannst, dann hab ich eventuell eine Lösung für Dich. Der Client hat eine Möglichkeit einfaches HTML nativ darzustellen.

Dazu in den HMTL Header einfach die folgende Zeile reinschreiben:

<meta name="IPSView" content="flutter_widget_from_html" />

CSS und dergleichen wird nicht unterstützt, einfache HTML Elemente aber schon :wink:

Hallo Andreas,
ich habe von meiner Visualisierung einen Master, der dann für verschiedene Clients „aufbereitet“, will sagen kopiert wird, um den verschiedenen Betriebssystemen und Auflösungen Rechnung zu tragen (also: Master zu iPad, Windows, Webfront, macOS, Android).
Es ist mir dabei klar, dass es nur einen Snapshot für alle Visualisierungen gibt. Meine Überlegung war allerdings, ob es eine Möglichkeit gibt, dass je nach Client z.B. verschiedene PopUps oder Detailseiten geöffnet werden (also bei allen Clients mit HTML-„Fähigkeit“ ein(e) Popup/Detailseite mit HTML-Box, ohne HTML-„Fähigkeit“ eben die entsprechende Seite mit Textbox. Es müssten dazu im Snapshot beide Seiten vorliegen).
Ich vermute allerdings, dass diese „Fähigkeit“ im Client eingebaut werde müsste und nicht „von aussen“ programmiert werden kann. Die Entscheidung, welche Seite aufgerufen werden muss, fällt schliesslich im Augenblick des Aufrufs.

Tatsächlich ist mein HTML nicht sonderlich kompliziert. Es handelt sich meist um Tabellen, die von verschiedenen Modulen erzeugt werden (z.B. BatterieMonitor von Bayaro, Symcon IntegrityCheck etc) aber auch Ausgaben, die ich mit eigenen Skripten erzeuge.
Gerade bei den vorgefertigten Modulen ist es schwierig, sie auch zu einer reinen Textausgabe zu bewegen, will ich doch nicht den kompletten Code umbauen. Spätestens beim nächsten Update müsste ich dies immer wieder wiederholen.
Ich werde mal testen, ob ich hier mit dem von dir genannten HTML-Header weiter komme oder die Ausgaben der genannten Module eventuell über das „einfache“ HTML hinaus gehen.
Im Grunde ist es viel Aufwand für wenig Nutzen. So oft nutze ich IPSView auf meinem MachBook gar nicht. Wenn ich dann allerdings mal damit nachsehen möchte, welche (Fehler-)Meldung da gerade aufgelaufen ist und diese in HTML ausgegeben wird, dann geht das nicht.
LG
Andreas

Hm, leider brachte der Vorschlag mit dem Header keinen Erfolg.
Ich habe
<head><meta name="IPSView" content="flutter_widget_from_html" /></head>
und auch mal
<header><meta name="IPSView" content="flutter_widget_from_html" /></header>
eingetragen.
Egal was, ich sehe nur „Ein Browser wird in diesem Client nicht unterstützt“.

Gerade getestet - funktioniert bei mir bei einer HTMLBox, das ist egal, wichtig ist dass der exakte String irgendwo im HTML vorkommt :thinking:

Habe es gerade bei mir auch nochmal getestet, ohne dabei den HTML-Output eines meiner Module zu nutzen, sondern einen ganz einfachen
Ja, funktioniert.
Vermutlich beinhaltet der HTML-Output meiner Module eben jenen HTML-Code, der nicht kompatibel ist, weswegen ich dann genannte Meldung erhalte.

Edit: ERLEDIGT Habe es irgendwie nun doch hinbekommen…

Ich versuche in einem Script mir einen HTML String aufzubauen, der eine einfache Listbox aus verschiedenen Strings aufbaut, also ein Art Meldungsfenster mit Text Meldungen…

Beim Aufbau des HTML Strings scheitern meine Kenntnisse kläglich, ich habe viele Versuche unternommen, mit gelingt es nicht diesen String aufzubauen und als HTML darzustellen.

Variable in IPS als String mit Profil HTML aufgebaut.

Im Script versucht einer Variablen den o.a. HTML String aufzubauen…

Ja ich habe so gut wie keine HTML Kenntnisse, von daher wäre ich dankbar wenn mir jemand mit ein paar Codezeilen helfen könnte…

Die Meldungen sind in einer Symcon Variable geloggt, ich lese die geloggten Werte aus und möchte sie als „einfache HTML Box in IPSView“ auf einem Mac Client darstellen.

hier eine meiner mißlungenen Versuche:

<?php

$werte = AC_GetLoggedValues(49030, 21202, mktime(0, 0, 0, 1, 5, 2021), mktime(23, 59, 59, 31, 12, 2022), 0); 


foreach($werte as $wert)     {

$myMeldung = $wert['Value'];


$myString = '<meta name=' . '"IPSView"' . ' content=' . '"flutter_widget_from_html"' . ' />' . '<body bgcolor="#000000"><br><br><br><font size=7><font color=red<>' . $myMeldung ."<br></font>";
echo $myString;echo "\n";

 };


SetValue(28993,$myString);

Die Box ist leer…