1 AggOperator Query TupleRouterM DBBufferC RandomLPSR QueryResult Selperator Tuple TinyDBAttr TimerC MainC NetworkC AttrGlobal AttrTemp AttrPot AttrPhoto AttrVoltage AttrAccel AttrMag ADC Components TinyAlloc PotC GenericComm ParsedQuery HistóricoM
2 AggOperator Query TupleRouterM DBBufferC RandomLPSR QueryResult Selperator Tuple TinyDBAttr TimerC MainC NetworkC AttrGlobal AttrTemp AttrPot AttrPhoto AttrVoltage AttrAccel AttrMag ADC Components TinyAlloc PotC GenericComm ParsedQuery
3 ADMINISTRADOR DE HISTÓRICO IAdministraciónH 1*1*
4
5
6 TupleRouterM TimerC fired() NetworkC DBBufferC RadioQueue RAM EEPROM ADC Components
7 ¿El atributo corresponde al histórico? Insertar valor en el histórico Sí No ¿Atributo sin dato? Sí No Fin …
8
9 1.2: Muestrear datos 1.3: Llenar tuplas 1.4: ¿Agregar? 1.4: ¿Agregar? 1.6: ¿Agregar? 1.5: Operador de selección 1.7: Operador de agregación Epoch NoSí No 1.1 Identificar consultas Arribo de resultados hijos D D
10 1.2: Muestrear datos 1.3: Llenar tuplas e insertar en histórico 1.4: ¿Agregar? 1.4: ¿Agregar? 1.6: ¿Agregar? 1.5: Operador de selección 1.7: Operador de agregación Epoch NoSí No 1.1 Identificar consultas Arribo de resultados hijos D D
11 Nuevo mensaje de consulta Fin Crear representación compacta de consulta ¿Todos los mensajes? No Sí Arribo de mensaje de consulta Fin Crear representación compacta de consulta ¿Todos los mensajes? No Sí ¿Identificad or distinto de cero? Encender variable de control No Sí Crear tupla de resultado
12 ¿Variable de control? ¿Idle? ¿Agregar? …
13 1.3: Llenar tuplas e insertar en Histórico 1.3: Llenar tuplas e insertar en Histórico 1.4: ¿Agregar? 1.4: ¿Agregar? 1.7: Operador de agregación NoSí 2.1 ¿idle? 2.1 ¿idle? … epoch No Enviar No Sí 1.5: Operador de selección 1.6: ¿Radio? 1.6: ¿Radio?
14 Slots libres Slots llenos Slots libres Siguiente libre Siguiente ocupado Inicio Siguiente lleno Siguiente libre Inicio
15 Muestrear datos ¿Agregar? Guardar EEPROM Guardar EEPROM Evento de reloj No Procesar consultas Entrega de tuplas Llenar tupla Arribo resultados hijos Sí ¿Agregar? Operador de Selección Operador de Agregación Sí ¿Radio? No ¿Idle? No Sí Enviar
16 Epoch 1. Procesar consultas 2. Entrega de tuplas
17 Epoch 2.1 ¿Radio? 2.1 ¿Radio? No 2.3 ¿Idle? 2.3 ¿Idle? No Sí D D 2.2 Guardar EEPROM 2.4 Enviar Sí
18 Epoch 2.1 ¿Radio? 2.1 ¿Radio? No 2.4 ¿Idle? 2.4 ¿Idle? No Sí D D 2.2 Guardar EEPROM 2.6 Enviar Sí 2.3 ¿Agregación? 2.3 ¿Agregación? 2.5 ¿Variable de control? 2.5 ¿Variable de control? No Sí No
19 Muestrear datos ¿Agregar? Evento de reloj No Procesar consultas Entrega de tuplas Llenar tupla Arribo resultados hijos Sí ¿Agregar? Operador de Selección Operador de Agregación No S S
20 Muestrear ¿Agregar? Guardar EEPROM/RAM Evento de reloj No Procesar consultas Entrega de tuplas Llenar tupla Arribo resultados hijos Sí ¿Agregar? Operador de Selección Operador de Agregación Sí ¿Radio? No ¿Idle? No Sí Enviar
21 Nueva inserción ¿Grano == 1?
22 QB 1 Estación central QB 3 QB 2 Luz
23 ADMINISTRADOR DE HISTÓRICO IAdministraciónH
24 D.1: ¿Radio? D.1: ¿Radio? Guardar EEPROM/RAM F: ¿Idle? F: ¿Idle? Enviar Sí No SíNo A.2: Muestrear datos A.3: Llenar tuplas C: ¿Agregar? C: ¿Agregar? C.2: Operador de selección C.1: Operador de agregación Epoch No Sí No B.1 ¿Consulta dispara ahora? Por cada consulta Fin ¿Resultados hijos? ¿Agregar?
25 uint8_t qid; //1 uint8_t numFields; //2 uint16_t epochDuration uint16_t clocksPerSample; int16_t clockCount; //11 bool hasAgg:1; // -- are there aggregates in this query char bufferType; //see Buffer.h:BufferType //25 uint8_t bufferId; //26 -- output buffer id
26 Red de sensores Recolector Aplicación Persistencia
27
28 1 *1*1
29 *1*1 1*1* * *1*1
30 *1*1 1*1* 11.. 65535
31 *1*1 1*1* *1*1 1 * 1 * *1 1
32 *1 1*1* *1*1 1 * 1 * *1 1
33 1*1* 1 * *1 * 1
34 QueryProcessor StdControl RadioQueue TupleRouterM AggOperator Query DBBufferC RandomLPSR QueryResult Selperator Tuple TinyDBAttr TimerC NetworkC AttrGlobal TinyAlloc ParsedQuery
35 123…65,535…
36 NetworkC newMessage() TupleRouterM queryMessage() Query query ParsedQuery crear() parsedQuery Tuple crear() tuple
37 TimerC TupleRouterM newEpoch() TinyDBAttr dato Tuple a: muestrear() b: llenarAtributo() llenado { b.Ejecución = por cada atributo} { a.Ejecución = por cada atributo} SelOperator procesarTupla() procesada iniciado
38 TimerC TupleRouterM newEpoch() TinyDBAttr dato Tuple a: muestrear() b: llenarAtributo() llenado { b.Ejecución = por cada atributo} { a.Ejecución = por cada atributo} AggOperator procesarTupla() procesada NetworkC newResult() agregar() recibido
39 TimerC TupleRouterM newEpoch() QueryResult creado DBBuffer crear() encolar() transmitido NetworkC transmitir() transmitido endOfEpoch() iniciado() terminado