Hallo,
wie kann man sich in das web interface einloggen -
username, pw aller Kombinationen greifen bei mir nicht zu.
Ferner, gibt es eine Delphi Integrationsschnittstelle in die Designer-Umgebung, so dass ein delphi-Programm die IPS-Skripte starten kann? bzw. Variable auslesen kann?
Wenn du die aktuelleste Version installiert hat, lad dir mal die TypeLibrary von IP-Symcon rein… (IP-Symcon COMServer Library). (Unter D2005 unter Component->Import Component) Es sind zwar nicht alle Funktionen vorhanden, die du hast, wenn du ein Modul direkt schreiben würdest; Für externes Triggern sollte es aber reichen. (Wenn du etwas Konkretes bauen willst, würde ich empfehlen das direkt als IPS Modul zu programmieren)
Der COMServer sollte sich in allen gängigen Sprachen nutzen lassen. Eine C# Demo hätte ich bei Interesse da. VBS Script steht im Update Thread. VB6/C/Java… ect. sollte aber nach dem selben Prinzip funktionieren.
Wenn du eine Netzwerklösung ala Designer suchst, kann ich dir die Backend Klasse die der Designer nutzt als Delphi Klasse zur Verfügung stellen.
Hallo,
habe versucht mit Hilfe der ISP COPServer-TLB eine Methode aufzurufen -
leider Erfolglos.
Das Objekt ipsInterface wird angelegt aber die Methode ‚ReadVarBoolean‘
erzeugt den Fehler:
Zugriffsverletzung bei Adresse 00ED62FC in Modul ‚Core.COMServer.dll‘.
Lesen von Adresse 00000000 aufgetreten.
Wo ist der bug?
Danke für jede Unterstützung,
Kraft
procedure TForm1.Button1Click(Sender: TObject); var
V : Variant;
ipsInterface : Environment;
xKontakt: wordbool; begin try
OleCheck(CoCreateInstance(Class_Environment, nil, CLSCTX_ALL, IEnvironment, ipsInterface));
V := ipsInterface.ReadVarBoolean(pchar('Kontakt.Status'),xKontakt) ;
if xKontakt then showmessage('ON');
Sorry, dass es solange Gedauert hat… War für ein paar Tage weg…
Hier ein Beispiel:
procedure TfrmMain.btnRunScriptClick(Sender: TObject);
var ips: IEnvironment;
begin
ips := GetActiveOleObject('IPS.Environment') as IEnvironment;
ips.RunScript('test');
end;
Es funktioniert problemlos als Windows- oder als Console-Programm - scheitert aber aus einer Apache2 CGI-BIN Umgebung (wamp v5) die Zeile mit „GetActiveOleObject“ auszuführen.
Benutz doch lieber mod_rewrite (hieß du so, oder?). Damit kannst du unter deinem Apache die IPS Scripte über das IPS interne WebInterface schicken und alles andere macht dann der Apache.
Ansonsten weiß ich nicht, wieso es im Apache Modul nicht gehen sollte…
leider ist …\web\index.php im Simple WebInterface für mich eine Idee
kryptisch. Mein Ziel ist es eine Aktion z.B.:
RunScript(const ScriptName: WideString) oder
ReadVarBoolean(VarName: PChar; out Value: WordBool)
über das WebInterface (oder wie auch immer ) auszuführen. Wie bekomme ich das gebacken?
Danke,
Kraft
Sorry, dass ich mich nich klar ausgedrückt habe.
Die „QuickSwitch“ - Fähigkeiten vom WIIPS reichen mir leider nicht aus.
Ich möchte, per WEB-Visualisierung von mir, auf die IPS-Skripte und Variablen zugreifen.
Danke,
Kraft
Hallo,
gibt es eine Beschreibung der Funktionen und Argumente für IPS_TLB.pas? (IPS.IEnvironment)
z.B.:
function GetVariables(out Value: OleVariant): HResult; stdcall;
Ich hoffe, dass mit dieser Funktion sämtliche Variablen erfasst werden können.
Danke,
Kraft
wenn du unter apache alle funktionen von ips nutzen möchtest (ohne url-rewrite) und du der web-programmierung (inkl. php) mächtig bist, kannst du dir eine generische wrapper-routiene schreiben, welche das ips-webinterface via apache mit php (oder perl, oder, oder… seitens des apache webservers) ansteuert um beliebige ips-skripte und ips-funktionen auszuführen und deren rückgaben unter apache (mit php, perl, oder wie auch immer) zu verarbeiten. da ich das interface noch nicht geschrieben habe kann ich derzeit leider kein code-sample liefern.
ips seite:
für das ips-webinterface schreibst du ein skript welches parameter via http entgegennimmt - nennen wir dieses skript einfach mal ips.php.
das skript muss als via http den namen einer aufzurufenden ips-funktion und dessen parameter empfangen können.
1funktionsnamen: f=xyz
nparameter: p1=foo&p2=bar&…
das skript ips.php wertet also nun die übergebenen parameter aus und ruft die entsprechende ips-funktion auf. da die ips-funktion meist irgendeinen rückgabewert liefert wieder dieser als ergebnis (z.b. plain-text) ausgegeben.
beispiele (das ips-webinterface ist auf port 84 konfiguriert):
apache seite:
du baust dir ein php-skript welches obige http-requests ausführt und die rückgaben passend verarbeitet - nennen wir diese funktion ipscmd. erweitern kann man das ganze durch eine ganze bibliothek von php-funktionen die den gleichen namen haben wie die ips-funktionen und ipscmd mit den passenden parametern versorgen.
danach wäre es möglich via apache-php (und dem includen der dafür eigens geschriebenen funktionen) ips-funktionen aufzurufen.
also würde auf dem apache-php folgendes funktionieren:
aufruf von: GetValueBoolean(„ist_daemmerung“);
-> aufruf ipscmd mit entsprechenden parametern
-> http-request an localhost:84/ips.php?f=GetValueBoolean&p1=ist_daemmerung
-> ips.php ruft entsprechende ips-funktion auf und sendet die rückgabe zurück
-> ipscmd nimmt die rückgabe entgegen und wandelt sie passend um
-> GetValueBoolean() (auf der apache seite) gibt den rückgabewert zurück
damit hast du einen wrapper - eine funktion/funktionsbibliothek, die befehle möglichst transparent umhüllt um, wie beispielsweise in diesem fall, durch eine neue kommunikationsschicht (hier via http) den befehl auszuführen.
bei dieser hier gegebenen anwendung muss man noch klären wie die http-request-parameter gequotet werden und wie/wo die typen der ips-parameter (bool,int,float,string,array) hinterlegt werden.
und falls Du das ganze an einem erreichbaren Server machst, solltest Du das ganze auch noch entsprechend verschluesseln bzw. tunneln. Nicht dass Du Dich eines Tages wunderst, warum Deine Heizung ausgeschaltet wurde…
Also achte auch auf Fragen der Sicherheit bei der Kommunikation.