Du möchstest eine URL aufrufen (via HTTP-Protokoll einen "GET"-Request
absetzen)
HTML ist dann häufig dass, was als Resultat anschließend zurückgeliefert
wird und vom Browser interpretiert und angezeigt wird - und in deinem
Falle womöglich gar nicht relevant ist.
ein browser soll da nix anzeigen oder benutz werden.
Ich möchte die dreambox übers netzwerk mittels eines microcontrollers
steuern.
Es gibt doch das pollin net-io oder das rapsberry pi.
Über diese bausätze möchte ich die dreambox ansteuern.
Bert schrieb:> Es gibt doch das pollin net-io oder das rapsberry pi
Geht mit beiden.
Für Net-IO brauchst Du eine andere Firmware; die von Ulrich Radig z.B.
beinhaltet einen http-client. Allerdings mußt Du Dich dafür in der
Materie etwas auskennen.
Leichter dürfte es mit mit einem Raspberry gehen, z.B. ganz einfach mit
wget.
Damit solltest Du genug Suchbegriffe haben :)
Das sieht mir alles sehr kompliziert aus...
Kann ich denn an einer R.PI einfach taster anklemmen und die dann
"abfragen" ala
If taster1 = 0 Then wget usw.
Habe zwar paar sachen gegoogelt, aber bin genauso schlau wie vorher.
Am liebsten wäre mir das noch, wenn es mit bascom geht.
Ich glaube, du verwechselst HTTP und HTML. HTTP ist das Protokoll, HTML
ist die Markup-Sprache, in der häufig die Antworten zurückommen. Du
meinst wohl eher HTTP. Wenn du danach suchst, findest du sicher auch
viele Antworten.
Und ja, das kannst du an einem Raspberry Pi machen mit den Tastern.
Keine Ahnung von Bascom, ich würde Python nehmen.
Das Stichwort heißt "HTTP Request senden". Das kann man mit jeder
vernünftigen Programmiersprache machen. Entweder gibt es schon
eingebaute Bibliotheken wie z.B. in Java, oder man nutzt eine externe
Bibliothek wie z.B. libcurl:
http://curl.haxx.se/libcurl/bindings.html
Zusätzlich zu den vernünftigen Programmiersprachen sollte es auch mit
BASCOM möglich sein ;-)
Einfach mal nach "HTTP Request senden BASCOM" googlen.
Bert schrieb:> Das sieht mir alles sehr kompliziert aus...
Von nix kommt nix.
Mark Brandis schrieb:> Zusätzlich zu den vernünftigen Programmiersprachen sollte es auch mit> BASCOM möglich sein ;-)
Aber sicher nicht auf einem RPi...
Hallo Bert,
Bert schrieb:> Das sieht mir alles sehr kompliziert aus...
Ist es aber nicht, in Wirklichkeit ist alles ganz einfach.
> Kann ich denn an einer R.PI einfach taster anklemmen und die dann> "abfragen" ala>> If taster1 = 0 Then wget usw.
Ja, kannst Du. Im Grunde genommen geht das sogar mit einem popeligen
Shellskript, etwa so (wegen Faulheit nicht getestet):
1
echo "7" > /sys/class/gpio/export
2
echo "in" > /sys/class/gpio/gpio7/direction
3
4
while true; do
5
TASTER = $(cat /sys/class/gpio/gpio7/value);
6
if [ $TASTER = "1" ]; then
7
GET 'http://ip.der.dreambox/pfad?name=wert';
8
# else...
9
fi
10
done
Natürlich geht das auch mit Python und jeder anderen Programmiersprache,
die auf dem RasPi läuft. Damit läßt sich das Ganze sehr viel effizienter
und ressourcenschonender realisieren -- statt ständig die Datei zu
lesen, wird die Datei "edge" im Sysfs und einer der Systembefehle
poll(2) oder select(2) verwendet, welche den Programmlauf blockieren bis
der Taster gedrückt worden ist. Nur um einen Taster auszulesen und einen
popeligen HTTP-Request zu machen ist so ein RasPi aber ziemliche
Verschwendung...
> Habe zwar paar sachen gegoogelt, aber bin genauso schlau wie vorher.
Einen Arduino Uno plus ein Arduino Ethernet Shield benötigen viel
weniger Energie und sind mit der Arduino Ethnernet Library [1] auch
leicht anzusteuern. Für Deinen Anwendungszweck eines HTTP-Requests gibt
es hier [2] sogar ein einfaches Beispiel, das Du nur wenig abwandeln
mußt.
HTH,
Karl
[1] http://arduino.cc/en/Reference/Ethernet
[2] http://arduino.cc/en/Tutorial/WebClient
Bert schrieb:> hallo,>> Ich möchte von einem microcontroller aus ein html befehl senden.
Ich denke ab dieser Stelle kann man getrost aufhören zu lesen und dem TE
einen anderen schönen Beruf oder ein anderes schönes Hobby empfehlen.
Gärtnern, Töpfern, Tai-Bo.... irgendwas ohne Technik am besten.
gruß cyblord
Den Befehl senden ist eine Sache, mit der Antwort etwas anfangen zu
koennen einen andere. Eine Antwoort auf ein HTTP-Get ist eine Webseite,
als ASCII. Die muss interpretiert werden.
Aber offensichtlich moechte man eine Userinteraktion simulieren. dh
anstelle dass der Benutzer etwas lokal eintippt, moechte man das mit
einer Fernbedienung machen.
Das ist etwas ganz anderes. Man muss nicht den HTTP-Get senden, sondern
dem Geraet eine Benutzereingabe unterschieben. Also das Keyboard und
allenfalls die Maus vortaeuschen. Das scheint mir einfacher zu sein.
Dazu muss man natuerlich einen Server auf dem Geraet laufen haben, der
solche Befehle entgegen nimmt. Das Keyboard und die Maus direkt ersetzen
wuerd ich nicht, denn dann kann man nichts mehr debuggen
> als ASCII
hoffentlich nicht ;)
Das mit der Userinteraktion verstehe ich auch nicht. Es gibt nur ganz
wenige Fälle, in denen es sinnvoll ist, Keyboard-Eingaben zu simulieren
-- und bestimmt nicht, wenn man mit einer Web-API interagiert.
Auch dass das RaspberryPi dafür Verschwendung sein soll sehe ich nicht
so. Die Plattform ist sehr flexibel und sehr leicht zu programmieren und
zu debuggen -- warum sollte man die nicht hierfür einsetzen, zumindest
als Prototyp?
Hallo,
cyblord ---- schrieb:> Bert schrieb:>> Ich möchte von einem microcontroller aus ein html befehl senden.>> Ich denke ab dieser Stelle kann man getrost aufhören zu lesen und dem TE> einen anderen schönen Beruf oder ein anderes schönes Hobby empfehlen.> Gärtnern, Töpfern, Tai-Bo.... irgendwas ohne Technik am besten.
Ach, cyblord, sei doch nicht immer so hart, nur weil jemand die
Fachtermini nicht kennt. Wenn jeder alles könnte, bräuchte es doch kein
Forum... und wenn Du schon selbst schreibst, daß man "getrost aufhören"
kann zu lesen, verstehe ich wirklich nicht, warum Du das nicht nur nicht
einfach machst, sondern Dich offensichtlich auch noch bemüßigt fühlst,
Dich dazu zu äußern und einen Beitrag dazu zu verfassen. Sicherlich wäre
dem TO ebenso wie Dir damit geholfen, wenn Du solche Beiträge dann
wirklich nicht lesen und, vor allem, auch einfach nicht beantworten
würdest.
Liebe Grüße,
Karl
Hallo 17:15,
Siebzehn Zu Fuenfzehn schrieb:> Den Befehl senden ist eine Sache, mit der Antwort etwas anfangen zu> koennen einen andere. Eine Antwoort auf ein HTTP-Get ist eine Webseite,> als ASCII. Die muss interpretiert werden.
Nein, warum? Die Antwort muß man nur interpretieren, wenn man Daten
daraus gewinnen will. Wenn man nur etwas an einen HTTP-Host senden und
nichts zurück bekommen will, kann man die Antwort einfach verwerfen.
Übrigens muß eine Antwort auf einen HTTP-Request nicht zwangsläufig eine
Webseite. Es muß lediglich eine HTTP-Response sein. Ein HEAD-Request
gibt zum Beispiel nur einen Header zurück, ein GET-Request kann eine
Webseite (HTML-Code) zurückgeben, kann aber auch einen simplen
Returncode für eine Applikation zurückgeben. Das sieht dann etwa so aus:
die erste Zeile des Headers enthält den HTTP-Errorcode (im Idealfall
"200 OK"), danach verwirft man alles bis zwei "\r\n" aufeinander folgen
(hier ist der Header zuende) und die folgende Zeile enthält den
Rückgabecode der Applikation. Sowas zu interpretieren, ist auch mit
C-Stringfunktionen ziemlich trivial.
Liebe Grüße,
Karl
Hallo Sven,
Sven B. schrieb:>> als ASCII> hoffentlich nicht ;)
Warum denn nicht? In vielen Fällen reicht das völlig aus. Der Standard
für HTTP Version 1.1 schreibt ISO 8859-1 vor, aber die 7-Bit-Zeichen
dieser Kodierung entsprechen ja dem US-ASCII-Zeichensatz.
> Das mit der Userinteraktion verstehe ich auch nicht. Es gibt nur ganz> wenige Fälle, in denen es sinnvoll ist, Keyboard-Eingaben zu simulieren> -- und bestimmt nicht, wenn man mit einer Web-API interagiert.
Das ist sicher richtig, aber vielleicht ist das hier einer dieser Fälle?
> Auch dass das RaspberryPi dafür Verschwendung sein soll sehe ich nicht> so. Die Plattform ist sehr flexibel und sehr leicht zu programmieren und> zu debuggen -- warum sollte man die nicht hierfür einsetzen, zumindest> als Prototyp?
Naja, ein Arduino mit Ethernet-Shield ist sicher auch nicht viel
schwerer zu programmieren -- und um einen Tastendruck zu erkennen und
daraufhin einen HTTP-Request zu versenden, ist das ebenfalls mehr als
ausreichend.
Mir ging es vielmehr um den Stromverbrauch: ein RasPi mit Ethernet frißt
deutlich mehr als ein Arduino mit Ethernet Shield, und nur um ein paar
popelige Taster auszulesen und daraufhin HTTP-Requests zu senden ist so
ein RasPi wohl ziemlich "Kanonen auf Spatzen". Fortgeschrittene schicken
den ATmega auf dem Arduino natürlich zudem schlafen und wecken ihn nur
bei einem Tastendruck über einen Interrupt auf: dann ist der
Stromverbrauch minimal.
Liebe Grüße,
Karl
Das HTTPP-Protokoll ist Zeichenbasiertt (ASCII). Um einen popeligen
GET-Request abzusenden braucht man nur einen TCP-Stack und darüber
hinaus doch keine keine "Bibliotheken"!
Beispiel: http://www.example.com/?param1=7¶m2=seven
Die Antwort des Servers kann man einfach ignorieren, wenn man sie nicht
braucht ODER man sendet einen ganz simplen (eigenen) Bestätigungscode
zurück. Ein Webserver sendet Alles, auch nur einzelne Zeichen in eigener
Syntax - auf korrektes HTML sind nur Browser angewiesen.
Beispiel: http://qualidat.com/myip.php
Hallo Frank,
Frank schrieb:> Das HTTPP-Protokoll ist Zeichenbasiertt (ASCII).
Verzeihung, aber HTTP/1.1 schreibt ISO 8859-1 vor. Das ist zwar
weitgehend dasselbe wie US-ASCII, aber eben doch nicht dasselbe.
Liebe Grüße,
Karl
Karl Käfer schrieb:> Verzeihung, aber HTTP/1.1 schreibt ISO 8859-1 vor. Das ist zwar> weitgehend dasselbe wie US-ASCII, aber eben doch nicht dasselbe.
Is' ja richtig, aber das spielt bei ein par technischen Parametern
überhaupt keine Rolle, es sei denn der TE verwendet Umlaute und
Sonderzeichen, was vermutlich nicht passieren wird.
Frank schrieb:> ... es sei denn der TE verwendet Umlaute und> Sonderzeichen, was vermutlich nicht passieren wird.
Wenn der TE sich nicht bewusst ist, dass das ein Fallstrick sein könnte,
passiert so etwas aus Unwissenheit schneller als man denkt.
Geh doch einfach ins IHAD-Forum http://www.i-have-a-dreambox.com
Da kanns Du Reichi selbst dazu befragen, wie das funktioniert.
Die Leute dort geben gern und kompetent Auskunft.
Wolfgang schrieb:> Wenn der TE sich nicht bewusst ist, dass das ein Fallstrick sein könnte,> passiert so etwas aus Unwissenheit schneller als man denkt.
Verunsichert ihn doch nicht noch mehr. Es ist für seine Anwendung völlig
irrelevant.
Karl Käfer schrieb:> Ach, cyblord, sei doch nicht immer so hart, nur weil jemand die> Fachtermini nicht kennt.
Ach hier gehts doch nicht um eine Verwechslung von Begriffen. Hier sieht
man dass beim TE absolut null komma null Wissen oder Überblick über eine
Technologie (in diesem Fall grob gesagt "Netzwerktechnik") vorhanden
ist.
Unter solchen Vorrausetzungen ist das gesamte Unterfangen einfach
sinnlos und wird sowieso nichts. Das wird man ja wohl auch mal sagen
dürfen.
cyblord ---- schrieb:> Unter solchen Vorrausetzungen ist das gesamte Unterfangen einfach> sinnlos und wird sowieso nichts. Das wird man ja wohl auch mal sagen> dürfen.
Hm, ein Arduino-Bastler mit "absolut null komma null Wissen oder
Überblick" wäre da sicherlich anderer Meinung, wenn man ihm sagt, dass
er für sein Unterfangen einfach eine HTTP GET-Anfrage senden muss.
Man nehme:
- ein "Arduino UNO" Board (oder kompatiblen China-Klon)
- ein "Arduino Ethernet Shield" (oder kompatiblen China-Klon)
Lade sich das Beispielprogramm in die IDE:
http://arduino.cc/en/pmwiki.php?n=Reference/EthernetClient
Und ändere die Angaben für "Server" und in der GET-Anfrage passend ab.
Fertig.
Millionen Arduino-Bastler können sich gar nicht täuschen, dass man das
auch mit "absolut null komma null Wissen oder Überblick" hinbekommen
kann, solange man nur die URL kennt, die man aufrufen möchte.
Jürgen S. schrieb:> Man nehme:> - ein "Arduino UNO" Board (oder kompatiblen China-Klon)> - ein "Arduino Ethernet Shield" (oder kompatiblen China-Klon)>> Lade sich das Beispielprogramm in die IDE:> http://arduino.cc/en/pmwiki.php?n=Reference/EthernetClient>> Und ändere die Angaben für "Server" und in der GET-Anfrage passend ab.
Ah ja. Und warum musste dann der TE hier einen Thread eröffnen?
Weil das Wissen noch nicht mal dazu ausreicht, um zu Wissen WAS man tun
will. Dass es dann mit Arduino recht leicht zu machen ist, mag ja sein.
Cyblord, wenn Du nicht helfen möchtest, dann lass es einfach. Und zwar
ganz!
Bert: Du musst eine Verbindung zu Deinem Webserver, dem Du eine Anfrage
schicken möchtest, aufbauen. Hierzu hilft Dir evtl. das Stichwort
'socket'
Um eine Verbindung aufbauen zu können, benötigst Du die IP-Adresse
(kannst Du mit Hilfe des DNS aus dem Namen auflösen) den Port (bei
Webservern in der Regel 80) und den Transport (bei HTTP ist das TCP)
Zum spielen kannst Du mal telnet auf einem Linux-Rechner bemühen:
1
$ telnet jobstens.mooo.com 80
(Stellt eine Verbindung zu jobstens.mooo.com auf Port 80 her)
Nach Eingabe dieser Zeile passiert nichts, denn der Webserver wartet nun
auf Deine Befehle.
Wenn die Verbindung aufgebaut ist, kannst Du ganz einfach mit dem
Webserver 'quatschen'.
Die Frage ist nun, ob auf Deinem Webserver mehrere virtuelle Webserver
laufen oder wirklich nur einer. Du kannst nämlich mehrere Web-Adressen
haben, welche aber alle auf einen Webserver mit einer IP-Adresse laufen.
So kann man Rechner sparen. Wenn dies der Fall ist, dann musst Du den
Hostnamen mit angeben:
1
GET /mcnet.txt HTTP/1.1
2
Host: jobstens.mooo.com
3
(und 2x Enter)
Mit GET forderst Du die Datei an. Nur '/' ist die Startseite des
Servers. HTTP/1.1 ist das Protokoll.
Mit Host: gibst Du den Namen des Webservers an. NUR den Namen. Ohne
http:// und so ...
Es gibt noch weitere Parameter. Nach dem letzten muss 2x Return gesendet
werden.
Dann bekommst Du den gesamten Protokollheader zurück geliefert:
1
HTTP/1.1 200 OK
2
Date: Fri, 08 Aug 2014 21:16:37 GMT
3
Server: Apache/1.3.33 (Unix)
4
Last-Modified: Fri, 08 Aug 2014 20:47:18 GMT
5
ETag: "c56175-1c-53e53756"
6
Accept-Ranges: bytes
7
Content-Length: 28
8
Content-Type: text/plain
200 ist der Fehlercode und bedeutet, das alles okay ist.
Alles Andere erklärt sich weitestgehend von selbst.
Und dahinter kommt die angefordete Datei:
1
Hallo Mikrocontroller.net!
Auch wenn HTTP bedeutet, dass dieses Protokoll zur Übermittlung von
Hypertext (also Webseiten) ist, so lassen sich auch alle anderen Dateien
damit übermitteln. Auch die Bilder einer Webseite werden damit
übertragen.
Sollte auf dem Webserver nur diese eine Web-Adresse verfügbar sein, dann
kann man auch einfach mal nur
1
GET /mcnet.txt
senden. Da man kein Protokoll angegeben hat, kommt dann auch nur der
Dateiinhalt zurück:
1
Hallo Mikrocontroller.net!
Bei HTTP/1.1 wartet der Webserver nach der Datenübertragung noch etwas
auf weitere Befehle, bevor er die Verbindung schliesst. Ohne Protokoll
wird die Verbindung anschliessend sofort beendet.
Ach ja: Das ist die komplette URL und die kann man natürlich auch mit
dem Browser öffnen:
http://jobstens.mooo.com/mcnet.txt
Gruß
Jobst
Hi cyblord,
cyblord ---- schrieb:> Karl Käfer schrieb:>>> Ach, cyblord, sei doch nicht immer so hart, nur weil jemand die>> Fachtermini nicht kennt.>> Ach hier gehts doch nicht um eine Verwechslung von Begriffen. Hier sieht> man dass beim TE absolut null komma null Wissen oder Überblick über eine> Technologie (in diesem Fall grob gesagt "Netzwerktechnik") vorhanden> ist.
Ja, na und? Ist noch kein Meister vom Himmel gefallen. Und um zu machen,
was der TO vorhat, muß man auch kein Netzwerkprofi sein.
> Unter solchen Vorrausetzungen ist das gesamte Unterfangen einfach> sinnlos und wird sowieso nichts. Das wird man ja wohl auch mal sagen> dürfen.
Das kann man behaupten, muß man aber nicht.
Liebe Grüße,
Karl
Hallo Jobst,
Jobst M. schrieb:> Bei HTTP/1.1 wartet der Webserver nach der Datenübertragung noch etwas> auf weitere Befehle, bevor er die Verbindung schliesst.
Mit "Connection: close" im HTTP-Header kann man das abschalten.
HTH,
Karl
Hi,
Danke erstmal für eure Hilfe.
Leider ist es so, das ich mich fast null, nix mit Netzwerktechnik
auskenne.
Klar - im haus habe ich eins am laufen. An der Fritzbox hängen ein Qnap
Server, Dreamboxen usw.
Ich erkläre mal genauer, was ich möchte.
Von einer Haussteuerung, die ich mit Bascom aufbaue möchte ich HTTP
Befehle an die Dreamboxen senden.
Hier ein Beispiel.
Von einem geplanten Tochscreen möchte ich einen bestimmten Befehl an
eine Dreambox senden.
Hier in dem beispiel soll es dieser befehl sein.
http://ip.der.dreambox/cgi-bin/rc?352
Das würde bedeuten, das die Dreambox einen simulierten tastendruck der
"OK" auf der Fernbedienung empfängt.
Ich möchte also nur was ins netzwerk an die entsprechende Dreambox
senden. Keine Rückantworten oder sonst was.
Quasi eine Websteuerung der Dreamboxen übers Netzwerk ohne laufenden PC
von einem Microcontroller aus.
Ich mit meinen laienhaften Wissen würde es gern so haben:
If Touchscreen-taste-1 = "gedrückt" Then "Sende" HTTP Befehl
Ist es jetzt klarer was ich möchte?
Stromverbrauch ist eher zweitrangig. Wichtig ist mit der Microcontroller
mit Bascom.
Danke und schönen guten abend
Was Du suchst steht in der Bascom Hilfe unter SOCKETCONNECT und
TCPWRITE.
Dann brauchst Du aber auch noch die Hardware mit dem W3100A Chip.
Evtl. könntest Du dir noch Arduino anschauen, damit ist sowas für dich
vielleicht leichter zu lösen vor allem weil es da fertig Shields und
Libarys gibt.(Arduino ist leichter als es auf den ersten Blick aussieht)
@Die anderen:Die Dreambox erwartet nur einen Aufruf der entsprechenden
/cgi-bin/*, Antwort kommt bei den meisten Befehlen keine.