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ů:

  1. Probee senzory

  2. SigFox senzory

  3. Kamery/fotopasti

     

Způsob zprocesování dat je následující:

  1. 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

 

 

  1. 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

       **

  1. 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

       

  1. 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.