INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wetterdaten von Yahoo auslesen
24.01.2016, 20:15 (Dieser Beitrag wurde zuletzt bearbeitet: 25.01.2016 12:57 von Bitklopfer.)
Beitrag #1
Wetterdaten von Yahoo auslesen
hallo
ich möchte mit meinem arduino mega die wetterdaten auslesen und sie dann per upd-protokoll an meine haussteuerung übergeben
ich hab da mal was vorbereitet:
leider macht er das nur einmal und ich hätte gerne die vorhersage für drei tage...


Code:
/*
  DNS and DHCP-based Web client

This sketch connects to a website (http://www.google.com)
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13


*/

#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
// Änderung 1
char serverName[] = "weather.yahooapis.com";

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

//#################################

TextFinder  finder( client );  

char hum[30];
char wind[30];

//#################################

void setup() {
// Open serial communications and wait for port to open:
  Serial.begin(9600);
  


  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    while(true);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:

  if (client.connect(serverName, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    // Änderung 2
    client.println("GET /forecastrss?w=12835454&u=c HTTP/1.0");
    client.print("Host: ");client.println(serverName);
    client.println();
  }
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }
// Humidity
    if ( (finder.getString("<yweather:atmosphere humidity=\"", "\"",hum,4)!=0) )
    {
      Serial.print("Humidity:  ");
      Serial.println(hum);
      }
    
       // Temperature
    if(finder.find("temp=") )
    {
      int temperature = finder.getValue();
      Serial.print("Temp C:  ");
      Serial.println(temperature);
    
    }
    


      
      
  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    while(true);
  }
  }
...bischen geschummelt...lgbk
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.01.2016, 12:06 (Dieser Beitrag wurde zuletzt bearbeitet: 25.01.2016 12:07 von ardu_arne.)
Beitrag #2
RE: Wetterdaten von Yahoo auslesen
Hallo,
das Programm ist so geschrieben dass die Abfrage der Webseite nur ein mal gemacht wird. Dann geht das Programm in eine Endlosschleife in der nichts mehr passiert.

Ein Teil des Codes aus setup() muss in loop() verschoben werden, damit die Webseite öfter aufgerufen werden kann.

Versuche es mal mit folgendem Code: (ohne Gewähr)
Code:
/*
DNS and DHCP-based Web client

This sketch connects to a website (http://www.google.com)
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13


*/

#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
// Änderung 1
char serverName[] = "weather.yahooapis.com";

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

//#################################

TextFinder finder( client );

char hum[30];
char wind[30];

//#################################

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
}

void loop()
{
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
  Serial.println("Failed to configure Ethernet using DHCP");
  // no point in carrying on, so do nothing forevermore:
  while(true);
  }
    // give the Ethernet shield a second to initialize:
    delay(1000);
    Serial.println("connecting...");

    // if you get a connection, report back via serial:

    if (client.connect(serverName, 80)) {
      Serial.println("connected");
      // Make a HTTP request:
      // Änderung 2
      client.println("GET /forecastrss?w=12835454&u=c HTTP/1.0");
      client.print("Host: ");client.println(serverName);
      client.println();
    }
    else {
      // kf you didn't get a connection to the server:
      Serial.println("connection failed");
    }
  
    // if there are incoming bytes available
    // from the server, read them and print them:
    if (client.available()) {
      char c = client.read();
      Serial.print(c);
    }
    // Humidity
    if ( (finder.getString("<yweather:atmosphere humidity=\"", "\"",hum,4)!=0) )
    {
      Serial.print("Humidity: ");
      Serial.println(hum);
    }

    // Temperature
    if(finder.find("temp=") )
    {
      int temperature = finder.getValue();
      Serial.print("Temp C: ");
      Serial.println(temperature);
  
    }

    // if the server's disconnected, stop the client:
    if (!client.connected()) {
      Serial.println();
      Serial.println("disconnecting.");
      client.stop();
  
      delay(15000);
    }
}
Ob es so funktioniert weiß ich nicht, aber damit sollte alle 15 Sekunden eine Anfrage erfolgen.

Und künftig Programmcode bitte zwischen Codetags einfügen. Dazu das # oben im Editorkopf verwenden. Smile

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.01.2016, 20:06
Beitrag #3
RE: Wetterdaten von Yahoo auslesen
ah ok danke, das mit dem code hab ich zwar gesehen aber nicht gewusst, bin halt a vollgas noob, ned wahr?
Code:
//#################################

TextFinder finder( client );

char hum[30];
char wind[30];

//#################################
das glaub ich könnt ich weglassen
könntest Du mir den sketch noch anpassen dass er mir von yahoo für heute, morgen und übermorgen
die temperatur, und wetter code (partly cloud usw...) auf eine variable schreibt
weil die kommunikation zur haussteuerung bekomm ich dann schon hin per udp

ein kollege hat mir bei so dht22 sensoren geholfen, ich hab den sketch ein bisschen minimiert, dann könnte ich dass yahoo zeug reinschreiben und mal testen...

Code:
#include "DHT.h"
#include <Ethernet.h>
#include <SPI.h>
#include <SFE_BMP180.h>
#include <Wire.h>

//Netzwerkdaten Arduino
byte mac[] = {
  0x92, 0xA2, 0xDA, 0x0F, 0x08, 0xE11
};  // MAC-Adresse Adruino *******anpassen :-) **********???
byte ip[] = {
  192, 168, 1, 13
};                       // Lokale Adresse Adruino *******anpassen**********!!!!
byte DNS[] = {
  192, 168, 1, 1
};
byte gateway[] = {
  192, 168, 1, 1
};
byte subnet[] = {
  255, 255, 255, 0
};


//Dämmerungssensor
#define analogPin 8

//Lichttaster LED
#define LED1_Pin 2
#define LED2_Pin 3
#define LED3_Pin 4
#define LED4_Pin 5
#define LED5_Pin 6
#define LED6_Pin 7
#define LED7_Pin 8
#define LED8_Pin 9

//UDP-Datenaustausch Haussteuerung
IPAddress PLC(192, 168, 1, 7);       // CP Addresse *******anpassen**********!!!!
unsigned int S7Port = 2000;          // Sende/Empfangsport für Kommunikation per UDP
EthernetUDP Udp_S7;

void setup()
{
  Serial.begin(9600);
  delay(250);
  Serial.println("S7-Kommunikation (UDP)----");
  //--------------------setup Ethernet----------------------------------------
  Ethernet.begin(mac, ip, DNS, gateway, subnet);
  delay(10000);
  Serial.print("lokale IP: ");
  Serial.println(Ethernet.localIP());
  //--------------------setup Ethernet----------------------------------------

  //--------------------setup UDP (Port 2000)----------------------------------------
  Udp_S7.begin(S7Port);
  //--------------------setup UDP (Port 2000)----------------------------------------
  //--------------------setup Analog-Pins-----------------------------------------------
  pinMode(analogPin, INPUT);
  pinMode(LED1_Pin, OUTPUT);
  pinMode(LED2_Pin, OUTPUT);
  pinMode(LED3_Pin, OUTPUT);
  pinMode(LED4_Pin, OUTPUT);
  pinMode(LED5_Pin, OUTPUT);
  pinMode(LED6_Pin, OUTPUT);
  pinMode(LED7_Pin, OUTPUT);
  pinMode(LED8_Pin, OUTPUT);
  //--------------------setup Analog-Pins-----------------------------------------------
}

//-----------------------Variablen-definition-----------------------------
unsigned long DHT_Wartezeit = millis(); // aktualisierungsintervall Temperatursensor
unsigned long Zykluszeit;

boolean Receive_Bool[16], Send_Bool[16];
byte Receive_Byte[8], Send_Byte[8];
int Receive_Int[2], Send_Int[30];
float Receive_Real[2], Send_Real[10];
byte Empfangspuffer[22];
byte Sendepuffer[110];

int Sensorzaehler = 1;


//-----------------------Variablen-definition-----------------------------

void loop()
{
  Zykluszeit = millis();
  S7_Empfangen_UDP();     //Daten empfangen....wenn benötigt aktivieren!!!

  LED_PWM();

  if (millis() - DHT_Wartezeit > 10000 / Anzahl_Sensoren) {             //der Wert "10000" (ms) bedeutet die Aktualisierungszeit aller Sensoren an S7....kann beliebig angepasst werden
  
      S7_Senden_UDP();                             //Aufruf Daten senden
    }
    Serial.print("Zykluszeit in ms: ");
    Serial.println(millis() - Zykluszeit);
  }
}
//----------------------------------LED über PWM ansteuern----------------------------------------------
void LED_PWM() {
  analogWrite(LED1_Pin, Receive_Byte[00]);  // Byte von S7 wird an PWM Pin übertragen
  analogWrite(LED2_Pin, Receive_Byte[01]);  // Byte von S7 wird an PWM Pin übertragen
  analogWrite(LED3_Pin, Receive_Byte[02]);  // Byte von S7 wird an PWM Pin übertragen
  analogWrite(LED4_Pin, Receive_Byte[03]);  // Byte von S7 wird an PWM Pin übertragen
  analogWrite(LED5_Pin, Receive_Byte[04]);  // Byte von S7 wird an PWM Pin übertragen
  analogWrite(LED6_Pin, Receive_Byte[05]);  // Byte von S7 wird an PWM Pin übertragen
  analogWrite(LED7_Pin, Receive_Byte[06]);  // Byte von S7 wird an PWM Pin übertragen
  analogWrite(LED8_Pin, Receive_Byte[07]);  // Byte von S7 wird an PWM Pin übertragen


}
//----------------------------------LED über PWM ansteuern----------------------------------------------

  //Daten in Sendepuffer schreiben
  Send_Int[Sensorzaehler * 2 - 2] = Temperatur * 10;
  Send_Int[Sensorzaehler * 2 - 1] = Luftfeuchtigkeit * 10;
  //Sensorzähler rücksetzen wenn alle Sensoren ausgelesen sind....jetzt gehts von vorne wieder los
  if (Sensorzaehler < Anzahl_Sensoren)
    Sensorzaehler++;
  else {
    Sensorzaehler = 1;
  }

}
//--------------------------DHT-Sensor-----------------------------------------------------------------
//----------------------S7-Senden UDP--------------------------------
void S7_Senden_UDP() {
  S7_Sendedaten();
  Udp_S7.beginPacket(PLC, S7Port);                   //UDP-Port für Daten an S7 (Einstellung im Net-Pro)
  Udp_S7.write(Sendepuffer, sizeof (Sendepuffer));
  Udp_S7.endPacket();
  Serial.println("Daten an S7 ueber UDP gesendet....");
}
//----------------------S7-Senden UDP--------------------------------
//----------------------S7-Empfangen UDP--------------------------------
void S7_Empfangen_UDP() {
  int Paketgroesse = Udp_S7.parsePacket();

  if (Paketgroesse)
  {
    Serial.println("Empfange Daten von S7 ueber UDP.....");
    // read the packet into packetBufffer
    Udp_S7.read(Empfangspuffer, sizeof (Empfangspuffer));
    S7_Empfangsdaten();
  }
}
//----------------------S7-Empfangen UDP--------------------------------
//-----------------------------------S7 Empfangdsaten aus Puffer kopieren-------------------------------------------------
void S7_Empfangsdaten() {
  byte bytes_temp[4];

  for (int h = 0; h < 2; h++) {
    for (int i = 0; i < 8; i++) {
      Receive_Bool[i + 8 * h] = bitRead(Empfangspuffer[h], i);
    }
  }

  for (int i = 0; i < 8; i++) {
    Receive_Byte[i] = Empfangspuffer[i + 2];
  }

  for (int i = 0; i < 2; i++) {
    bytes_temp[0] = Empfangspuffer[i * 2 + 11];
    bytes_temp[1] = Empfangspuffer[i * 2 + 10];
    Receive_Int[i] = *((int*)bytes_temp);
  }

  for (int i = 0; i < 2; i++) {
    bytes_temp[0] = Empfangspuffer[i * 4 + 17];
    bytes_temp[1] = Empfangspuffer[i * 4 + 16];
    bytes_temp[2] = Empfangspuffer[i * 4 + 15];
    bytes_temp[3] = Empfangspuffer[i * 4 + 14];
    Receive_Real[i] = *((float*)bytes_temp);
  }
}
//-----------------------------------S7 Empfangdsaten aus Puffer kopieren-------------------------------------------------
//-----------------------------------S7 Sendedaten in Puffer kopieren----------------------------------------------------
void S7_Sendedaten() {
  byte bytes_temp[4];
  //------------------sende Lebensbit-----------------------
  if (Send_Bool[0] == false) {
    Send_Bool[0] = true;
  }
  else Send_Bool[0] = false;
  //------------------sende Lebensbit-----------------------
  
  for (int i = 0; i < 8; i++) {
    Sendepuffer[i + 2] = Send_Byte[i];
  }

  for (int i = 0; i < 30; i++) {
    Sendepuffer[i * 2 + 10] = highByte(Send_Int[i]);
    Sendepuffer[i * 2 + 11] = lowByte(Send_Int[i]);
  }

  for (int i = 0; i < 10; i++) {
    *(float*)bytes_temp = Send_Real[i];
    Sendepuffer[i * 4 + 70] = bytes_temp[3];
    Sendepuffer[i * 4 + 71] = bytes_temp[2];
    Sendepuffer[i * 4 + 72] = bytes_temp[1];
    Sendepuffer[i * 4 + 73] = bytes_temp[0];
  }
}
//-----------------------------------S7 Sendedaten in Puffer kopieren----------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.01.2016, 22:18
Beitrag #4
RE: Wetterdaten von Yahoo auslesen
Hallo nowak222,
ich würde dir empfehlen den Code für das "yahoo zeug" selbst in dein weiteres Programm zu integrieren. Sonst wirst du ewig ein "vollgas noob" bleiben. Smile

So wie ich das Programm für die Wetterdaten umgebaut habe wird es vermutlich nicht laufen. Getestet habe ich nicht. Versuche den Teil also doch erst mal zum laufen zu bringen bevor du den zweiten Schritt vor dem ersten machst, und berichte dann darüber.

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2016, 21:40 (Dieser Beitrag wurde zuletzt bearbeitet: 29.01.2016 21:55 von nowak222.)
Beitrag #5
RE: Wetterdaten von Yahoo auslesen
danke...hast recht werd mal ein wenig rumwurschtln
hintergrund ist der, ich möchte der haussteuerung eine prognose abliefern für den heizkessel zu ausbremsen falls sonnenenergie für die solarthermiekollektoren ansteht...
übrigens dass spuckt mir der serial monitor aus bei einem ersten gehversuch mit gesucht gefunden sketch im netz:
Code:
connecting...
connected
HTTP/1.0 200 OK
Date: Fri, 29 Jan 2016 20:51:24 GMT
P3P: policyref="http://info.yahoo.com/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC GOV"
Cache-Control: max-age=200, public
Vary: Accept-Encoding
Content-Length: 2729
Content-Type: text/xml;charset=UTF-8
Age: 0
Via: http/1.1 ats50.weather.bf1.yahoo.com (ApacheTrafficServer/5.3.0 [cMsSfW]), http/1.1 r01.ycpi.dea.yahoo.net (ApacheTrafficServer [cSsSfU])
Server: ATS
Y-Trace: BAEAQAAAAADnxHRaqhpk9QAAAAAAAAAAU.xNui12goEAAAAAAAAAAAAFKn8ywTejAAUqfzLDWP1dvzMK​AAAAAA--

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
        <rss version="2.0" xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
            <channel>
        
<title>Yahoo! Weather - -Mau, DE</title>
<link>http://us.rd.yahoo.com/dailynews/rss/weather/Mau__DE/*http://weather.yahoo.com/forecast/GMXX1752_c.html</link>
<description>Yahoo! Weather for Mau, DE</description>
<language>en-us</language>
<lastBuildDate>Fri, 29 Jan 2016 8:59 pm CET</lastBuildDate>
<ttl>60</ttl>
<yweather:location city="Mau" region="BY"   country="Germany"/>
<yweather:units temperature="C" distance="km" pressure="mb" speed="km/h"/>
<yweather:wind chill="1"   direction="160"   speed="" />
<yweather:atmosphere humidity="93"  visibility="16"  pressure="1030"  rising="0" />
<yweather:astronomy sunrise="7:45 am"   sunset="5:02 pm"/>
<image>
<title>Yahoo! Weather</title>
<width>142</width>
<height>18</height>
<link>http://weather.yahoo.com</link>
<url>http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif</url>
</image>
<item>
<title>Conditions for Mau, DE at 8:59 pm CET</title>
<geo:lat>49.21</geo:lat>
<geo:long>12.24</geo:long>
<link>http://us.rd.yahoo.com/dailynews/rss/weather/Mau__DE/*http://weather.yahoo.com/forecast/GMXX1752_c.html</link>
<pubDate>Fri, 29 Jan 2016 8:59 pm CET</pubDate>
<yweather:condition  text="Clear"  code="31"  temp="3"  date="Fri, 29 Jan 2016 8:59 pm CET" />
<description><![CDATA[
<img src="http://l.yimg.com/a/i/us/we/52/31.gif"/><br />
<b>Current Conditions:</b><br />
Clear, 3 C<BR />
<BR /><b>Forecast:</b><BR />
Fri - Mostly Clear. High: 9 Low: 1<br />
Sat - Partly Cloudy. High: 10 Low: 2<br />
Sun - Rain. High: 4 Low: 3<br />
Mon - AM Light Rain. High: 12 Low: 6<br />
Tue - AM Clouds/PM Sun. High: 11 Low: 5<br />
<br />
<a href="http://us.rd.yahoo.com/dailynews/rss/weather/Mau__DE/*http://weather.yahoo.com/forecast/GMXX1752_c.html">Full Forecast at Yahoo! Weather</a><BR/><BR/>
(provided by <a href="http://www.weather.com" >The Weather Channel</a>)<br/>
]]></description>
<yweather:forecast day="Fri" date="29 Jan 2016" low="1" high="9" text="Mostly Clear" code="33" />
<yweather:forecast day="Sat" date="30 Jan 2016" low="2" high="10" text="Partly Cloudy" code="30" />
<yweather:forecast day="Sun" date="31 Jan 2016" low="3" high="4" text="Rain" code="12" />
<yweather:forecast day="Mon" date="1 Feb 2016" low="6" high="12" text="AM Light Rain" code="11" />
<yweather:forecast day="Tue" date="2 Feb 2016" low="5" high="11" text="AM Clouds/PM Sun" code="30" />
<guid isPermaLink="false">GMXX1752_2016_02_02_7_00_CET</guid>
</item>
</channel>
</rss>

<!-- fan1599.sports.bf1.yahoo.com Fri Jan 29 12:51:24 PST 2016 -->

disconnecting.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2016, 23:43
Beitrag #6
RE: Wetterdaten von Yahoo auslesen
Hi,
das sieht doch schon mal gut aus.Smile

Dein Arduino verbindet sich mit der Webseite und der Serial Monitor gibt den Seitenquelltext aus.
Jetzt gilt es nur noch die relevanten Infos aus dem "Stream" heraus zu fischen.

Dein Vorhaben die Wetterdaten in die Brauchwasserbereitung einfließen zu lassen finde ich gut. Ich würde aber erst mal nur einen Tag voraus planen. Was man manchmal so als Wettervorhersage erhält, kommt auch schon mal der Ziehung der Lottozahlen gleich.Wink
Ich habe eine PV Anlage und gestern auf den Wetterbericht für heute geschaut. Dem Wetterbericht nach hätte heute ein Tag zum vergessen sein sollen, aber real wurde es dann der zweitbeste Tagesertrag im ganzen Januar.

Mach so weiter und entwickle dein Arduino Programm selbst, auch wenn aller Anfang schwer ist. Aber nur so kannst du später nachvollziehen was da passiert.
Und glaube mir, wenn du das durchziehst wir das Programm umfangreich werden.
Wenn es mal läuft fallen dir immer neue Dinge ein die man noch einbauen könnte und dann hilft es ungemein das Programm (fast) komplett selbst geschrieben zu haben.

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2016, 16:17
Beitrag #7
RE: Wetterdaten von Yahoo auslesen
so hab ein bisschen rumgepfuscht und auch schon daten an die steuerung übermitteln können von yahoo-arduino-hausteuerung
die aktuellen werte bekomme ich, aber wer kann mir helfen die Daten von Montag, dienstag, usw... auf variablen zu legen?
Code:
#include <Ethernet.h>
#include <SPI.h>
#include <TextFinder.h>


//Netzwerkdaten Arduino
byte mac[] = {
  0x92, 0xA2, 0xDA, 0x0F, 0x08, 0xE11
};  // MAC-Adresse Adruino *******anpassen :-) **********???
byte ip[] = {
  192, 168, 1, 63
};                       // Lokale Adresse Adruino *******anpassen**********!!!!
byte DNS[] = {
  192, 168, 1, 1
};
byte gateway[] = {
  192, 168, 1, 1
};
byte subnet[] = {
  255, 255, 255, 0
};
char serverName[] = "weather.yahooapis.com";
EthernetClient client;

//#################################

TextFinder finder( client );

char hum[30];
char Montag[30];


//#################################


//UDP-Datenaustausch S7
IPAddress PLC(192, 168, 1, 7);       // CP Addresse *******anpassen**********!!!!
unsigned int S7Port = 2100;          // Sende/Empfangsport für Kommunikation per UDP
EthernetUDP Udp_S7;

void setup()
{
  Serial.begin(9600);
  delay(250);
  Serial.println(" Kommunikation (UDP)");
  //--------------------setup Ethernet----------------------------------------
  Ethernet.begin(mac, ip, DNS, gateway, subnet);
  delay(10000);
  Serial.print("lokale IP: ");
  Serial.println(Ethernet.localIP());
  //--------------------setup Ethernet----------------------------------------
  
  //--------------------setup UDP_S7 (Port 2000)----------------------------------------
  Udp_S7.begin(S7Port);
  //--------------------setup UDP_S7 (Port 2000)----------------------------------------
  
}

//-----------------------Variablen-definition-----------------------------
unsigned long DHT_Wartezeit = millis(); // aktualisierungsintervall Temperatursensor
unsigned long Zykluszeit;

boolean Receive_Bool[16], Send_Bool[16];
byte Receive_Byte[8], Send_Byte[8];
int Receive_Int[2], Send_Int[30];
float Receive_Real[2], Send_Real[10];
byte Empfangspuffer[22];
byte Sendepuffer[110];

int Sensorzaehler = 1;


//-----------------------Variablen-definition-----------------------------

void loop()
{

// give the Ethernet shield a second to initialize:
    delay(1000);
    Serial.println("connecting...");

    // if you get a connection, report back via serial:

    if (client.connect(serverName, 80)) {
      Serial.println("connected");
      // Make a HTTP request:
      // Änderung 2
      client.println("GET /forecastrss?w=12838045&u=c HTTP/1.0");
      client.print("Host: ");client.println(serverName);
      client.println();
    }
    else {
      // kf you didn't get a connection to the server:
      Serial.println("connection failed");
    }
  
    // if there are incoming bytes available
    // from the server, read them and print them:
    if (client.available()) {
      char c = client.read();
      Serial.print(c);
    }
    // Humidity
    if ( (finder.getString("<yweather:atmosphere humidity=\"", "\"",hum,4)!=0) )
    {
      Serial.print("Humidity: ");
      Serial.println(hum);
      int humi = atoi(hum);
      Send_Int[26] = int(humi);    
         }
  
        
    // pressure
    if(finder.find("pressure=") )
    {
      int pressure = finder.getValue();
      Serial.print("Luftdruck: ");
      Serial.println(pressure);
      Send_Int[27] = int(pressure);
  
    }
    // Temperature
    if(finder.find("temp=") )
    {
      int temperature = finder.getValue();
      Serial.print("Temp C: ");
      Serial.println(temperature);
      Send_Int[28] = int(temperature);
  
    }

     // code
    if(finder.find("code=") )
    {
      int code = finder.getValue();
      Serial.print("Code: ");
      Serial.println(code);
      Send_Int[29] = int(code);
  
    }
       // Montag
    if ( (finder.getString("<yweather:forecast day=\"Mon", "\"",Montag,4)!=0) )
    {
      Serial.print("Montag: ");
      Serial.println(Montag);
      
         }
    

    // if the server's disconnected, stop the client:
    if (!client.connected()) {
      Serial.println();
      Serial.println("disconnecting.");
      client.stop();
  
      delay(15000);
    }

  
  Zykluszeit = millis();
  S7_Empfangen_UDP();     //Daten von S7 empfangen....wenn benötigt aktivieren!!!

  

  if (millis() - DHT_Wartezeit > 10000 / 1) {             //der Wert "10000" (ms) bedeutet die Aktualisierungszeit aller Sensoren an S7....kann beliebig angepasst werden
  
    if (Sensorzaehler == 1) {
              S7_Senden_UDP();                             //Aufruf Daten an S7 senden
    }
    Serial.print("Zykluszeit in ms: ");
    Serial.println(millis() - Zykluszeit);
  }
}




//--------------------------DHT-Sensor-----------------------------------------------------------------
//----------------------S7-Senden UDP--------------------------------
void S7_Senden_UDP() {
  S7_Sendedaten();
  Udp_S7.beginPacket(PLC, S7Port);                   //UDP-Port für Daten an S7 (Einstellung im Net-Pro)
  Udp_S7.write(Sendepuffer, sizeof (Sendepuffer));
  Udp_S7.endPacket();
  Serial.println("Daten an S7 ueber UDP gesendet....");
}
//----------------------S7-Senden UDP--------------------------------
//----------------------S7-Empfangen UDP--------------------------------
void S7_Empfangen_UDP() {
  int Paketgroesse = Udp_S7.parsePacket();

  if (Paketgroesse)
  {
    Serial.println("Empfange Daten von S7 ueber UDP.....");
    // read the packet into packetBufffer
    Udp_S7.read(Empfangspuffer, sizeof (Empfangspuffer));
    S7_Empfangsdaten();
  }
}
//----------------------S7-Empfangen UDP--------------------------------
//-----------------------------------S7 Empfangdsaten aus Puffer kopieren-------------------------------------------------
void S7_Empfangsdaten() {
  byte bytes_temp[4];

  for (int h = 0; h < 2; h++) {
    for (int i = 0; i < 8; i++) {
      Receive_Bool[i + 8 * h] = bitRead(Empfangspuffer[h], i);
    }
  }

  for (int i = 0; i < 8; i++) {
    Receive_Byte[i] = Empfangspuffer[i + 2];
  }

  for (int i = 0; i < 2; i++) {
    bytes_temp[0] = Empfangspuffer[i * 2 + 11];
    bytes_temp[1] = Empfangspuffer[i * 2 + 10];
    Receive_Int[i] = *((int*)bytes_temp);
  }

  for (int i = 0; i < 2; i++) {
    bytes_temp[0] = Empfangspuffer[i * 4 + 17];
    bytes_temp[1] = Empfangspuffer[i * 4 + 16];
    bytes_temp[2] = Empfangspuffer[i * 4 + 15];
    bytes_temp[3] = Empfangspuffer[i * 4 + 14];
    Receive_Real[i] = *((float*)bytes_temp);
  }
}
//-----------------------------------S7 Empfangdsaten aus Puffer kopieren-------------------------------------------------
//-----------------------------------S7 Sendedaten in Puffer kopieren----------------------------------------------------
void S7_Sendedaten() {
  byte bytes_temp[4];
  //------------------sende Lebensbit-----------------------
  if (Send_Bool[0] == false) {
    Send_Bool[0] = true;
  }
  else Send_Bool[0] = false;
  //------------------sende Lebensbit-----------------------

  for (int h = 0; h < 2; h++) {
    for (int i = 0; i < 8; i++) {
      bitWrite(Sendepuffer[h], i, Send_Bool[i + 8 * h]);
    }
  }

  for (int i = 0; i < 8; i++) {
    Sendepuffer[i + 2] = Send_Byte[i];
  }

  for (int i = 0; i < 30; i++) {
    Sendepuffer[i * 2 + 10] = highByte(Send_Int[i]);
    Sendepuffer[i * 2 + 11] = lowByte(Send_Int[i]);
  }

  for (int i = 0; i < 10; i++) {
    *(float*)bytes_temp = Send_Real[i];
    Sendepuffer[i * 4 + 70] = bytes_temp[3];
    Sendepuffer[i * 4 + 71] = bytes_temp[2];
    Sendepuffer[i * 4 + 72] = bytes_temp[1];
    Sendepuffer[i * 4 + 73] = bytes_temp[0];
  }
}
//-----------------------------------S7 Sendedaten in Puffer kopieren----------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.02.2016, 22:19
Beitrag #8
RE: Wetterdaten von Yahoo auslesen
wer kann mir eigentlich sagen was macht dieser Befehl genau?
Code:
if ( (finder.getString("<yweather:atmosphere humidity=\"", "\"",hum,4)!=0) )
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Mit dem Arduino JSON Webseiten auslesen seb201 3 91 05.12.2016 22:25
Letzter Beitrag: Tommy56
  Messchieber auslesen mit nem UNO roadcaptain 8 306 15.11.2016 14:30
Letzter Beitrag: Tommy56
  U-blox Neo 6M GPS auslesen Matthias_Arduino 15 874 09.11.2016 16:40
Letzter Beitrag: AvrRobot
  mit Attiny85 Feuchtigkeitssensor auslesen toto1975 17 574 19.08.2016 22:40
Letzter Beitrag: hotsystems
Rainbow Arduino und Raspberry Wetterdaten Wampo 5 375 22.07.2016 06:51
Letzter Beitrag: amithlon
  Encoder auslesen Phil333 1 666 23.03.2016 21:40
Letzter Beitrag: hotsystems
  "WORT" über die serielle Schnittstelle auslesen hannes77 1 529 08.03.2016 12:13
Letzter Beitrag: Binatone
  Probleme beim Auslesen eines IR Empfängers linuxpaul 7 574 06.03.2016 14:44
Letzter Beitrag: hotsystems
  Elro HIS20m Wandsender 433MHz auslesen mayrst 6 950 10.02.2016 12:33
Letzter Beitrag: mayrst
  Anfängerhilfe: Piezo-Signal auslesen/kopieren Koregan 9 892 31.12.2015 08:40
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste