PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Geräte über das Internet schalten



MichWuhr
25.01.2008, 19:39
Hallo leute,

brauche eure hilfe,
Ich will eine Lampe über das Internet schalten:

Seite aufrufen, Buttonklicken, Webserver o.ä. sended über RS232 befehl an AVR und der Schaltet dann irgentwas

ist das realisierbar, oder gibts schon solche Webserver?

beste Grüße
Michael

chr-mt
25.01.2008, 19:55
Ja, gibt es.
Ulrich Radig hat gerade so ein Projekt vorgestellt
www.ulrichradig.de
Besprochen wird er hier:
http://www.mikrocontroller.net/topic/82127#new

Dort steht auch Benutzername und Passwort für seinen Webserver, den du hier erreichen kannst:
http://ulrichradig.dyndns.org/

Gruß
Christopher

skydriver
25.01.2008, 19:55
Hallo MichWuhr,

beides. Man kann es selbst zusammenbauen - oder man schaut bei "ee-el-vau" unter der Nummer 81-760-86 (Nee, nee, ich krieg nichts für den Hinweis!)

Gruß
Skydriver

python_rocks
26.01.2008, 00:34
Seite aufrufen, Buttonklicken, Webserver o.ä. sended über RS232 befehl an AVR und der Schaltet dann irgentwas
Hallo Michael!

So etwas schüttelt man mit der richtigen Programmiersprache und dem richtigen Web-Framework innerhalb von wenigen Minuten aus dem Ärmel. :-$
Die Programmiersprache die ich gerne verwende heißt Python http://python.org/ und funktioniert unter Windows genau so gut wie unter Linux.

Es ist zwar kein ausgeklügeltes, schönes Programm, aber es demonstriert, wie es funktionieren könnte.

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import cherrypy # http://www.cherrypy.org/
import serial # http://pyserial.sourceforge.net/
import time


class Root(object):

def __init__(self):
"""Initialisierung"""
self.lamp_status = "OFF"


def switch_lamp(self, new_status):
"""
Schaltet die Lampe ein/aus

new_status: Wenn "ON", dann wird die Lampe eingeschaltet.
Wenn nicht "ON" (z.B. "OFF") dann wird die Lampe ausgeschaltet.
"""

# Prüfen
if new_status.upper() == "ON":
new_status = "ON"
else:
new_status = "OFF"

# Verbindung zum µC herstellen und zum Schalten veranlassen
ser = serial.Serial(port = "COM1", baudrate = 9600, timeout = 1)
ser.write("SWITCH LAMP " + new_status + "\n")

# kurz warten
time.sleep(0.1)

# Antwort des µC abholen
new_status = ser.readline()

# Verbindung schließen
ser.close()

# Neuen Status speichern
if new_status.upper().strip() == "ON":
self.lamp_status = "ON"
else:
self.lamp_status = "OFF"


def index(self, switch = None):
"""
Diese Methode wird ausgeführt wenn keine Seite (nur der Ordnername)
angefordert wird. Sie liefert den Text zurück, der an den Browser
gesendet wird.
"""

# Schalten
if not switch is None:
self.switch_lamp(switch)

# HTML zurück geben
html = """
<html>
<body>
<form action=".">
<input type="submit" name="switch" value="ON">
<input type="submit" name="switch" value="OFF">
</form>
<h2>Current Status</h2>


%(lamp_status)s</p>
</body>
</html>
""" % dict(lamp_status = self.lamp_status)
return html

index.exposed = True


def main():
# Server starten
cherrypy.quickstart(Root())


if __name__ == "__main__":
main()
CherryPy ist ein kleines Web-Framework welches auch als kleiner Webserver laufen kann (wie in diesem Beispiel gezeigt wird). Gibt man im Browser "http://localhost:8080/" ein, dann wird die Seite angezeigt.

Das Ergebnis sieht dann so aus:

http://halvar.at/krimskrams/mit_webserver_schalten.gif

mfg
Gerold, ...der mal wieder mit seiner Lieblingprogrammiersprache angeben wollte
O:)

PS: Fast hätte ich es vergessen: Das Programm läuft auf einem PC mit Internetzugang und verhält sich wie ein Webserver. Die Schaltanweisung wird per RS-232 an den µC weitergegeben. Danach wird die Rückgabe des µC ausgewertet. Der neue Status der Lampe wird in eine Variable geschrieben, welche beim Generieren des HTML-Codes abgefragt wird.

EDIT: Ich hatte zwei Klammern vergessen

izaseba
26.01.2008, 00:59
Gerold, ...der mal wieder mit seiner Lieblingprogrammiersprache angeben wollte

Tja Jehova nennt man sowas...

Einen Schönheitsfehler gibt es aber.
Du brauchst einen PC, und die anderen Lösungen, die vorgestellt wurden kommen mit einer Platine aus, die kaum größer als eine Zigarettenschachtel ist :-k

python_rocks
26.01.2008, 01:51
Einen Schönheitsfehler gibt es aber. Du brauchst einen PC, und die anderen Lösungen, die vorgestellt wurden kommen mit einer Platine aus, die kaum größer als eine Zigarettenschachtel ist
Hallo izaseba!

Naja, das kann man aber auch umdrehen. ;-)

Die andere Lösung braucht keine extra Platine. Sie kommt mit nur einem (schon vorhandenen) PC und dem µC aus und ist -- inkl. Programmierung des µC -- in weniger als einer halben Stunde fertig. Außerdem kostet sie (da der Computer sowiso schon vorhanden ist) weniger und die Steuerungs(HTML)seite kann ohne auf den µC zugreifen zu müssen geändert werden. Weiters kann diese Steuerungsseite in andere dynamische Webseiten (PHP, Python, PERL) eingebettet werden.

Es kommt ganz darauf an, was damit gemacht werden soll. Ist ein Computer verfügbar, dann ist ein kleines Programm auf dem PC unschlagbar einfach und schnell zu erstellen.

Ist kein PC vorhanden oder soll wirklich auf kleinem Raum oder an abgelegenen Orten gearbeitet werden, dann spielt der Embedded-Webserver natürlich seine Karten aus.

Da die Embedded-Lösung schon aufgezeigt wurde, blieb mir nur noch übrig, Michael eine Lösung über RS-232 zu zeigen.

mfg
Gerold
:-)

MichWuhr
26.01.2008, 13:09
Hallo Leudde,
danke danke für eure Antworten...

Ich werd mir mal die Idee von Gerold (phyton_rocks) ansehen, so wars auch vorher gedacht, das ein PC am Netz hängt, und dann die daten weitersendet....

werds mal ausprobieren...

python_rocks
26.01.2008, 14:50
Hallo MichWuhr!

Hier findest du einen kleinen Erfahrungsbericht zu CherryPy http://halvar.at/python/cherrypy_cheetah/. Wichtig für dich ist hauptsächlich, wie man CherryPy installiert und die einfachen HalloWelt-Sachen. Der Rest ist für Python-Anfänger einfach zu viel.

Vergiss nicht, dass du vorher Python installieren musst. Dieses findest du hier: http://python.org/download/. Nimm aber nicht die 64Bit-Versionen -- auch dann nicht, wenn du ein 64Bit-Betriebssystem hast.

Und wie man pySerial installiert, habe ich vor Kurzem hier erklärt: http://www.transistornet.de/viewtopic.php?p=30921#30921
wxPython brauchst du nicht dafür, da ein Webserver nur ein Kommandozeilenprogramm ist und keine grafische Oberfläche hat.

Noch etwas: Es war schlampig von mir, den HTML-Code direkt in das Python-Programm zu integrieren. Wenn du also etwas Größeres vor hast, dann solltest du den HTML-Code in Dateien auslagern und vielleicht sogar eine Vorlagensprache wie z.B. Cheetah verwenden.

mfg
Gerold
:-)

manne24
09.02.2008, 02:01
Hallo Gerold,

Deine Beispieldatei in Python für die RS232 finde ich ok.
Allerdings suche ich so was in Perl.
Kannst Du mir da weiter helfen?
Gruß
Manne

python_rocks
09.02.2008, 09:02
Hallo Manne!

Leider nein. Aber vielleicht findest du ja etwas im CPAN.

mfg
Gerold
:-)