# CGI-Script ohne Browser zur Kamera schicken

**URL:** <https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532>\
**Category:** Scripts / Programmierung\
**Created:** [16. Dezember 2021 um 07:23 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532 "2021-12-16T07:23:06Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![Axel\_S\_aus\_L](https://forum.instar.com/letter_avatar_proxy/v4/letter/a/a4c791/32.png) [@Axel\_S\_aus\_L](https://forum.instar.com/u/Axel_S_aus_L)\
**Post date:** [16. Dezember 2021 um 07:23 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/1 "2021-12-16T07:23:06Z")

</div>

Weiß einer was wirklich an der Kamera ankommt wenn ich einen cgi-Befehl an die Kamera schicke ?

Wenn ich zum Beispiel [http://192.168.178.60/param.cgi?cmd=pushhostalarm](http://192.168.178.60/param.cgi?cmd=pushhostalarm) über Browser verschicke wird das im Wireshark so angezeigt GET /param.cgi?cmd=pushhostalarm HTTP/1.1\r\n

Kommt das dann auch so an der Kamera an oder wird das nochmal umcodiert.

Das würde dann so aussehen

GET%20%2Fparam.cgi%3Fcmd%3Dpushhostalarm%20HTTP%2F1.1%5Cr%5Cn

Der Grund für diese Frage ist das ich diesen Befehl über das TCP/IP-Protokoll einer Siemens-Steuerung an die Kamera senden möchte. Das HTTP-Protokoll ist dort unbekannt und ich möchte das Nachbilden. Leider fehlen mir da weiterreichende Kenntnisse :wink:

---

<div class="post-metadata">

**Author:** ![m.polinowski](https://forum.instar.com/user_avatar/forum.instar.com/m.polinowski/32/458_2.png) [@m.polinowski](https://forum.instar.com/u/m.polinowski)\
**Post date:** [16. Dezember 2021 um 07:41 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/2 "2021-12-16T07:41:47Z")

</div>

> [@Axel\_S\_aus\_L](#):
>
> Das HTTP-Protokoll ist dort unbekannt

Auf der Kamera läuft ein Webserver der beim Aufrufen der URL (beliebiger CGI Befehl) einen dieser URL zugeordnete Funktion ausführt. Damit man da durch kommt muss man die URL in HTTP entweder in der GET oder POST Geschmacksrichtung aufrufen. Ein TCP Ping würde nicht reichen.

Man kann natürlich einen Pi dazwischenstellen. Der müsste irgendwas haben was auf TCP lauscht und kann die Info dann, z.B. über MQTT, zur Kamera senden.

---

<div class="post-metadata">

**Author:** ![Axel\_S\_aus\_L](https://forum.instar.com/letter_avatar_proxy/v4/letter/a/a4c791/32.png) [@Axel\_S\_aus\_L](https://forum.instar.com/u/Axel_S_aus_L)\
**Post date:** [17. Dezember 2021 um 18:33 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/3 "2021-12-17T18:33:58Z")

</div>

Hallo und Danke für die Antwort.

Ich habe das über das TCP/IP-Protokoll jetzt soweit im Griff das ich eine Aufnahme über einen cgi-Befehl auslösen kann und die Aufnahme wird auf dem FTP-Server abgelegt. Soweit super und perfekt.

Mein Problem war, das nach dem cgi-Sring 2x ein CRLF gesendet werden muss. Warum auch immer.

Jetzt ist es ja so das die Kamera eine Antwort sendet. (set ok oder so ähnlich). Anschließend baut die Kamera die Verbindung ab.  
Das kann man sehr schön mit der Software Hercules beobachten.

Jetzt meine Frage : Kann man diesen Verbindungsaufbau irgendwie verzögern ? Mein Problem ist das meine Steuerung die Antwort nicht verarbeiten kann wenn die Serververbindung zu schnell nach dem senden beendet wird. Das Problem ist bekannt und von meiner Seite leider nicht zu lösen.

Mir ist bewusst das dafür vermutlich in die Firmware eingegriffen werden muss. Vielleicht kann da ein Entwickler irgendetwas zu sagen. Da das ganze später sowieso im industriellen Umfeld eingesetzt werden soll wäre es auch kein Problem wenn dabei Kosten entstehen.

---

<div class="post-metadata">

**Author:** ![m.polinowski](https://forum.instar.com/user_avatar/forum.instar.com/m.polinowski/32/458_2.png) [@m.polinowski](https://forum.instar.com/u/m.polinowski)\
**Post date:** [20. Dezember 2021 um 12:18 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/4 "2021-12-20T12:18:02Z")

</div>

> [@Axel\_S\_aus\_L](#):
>
> Mir ist bewusst das dafür vermutlich in die Firmware eingegriffen werden muss.

Bei den aktuellen Kameras kann ich mir vorstellen dass das komplizierter wird (falls es überhaupt umsetzbar ist). Die in naher Zukunft folgenden neuen Kameraserie hat einen Webserver drauf bei dem man einen `keep-alive` Parameter setzen kann für Verbindungen. Ob dies das Problem löst und nicht eventuell sogar neue Probleme auf der Kamera auslöst kann ich momentan nicht sagen.

Aber was spricht gegen die Raspberry Pi Lösung? Dort würde man nur ein Gegenstück für die Siemens Steuerung benötigen und könnte das dann an einen Mosquitto Broker anbinden der alles weiter an die Kamera sendet.

Beispielsweise hat der Lighttpd Server eine `keep-alive` Option mit einem definierbaren Timeout:

[https://pimylifeup.com/raspberry-pi-lighttpd/](https://pimylifeup.com/raspberry-pi-lighttpd/)

```auto
server.max-keep-alive-requests = 128
server.max-keep-alive-idle = 30
server.max-read-idle = 60
server.max-write-idle = 360

```

Dann hätte man alles unter kontrolle und kann es individuell anpassen.

---

<div class="post-metadata">

**Author:** ![Axel\_S\_aus\_L](https://forum.instar.com/letter_avatar_proxy/v4/letter/a/a4c791/32.png) [@Axel\_S\_aus\_L](https://forum.instar.com/u/Axel_S_aus_L)\
**Post date:** [29. Dezember 2021 um 07:13 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/5 "2021-12-29T07:13:50Z")

</div>

Gegen einen Raspberry spricht z.B. das ich dann wieder ein Gerät in der „Mitte“ habe. Genau das will ich ja nicht. So eine Lösung gibt es schon (mit Hilfe eines PCs und eines Pyhton-Skript.

Dann bin ich mir auch nicht sicher ob ein Raspberry in den Industrieunternehmen in der ich meine Lösung einsetzen will überhaupt genehmigt werden. Die ITler sind da manchmal etwas seltsam.

Außerdem kann man dann (fast) jeden Kamerahersteller nehmen 🙂 Bisher kenne ich nur INSTAR-Kameras die den Namen über CGI ändern können.

Die neueren Siemenssteuerungen können auch MQTT. Dann wird wahrscheinlich vieles einfacher. Aber ich brauche auch eine Lösung für die Bestandsanlagen.

Mein größtes Problem im Moment ist zur Zeit das meine Kamera der Wahl (IN-9020) nicht lieferbar ist.

---

<div class="post-metadata">

**Author:** ![m.polinowski](https://forum.instar.com/user_avatar/forum.instar.com/m.polinowski/32/458_2.png) [@m.polinowski](https://forum.instar.com/u/m.polinowski)\
**Post date:** [29. Dezember 2021 um 08:34 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/6 "2021-12-29T08:34:08Z")

</div>

> [@Axel\_S\_aus\_L](#):
>
> Die neueren Siemenssteuerungen können auch MQTT.

Sobald man da dann den gemeinsamen Nenner hat, wirds ein Kinderspiel werden.

> [@Axel\_S\_aus\_L](#):
>
> Raspberry in den Industrieunternehmen

Ist nicht so ungewöhnlich. Wir hatten diesbezüglich schon häufiger Anfragen. Aber direkt, ohne einen Übersetzer dazwischen ist natürlich immer besser.

> [@Axel\_S\_aus\_L](#):
>
> Kamera der Wahl (IN-9020) nicht lieferbar ist.

Die Kameras mit dem Chipsatz werden jetzt auslaufen und ersetzt werden. Da wird allerdings im Frühjahr erstmal eine starre Kamera kommen (9008 Nachfolger). Aber wie bereits erwähnt - bei diesem Chipsatz haben wir dann auch mehr Möglichkeiten Anpassungen vorzunehmen.

---

<div class="post-metadata">

**Author:** ![estimator](https://forum.instar.com/user_avatar/forum.instar.com/estimator/32/157_2.png) [@estimator](https://forum.instar.com/u/estimator)\
**Post date:** [29. Dezember 2021 um 09:48 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/7 "2021-12-29T09:48:47Z")

</div>

> [@Axel\_S\_aus\_L](#):
>
> Mein Problem war, das nach dem cgi-Sring 2x ein CRLF gesendet werden muss. Warum auch immer.

Vielleicht hat das mit einem Parser zu tun, der beim ersten CR/LF aufhören würde, den String zu extrahieren und erst beim zweiten CR/LF dann das erste mit in den extrahierten String übernimmt.

---

<div class="post-metadata">

**Author:** ![Axel\_S\_aus\_L](https://forum.instar.com/letter_avatar_proxy/v4/letter/a/a4c791/32.png) [@Axel\_S\_aus\_L](https://forum.instar.com/u/Axel_S_aus_L)\
**Post date:** [29. Dezember 2021 um 09:51 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/8 "2021-12-29T09:51:41Z")

</div>

> [@m.polinowski](#):
>
> Aber wie bereits erwähnt - bei diesem Chipsatz haben wir dann auch mehr Möglichkeiten Anpassungen vorzunehmen.

Ich hoffe, das dabei die CGI-Funktionalität nicht auf der Strecke bleibt …

---

<div class="post-metadata">

**Author:** ![m.polinowski](https://forum.instar.com/user_avatar/forum.instar.com/m.polinowski/32/458_2.png) [@m.polinowski](https://forum.instar.com/u/m.polinowski)\
**Post date:** [29. Dezember 2021 um 10:38 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/9 "2021-12-29T10:38:07Z")

</div>

> [@Axel\_S\_aus\_L](#):
>
> CGI-Funktionalität

Du meinst beim neuen Chipsatz? Wir haben hier schon einmal angefangen die neue API zu skizzieren:

> **[1440p Serie CGI Liste](https://wiki.instar.com/de/1440p_Serie_CGI_Befehle/)**
>
> 1440p Serie CGI Liste

Die exakten CGI Befehle darin sind noch ohne Gewähr. Aber die Struktur der Schnittstelle ist schon mal fest. Und es wird immer noch alles per CGI Befehl einstellbar bleiben - sogar noch mehr als bei den 1080p Modellen.

---

<div class="post-metadata">

**Author:** ![Axel\_S\_aus\_L](https://forum.instar.com/letter_avatar_proxy/v4/letter/a/a4c791/32.png) [@Axel\_S\_aus\_L](https://forum.instar.com/u/Axel_S_aus_L)\
**Post date:** [29. Dezember 2021 um 11:00 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/10 "2021-12-29T11:00:21Z")

</div>

hmmm.

Auf den ersten Blick sehe ich da meinen benötigten Befehl

- setalarmsnapattr mit dem Parameter snap\_name

nicht mehr.

---

<div class="post-metadata">

**Author:** ![m.polinowski](https://forum.instar.com/user_avatar/forum.instar.com/m.polinowski/32/458_2.png) [@m.polinowski](https://forum.instar.com/u/m.polinowski)\
**Post date:** [29. Dezember 2021 um 11:48 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/11 "2021-12-29T11:48:02Z")

</div>

> [@Axel\_S\_aus\_L](#):
>
> hmmm.

Fehlte tatsächlich noch - in der finalen Version wird es mit drinnen sein.

---

<div class="post-metadata">

**Author:** ![Axel\_S\_aus\_L](https://forum.instar.com/letter_avatar_proxy/v4/letter/a/a4c791/32.png) [@Axel\_S\_aus\_L](https://forum.instar.com/u/Axel_S_aus_L)\
**Post date:** [30. Dezember 2021 um 10:43 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/12 "2021-12-30T10:43:19Z")

</div>

> [@m.polinowski](#):
>
> in der finalen Version wird es mit drinnen sein.

Das hoffe ich doch sehr. Ich habe meine Anwendung für eine 5907HD jetzt am laufen uns es klappt genau so wie gedacht.  
Wäre blöd wenn das mit den neuen Modellen nicht mehr funktionieren würde.

---

<div class="post-metadata">

**Author:** ![m.polinowski](https://forum.instar.com/user_avatar/forum.instar.com/m.polinowski/32/458_2.png) [@m.polinowski](https://forum.instar.com/u/m.polinowski)\
**Post date:** [30. Dezember 2021 um 10:56 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/13 "2021-12-30T10:56:08Z")

</div>

> [@Axel\_S\_aus\_L](#):
>
> meine Anwendung jetzt am laufen

Was war den jetzt das Problem - bzw. die Lösung bzgl. des timeouts der Verbindung?

---

<div class="post-metadata">

**Author:** ![estimator](https://forum.instar.com/user_avatar/forum.instar.com/estimator/32/157_2.png) [@estimator](https://forum.instar.com/u/estimator)\
**Post date:** [30. Dezember 2021 um 11:13 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/14 "2021-12-30T11:13:19Z")

</div>

> [@Axel\_S\_aus\_L](#):
>
> Mein Problem ist das meine Steuerung die Antwort nicht verarbeiten kann wenn die Serververbindung zu schnell nach dem senden beendet wird. Das Problem ist bekannt und von meiner Seite leider nicht zu lösen.

Was wäre denn, wenn man zu dem eigentlichen CGI-Befehl einfach noch ein paar Info-Abfragen per CGI vornimmt, nur um die Verbindung länger aufrecht zu halten? Die Steuerung müsste die Infos nicht verarbeiten.

---

<div class="post-metadata">

**Author:** ![Axel\_S\_aus\_L](https://forum.instar.com/letter_avatar_proxy/v4/letter/a/a4c791/32.png) [@Axel\_S\_aus\_L](https://forum.instar.com/u/Axel_S_aus_L)\
**Post date:** [30. Dezember 2021 um 15:56 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/15 "2021-12-30T15:56:00Z")

</div>

> [@estimator](#):
>
> Was wäre denn, wenn man zu dem eigentlichen CGI-Befehl einfach noch ein paar Info-Abfragen per CGI vornimmt, nur um die Verbindung länger aufrecht zu halten? Die Steuerung müsste die Infos nicht verarbeiten.

Das wird nicht gehen. Wenn ich die Kamera über Hercules ansteuere, sehe ich das direkt nach der Antwort der Kamera die Verbindung geschlossen wird.  
Um einen neuen Befehl abzusetzen muss erst wieder die Verbindung neu aufgebaut werden.

---

<div class="post-metadata">

**Author:** ![Axel\_S\_aus\_L](https://forum.instar.com/letter_avatar_proxy/v4/letter/a/a4c791/32.png) [@Axel\_S\_aus\_L](https://forum.instar.com/u/Axel_S_aus_L)\
**Post date:** [30. Dezember 2021 um 15:59 UTC](https://forum.instar.com/t/cgi-script-ohne-browser-zur-kamera-schicken/28532/16 "2021-12-30T15:59:13Z")

</div>

> [@m.polinowski](#):
>
> Was war den jetzt das Problem - bzw. die Lösung bzgl. des timeouts der Verbindung?

Zur Zeit kann ich die Antwort in der Steuerung nicht auswerten. Das ist aber kein Problem da mein Sendebaustein mir ein Bit über das erfolgreiche Senden gibt. Das reicht mir.  
Nachdem die Kamera die Verbindung abgebaut hat baut die SPS sie sofort wieder auf. Das passiert innerhalb von einer Sekunde. Und dann ist es auch egal wie lange die Verbindung gehalten wird. Erst mit der nächsten Antwort der Kamera wird sie wieder geschlossen.
