SPS steuern per http request

Begonnen von b.b., 06. Februar 2012, 12:03:35

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

b.b.

Hallo!

Ich würde gerne von einem Webbrowser (oder CLI) einen http request absetzten und damit z.B. eine variable steuern. (Bool: on, off, toggle), evtl. int mit value

hat das schon mal jemand gemacht???
Wie warte ich auf einen request? Wie kann ich den dann auswerten?
Danke!!

peewit

welche sps hast du denn

es gibt bei einigen steuerungen sowieso schon eine möglichkeit dies zu machen
z.b. bei steuerungen die spidercontrol integriert haben

http://www.spidercontrol.net/deutsch/produkteuebersicht.htm

prinzipell sollte sich das realisieren lassen, so wie du es willst, jedoch habe ich in der network.lib
noch nichts passendes integriert

wenn du eine ip_control instanz einrichtest, im server modus auf port 80 (wenn schon von sps-system belegt -> anderen wählen !) dann werden auf jedenfall die daten auf der sps landen, jedoch musst du dann alles manuell auswerten

wenn du nicht sehr gut drauf bist, dann solltest du das eher lassen
ich werde das auf meine ideen-liste aufnehmen, jedoch kurzfristig werd es nichts geben ....


m-obi

Hallo falls das noch aktiv ist...
Ich hab es geschafft mit einer Phoenix Steuerung.
Dort kann man per HTTP Reqeust Variablen lesen und schreiben.

peewit

hallo

freut mich wenn du es geschafft hast

hast du dir in der network.lib den baustein SPIDER_ACCESS schon angesehen
der sollte eigentlich genau das machen



b.b.

hallo m-obi

kannst du das bitte kurz beschreiben, wie du das gemacht hast?
Danke!

m-obi

Klar,

also ich habe mir ein Programm geschrieben in AutoIt, das ist so ähnlich wie Basic. Dort schicke ich eine POST-Anfrage mit einem XML-String, welcher die Variablen enthält an die Anwendung "/cgi-bin/ILRReadValues.exe" der Sterung. Als Antwort bekomme ich dann genau den selben XML-String nur dazu mit den Werten. Zum schreiben schicke ich eine GET-Anfrage an "/cgi-bin/writeVal.exe?" mit der Variable und den Wert.

Sowie hier: http://www.ilc150.net/PCWorxExamples/WEB/entry.txt

Leider hat dazu Phoenix nix dokumentiert. Derjenige der das gefunden hat, ist auch nur durch Google draufgestoßen.

Transalpler

Ich greif hier mal was altes auf:

Und zwar hab ich eine Doorbird in meinem von der Wago verwalteten Haus. Diese bietet die möglichkeit, bei bestimmten Zuständen (Bewegungserkennung, Jemand hat die Klingel gedrückt, Die Tür geöffnet ) einen http get Request an eine URL auszulösen.

ich möchte damit nun in der Wago 750-881 auslösen, dass ein Relais geschaltet wird (Beleuchtung des Eingangsbereiches). Mir ist schon klar, das das wohl die komplizierteste Anbindung eines Bewegungsmelders darstellt, aber ja es interessiert mich, und warum noch einen Bewegungsmelder anschließen, wenn ich eh schon einen Kamerabasierten dort habe, bei dem ich einstellen kann, worauf reagiert wird...

Der Link ist leider nciht mehr erreichbar mit dem Beispiel...

peewit

wäre nicht schlecht wenn du zumindest mal eine dokumenation zum gerät (Zugriffsverfahren) haben würdest und dann online stellst

shrimps

Hi Transalpler,
ich habe hier von Wago was gesichtet...
[url]http://www.wago.com/wagoweb/documentation/app_note/a1122/a112200d.pdf/url]

Könnte der Server-State das sein, was du suchst ?

Viel Spaß
Shrimps

Transalpler

#9
Sorry - dachte Doorbird ist hier schon ein Begriff:

Zur API: https://www.doorbird.com/downloads/api_lan.pdf?rev=0.11

Doorbird ist eine Türstation (entwickelt und hergestellt in Berlin), die via WLAN oder PoE ins Netz eingebunden wird, und per App bedient weden kann.
Weiters kann man der Türstation beibringen bei bestimmten Ereignissen eine URL aufzurufen (http get - siehe API Beschreibung Notification Request).


NOTIFICATION REQUEST
Check and set the notification when a certain event occurs. If you set no parameter, the current
notification settings will be returned as JSON.
Method: GET
Syntax:
http://<device-ip>/bha-api/notification.cgi?<parameter>=<value>
<parameter>=<value> Values Description
url=<string> HTTP or HTTPS URL to call with GET command if the event occurs
user=<string> Basic authentication user for the HTTP URL, leave blank if not mandatory
password=<string> Basic authentication user or the HTTP URL, leave blank if not mandatory
event=<string> doorbell|motionsensor|dooropen Event type
subscribe=<int> 0|1 0: disable notification the given event, 1: enable the notification for the given event
relaxation=<int> 10..10000 Relaxation time in seconds, for concurrent events. Default value is "10"



Mein Ansinnen ist es eine erkannte Bewegung der SPS per z.B. http://ipDerSPS/bewegung mitzuteilen. Es soll also ein "http" Eingang getriggert werden, den ich dann weiter verarbeite (z.B. verundet mit "dämmerung" von der Wetterstation löst ein TOF(30s) auf die Aussenbeleuchtung aus).

Ich habe jetzt nun das hier gefunden: https://sourceforge.net/p/webvisu/wiki/Home/
Damit kann man die Java Webvisu mit jedem HTML5 Browser ansprechen - ich glaub das bringt mich meinem Ziel auch ein wenig näher... Funktionieren tut es zu einem Großteil - die Grafischen Elemente sind halt nicht so richtig skaliert in der Ansicht...

Transalpler

Hmm ich glaub das Problem läßt sich wohl mit einem SSI Script lösen.. https://www.youtube.com/watch?v=IzarLfoPwLg
Also eine globale Variable vie Aufruf eines SSI Scripts setzen, in der Steuerung eine Aktion auslösen, und die Variable wieder auf 0 zurück setzen (sonst lande ich ja in einer Endlosschleife)...

Transalpler

#11
So ich hab das jetzt gelöst:

Funktionsblock in ST:

PROGRAM Bewegung
VAR_INPUT
Zeit:TIME;
END_VAR
VAR_OUTPUT
Out:BOOL;

END_VAR
VAR
TOF1:TOF;
Meldung AT %MX0.0: BOOL :=FALSE;
In:BOOL;

END_VAR

in := DARKNESS AND Meldung;
TOF1 (IN := In, PT:= Zeit);
Out:=TOF1.Q;
IF Meldung
THEN
Meldung := FALSE;
END_IF;


Ruft man die URL
http://192.168.27.123/WRITEPI?ADR1=MX0.0&VALUE1=1&FORMAT1=%x

auf, so geht der Ausgang des Block entsprechend der Eingangsvariable Zeit auf TRUE.
DARKNESS ist eine Globale Variable, die von der Wetterstation gesetzt wird.



[gelöscht durch Administrator]

Transalpler

#12
Eine Frage habe ich noch:

Wie kann man mein obiges Beispiel so abändern, dass die Merker Adresse als Parameter übergeben werden kann, so dass man den Baustein mehrfach verwenden kann - bin da nicht so tief drinnen in Codesys....

Ups lese gerade im Codesys Manual:
Achtung! Um unkontrollierte Überschreibungen zu vermeiden, sollten Merker und
VAR_RETAIN niemals gleichzeitig benutzt werden!

Ich verwende an anderer Stelle VAR_RETAIN - irgendwelche Vorschläge wie ich den Merker ersetzen kann?

Transalpler

OK - bin nun schlauer:

der obige Satz bedeutet, dass man niemals einen Merker als var_retain definieren soll - wenn ich das richtig interpretiere...