Forum: PC-Programmierung Webserver soll ein serielles Signal senden


von Stefan T. (stefan_t30)


Lesenswert?

Hallo liebes forum.
Ich habe grundkenntnisse im Assemblerprogrammieren und ein wenig Java. 
Eben die Standardkenntnisse die man im Elektrotechnik Studium vermittelt 
bekommt.
Als kleine Projektidee wollte ich Funkschalter per Arduino kontrollieren 
(dort gibt es bereits massig Stoff im Netz zu lesen). Normalerweise wird 
auf dem Ardino ein Webserver aufgesetzt und darüber "geschaltet". Ich 
möchte den Webserver jedoch auf meinem Heimserver laufen lassen und den 
Arduino über  serielle Komandos ansteuern. Jene sollen durch ein 
Webinterface getriggert werden.

Einschub: Der Ardino ließe sich perfekt an den internen USB Anschluss 
meines HP NL 40 anschließen, sodass insgesammt auch kein Kabelgeraffel 
mit Netzwerkkabeln entsteht.

Da ich mich in der Webprogrammierung eigentlich kaum auskenne (so etwas 
HTML Code verstehe ich natürlich) will ich mal die erfahreneren 
Forenmitstreiter hier fragen, wie man dies am einfachsten realisieren 
kann (ich möchte hier keine Lösungen, sondern schlagworte zur weiteren 
Suche reichen mir schon).

Da es jetzt noch vor 8 ist, wünsche ich euch einen guten Start in den 
neuen Tag ;-)

von Frank (Gast)


Lesenswert?

Guten Morgen Stefan,

dann goggle doch mal nach CGI. Das ist die Technik, die Du suchst. Als 
Programmiersprache hierfür kannst Du z.B. Perl, PHP oder auch Java 
verwenden. Falls Du Java verwenden möchtest, wäre Tomcat ein Schlagwort 
für Dich.

Viel Spaß beim Programmieren.

LG,
Frank

von Stefan T. (stefan_t30)


Lesenswert?

Das schaut ja schon mal sehr lecker aus, vor allem da IIS8 anscheinend 
schon CGI kann. Mensch ich hoffe ich habe genügend Zeit für dieses 
Projekt!

von Frank (Gast)


Lesenswert?

Du kannst mit PHP - ergo über die Webseite - ja auch Dateien ins 
Servverzeichnis schreiben. Liefe nun ein lokales Skript (z.B. VBA), dass 
zyklisch den Inhalt oder das Vorhandensein einer solchen Datei prüft, 
könnte dieses der Anlass sein, eine Nachricht zum Arduino senden ...

von Frank I. (Gast)


Lesenswert?

Also lieber Namensvetter, das mit Deinem VBA-Script klingt aber nicht 
sehr professionell. Unter Windows kenne ich mich nicht aus, aber unter 
Linux kann PHP direkt mit der seriellen Schnittstelle sprechen ...

Da ist das erklärt:

http://www.php-faq.de/q-php-schnittstelle.html

von Frank I. (Gast)


Lesenswert?

Hier ist noch eine passende Library für PHP:

http://code.google.com/p/php-serial/

von Peter II (Gast)


Lesenswert?

wenn schon ein IIS vorhanden ist, macht man es doch am besten mit ASP 
(c#).

CGI und PHP kann man probleme bekommen, weil man ständig den Port öffnen 
und schließen muss. Wenn 2 personen gleichzeitg eine aktion auführen 
gibt es Probleme.

mit ASP kann man den Port beim Start von IIS öffnen und dann ständig 
offen lassen. Dann muss man nur noch die zugriffe auf den Port 
synchronisieren, wenn wirklich mal 2 abfragen gleichzeitg kommen.

von Vlad T. (vlad_tepesch)


Lesenswert?

Peter II schrieb:
> CGI und PHP kann man probleme bekommen, weil man ständig den Port öffnen
> und schließen muss. Wenn 2 personen gleichzeitg eine aktion auführen
> gibt es Probleme.

hier müsste man selbst einen service schreiben, der den Port offen hält 
und mit dem die cgi oder php scripte reden (zB über sockets).

von Daniel F. (df311)


Lesenswert?

warum denn so kompliziert?
ein c-programm das auf einem port auf eingehende verbindungen wartet und 
einfachsten html-code ausgibt ist doch absolut ausreichend...
dazu muss man ja nicht das komplette http-protokoll implementieren.

von Christian B. (casandro)


Lesenswert?

Die einfachste Lösung ist sicherlich ein CGI-Skript. Das geht in so 
ziemlich jeder Programmiersprache und so ziemlich unter jedem 
Betriebssystem.

Unter Linux und bash schaut das zum Beispiel dann so aus:
1
#!/bin/bash
2
echo "Content-Type: text/plain"
3
echo ""
4
echo "Dein String zur Seriellen Schnittstelle" > /dev/ttyS0oderso
5
echo "erfolgreich geschickt"

Das speicherst Du in Deinem CGI-Verzeichnis ab, zum Beispiel unter 
/var/www/cgi-bin/skriptname und schaltest das ausführbar mit zum 
Beispiel "chmod a+w skriptname".

Dann gehst Du auf http://ip-des-servers/cgi-bin/skriptname und Du 
bekommst den Text "erfolgreich geschickt" zurück, der steht dann einfach 
im Browser.

Du kannst, wenn nötig auch vor der echo-Zeile die Du auf 
/dev/ttyS0oderso umleitest auch noch einen stty Befehl einfügen, damit 
Du die Parameter umstellen kannst. /dev/ttyS0oderso ersetzt Du natürlich 
mit der richtigen Schnittstelle.

5 Zeilen, recht viel einfacher geht es wahrscheinlich nicht mehr.

von Kirl (Gast)


Lesenswert?

a+x

von Stefan T. (stefan_t30)


Lesenswert?

Vielen Dank für die Antworten bis jetzt.
Gestern Abend habe ich (inklusive Suchen) erstaunlicherweise nur zwei 
Stunden benötigt um die Arduino Hardware so weit zu bekommen. Das liegt 
zum größten Teil daran, dass es schon eine sehr umfangreiche Libary 
gibt:

http://code.google.com/p/rc-switch/wiki/HowTo_OperateLowCostOutlets

Leider scheint jedoch die Hürde des Startens einer Batch Datei noch 
unüberwindbar hoch. Es fängt damit an, welche Packete ich im Win 2012 
überhaupt benötige. Im Moment würde ich sicher eine ausführliche 
Anleitung wie von Christian hier benötigen.
Der nächste freie Abend wird also mit dem Durchforsten des Netztes 
gefüllt werden.

von wieOskar (Gast)


Lesenswert?

Eine andere möglichkeit ist mit ser2net alle Daten von der seriellen 
Schnitstelle an ein Netzwerk port zu legen. Eine Tcp verbindung zu einem 
Port sollte ja kein Problem darstellen.

von Stefan T. (stefan_t30)


Lesenswert?

Ich habe im Netz mittlerweile eine Youtubeanleitung gefunden Phyton zu 
installieren:

http://www.youtube.com/watch?v=7whncKjSXK0

Mein erstes Phyton Skript funktioniert auch ohne Probleme.
Allerdings ist im Video die Rede von einer "WEB.config" Datei die bei 
mir einfach nicht im Ordner erscheint.

Die Fehlermeldung lässt auch noch auf eine falsche Konfiguration von IIS 
schließen:

"Die angeforderte Seite kann aufgrund der Einstellungen der ISAPI- und 
CGI-Einschränkungsliste auf dem Webserver nicht dargestellt werden."

Ser2net schaut gut aus, jedoch möchte ich mit lieber lösungen verwenden, 
die weit verbreitet sind (mehr toturials, mehr informationen usw.)

von Stefan T. (stefan_t30)


Lesenswert?

So wieder einen Schritt weiter. Diesmal lag es an den 
Sicherheitseinstellungen von IIS.
Mittlerweile funktioniert das Python Script auch per Webbrowser.
Allerdings NUR auf den Rechner auf dem sich die Scripte befinden.

Wie muss ein Python Script aussehen, sodass der PC nicht einen lokalen 
Pfad zum Öffnen verwendet sondern, egal von wo, eben genau die *.py 
Datei auf dem Server ausführt?

Im Moment schaut es bei mir so aus:

import os
os.system(r'C:\inetpub\Hausautomat\cgi-bin\bat.bat')

von Stefan T. (stefan_t30)


Lesenswert?

Ich habe mein Problem soweit lösen können, jetzt kommt die Kosmethik!

Eigentlich ist es ja sehr unschön mit Phython eine bat Datei 
auszuführen, da Phython mit dem Serial Plugin auch selbst in der Lage 
ist über die com Schnittstelle zu komunizieren.

Leider scheitert Phython bei mir aber schon in der ersten Zeile:

"Import Serial" endet mit einer Fehlermeldung:

"Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    import serial
  File "C:\Python33\lib\site-packages\serial\__init__.py", line 19, in 
<module>
    from serialwin32 import *
ImportError: No module named 'serialwin32'"

Die Datei ist jedoch definitiv vorhanden ;-(
Seit 2010 hat es kein Update mehr gegeben, vielleicht ist das Plugin 
nocht mit Windows 2012 kompatibel.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.