Google charts

Arduino specifieke Software
Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Google charts

Berichtdoor nicoverduin » 13 Okt 2013, 13:16

Nou dat is mooi en vwb. dat google charts.....
daar staat je ook nog een minder prettige verrassing te wachten:
Ik had een grafiek gecreëerd met 2 kolommen. Echter Google charts past dat aan voor een bereik van bijv. A1:B399. Als je echter data daarachter krijgt, dan zie je dat niet meer in de grafiek. Bug of ik doe iets verkeerd.

@edit: en wees voorzichtig als je gaat twitteren met dat ding. Ik had ff een twitter scenario toegevoegd aan mijn uploads. en als je dan 3-4x per minuut een update krijgt, dan krijg je heel veel tweets. Daar zullen mijn volgers blij mee zijn :mrgreen:

Overigens als ik er goed over na denk hoe ze dit hebben opgelost, sluit ik niet uit dat ik nog eens mijn eigen servertje ga inrichten om dit te doen. Het zou me niets verbazen als die jongens bij pushingbox op een gegeven moment bedenken dat er geld valt te verdienen aan dit systeem. En geld is geld..... Dus dat je een abonnement moet nemen oid. Terwijl het eigenlijk niet meer is als een http call doorzetten als https call.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Google charts

Berichtdoor nicoverduin » 13 Okt 2013, 14:31

Zo ff een PHP scriptje gevonden en aangepast.
Code: Alles selecteren
<?php
$url = 'https://docs.google.com/forms/d/1t2JOuXIesD965ahXR8WqYvGv_5piIGLCNs2jbw8qz2c/formResponse';
$data = array(
      'submit' => 'submit',
      'entry.433477295' => '234',
      'entry.1847033797' => 'Nico',
);

// submit the data
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
?>


Dit deel werkt al. Nu alleen nog even aanroepen vanuit Arduino. Dit geeft mogelijkheden :)

En dit is alles om het zelf ff snel te regelen :)
Code: Alles selecteren
<?php
$var1 = $_POST["temp"];
$var2 = $_POST["afzender"];

/**
   Setup CURL to be able to send data to googledocs
 */
$url = 'https://docs.google.com/forms/d/1t2JOuXIesD965ahXR8WqYvGv_5piIGLCNs2jbw8qz2c/formResponse';
//
// parameters to send through
//
$data = array(
      'submit' => 'submit',
      'entry.433477295' => $var1,
      'entry.1847033797' => $var2
);
//
// submit the data
//
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
?>


Als er belangstelling is dan wil ik het wel ff uitleggen :)
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 68
Geregistreerd: 10 Apr 2013, 11:51

Re: Google charts

Berichtdoor Enschot » 13 Okt 2013, 18:40

Hoi Nico,

Data beperkte bereik van google charts klopt wel, die 399 is gerelateerd aan de max. breedte van de grafiek die je er mee kan maken. Als je een groter bereik wil bekijken dan moet je als het waren de data achter de grafiek doorschuiven, dus eigenlijk wordt de grafiek dan een window waar de data achterdoor schuift, maar dit zou allemaal al voorgeprogrammeerd moeten zijn.

Van dat PHP snap ik nog niet veel, ik heb er nog nooit iets mee gedaan.

Ik heb ondertussen mijn spreadsheet uitgebreid met 11 variabelen.
Dit is geen probleem, maar ik heb achteraan wel een extra lege kolom.
Is dat bij jouw ook zo?

Ik ben benieuwd naar jouw grafiek als hij werkt.

grtz frans :D :)

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Google charts

Berichtdoor nicoverduin » 13 Okt 2013, 19:15

Frans
Bij mij ging het erom dat het werkte. Ik ga vermoedelijk, nu ik weet buiten Pushingbox om te gaan gewoon verder met PHP op de Server met Javascript en rGraph (daar heb ik immers een licentie voor) verder ontwikkelen. Ook wil ik nog ff verder kijken om vanuit de Server de Arduino iets laten doen. En ik heb gelijk een mooie oefencase:
- mijn moeder (inmiddels 83) gaat wat minder en ik wil in haar huis een stukje monitoring inbouwen (infrarood sensors, panic button en wie weet wat er nog meer kan[en betaalbaar is]). Sommige zaken zullen via de 433Mhz zenders werken naar de Arduino en dat koppelt weer met WIFI naar het net. De server krijgt de data binnen en mijn broers en zusters kunnen dan allemaal zien of het nog wel allemaal goed gaat.
- Er zal ook wel een deel via Soft I2C (wat prima werkt is mij gebleken op de ATTiny).
Dus mooie infrastructuur, zorg oplossing en oefen case.

En voor PHP betreft (en ook Javascript) als je er genoeg mee werkt zul je ontdekken dat het allemaal een beetje van hetzelfde is.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 68
Geregistreerd: 10 Apr 2013, 11:51

Re: Google charts

Berichtdoor Enschot » 18 Okt 2013, 23:54

Hoi Nico,

Ik heb het dank zij jouw hulp voor elkaar om de google charts te gebruiken in een Arduino project.
Buiten mijn project om werkt het als een speer. Ik schrijf iedere minuut data naar de google spreadsheet, en lees deze vervolgens weer uit met een html programmatje.
Je ziet dan dat de kaart iedere minuut netjes wordt bijgewerkt.
In mijn eigen arduino project ben ik nog een beetje aan het vechten met de servers en clients, en daar wil ik jouw misschien morgen of overmorgen voor benaderen, als ik er dan al niet uit ben, want heel moeilijk kan het volgens mij niet zijn.
Hieronder alvast een voorbeeldje.

Afbeelding
Bijlagen
Grafiek.jpg
Grafiek.jpg (83.53 KiB) 7052 keer bekeken

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Google charts

Berichtdoor nicoverduin » 19 Okt 2013, 23:40

Ziet er goed uit.:)
Hoor het wel.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 68
Geregistreerd: 10 Apr 2013, 11:51

Re: Google charts

Berichtdoor Enschot » 20 Okt 2013, 15:20

Hoi Nico,

Zoals ik bij ons laatste contact al liet doorschemeren heb ik een conflict met het initialiseren van mijn server in combinatie met mijn grafieken. Los werkt het allemaal wel, maar nu ik dat gedeelte in mijn project heb geweven krijg ik een foutmeding bij het initialiseren. Dus daarom heb ik het stukje initialiseren hieronder gezet.

Ik krijg de foutmelding "Conflicting declaration "EthernetServer server"
Deze melding die krijg in bij de regel "Ethernetserver server(80)"
Dit gebeurt als ik er de regel "byte server[] = {213,186,33,19};" bij plaats

Ik hoop dat je er achter komt wat ik fout doe, en hoe ik dit kan oplossen.

Code: Alles selecteren
// MasterTransReceive.pde
//Site with images http://postImage.org
//Pachube Dynamic charts https://xively.com/feeds/1491404060

#include <SD.h>
#include <VirtualWire.h>//Version 1.19
#include <Ethernet.h>
#include <SPI.h>
#include <EthernetUdp.h>
#include <Time.h>

#define SD_CARD_CD_DIO 4

boolean Listen = false;
String dataString = "";
String HTTP_req;
byte SlaveNr = 1;
word bitStr = 0;
word Slave01NodeFault = 0;
word Slave02NodeFault = 0;
word Slave03NodeFault = 0;
word Slave04NodeFault = 0;
word Slave05NodeFault = 0;
word Slave06NodeFault = 0;
word Slave07NodeFault = 0;
word Slave01ParityFault = 0;
word Slave02ParityFault = 0;
word Slave03ParityFault = 0;
word Slave04ParityFault = 0;
word Slave05ParityFault = 0;
word Slave06ParityFault = 0;
word Slave07ParityFault = 0;
word Slave01TimeOutFault = 0;
word Slave02TimeOutFault = 0;
word Slave03TimeOutFault = 0;
word Slave04TimeOutFault = 0;
word Slave05TimeOutFault = 0;
word Slave06TimeOutFault = 0;
word Slave07TimeOutFault = 0;
const char *msg1 = "Sl01";
const char *msg2 = "Sl02";
const char *msg3 = "Sl03";
const char *msg4 = "Sl04";
const char *msg5 = "Sl05";
const char *msg6 = "Sl06";
const char *msg7 = "Sl07";
const int LifeSign = 13;
const word minVal = 60000;
byte scanLength;
char SelectedPage = '1';
boolean Living1;
boolean Living2;
boolean Living3;
boolean Living4;
boolean Living5;
boolean Living6;
boolean BathroomF0;
boolean BedroomF0;
boolean Hall;
boolean Storage;
boolean BedroomBackF1;
boolean Vide1;
boolean Vide2;
boolean BathroomF1;
boolean BedroomFrontF1;
boolean CoolingOnF0;
boolean CoolingOnF1;
boolean Slave01Active = true;
boolean Slave02Active = true;
boolean ParametersChecked = false;
boolean AutoRefreshOn = false;
boolean SerialOn = false;
long unsigned int ActiveTimerSlave01;
long unsigned int ActiveTimerSlave02;

enum st {openTime, closeTime, startTime};

long unsigned int tmStatusF0[3][11] = {
                                    {0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0}
                                    };
long unsigned int tmStatusF1[3][6] = {
                                    {0,0,0,0,0,0},
                                    {0,0,0,0,0,0},
                                    {0,0,0,0,0,0}
                                    };
                                   
boolean tmLastStatusF0[11] = {false, false, false, false, false, false, false, false, false, false,false};
boolean tmLastStatusF1[6] = {false, false, false, false, false,false};

char serverName[] = "api.pushingbox.com"; //pushingbox server
char devid[] = "v5A1FD0F4279E8E6"; //device id
byte server[] = {213,186,33,19};

EthernetClient client;

/* ******** Ethernet Card Settings ******** */
//Set this to your Ethernet Card Mac Address
byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };

/* ******** NTP Server Settings ******** */
/* *****time-b.timefreq.bldrdoc.gov***** */
/* **Set to your time server of choice** */
IPAddress timeServer(132, 163, 4, 101);

/* ******** IP Address Arduino Master controller ******** */
IPAddress ip(192, 168, 178, 55);

//Initialize the Ethernet server library
//port 80 is default for HTTP
EthernetServer server(80);

/* Set this to the offset (in seconds) to your local time
   This example is GMT + 1 */
const long timeZoneOffset = 3600L;

/* Syncs to NTP server every 1200 seconds
   Set to 1 hour or more to be reasonable */
const unsigned int ntpSyncTime = 1200;

//local port to listen for UDP packets
const unsigned int localPort = 8888;

//NTP time stamp is in the first 48 bytes of the message
const int NTP_PACKET_SIZE = 48;

//Buffer to hold incoming and outgoing packets
byte packetBuffer[NTP_PACKET_SIZE];

//A UDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

//Keeps track of how long ago we updated the NTP server
unsigned long ntpLastUpdate = 0;

//Check last time clock displayed
time_t prevDisplay = 0;


grtz frans :| :( :oops:

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Google charts

Berichtdoor nicoverduin » 20 Okt 2013, 16:21

mogelijk bijten ethernetClient en ethernetServer elkaar. Dan zou je al in de broncode van ethernet.cpp moeten kijken
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 68
Geregistreerd: 10 Apr 2013, 11:51

Re: Google charts

Berichtdoor Enschot » 20 Okt 2013, 17:47

Hi Nico,

Ik zou eerder denken dat er iets met de initialisatie van de ethernetserver mis is.

Het gaat pas fout als ik de regel "byte server[] = {213,186,33,19};" er bij plaats

Ik krijg dan een fout op de regel EthernetServer server(80);

Als je het mij vraagt dan lijkt het er op dat ik deze twee settings niet samen mag gebruiken.

En als ik dan naar de foutmelding kijk "Conflicting declaration "EthernetServer server" dan zien we dat deze ook enkel verwijst naar het server gedeelte.

Dus ik denk dat deze twee niet samen tegelijkertijd gebruikt kunnen worden.

Staat er bij het servergedeelte niet iets wat we op een anderen manier kunnen combineren.

Ik gebruik in mijn programma nu een UTP en NTP server, dus misschien kan het allemaal een stukje eenvoudiger.

Het initialisatiegedeelte in mijn vorige relaas is het complete initialisatiegedeelte van het programma, dus hier moet de fout in zijn te vinden.

Ik heb blijkbaar nog te weinig ervaring met deze materie om deze fout eens vlot te kunnen analyseren.
Ik hoop dat jij me een stukje op weg kan helpen, want ik ben er bijna, en afzonderlijk werkt het allemaal als een zonnetje.

grtz frans

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Google charts

Berichtdoor nicoverduin » 20 Okt 2013, 18:16

Enschot schreef:Hi Nico,

Ik zou eerder denken dat er iets met de initialisatie van de ethernetserver mis is.

Het gaat pas fout als ik de regel "byte server[] = {213,186,33,19};" er bij plaats

Ik krijg dan een fout op de regel EthernetServer server(80);
Logisch dat het fout gaat:

eerst noem je een byte array met "server".
Vervolgens noem een EthernetServer type variabele ook "server".

Dus dat klopt wel dat het fout gaat.

Je moet of voor de array (als je die nog gebruikt) of de ethernet server een andere naam geven.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

VorigeVolgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 20 gasten