nodo-domotica.nl

Weergegevens naar Wunderground

Hier kun je discussieren over hoe je je Nodo inzet voor taken in en rondom je woning of waar dan ook. Leuke tips, deel ze dan hier.

Weergegevens naar Wunderground

Berichtdoor BazemanKM » 20 dec 2013, 20:51

Het zou een mooie toevoeging aan de Nodo zijn, als deze in staat is om de weersgegevens te verzenden naar Wunderground: http://dutch.wunderground.com/weather/api/
Mijn blog over de Nodo: http://www.fam-oldenburger.nl/wordpress/tag/nodo/

Nodo-Mega V3.6, Product=SWACNC-MEGA-R596|WebApp lokaal (SWINWA-PROD-V099)|DHT-22, Dallas DS18B20, WS-3500|
BazemanKM
 
Berichten: 44
Geregistreerd: 08 aug 2012, 09:49

Re: Weergegevens naar Wunderground

Berichtdoor Ivanverdonck » 09 jun 2014, 17:25

Hey,

Ik heb even tijd gestoken in een Wunderground Plugin.

Kan zijn dat de code niet al te "mooi" is, want het is men eerste Nodo plugin...
Ook is het niet helemaal zelf gemaakt ik heb wat geknipt en geplakt uit volgende projecten dus ook dank daarvoor:
- Richard http://weblog.tenklooster.net/?p=202 (squeezebox plugin)
- fmbfla http://forums.adafruit.com/viewtopic.php?f=25&p=247026 (wunderground on arduino)

Werking:
oproepen van "Wunderground <par1>, <par2>" om de x sec.
<par1> = base variable van Alecto Plugin.
<par2> = variabele met luchtdruk.

Opmerking:
De wunderground server geeft elke upload een "succes" terug, maar wunderground lijkt niet altijd iets met de data te doen... reden is mij onbekend...

Graag tips of opmerkingen om deze eventueel nog te verbeteren.

Groeten,
Ivan.
Code: Selecteer alles
//#######################################################################################################
//#################################### Plugin-250: Wunderground #########################################
//#######################################################################################################

/*********************************************************************************************\
 * Funktionele beschrijving: Met deze plugin kun je weerdata naar Wunderground.com sturen.
 *
 * Wunderground AlectoBaseVar, PressureVar
 *
 * Auteur : Ivan Verdonck ivan.verdonck(at)gmail.com
 * Support : ...
 * Datum : 08-06-2014
 * Versie : 0.1
 * Nodo productnummer : <Nodo productnummer. Toegekend door Nodo team>
 * Compatibiliteit : Vanaf Nodo build nummer 396
 * Syntax : "Wunderground <Par1>, <Par2>"
 *
 ***********************************************************************************************
 * Technische beschrijving:
 *
 * Compiled size :
 * Externe funkties : debug
 *
 * Via een GET commando Alecto data naar wunderground.com sturen.
 * Maak PWS account aan een gebruik ID en Passwoord om data te uploaden.
 * http://www.wunderground.com/weatherstation/about.asp
 \*********************************************************************************************/

#define PLUGIN_NAME "Wunderground"

#define PLUGIN_ID 250

double dewPointFast(double celsius, double humidity)
{
    double a = 17.271;
    double b = 237.7;
    double temp = (a * celsius) / (b + celsius) + log(humidity*0.01);
    double Td = (b * temp) / (a - temp);
    return Td;
}

boolean Plugin_250(byte function, struct NodoEventStruct *event, char *string)
{
    boolean success=false;
   
    switch(function)
    {
            #ifdef PLUGIN_250_CORE
            case PLUGIN_COMMAND:
            {
               
                //IPAddress SERVER(38,102,137,157);                    // numeric IP voor wunderground.com
                char SERVER[] = "rtupdate.wunderground.com";           // Realtime update server
                //char SERVER [] = "weatherstation.wunderground.com";    // Standard server
                char WEBPAGE [] = "GET /weatherstation/updateweatherstation.php?";
                char ID [] = "xxxxxxxxx"; // case-sensitive
                char PASSWORD [] = "xxxxxxxxx"; // case-sensitive
               
                EthernetClient client;
               
                if (client.connect(SERVER, 80)) {
                    // If connection succeeded
                    client.print(WEBPAGE);
                    client.print("ID=");
                    client.print(ID);
                    client.print("&PASSWORD=");
                    client.print(PASSWORD);
                    //client.print("&dateutc=now"); // Stardard server supports 'now'
                    client.print("&dateutc="); // Rapidfire server verwacht UTC time
                    client.print(Time.Year);
                    client.print("-");
                    client.print(Time.Month);
                    client.print("-");
                    client.print(Time.Date);
                    client.print("+");
                    client.print(Time.Hour-Time.DaylightSaving-1);// Berekenen van UTC (MET en MEZT terugrekening)
                    client.print("%3A");
                    client.print(Time.Minutes);
                    client.print("%3A");
                    client.print(Time.Seconds); // Einde Rapidfire time string
                    //client.print("&winddir="); // Todo
                    //client.print(UserVar[event->Par1 +3]); // Todo
                    client.print("&windspeedmph=");
                    client.print(UserVar[event->Par1 +2] * 2.2369); // m/s naar mph berekening
                    client.print("&windgustmph=");
                    client.print(UserVar[event->Par1 +4] * 2.2369); // m/s naar mph berekening
                    client.print("&tempf=");
                    client.print(( UserVar[event->Par1 -1] * 1.8) + 32); // Celsius naar Farenheit
                    client.print("&dailyrainin=");
                    client.print(UserVar[event->Par1 +1] * 0.03937); // mm naar inch
                    client.print("&baromin=");
                    client.print(UserVar[event->Par2 -1] * 0.02953); // mbar naar inHg
                    client.print("&dewptf=");
                    client.print((dewPointFast(UserVar[event->Par1 -1],UserVar[event->Par1]) * 1.8) + 32); // Dauwpunt in Farenheit
                    client.print("&humidity=");
                    client.print(UserVar[event->Par1]); // vochtigheid in %
                    //client.print("&action=updateraw");//Standard update
                    client.print("&softwaretype=Nodo&action=updateraw&realtime=1&rtfreq=60");//Rapid Fire update
                    client.println();
                   
                    unsigned long lastRead = millis();
                    while (client.connected() && (millis() - lastRead < 1000)) {
                        while (client.available()) {
                            char c = client.read();
                            if(Settings.Debug==VALUE_ON)
                            {
                                Serial.println("Server response:");
                                Serial.print(c);
                            }
                            lastRead = millis();
                        }
                    }

                   
                    if(Settings.Debug==VALUE_ON)
                    {
                        Serial.println("Server:");
                        Serial.println(SERVER);
                        Serial.println("DATA Send:");
                        Serial.print(WEBPAGE);
                        Serial.print("ID=");
                        Serial.print(ID);
                        Serial.print("&PASSWORD=");
                        Serial.print(PASSWORD);
                        //Serial.print("&dateutc=now");
                        Serial.print("&dateutc=");
                        Serial.print(Time.Year);
                        Serial.print("-");
                        Serial.print(Time.Month);
                        Serial.print("-");
                        Serial.print(Time.Date);
                        Serial.print("+");
                        Serial.print(Time.Hour-Time.DaylightSaving-1);
                        Serial.print("%3A");
                        Serial.print(Time.Minutes);
                        Serial.print("%3A");
                        Serial.print(Time.Seconds);
                        //Serial.print("&winddir=");
                        //Serial.print(UserVar[event->Par1 +3]);
                        Serial.print("&windspeedmph=");
                        Serial.print(UserVar[event->Par1 +2] * 2.2369);
                        Serial.print("&windgustmph=");
                        Serial.print(UserVar[event->Par1 +4] * 2.2369);
                        Serial.print("&tempf=");
                        Serial.print(( UserVar[event->Par1 -1] * 1.8) + 32);
                        Serial.print("&dailyrainin=");
                        Serial.print(UserVar[event->Par1 +1] * 0.03937);
                        Serial.print("&baromin=");
                        Serial.print(UserVar[event->Par2 -1] * 0.02953);
                        Serial.print("&dewptf=");
                        Serial.print((dewPointFast(UserVar[event->Par1 -1],UserVar[event->Par1]) * 1.8) + 32);
                        Serial.print("&humidity=");
                        Serial.print(UserVar[event->Par1]);
                        //Serial.print("&action=updateraw");//Standard update
                        Serial.print("&softwaretype=Nodo&action=updateraw&realtime=1&rtfreq=60");//Rapid Fire
                        Serial.println();
                        Serial.println("Upload wunderground complete");
                    }
                   
                    client.stop();
                    success=true;
                }
                else {
                    // if you didn't get a connection to the server:
                    if(Settings.Debug==VALUE_ON)
                    {
                    Serial.println("Server:");
                    Serial.println(SERVER);
                    Serial.println("Wunderground Connection failed");
                    }
                    client.stop();
                    success=false;
                }
                break;
                }
           
            #endif // CORE
           
            #if NODO_MEGA // alleen relevant voor een Nodo Mega want de Small heeft geen MMI!
                case PLUGIN_MMI_IN:
                {
                    char *TempStr=(char*)malloc(26);
                    string[25]=0;
                    if(GetArgv(string,TempStr,1))
                        {
                            // Als het door de gebruiker ingegeven ommando/event overeenkomt met de naam van dit plugin...
                            if(strcasecmp(TempStr,PLUGIN_NAME)==0)
                                {
                                   
                                    // Vervolgens tweede parameter gebruiken
                                    if(GetArgv(string,TempStr,2))
                                        {
                                           
                                            if(GetArgv(string,TempStr,3))
                                                {
                                                   
                                                    // Een plugin kan worden verwerkt als een commando of een event. Geef dit aan want
                                                    // op moment van invoer moet de Nodo t.b.v. latere verwerking weten hoe de zaken afgehandeld moeten worden
                                                    event->Type = NODO_TYPE_PLUGIN_COMMAND;
                                                    event->Command = 250; // nummer van dit plugin
                                                   
                                                    success=true;
                                                    }
                                            }
                                    }
                            }
                    free(TempStr);
                    break;
                    }
           
            case PLUGIN_MMI_OUT:
            {
               
                strcpy(string,PLUGIN_NAME); // Commando
                strcat(string," ");
                strcat(string,int2str(event->Par1)); // Parameter-1 (8-bit)
                strcat(string,",");
                strcat(string,int2str(event->Par2)); // Parameter-2 (32-bit)
               
                break;
                }
            #endif //MMI
        }
   
    return success;
    }
Ivanverdonck
 
Berichten: 11
Geregistreerd: 21 dec 2013, 23:13

Re: Weergegevens naar Wunderground

Berichtdoor BazemanKM » 10 jun 2014, 11:04

Leuk om te lezen dat iemand mijn idee oppakt.

Is het ook mogelijk om bijvoorbeeld de variabelen van de DHT22 of Dallas sensor te verzenden naar Wunderground?
Mijn blog over de Nodo: http://www.fam-oldenburger.nl/wordpress/tag/nodo/

Nodo-Mega V3.6, Product=SWACNC-MEGA-R596|WebApp lokaal (SWINWA-PROD-V099)|DHT-22, Dallas DS18B20, WS-3500|
BazemanKM
 
Berichten: 44
Geregistreerd: 08 aug 2012, 09:49


Keer terug naar Nodo toepassingen

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers. en 1 gast