Go Down

Topic: Wie bestimmten Wert von einer Webseite auslesen und darstellen ? (Read 5 times) previous topic - next topic

mkl0815

Wer ein "unixoides" Betriebssystem hat (Linux, MacOS etc.) kann auch einfach auf der Kommandozeile folgendes eigeben:
Quote

echo "username:geheim" | md5sum

Das liefert dann den gewünschten MD5-Hash.

da2001

Wenn Du irgendwo Webspace mit PHP zur Verfügung hast, würde ich damit die Daten verarbeiten.
Einfacher Aufruf per cURL und dann nur die Temperatur für das Arduino ausgeben. Wäre für mich als Arduino Anfänger der einfachste Weg :)
Helfe Dir gerne bei der Umsetzung in PHP

COOL

#22
Oct 22, 2012, 02:21 pm Last Edit: Oct 22, 2012, 02:28 pm by COOL Reason: 1
Hallo zusammen,
hat mich ein paar Stunden gekostet, um den ganzen hilfreichen Hinweisen nachzugehen. Teilweise habe ich es nicht verstanden und habe überwiegend Schiffbruch erlitten. Letzt und endlich habe ich es doch ein wenig anders gemacht und habe ERFOLGE gehabt, die leider nicht ständig von Dauer sind.
Was ganz sicher ist, dass man den USER-Namen und das PASSWORT durch einen " : " trennen muss und dies dann einer Base64-Wandlung unterziehen muss !
Es gibt in der Bibliothek eine Base64-Aplikation, jedoch weiss ich diese nicht anzuwenden und habe  "USER-Namen:PASSWORT" hier gewandelt:
http://patshaping.de/projekte/kleinkram/base64.php

Nun zum Script:
Quote
/*
modifizierter WebClient aus Arduino 1.0.1

*/

#include <SPI.h>
#include <Ethernet.h>
//#include <Base64.h>
#define LOGIN ("YWRtaW46YmxhYmxhYmxh.") //Base64 kodiert USERNAME:PASSWORT unter http://patshaping.de/projekte/kleinkram/base64.php
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(99,99,99,99); // Webserver-IP eintragen

//(Port 80 ist für HTTP):
EthernetClient client;

void setup() {
  Serial.begin(9600);
   while (!Serial) {
    ; // warte bis serieller Port verbunden ist
  }

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    for(;;)
      ;
  }
  delay(1000);
  Serial.println("verbinde, bitte warten...");
  if (client.connect(server, 80)) {
    Serial.println("verbunden");
//client.print("Authorization: Basic ");
client.print(LOGIN);
   //client.println("GET /search?q=Sensor 6 HTTP/1.0");
    client.println();
  }
  else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }
  if (!client.connected()) {
    Serial.println();
    Serial.println("Verbindung getrennt");
    client.stop();
    for(;;)
      ;
  }
}


Das Ergebnis ist verblüffend und zugleich eigenartig. Ohne Änderungen am Script erhalte ich folgende Antworten :
Die beste -
Quote
verbinde, bitte warten...
verbunden
Document follows
Server: AVR_WEB_Switch
Content-Type: text/html

ext/html


<html><head><meta http-equiv="refresh" content="30" text/html; charset=iso-8859-1">
<title>AVR NET IO</title>
<style type="text/css">
.fett {font-weight: bold; margin-top:15px;}
td { cellpadding: 2px; }
body { font-family: arial;  font-size: 1.0 em; color: #000000; background-color: rgb(255, 255, 204)}
h1 {text-align: center; font-weight: bold; color: white; font-size: 1.2 em}
</style>
</head><body><center>
<table style="width: 600px; text-align: left; background-color: rgb(153, 153, 255);" cellpadding="5">
<tr><td><h1>HOME 1 WEBSERVER</h1>
<table style="width: 100%; font-weight: bold;">
<tr><td>Serverzeit: 12:32</td><td style="text-align: right;">Pagecounter: 231</td></tr></table>
</td></tr></table>
<div class="fett">Status PORTA:</div>
<table style="width: 600px; text-align: left; background-color: rgb(255, 255, 153);" border="0">
<tr><td>dig. Eingang</td><td style="width:35px;">auf/zu</td><td align="center">analog. Eingang</td><td>Wert (0-1023)</td></tr>
<tr><td>A0_Fenster_1</td><td style="background-color: rgb(153, 0, 0);"></td><td align="center">AD-A4</td><td>1018</td></tr>
<tr><td>A1_Fenster_2</td><td style="background-color: rgb(153, 0, 0);"></td><td align="center">AD-A5</td><td>1017</td></tr>
<tr><td>A2_</td><td style="background-color: rgb(153, 0, 0);"></td><td align="center">AD-A6</td><td>1018    LDR</td></tr>
<tr><td>A3_</td><td style="background-color: rgb(153, 0, 0);"></td><td align="center">AD-A7</td><td>(8xDS1820)</td></tr>
</table>
<div class="fett">1-Wire-Temperatursensoren:</div>
<table style="width: 600px; text-align: left; background-color: rgb(255, 255, 102);" border="0">
<tr><td>1-Wire</td><td>Ort</td><td align="right">Wert</td><td align="left">Einheit</td><td>Min/Max(Tag)</td></tr>
<tr><td>Sensor 0</td><td>Esszimmer</td><td align="right">15,9</td><td align="left">&deg;C</td><td>15,6 / 16,0</td></tr>
<tr><td>Sensor 1</td><td>Keller</td><td align="right">16,3</td><td align="left">&deg;C</td><td>16,3 / 16,4</td></tr>
<tr><td>Sensor 2</td><td>Kuehlkörper</td><td align="right">33,7</td><td align="left">&deg;C</td><td>33,6 / 33,8</td></tr>
<tr><td>Sensor 3</td><td>Pumpe RL</td><td align="right">15,0</td><td align="left">&deg;C</td><td>14,9 / 15,1</td></tr>
<tr><td>Sensor 4</td><td>Pumpe VL</td><td align="right">15,1</td><td align="left">&deg;C</td><td>15,0 / 15,1</td></tr>
<tr><td>Sensor 5</td><td>Brauchwasser</td><td align="right">15,5</td><td align="left">&deg;C</td><td>15,5 / 15,6</td></tr>
<tr><td>Sensor 6</td><td>Nebengebaeude</td><td align="right">14,1</td><td align="left">&deg;C</td><td>13,9 / 14,1</td></tr>   //Diese Zeile interessiert mich !
<tr><td>Sensor 7</td><td>Solar-Speicher</td><td align="right">45,9</td><td align="left">&deg;C</td><td>11,0 / 48,9</td></tr>
</table>
<div class="fett">Schaltanweisungen:</div>
<table style="width: 600px; text-align: left; background-color: rgb(255, 204, 51);" border="0">
<tr><td><form name="form1" method="post" action=" ">
<table style="width: 100%; text-align: left;" border="0">
<tr><td><input type="checkbox" name="OUT" value="X" > Automatik
</td><td>0
</td><td>(ein/aus)
</td></tr>
<tr><td><input type="checkbox" name="OUT" value="A"> C0_Relais_1</td><td>  Heizung</td><td>ein/aus</td></tr>
<tr><td><input type="checkbox" name="OUT" value="B"> C1_Relais_2</td><td>  Anpassung Fühler-Heizung</td><td>ein/aus</td></tr>
<tr><td><input type="checkbox" name="OUT" value="C"> C2_Relais_3</td><td></td><td></td></tr>
<tr><td><input type="checkbox" name="OUT" value="D"> C3_Relais_4</td><td></td><td></td></tr>
<tr><td><input type="checkbox" name="OUT" value="E"> C4_Relais_5</td><td><input type="checkbox" name="OUT" value="i">- / +<input type="checkbox" name="OUT" value="j"> ab 15 &deg;C Differenz ein</td><td>-> Sensor 3,4</td></tr>
<tr><td><input type="checkbox" name="OUT" value="F"> C5_Relais_6</td><td></td><td></td></tr>
<tr><td><input type="checkbox" name="OUT" value="G"> C6_Relais_7</td><td>  Lüfter</td><td>im Server</td></tr>
<tr><td><input type="checkbox" name="OUT" value="H"> C7_Relais_8</td><td>  Tor</td><td>auf/zu</td></tr>
</table>

<p align="center"><input type="submit" name="SUB" value="Senden"></p></form>
</td></tr></table>

<div class="fett">Lokale Wetterinformationen: </div>-> www.wetter24.de



<div>PORTB -> ENC28J60
PORTD -> LCDisplay</div>


<div>WEBSERVER Home 1 </div>
</span></body></html>

Verbindung getrennt


Es kann aber auch so aussehen:
Quote
verbinde, bitte warten...
verbunden

Verbindung getrennt



WARUM......??
Wie dem auch sei.

Wie bekomme ich jetzt die Rückmeldung aus der markierten Zeile oben
<tr><td>Sensor 6</td><td>Nebengebaeude</td><td align="right">14,1</td><td align="left">&deg;C</td><td>13,9 / 14,1</td></tr>
Ich möchte gerne die 14,1° später auf meinem Display, bzw seriellem Monitor sehen.

Mit dem Browser sieht es so aus, siehe Bild.
Kann mir jemand mal bitte die Syntax geben, damit ich nur die 14,1° sehe und nicht das ganz Listing
Eventuell so " client.println("GET /search?q=Sensor 6 HTTP/1.0"); " und dann ?

Gruß Gerd


mkl0815

Schau Dir mal http://www.arduino.cc/playground/Code/TextFinder an. Damit kannst Du z.B. nach dem String Nebengebaeude</td><td align="right"> suchen und die danach folgende Float Zahl parsen lassen. Dann hast Du den Wert gleich.
Alternativ kannst Du auch die Ausgabe vom Webserver in einem input-Puffer einlesen und in dem nach dem String "Nebengebaeude" suchen. Wenn Du die Stelle gefunden hast, steht Deine Temperatur mit einem Offset von 35 an der gefundenen Stelle.

COOL

Hallo mkl0815,
der Tip ist nicht schlecht. Wenn ich die Beispiele aufrufe kommen immer Fehlermeldungen, so z.B. beim Sketch "SerialReceive.pde" kommt die Meldung
"Textfinder" does not name a type" und "TextFinder finder( client);" wird hinterlegt

Gruß Gerd

Go Up