Example of a simple website hits/signup traffic monitor to drive a display (e.g. servo or panel meter) and indicator (e.g. bell, solenoid) based on responses from a webserver

Dependencies:   EthernetNetIf mbed Servo

WebTrafficMonitor.cpp

Committer:
simon
Date:
2011-01-10
Revision:
0:3c13cc3b4e30

File content as of revision 0:3c13cc3b4e30:

// Example of a simple website hits/signup traffic monitor to drive 
// a display (e.g. servo or panel meter) and indicator (e.g. bell, solenoid)
// based on responses from a webserver
// http://mbed.org

#include "mbed.h"
#include "EthernetNetIf.h"
#include "HTTPClient.h"
#include "Servo.h"

#define SIGNUPS_URL "http://url-returning-signups-int"  // number of signups since last checked
#define HITS_URL "http://url-returning-hits-int"        // number of hits/sec since last checked
#define HITS_MAX 1000                                   // scale max hits/sec

EthernetNetIf eth;
HTTPClient http;

DigitalOut bell(p12);
Servo meter(p21);

// ding a bell (fire a digital out driving a solenoid)
void ding() {
    bell = 1;
    wait(0.25);
    bell = 0;
}

// fetch a integer from a url
int get_result(char *url) {
    HTTPText txt;
    HTTPResult r = http.get(url, &txt);

    if(r != HTTP_OK) {
        printf("Error [%d] fetching url [%s]\n", r, url);
        return -1;
    }
    
    printf("Response [%s] from url [%s]\n", txt.gets(), url);
    int v = 0;
    if(sscanf(txt.gets(), "%d", &v) != 1) {
        printf("Could not convert value to int\n");
    }
    
    return v;
}

int main() {
    printf("Setup the network...\n");
    EthernetErr ethErr = eth.setup();
    if (ethErr) {
        error("Error %d in setup\n", ethErr);
    }
    printf("OK!\n");

    while (1) {
        int hits = get_result(HITS_URL);
        int signups = get_result(SIGNUPS_URL);

        printf("hits = %d, signups = %d\n", hits, signups);
        
        // ding for every signup since last request
        for(int i=0; i<signups; i++) {
            ding();
            wait(0.5);
        }
    
        // set the servo based on hits/sec
        meter = (float)hits / (float)HITS_MAX;            
   }
}