Edit: In dit topic heb ik nu 4 cloud oplossingen beschreven, bij kleine data volumes allemaal gratis: Google, GrafanaLabs, Axiom en AWS (Amazon).
In topic Gasvoorraad meten kwam de welbekende en vaak voorkomende vraag naar boven "waar slaan we het op?".
Veel projectjes zullen data willen versturen (of ophalen).
Veel knutselaars regelen dit, na 5 minuutjes installeren of 5 regels code schrijven, met:
- HomeAssist/MQTT
- PHP/Webserver
- Email/SMS
- FTP
- UDP pakketjes, zelfbouw, etcetera...
Voor de leek of minder actieve hobbyist kan dit toch wat lastig zijn en ook voor een ervaren persoon zijn er wat nadelen:
- Er is hardware of hosting nodig
- Het moet onderhouden worden
- Een jaartje een oud PCtje of Raspi laten draaien lukt wel, iets jaren in de lucht houden is lastiger.
- Toegang tot de data is lastig te delen of aan te passen, de hele server overdragen is nog lastiger.
Nu zijn er in 'in de cloud' mooie oplossingen, meestal niet gratis en wel behoorlijk specialistisch voor de 'eindgebruiker'.
Een handige gratis methode die ik hier wil delen zijn 'Google Apps Scripts'.
Ik ben zeker geen expert, maar samengevat zijn er allerlei interfaces en automatisering aan de bekende Google producten te koppelen. Bijvoorbeeld, "stuur de 1e van de maand een (excel) sheet naar de baas en zet in het emailonderwerp het aantal orders en het totaalbedrag. Op cel A128 moet komen te staan: Versie van dag-maand-jaar."
Hierbij horen ook webapplicaties of APIs, de bovenstaande email kunnen we nu bijvoorbeeld ook op aanvraag via een URL starten, met een email adres dat we invoeren in de webpagina van het script.
Dit laatste komt zeer van pas als we een apparaatje hebben dat wat gegevens naar het internet wil sturen. Een Google Script project heeft een URL (meerdere voor de verschillende versies) en daar kan je met een HTTPS request waardes aan meegeven. De mogelijkheden zijn daarna eindeloos, bijvoorbeeld als e-mail doorsturen of als bestand in Google Drive opslaan.
De voordelen:
- Het is gratis en veelzijdig
- Veel mensen zijn al bekend met het delen en al dan niet bewerken van Google documenten (met daarin de data) van en door anderen.
- Het is tweezijdig anoniem, het adres is niet herleidbaar naar een persoonlijk ip adres of website en ook de module die de data verstuurt kan dit anoniem doen, zonder accountgegevens of wachtwoorden
- Een Google Script project kan je ook met anderen delen, zo kan iemand anders aanpassingen maken aan de code, bijvoorbeeld andere email adressen of alarm waardes.
Later nog wat ideeën en scenario's. Hier alvast twee voorbeelden, het eerste script verstuurd een email met die waardes die aan een URL met een HTTPS request worden doorgegeven. Het tweede script slaat ze op in een Google Spreadsheet op Google Drive.
- Ga naar https://script.google.com
- Maak een nieuw project aan, geef deze bovenin een naam.
- Vervang alle text in het bestand Code.gs door 1 van de twee codes hieronder
- Druk op de knop 'Deploy' (Ik heb de engelse versie, in ieder geval een blauwe knop rechts boven de code), kies voor een WebApp deployment, je moet hier ook aangeven dat 'Anyone' access heeft. Anders moeten we namelijk de client eerst laten inloggen op Google, dat wordt iets te geavanceerd voor deze post.
- Je wordt nu gevraagd en gewaarschuwd dat een onbekende app toegang krijgt tot jouw Drive of Mail (als verstuurder van mails van jouw account). Mijn code hieronder is kort en overzichtelijk, maar het zou bijvoorbeeld een achterdeurtje kunnen maken. Klik op 'Advanced' and continue als je de code begrijpt en vertrouwd.
- Via de Deploy knop kan je het URL van de test deployment ophalen, deze is altijd de situatie van de laatst opgeslagen code. De deployments met versies hebben een eigen URL die naar de oude code wijst (totdat je die verwijzing aanpast). Je 'officiele release' kan je dus scheiden van je test code binnen hetzelfde project.
- Zet het URL van de deployment (voor nu test aka 'HEAD') met met de gewenste parameters in de code van je controllerbordje of je browser. Voorbeeld:
https://script.google.com/macros/s/AKfycbw_ <snip>aPnDk/dev?temperatuur=10.3&windsnelheid=12 - Als de HTTP request is gelukt komt een melding terug, de mail wordt verstuurd of de data wordt opgeslagen in een 'Sheet'.
Voorbeeld code 1 het versturen van email, overschrijf alles in het Code.gs bestand met:
function doGet(e) {
MailApp.sendEmail("piet@internet.nl",
"Temperatuur " + e.parameter.temperatuur,
"All values :" + e.queryString );
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'success' }))
.setMimeType(ContentService.MimeType.JSON)
}
Voorbeeld code 2, letop, maak een nieuwe deployment omdat deze code toegang nodig heeft tot je Google Drive ipv Mail zaken. Je kan nog wel het URL van voorbeeld 1 blijven gebruiken als je daar de code hebt overschreven of aangepast.
Maak ook een lege Sheet aan op je Google Drive en gebruik het URL daarvan op regel 3.
function doGet(e) {
var spreadsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1JNi8iTu_A7ATuyUw_blfXyEeAOXmTA_zhSaUPtkgk/edit');
var sheet = spreadsheet.getSheets()[0];
sheet.appendRow([ Utilities.formatDate(new Date(), "CET", "yyyy-MM-dd' 'HH:mm:ss"), e.queryString ]);
return ContentService
.createTextOutput('ok')
}
(Alle URLs in deze post zijn veranderd en werken niet)
Hopelijk heeft iemand er iets aan. Bovenstaande scripts zijn natuurlijk oneindig aan te passen, bijvoorbeeld data opslaan en een email als alarm. Buiten het URL en de request om kan je ook weer een 'Watch/Notification' instellen in Google Drive dat er een bepaalde tijd geen data is weggeschreven enzovoorts.
Typische toepassingen zijn bijvoorbeeld een temperatuurlogger voor iemand die verder geen server mogelijkheden heeft. Er kunnen grafieken e.d. worden toevoegd aan de spreadsheets. Een paar weken een storing van de sensor is zeer eenvoudig in de grafieken weg te poetsen door de excel regels te wissen of handmatig afgelezen waardes in te voeren.
Ik denk dat het ook gebruikt kan worden bij beveiliging dan wel controle bij clubkantines e.d. Een paar ESP bordjes met draadjes naar deurcontacten, voorraadkast, P1 poort en misschien zelfs een RFID lezertje. Alle data gaat naar een sheet/email, een commissie deelt toezicht op de code van het project en de data zelf (vanaf mobiel, pc, email etcetera).
Op deze manier is er ook te configureren natuurlijk. De sensor kan opdrachten terugkrijgen bijvoorbeeld "klep 1 open", "interval wordt 5 minuten". Ook kunnen email adressen in een excelsheet worden geconfigureerd in plaats van in de code.