hallo, Ich möchte von einem microcontroller aus ein html befehl senden. Und zwar geht es um eine dreambox. Dazu gibt es hier eine übersicht der befehle oder der tasten der fernbedienung. http://dream.reichholf.net/wiki/Webinterface_Befehle#Tasten_der_Fernsteuerung:_.2Fcgi-bin.2Frc.3F.3Ckey.3E:.3Cduration.3E:.3Creptime.3E.2C.3Ckey....3E Ich brauche also eine möglichkeit um z.b. folgendes zu senden:(OK-taste) http://ip.der.dreambox/cgi-bin/rc?352 Wie nennt man das dann genau und was brauche ich dafür? Ist das "html senden" oder wie nennt man das? Weis nicht so recht, wonach ich suchen soll. Danke schonmal für eure hilfe
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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?
Sven B. schrieb: > Das mit der Userinteraktion verstehe ich auch nicht. Da gibt es auch nichts zu verstehen, der Post ist von hinten bis vorne Quatsch.
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.
Frank schrieb: > Das HTTPP-Protokoll ist Zeichenbasiertt (ASCII). Das ändert sich gerade. HTTP 2 steht vor der Tür.
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.
:
Bearbeitet durch User
Hier gibt es noch was zum lesen für Dich: http://bascom-forum.de/showthread.php?4055-Programm-f%FCr-NetIO
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.