Způsob aktualizace z jednotlivých zdrojů
**> Popis způsobu aktualizace z jednotlivých zdrojů. >
Evidence stavu a události u každého senzoru.
úterý 27. února 2018
14:38
Současný způsob aktualizace dat ze senzorů
Data přicházejí ze tří nezávislých zdrojů:
Probee senzory
SigFox senzory
Kamery/fotopasti
Způsob zprocesování dat je následující:
Probee senzory
centrála volá proceduru test20/interface.aspx (zkráceně), ta vyvolá další procedury volané ze skriptu
CHANGELOG 2019/01 .. interface se vola pomoci služby každých 5 minut, není už v provozu centrála, která by proces vyvolala
procedura spustí nofifikační email ohledně stavu databáze (vždy jen prvně po 8:00 hod)
procedura uloží data do tabulky test20.tblLog
procedura aktuální POST uloží do tabulek test20.tblRecords, tblSubRecords, tblUnitsRecords
finálně se zavolají dvě procedury pro plnění tabulek na straně www_probee_cz, již pomocí procedur v databázi www_probee_cz, které provedou inserty do všech tabulek a zároveň označí zpracovanou větu, jsou to:
1.ImportFromRecords , subImportFromRecords
- tblrecords -> tblWeight, tblTemperature, tblVoltage
2.ImportFromUnitsRecords, subImportFromUnitsRecords
- tblUnitsrecords -> tblUnitVoltage
tabulky tblRecords a tblUnitsRecords mají nove polozky RecDone BIT, které označují již zpracovaný řádek
poznámka: T-SQL podprocedura [subInsertSpectrum] zajišťuje plnění hodnot ohledně datumu a času
tabulky tblWeight, tblTemperature, tblVoltage, tblUnitVoltage jsou opatřeny triggery ONINSERT, které se starají o plnění posledních hodnot do tabulky senzorů
jedná se o položky tabulky tblSensor:
SenLastVoltageDecimal
SenLastVoltagePerCent
SenLastWeightDecimal
SenLastTempDecimal
SenLastData
aktualizace max, min, hodnot se řeší níže v ProcessingLastValues (bod 4.)
CHANGELOG 2019/11 … z původního interface byla vyřazena procedura zápisu dat z centrály do Logu. Nové typy centrál vstupují do systému via probee.cz/interface/interface.aspx viz Zpracování dat z nových typů centrál
SigFox senzory (váhy, trackery)
proces se kompletně provádí na straně webu www.probee.cz a databáze www_probee_cz
**SigFox "centrála" předává data metodou POST skriptu interface/postdata.aspx, který pouze uloží data do tblLog, tím jeho úkol končí a dál nijak nezdržuje
**
Kamery/fotopasti
nezávislý proces každých 30 vteřin zpracovává došlé emaily a MMS zprávy s obrázky
obrázky se ukládají do databáze/tabulky www_probee_blob.tblBlob, a to via webovou službu interface/probee.asmx
Pravidelné zpracování dat SigFox a Fotopastí a následné zpracování dalších dat (ne jen SigFox)
každou minutu je volán skript FreeArea/Process1min.aspx, který provede následující procesy
volání proceduty ProcessingPostData, která zpracuje XXX záznamů z dat logu tabulky tblLog
pro každý zpracovávaný řádek logu procedura cyklicky volá T-SQL subProcessingOnePostData_ver3, která naplní tabulky (týká se jen dat SigFoxů):
tblTemperature
tblTemperatureExternal
tblWeight
tblVoltage
tblGPS
tblAlarm
volání procedury ProcessingLastValues
volá T-SQL subUpdateLastValuesAll
provede nahození posledních hodnot úlů:
UlTemperature
UlTemperatureMin
UlTemperatureMax
UlVoltage
UlVoltageMin
UlVoltageMax
UlVaha
UlVahaMin
UlVahaMax
UlLastDateTime
volání procedury ProcessingWeightTrends
volá T-SQL subUpdateWeightTrendsAll
provede výpočet hodnot pro barevné znázornění trendu váhy pro úl:
UlLastTrend
UlTrend
volání procedury AssignBlob2Sensor, která doplní do tabulky www_probee_blob.tblBlob vazební položky pomocí T-SQL subAssignBlob2Sensor
dle aktuálního zařazení senzoru uživateli, včelnici a úlu a vazebních položek z kamerového emailu, nebo SMS dojde k naplnění položek:
BloSenKey
BloSenUzvID
BloSenVceID
BloSenUlID
nově (2019/09) procedura zajistí plnění položek tblSensors.SenLastCamData a SenLastData
volání procedury doAllPosts, která zasílá data via web services na univerzitu
volání procedury doAllPostsT, která posílá data teploty na univerzitu
volání proceduty GetForecastInfo pro získání dat předpovědi počasí
aktualizuje se po 2 hodinách tak, že stará data se umazávají a nahradí novými na XXX hodin do budoucna
volá se webová služba openweathermap tak, aby nebyl překročen hodinový limit množství požadavků, max 30 požadavků za 1 minutu
volání procedury GetWeatherInfo pro získání historie počasí
získávají se data v minulosti (tedy data z měření blízké stanice)
data se přidávají, tak jak pokročí čas, historická data se nemění, není třeba je odmazávat a nahrazovat novými
opět je vyřizováno pouze max 30 požadavků za 1 minutu
Změna časování některých operací-procesů
CHANGELOG 2019/11
Veškeré akce se dosud prováděly v minutových intervalech via FreeArea1min.aspx . Nyní jsou určité procesy přesunuty do skriptů, prováděných ne tak často = 5min, 15min, 60min
Process1min.aspx
InterfaceBee.ProcessingPostData() … zpracovani dat (SigFox POST -> tblTemperatureExternal, tblWeight, tblVoltage, tblGPS, tblAlarm)
InterfaceBee.SendInvocationSms() … zaslani vyzadanych (na urcity cas) invokacnich SMS kameram
InterfaceBee.SendInvocationSms1() … zaslani vyzadanych (na urcity cas) invokacnich SMS kameram
InterfaceBee.SendInvocationSms2() … zaslani vyzadanych (na urcity cas) invokacnich SMS kameram
FunkceBee.SendNotificationsAlarm() … alerty (pohybovy alarm) + SMS invoke kamery
FunkceBee.SendNotificationsWeight() … alerty (skokové změny váhy) + SMS invoke kamery
Process5min.aspx
InterfaceBee.AssignBlob2Sensor() … prirazeni dat BLOBU senzorum, znamená to, že snímek z kamery přijde cca do 5 minut od vyslání
Process15min.aspx
FunkceBee.SendNotificationsVoltage() … alerty (napeti akumulatoru)
FunkceBee.SendNotificationsBehavior() … alerty (behavior)
FunkceBee.SendNotificationsSensor(48) … alerty (vypadek senzoru obecně)
Process60min.aspx
AI.VyhodnoceniUtlumu() … AI
AI.VyhodnoceniTeploty() … AI
AI.VyhodnoceniVahy() … AI
FunkceOpenWeather.GetForecastInfo() … pocasi
FunkceOpenWeather.GetWeatherInfo() … počasí
InterfaceBee.doAllPosts("probee:sofech2017", 10) … posilani dat na ZUC
InterfaceBee.doAllPostsT("probee:sofech2017", 10) … posilani dat na ZUC
InterfaceBee.DeleteOldUlData() … smazani neplatnych (starych) hodnot teploty, vahy, napeti, trendu vahy a vlhkosti v tblUl
Princip
při řešení notifikací se bude vždy chápat jako základní subjekt, kterého se notifikace týká, celý jeden senzor (bez ohledu na to, zda poskytuje jen jednu, nebo více veličin)
jakmile nějaká událost vyvolá notifikaci, bude odeslána informace k dannému senzoru a bude obsahovat
všechny veličiny (stavy) senzoru v danný okamžik (teplota, napětí, ….)
informaci o tom, která veličina notifikaci vyvolala (otřes, překročení teploty, nízké napětí, …)
informaci o tom, v jakém úlu (včelnici) je senzor datově evidován
Informační kanály
informační kanál definuje cesty kterou se informace dostane k uživateli
SMS, telefon
email
Datový model
aby bylo možné reagovat a zbytečně neopakovat alerty (třeba kazždých 10 minut), je třeba u jednotlivých senzorů evidovat poslední známý stav
stavem se rozumí např.
poslední odezva senzoru (kdy poslal poslední data, resp.kdy se vůbez ozval že žije) bez ohledu na to, zda dodal nějaká data, nebo ne [datetime]
poslední hodnoty sledovaných veličin
napětí [decimal]
teplota [decimal]
váha [decimal]
poloha [coord]
alert
Zpracování údajů váhy
Řešení
Je realizováno ve funkci [fncWeightFromAD3] na TEST20, kde v subInsertSpectrum dochází k uložení hodnoty v Kg do tabulky tblRecords
Popis problematiky od Lucasse
V řešení test20 zasílá přepočtenou hodnotu váhy přímo centrála, nicméně toto vyžaduje zápis kalibrační hodnoty přímo do hardwaru na včelnici, což je nepraktické a komplikované. V centrále byl tento přepočet pouze dočasný, aby fungoval test20 bez úprav. Hmotnost je nyní zasílána pouze jako změřený bezrozměrný výsledek převodu váhového senzoru.
Vysílač umožňuje připojení modulů, v tuto chvíli máme pouze jeden - váhový modul. Po připojení jej vysílač detekuje, což dá vědět v zasílaných argumentech - viz reference, argument "m" (module). Data addon modulu jsou zasílána argumentem "md" (module data), jejich význam se liší podle typu modulu - viz reference.
V případě váhového modulu (argument "m" bude "w") jde o bezrozměrné celé číslo - výsledek AD převodníku (hodnota tenzometrického senzoru). Toto číslo je potřeba přepočítat na hmotnost na základě kalibrace. Kalibrace je tvořena 2 body: hodnota AD převodníku při nulové hmotnosti a hodnota AD převodníku při známé hmotnosti.
Protože je jeden bod kalibrace pro 0kg, zjednodušuje se jeden bod kalibrace pouze na offset, přepočet je tedy následující:
hmotnost [kg] = ref_weight * (value - zero_offset) / (ref_value - zero_offset)
ref_weight = referenční hmotnost v kg
ref_value = hodnota převodníku při ref. hmotnosti
zero_offset = hodnota převodníku při 0kg
value = hodnota převodníku k přepočtení
Výsledkem bude přepočtená hmotnost v kg, zaokrouhlit na 2 des. místa. Pokud by výsledek vyšel záporný, dosadit nulu (výchozí kalibrační hodnoty jsou průměrné, tzn. v některém případě může být např. nulový offset vyšší, než by měl být a vyjde tak záporné číslo).
Výchozí kalibrační hodnoty:
ref_weight = 77,55 kg
ref_value = 848790
zero_offset = 51629
Kalibrace bude v systému probee zadána výše uvedená jako výchozí, nicméně musí zde být šance zadat kalibraci ručně - tzn. zadat ony 3 hodnoty - ref_weight (refereční hmotnost), ref_value (hodnota při refereční hmotnosti) a zero_offset (hodnota při nezatížené váze). Minimálně na Hájku je ještě jedna váha, která má kalibrační hodnoty zcela jiné (odlišný typ a konstrukce), pro kterou je právě nutné mít možnost kalibrační hodnoty změnit.