Nejdriv bych chtel vsem co tohle rozjeli podekovat za spoustu sdilene prace a navedeni na proslapane cesty.
Jak jsem psal, zkousim si s vahou hrat, a zkoumat co mi muze jednoduseji naznacit, bez toho, abych musel grafy pravidelne zkoumat. Pouzivam k ukladani dat ucet na Thingspeak. Prisly mi k tomu vhodne nastroje, co thingspeak nabizi (napr. integrovana Matlab analyza).
Jako prvni jsem zkusil vytvorit z dat vazeni novy set dat, denni prirustky (nebo ubytky).
Postup vytvoreni matlab analyzy dat je nasledujici:
To co vlastni analyzu provede, vypada nejak takhle :
Kód:
% ------ nasleduje zacatek kodu -----
% Spocita denni prumer za den aktualni a predchozi
% Izoluje z dat hodnoty lezici mimo
% Prumerny rozdil dnes/vcera uklada do noveho kanalu
% Kanal Ulu - s ulozenymi hodnotami. Predpoklada se vaha ulu v prvnim sloupci
channelID = **(modre cislo)***;
% Kanal Ulu - misto kam se maji ukladat denni prirustky
channelIDprirustky = ***(zelene cislo)***;
% ThingSpeak API key Alert (zde nepouzite)
% alertApiKey = '*************';
% ThingSpeak read API key kanalu s hmotnosti (hmotnost v prvnim sloupci).
readAPIKey = '***(zlute cislo)***';
% ThingSpeak write API key kanalu s prirustky (dalsi, prazdny kanal).
writeAPIKey = '***(fialove cislo)***';
% Nacist data aktualniho a predchoziho dne
weightDatatoday = ThingSpeakRead(channelID,'NumDays',1,'Fields',1,'ReadKey',readAPIKey);
weightDatayesterday = thingSpeakRead(channelID,'DateRange',[datetime('yesterday'),datetime('today')],'Fields',1,'ReadKey',readAPIKey);
% vyradit z dat outliery (hodnoty lezici mimo, napr. usednuti kocky)
outlierDataIndex = isoutlier(weightDatatoday);
cleanDataIndex = ~outlierDataIndex;
outlierDatatoday = weightDatatoday(outlierDataIndex);
cleanDatatoday = weightDatatoday(cleanDataIndex);
display (outlierDatatoday, 'Odstranene outliery dnes');
% display (cleanDatatoday, 'Cista data dnes');
outlierDataIndex = isoutlier(weightDatayesterday);
cleanDataIndex = ~outlierDataIndex;
outlierDatayesterday = weightDatayesterday(outlierDataIndex);
cleanDatayesterday = weightDatayesterday(cleanDataIndex);
display (outlierDatayesterday, 'Odstranene outliery vcera');
% display (cleanDatayesterday, 'Cista data vcera');
% Spocitat denni prumery
avgweighttoday = mean(cleanDatatoday);
display(avgweighttoday,'Prumerna hmotnost dnes');
avgweightyesterday = mean(cleanDatayesterday);
display(avgweightyesterday,'Prumerna hmotnost vcera');
deltaweight = avgweighttoday-avgweightyesterday
% Ulozit do thingspeak kanalu hodnotu mezidenniho rozdilu
thingSpeakWrite(channelIDprirustky,deltaweight,'WriteKey',writeAPIKey);
% ------ konec -------
Jen mala neumela ukazka, co lze s daty na thingspeak delat. Vsechno to je samozrejme resitelne i jinak, napr. primo v arduinu, nebo v jinem prostredi. Jen mi prisly nastroje na thingspeak hezke a kdyz uz ho pouzivam k ukladani dat, skoda nevyuzit i zbytku.
Dalsi napady co s daty z ulu delat (postupne zkusim napsat matlab kod pro analyzu). Budu rad, kdyz nekdo prida co by se libilo jemu, co pokladaji ostatni za uzitecne.
- Alarm mozneho rojeni a jine manipulace s ulem - poslani emailu (mam rozpracovane, tady bude asi potreba nejvic ladeni a sdileni zkusenosti, k odstraneni co nejvic falesnych zprav, a zachyceni skutecneho rojeni)
- Alarm nizkeho napeti baterie
- v pripade ze ma vaha dalsi cidla, tak napr. nejvyssi/nejnizsi teplotu,
- s cidlem zvuku se pokouset o detekci rojeni uz pred, zkouset diagnostikovat bezmatecnost (ale to je asi na hoodne dlouhou trat)
- ?