Entweder versteh ich das System nicht oder es ist ein Bug, aktuell arbeite ich mit SP13P3 ist aber in den früheren SP's auch schon so:
TargetVisu aktiv, 2x Webvisu aktiv, drücke ich im Browser von Webvisu1 1x F5 für aktualisieren, dann passiert folgendes:
Die WebVisu zeigt mir jetzt die CurrentClientID von 3 an(bisher CurrentClientID 1).
Gehe ich die Clients im IEC-Code per GetNextClient durch meldet mir die Funktion
VU.VisuElemBase.Visu_Globals.g_ClientManager.GetClientId(pClient:= pClientData) weiterhin eine ClientID 1 zurück
eine Zeile später ohne GetNextClient auszuführen bekomme ich über aiGlobalClientId[iIndex]:=pClientData^.GlobalData.GlobalClientID;
die GlobaleClientID von 3 angezeigt. Für mich sieht es so aus, wie wenn die Funktion GetClient da noch eine veraltete ClientID zurück gibt?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
hier ein paar erklärende Sachen.
- GlobalClientID = interne ID für den Client
- CurrentClientID = wird für den spezifischen Client immer auf dessen GlobalClientID aktualisiert. Keine Garantie, was passiert, was in dem Wert steht, wenn nicht aus der Visu darauf zugegeriffen wird
- GetClientID = Anderer Wertebereich (hat nichts mit der GlobalClientID zu tun)
Vielen Dank für die Erklärung!
Habe mich an dem FB und auch den Methoden versucht, leider ohne Erfolg. Der FB meldet mir immer den Error NO_ITERATION_CALLBACK.
Mein Code sieht folgendermaßen au, das Programm VisuPrg rufe ich im Visutask auf:
PROGRAMVisuPrgVARÂ Â fbVisuIt:VU.FbIterateClients;Â Â instItCallback:VU.IVisualizationClientIteration;Â Â iVisuClient:VU.IVisualizationClient;Â Â xItStart:BOOL;END_VARfbVisuIt(itfClientFilter:=VU.Globals.AllClients,xExecute:=xItStart,itfIterationCallback:=instItCallback);//instItCallback.EndIteration();//instItCallback.HandleClient(iVisuClient);//instItCallback.StartIteration();
Wie ist die richtige Vorgehensweise, bzw. wo mache ich Fehler. Was kann ich mir unter dem IterationCallback vorstellen?
Muss man die Iteration auch erst stoppen und nach der schrittweisen Iteration wieder stsrten, wie bisher beim g_ClientManager?
Wäre genial, wenn ich da nochmal Informationen bekommen könnte!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Vielen Dank für das Beispiel, Marcel! Muss ich mir in Ruhe anschauen. Warum ich mich überhaupt mit der Iteration rumschlage:
ich habe die TargetVisu und eine Webvisu mit fester IP Adresse die ich synchronisieren muss(Hauptpanel und RemotePanel an einer Anlage), die restlichen Webvisu's(Fernzugriff,ProgrammingSystem..) sollen unabhängig von der TargetVisu bedienbar sein und diese nicht beeinflussen. Somit kann ich nicht die CurrentVisuVariablen aktivieren, benötige sozusagen eine "selektive CurrentVisuVariable". Hättest Du mir da einen Tipp/Vorgehensweise, wie ich das sauber umsetzen kann? Aktuell habe ich für jeden der beiden Clients eine Struktur angelegt, ermittle und speichere die aktuellen Visu's/Frames und überwache diese auf Änderung. Erfolgt in einem der beiden Client eine Änderung, löse ich den Wechsel beim anderen Client über IEC-Code aus, incl. Login in die entsprechende UserGroup usw. Vielleicht geht das ja viel einfacher.
VG. David
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ich hoffe ich darf mich hier mal einklinken...
Ich würde gerne die aktuelle ClientID, ClientType, UserName sowie die IP-Adresse des Clients auslesen.
Ich hab mir das Beispiel angesehen und bin auf ein paar Problemchen gestoßen.
Wenn ich das Beispiel nehme und eine Visualisierung öffne, funktioniert das wunderbar. So bald ich eine zweite Visu öffne (also mehrere Clients habe) und die entsprechend andere Visualisierungsseite aufrufe, klappt das nicht mehr.
Wenn ich in der GVL noch z.B: iClientID und wsUserName hinzufüge und in der Methode "HandleClient" entsprechend das Interface "itfClient.ClientID" und "UserName" darauf zu weiße, bekomme ich bei der ID nur -1 und bei UserName "" raus (hab einen Benutzer angelegt und angemeldet).
EDIT: Berichtigung... der User wird richtig ausgegeben... die ID nur leider mit -1
Ich bräuchte insgesamt eine Übersicht, bei der mir Alle aktiven Clients mit ID, IP-Adresse, VisuType und aktuell angemeldeter Benutzer angezeigt wird. Wie könnte ich das hin bekommen? Ich bräuchte irgendwie ein Array, in das mir die Daten der einzelnen Clients geschoben werden.
Wie läuft das jetzt allgemein mit der Iteration...Bei Execute TRUE startet er die Iteration und bei Execute auf FALSE stoppt sie? Ich komm mit der Doku nicht so ganz klar...
In deinem Beispiel hast du das über den Taster gemacht...wird dann pro Client eine neue Flanke benötigt?
Wäre schön wenn du mir hier noch Hilfestellung geben könntest.
Gruß Chris
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ok hatte nur gedacht vielleicht hast du ein Beispiel parat.
Ich hab da selbst mal was erstellt... bin jetzt doch von allein etwas weiter gekommen...
Das würde für mich auch soweit reichen. Bin mir aber nicht sicher ob das generell so gedacht ist.
Bin mir nur nicht sicher, ob ich alle "bösen Fehler", die auftreten können abgefangen habe...vielleicht kannst dus dir mal bei Gelegenheit ansehen.
Danke Chris für das Erweitern des Beispiels, das ist doch schon mal ein guter Anfang. Ich habe noch den ClientType ermittelt und in der Tabelle ergänzt, da das in meinem Fall eine Rolle spielt.
eine Frage hätte ich noch an Marcel...
Ich habe das Projekt bei mir getestet und es hat funktioniert...Ich gebe das Projekt weiter und beim Kollegen wird immer ClientID = -1 ausgelesen.
An was könnte das liegen?
Edit: Hab festgestellt, dass es das Problem nicht gibt, wenn ich einmal z.B. ein Rechteck mit Textvariable "CURRENTCLIENTID" verwendet habe
Gruß Chris
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
naja das war jetzt eigentlich immer so, wenn ich das Projekt neu aufgemacht habe und nirgends "CURRENDUSERID" verwendet habe.
So bald das mal drin war, klappts...
Ich hätte da noch eine andere Frage:
Ich habe mir mit "VisuElems.CurrentRemainingAutoLogoutTime" in der Visualisierung die noch verbleibende Zeit bis zum automatischen Ausloggen anzeigen lassen.
Ebenso habe ich mir mit Hilfe unserer Client-Iteration eine Routine geschrieben, die sich merkt, sobald ein User bei einem Client eingeloggt ist.
So kann ich sehen, ob auf irgend einem Client ein bestimmter User eingeloggt ist.
Ich möchte jetzt als Administrator die Möglichkeit haben einen ...nennen wir es "maintenance-mode" einzuschalten. Dieser soll, wenn auf irgend einem Client ein Administrator ist, von diesem aktiviert werden können. Anschließend wird das automatische Ausloggen abgeschaltet, bis der "maintenance-mode" wieder deaktiviert wird.
Nun bräuchte ich noch eine Möglichkeit entweder das automatische Ausloggen vom Code aus im laufenden Betrieb zu deaktivieren und aktivieren, oder die verbleibende Zeit immer wieder zu überschreiben.
Es scheint auch einen Baustein zu geben, der das kann... nur leider ist die Doku dazu sehr spärlich...
"VisuUserManagement.VisuUserMgmt" und hier die Property "CurrentUserLockoutTime"
Da müsste man doch "get" und "set" machen können oder nicht? Wie kann man das verwenden?
Wäre dankbar über Vorschläge
Gruß Chris
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
dafür gibt es aktuell nicht wirklich was.
Mal abgesehen davon, dass es sicherheitstechnisch Probleme machen könnte wenn man sich als Admin vergisst auszuloggen (voller Zugriff & keine Auto-Logout).
Ich hab jedoch ein Improvement dafür eingetragen!
LG
Marcel
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Ich hab jetzt mal ein wenig rum probiert und folgendes scheint zu funktionieren (Hab hier nen FB geschrieben):
Deklaration:
FUNCTION_BLOCKMaintenanceMode_31VAR_IN_OUT
  xActivateMaintenanceMode:BOOL; //IF TRUE then Maintenance-Mode is activeEND_VARVAR_INPUT
  xAdminActive:BOOL;      //If TRUE then min. one admin is active
  iNumberOfActiveAdmins:INT;  //Here the number of active Admins must be givenEND_VARVAR_OUTPUTEND_VARVAR
  pClient:POINTERTOVisuElems.VisuStructClientData;
  _VisuFbClientTagDataHelper          : VisuElems.VisuFbClientTagDataHelper;
  asClientName:ARRAY [0..50] OFWSTRING;
  aiClientID:ARRAY [0..50] OFINT;
  _apVisuStructClientData : ARRAY[0..50] OFPOINTERTOVisuElems.VisuStructClientData;
  xSetDone: BOOL;
  iNumberOfActiveAdmins_old: INT;END_VAR
Programmteil:
//IterateoverallcurrentlyactivevisualizationclientsVisuElems.g_ClientManager.BeginIteration();WHILE(pClient :=VisuElems.g_ClientManager.GetNextClient())<>0DO//ifmin. oneclientisloggedin
  aiClientID[pClient^.GlobalData.GlobalClientID]:=pClient^.GlobalData.GlobalClientID; //read Client ID
  _apVisuStructClientData[pClient^.GlobalData.GlobalClientID] :=pClient; //store all client infos in an array
  asClientName[pClient^.GlobalData.GlobalClientID]:=pClient^.GlobalData.CurrentUserName; //store CurrentUserName in array
   Â
  IFasClientName[pClient^.GlobalData.GlobalClientID] ="Admin"ANDxActivateMaintenanceModeANDNOTxSetDoneTHEN//IfMaintenance-ModeTRUEandoneAdminisloggedin
    pClient^.GlobalData.UseAutoLogoutTime:=FALSE;
    xSetDone:=TRUE;
  END_IF
 Â
  IFasClientName[pClient^.GlobalData.GlobalClientID] ="Admin"ANDNOTxActivateMaintenanceModeANDxSetDoneTHEN//IfnoMaintenanceModethenAutoLogoutactive
    pClient^.GlobalData.UseAutoLogoutTime:=TRUE;
    xSetDone:=FALSE;
  END_IF
 Â
  //checkifnoadminisactive
  IFNOTxAdminActiveTHEN
    xSetDone:=FALSE;
  END_IF
 Â
  //checkifoneadminlogsout
  IFiNumberOfActiveAdmins<iNumberOfActiveAdmins_oldTHEN
    xSetDone:=FALSE;
  END_IF
 Â
END_WHILE//MaintenancemodedeactivateifnoadminisloggedinIFiNumberOfActiveAdmins<=0THEN
  xActivateMaintenanceMode:=FALSE;END_IFiNumberOfActiveAdmins_old:=iNumberOfActiveAdmins;
Im Vorlauf habe ich auch einen Baustein geschrieben, der mir ausließt wie viele Admins gerade eingeloggt sind. Diesen verschalte ich auf die hier verwendeten Inputs.
Bis jetzt funktioniert das ganz gut... Ich hoffe da kann im Hintergrund nichts böses passieren?
Gruß Chris
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
von mir wird es keine Garantie geben, dass beim Zugriff auf interne Daten nichts schief geht
Und auch keine Aussage, dass das für immer so gehen wird.
LG
Marcel
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
@Marcel: wird es in absehbarer Zeit eine Schulung geben, wo man einen Ãœberblick/Einblick in den Aufbau und die Arbeitsweise der Visu bekommt?
Wo kann man Ideen/Wünsche für neue VisuElemente einreichen?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ich hätte mal noch eine Frage zu dem Thema.
Warum ist es denn nicht bei allen Clients möglich eine IP-Adresse zu erhalten? Z.B. mit "ProgrammingSystem" ist es nicht möglich eine IP zu bekommen.
Ebenso wenn ich als Client den MicroBrowser von IniNet nutze. Er zeigt mir als VisuType WebVisualization an, jedoch kann er keine IP ermitteln.
Mit einem normalen Browser bekomm ich die IP aber.
Gruß Chris
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Originally created by: D. Kugler
Entweder versteh ich das System nicht oder es ist ein Bug, aktuell arbeite ich mit SP13P3 ist aber in den früheren SP's auch schon so:
TargetVisu aktiv, 2x Webvisu aktiv, drücke ich im Browser von Webvisu1 1x F5 für aktualisieren, dann passiert folgendes:
Die WebVisu zeigt mir jetzt die CurrentClientID von 3 an(bisher CurrentClientID 1).
Gehe ich die Clients im IEC-Code per GetNextClient durch meldet mir die Funktion
VU.VisuElemBase.Visu_Globals.g_ClientManager.GetClientId(pClient:= pClientData) weiterhin eine ClientID 1 zurück
eine Zeile später ohne GetNextClient auszuführen bekomme ich über aiGlobalClientId[iIndex]:=pClientData^.GlobalData.GlobalClientID;
die GlobaleClientID von 3 angezeigt. Für mich sieht es so aus, wie wenn die Funktion GetClient da noch eine veraltete ClientID zurück gibt?
Hallo,
hier ein paar erklärende Sachen.
- GlobalClientID = interne ID für den Client
- CurrentClientID = wird für den spezifischen Client immer auf dessen GlobalClientID aktualisiert. Keine Garantie, was passiert, was in dem Wert steht, wenn nicht aus der Visu darauf zugegeriffen wird
- GetClientID = Anderer Wertebereich (hat nichts mit der GlobalClientID zu tun)
Für das Iterieren über Clients gibt es in den Visu Utils ein paar nütliche FBs, siehe hierzu https://help.codesys.com/webapp/t6Wggu4 ... n=3.5.12.0
Das ist das empfohlene Vorgehen.
LG
Marcel
Originally created by: D. Kugler
Vielen Dank für die Erklärung!
Habe mich an dem FB und auch den Methoden versucht, leider ohne Erfolg. Der FB meldet mir immer den Error NO_ITERATION_CALLBACK.
Mein Code sieht folgendermaßen au, das Programm VisuPrg rufe ich im Visutask auf:
Wie ist die richtige Vorgehensweise, bzw. wo mache ich Fehler. Was kann ich mir unter dem IterationCallback vorstellen?
Muss man die Iteration auch erst stoppen und nach der schrittweisen Iteration wieder stsrten, wie bisher beim g_ClientManager?
Wäre genial, wenn ich da nochmal Informationen bekommen könnte!
Hallo,
VisuUtils hat den Vorteil, dass diese nicht aus der VisuTask ausgerufen werden muss!
Aktuell sehe ich auch keine Implementierung für instItCallback : VU.IVisualizationClientIteration;
Anbei ein kleines Beispiel!
LG
Marcel
Visu Util Iterate.project [177.7 KiB]
Originally created by: D. Kugler
Vielen Dank für das Beispiel, Marcel! Muss ich mir in Ruhe anschauen. Warum ich mich überhaupt mit der Iteration rumschlage:
ich habe die TargetVisu und eine Webvisu mit fester IP Adresse die ich synchronisieren muss(Hauptpanel und RemotePanel an einer Anlage), die restlichen Webvisu's(Fernzugriff,ProgrammingSystem..) sollen unabhängig von der TargetVisu bedienbar sein und diese nicht beeinflussen. Somit kann ich nicht die CurrentVisuVariablen aktivieren, benötige sozusagen eine "selektive CurrentVisuVariable". Hättest Du mir da einen Tipp/Vorgehensweise, wie ich das sauber umsetzen kann? Aktuell habe ich für jeden der beiden Clients eine Struktur angelegt, ermittle und speichere die aktuellen Visu's/Frames und überwache diese auf Änderung. Erfolgt in einem der beiden Client eine Änderung, löse ich den Wechsel beim anderen Client über IEC-Code aus, incl. Login in die entsprechende UserGroup usw. Vielleicht geht das ja viel einfacher.
VG. David
Hallo David,
die aktuell aktive Visu für jeden Client findet sich auch im Interface IVisualizationClient im Feld CurrentVisuName.
Ebenso kann das Iterieren auch zum spezifischen Wechseln von Visu-Seiten verwendet werden, siehe https://help.codesys.com/webapp/t6Wggu4 ... =VisuUtils .
LG
Marcel
Hallo,
ich hoffe ich darf mich hier mal einklinken...
Ich würde gerne die aktuelle ClientID, ClientType, UserName sowie die IP-Adresse des Clients auslesen.
Ich hab mir das Beispiel angesehen und bin auf ein paar Problemchen gestoßen.
Wenn ich das Beispiel nehme und eine Visualisierung öffne, funktioniert das wunderbar. So bald ich eine zweite Visu öffne (also mehrere Clients habe) und die entsprechend andere Visualisierungsseite aufrufe, klappt das nicht mehr.
Wenn ich in der GVL noch z.B: iClientID und wsUserName hinzufüge und in der Methode "HandleClient" entsprechend das Interface "itfClient.ClientID" und "UserName" darauf zu weiße, bekomme ich bei der ID nur -1 und bei UserName "" raus (hab einen Benutzer angelegt und angemeldet).
EDIT: Berichtigung... der User wird richtig ausgegeben... die ID nur leider mit -1
Ich bräuchte insgesamt eine Übersicht, bei der mir Alle aktiven Clients mit ID, IP-Adresse, VisuType und aktuell angemeldeter Benutzer angezeigt wird. Wie könnte ich das hin bekommen? Ich bräuchte irgendwie ein Array, in das mir die Daten der einzelnen Clients geschoben werden.
Wie läuft das jetzt allgemein mit der Iteration...Bei Execute TRUE startet er die Iteration und bei Execute auf FALSE stoppt sie? Ich komm mit der Doku nicht so ganz klar...
In deinem Beispiel hast du das über den Taster gemacht...wird dann pro Client eine neue Flanke benötigt?
Wäre schön wenn du mir hier noch Hilfestellung geben könntest.
Gruß Chris
Hallo Chris,
das Beispiel hatte nicht den Anspruch alle Werte auszulesen. Es sollte bloß kurz erläutern, wie das mit den VisuUtils funktioniert.
Wir verwenden für die VisuUtils auch nur das Common Behaviour Model (https://help.codesys.com/webapp/behavio ... DevSummary) genauer gesagt CBML.ETrig
Wenn ich dazu komme, mach ich ein kleines Bespiel zum Auslesen aller Daten.
LG
Marcel
Hallo Marcel,
ok hatte nur gedacht vielleicht hast du ein Beispiel parat.
Ich hab da selbst mal was erstellt... bin jetzt doch von allein etwas weiter gekommen...
Das würde für mich auch soweit reichen. Bin mir aber nicht sicher ob das generell so gedacht ist.
Bin mir nur nicht sicher, ob ich alle "bösen Fehler", die auftreten können abgefangen habe...vielleicht kannst dus dir mal bei Gelegenheit ansehen.
Gruß Chris
Visu Util Iterate.project_V01.project [217.34 KiB]
Originally created by: D. Kugler
Danke Chris für das Erweitern des Beispiels, das ist doch schon mal ein guter Anfang. Ich habe noch den ClientType ermittelt und in der Tabelle ergänzt, da das in meinem Fall eine Rolle spielt.
Visu Util Iterate_V2.project [202.47 KiB]
Hi,
eine Frage hätte ich noch an Marcel...
Ich habe das Projekt bei mir getestet und es hat funktioniert...Ich gebe das Projekt weiter und beim Kollegen wird immer ClientID = -1 ausgelesen.
An was könnte das liegen?
Edit: Hab festgestellt, dass es das Problem nicht gibt, wenn ich einmal z.B. ein Rechteck mit Textvariable "CURRENTCLIENTID" verwendet habe
Gruß Chris
Hallo ihr beiden,
erst mal vielen Dank fürs Teilen der Projekte!
Ich habe direkt noch eine Tabelle verwendet
Bezüglich deiner Frage: Nein, dass sagt mir nichts. Wenn du es nachstellen kannst, schau ich es mir gerne an!
LG
Marcel
Visu Util Iterate_V3.project [192.23 KiB]
Hi,
naja das war jetzt eigentlich immer so, wenn ich das Projekt neu aufgemacht habe und nirgends "CURRENDUSERID" verwendet habe.
So bald das mal drin war, klappts...
Ich hätte da noch eine andere Frage:
Ich habe mir mit "VisuElems.CurrentRemainingAutoLogoutTime" in der Visualisierung die noch verbleibende Zeit bis zum automatischen Ausloggen anzeigen lassen.
Ebenso habe ich mir mit Hilfe unserer Client-Iteration eine Routine geschrieben, die sich merkt, sobald ein User bei einem Client eingeloggt ist.
So kann ich sehen, ob auf irgend einem Client ein bestimmter User eingeloggt ist.
Ich möchte jetzt als Administrator die Möglichkeit haben einen ...nennen wir es "maintenance-mode" einzuschalten. Dieser soll, wenn auf irgend einem Client ein Administrator ist, von diesem aktiviert werden können. Anschließend wird das automatische Ausloggen abgeschaltet, bis der "maintenance-mode" wieder deaktiviert wird.
Nun bräuchte ich noch eine Möglichkeit entweder das automatische Ausloggen vom Code aus im laufenden Betrieb zu deaktivieren und aktivieren, oder die verbleibende Zeit immer wieder zu überschreiben.
Es scheint auch einen Baustein zu geben, der das kann... nur leider ist die Doku dazu sehr spärlich...
"VisuUserManagement.VisuUserMgmt" und hier die Property "CurrentUserLockoutTime"
Da müsste man doch "get" und "set" machen können oder nicht? Wie kann man das verwenden?
Wäre dankbar über Vorschläge
Gruß Chris
Hallo Chris,
dafür gibt es aktuell nicht wirklich was.
Mal abgesehen davon, dass es sicherheitstechnisch Probleme machen könnte wenn man sich als Admin vergisst auszuloggen (voller Zugriff & keine Auto-Logout).
Ich hab jedoch ein Improvement dafür eingetragen!
LG
Marcel
Hi Marcel,
Ich hab jetzt mal ein wenig rum probiert und folgendes scheint zu funktionieren (Hab hier nen FB geschrieben):
Deklaration:
Programmteil:
Im Vorlauf habe ich auch einen Baustein geschrieben, der mir ausließt wie viele Admins gerade eingeloggt sind. Diesen verschalte ich auf die hier verwendeten Inputs.
Bis jetzt funktioniert das ganz gut... Ich hoffe da kann im Hintergrund nichts böses passieren?
Gruß Chris
Hallo Chris,
von mir wird es keine Garantie geben, dass beim Zugriff auf interne Daten nichts schief geht
Und auch keine Aussage, dass das für immer so gehen wird.
LG
Marcel
Originally created by: D. Kugler
@Marcel: wird es in absehbarer Zeit eine Schulung geben, wo man einen Ãœberblick/Einblick in den Aufbau und die Arbeitsweise der Visu bekommt?
Wo kann man Ideen/Wünsche für neue VisuElemente einreichen?
@D.Kugler
Dazu kann ich leider überhaupt nichts sagen, das liegt im Bereich des Produktmanagement...
Das einfachste wird sein über mich... Sonst könnte man wahrscheinlich über den Store auch eine Anfrage schicken.
LG
Marcel
Hallo,
ich hätte mal noch eine Frage zu dem Thema.
Warum ist es denn nicht bei allen Clients möglich eine IP-Adresse zu erhalten? Z.B. mit "ProgrammingSystem" ist es nicht möglich eine IP zu bekommen.
Ebenso wenn ich als Client den MicroBrowser von IniNet nutze. Er zeigt mir als VisuType WebVisualization an, jedoch kann er keine IP ermitteln.
Mit einem normalen Browser bekomm ich die IP aber.
Gruß Chris
Hallo Chris,
Bezüglich dem ProgrammingSystem: Das ist aktuell nicht unterstützt, da es viele Wege gibt sich mit der Steuerung zu verbinden.
Bezüglich dem MicroBrowser: Bitte wende dich direkt an IniNet.
LG
Marcel