0

I have deployed the following example in my tenant:

create context HourlyAvgMeasurementDeviceContext partition measurement.source.value from MeasurementCreated;

@Name("Creating_hourly_measurement")
context HourlyAvgMeasurementDeviceContext
insert into CreateMeasurement
select
  m.measurement.source as source,
  current_timestamp().toDate() as time,
  "c8y_AverageTemperatureMeasurement" as type,
  {
    "c8y_AverageTemperatureMeasurement.T.value", avg(cast(getNumber(m, "c8y_TemperatureMeasurement.T.value"), double)),
    "c8y_AverageTemperatureMeasurement.T.unit", getString(m, "c8y_TemperatureMeasurement.T.unit")
  } as fragments
from MeasurementCreated.win:time(1 hours) m
where getObject(m, "c8y_TemperatureMeasurement") is not null
output last every 1 hours;

Afterwards i want to get the average Temperature values(ideally with unit) over the hour as follows:

Select event.c8y_AverageTemperatureMeasurement.T.value from CreateMeasurement event;

but i get an error while deploying the query as:

Error starting statement: Failed to validate select-clause expression 'event.c8y_AverageTemperatureMeasure...(47 chars)': Failed to resolve property 'event.c8y_AverageTemperatureMeasurement.T.value' to a stream or nested property in a stream [Select event.c8y_AverageTemperatureMeasurement.T.value from CreateMeasurement event

Can you please assist with this?

Mouzzam Hussain
  • 449
  • 3
  • 8
  • 20
  • Can you try to delete the complete module and create a new one with the same content. You code is working for me and also the error says 'event.c8y_AverageTemperatureMeasurement.T.value' but this part is nowhere in your code. – TyrManuZ Mar 16 '17 at 08:50
  • I am trying to get the value of Temprature in the fragments from following: { "c8y_AverageTemperatureMeasurement.T.value", avg(cast(getNumber(m, "c8y_TemperatureMeasurement.T.value"), double)), "c8y_AverageTemperatureMeasurement.T.unit", getString(m, "c8y_TemperatureMeasurement.T.unit") } as fragments – Mouzzam Hussain Mar 16 '17 at 09:00

1 Answers1

1

instead of

select event.c8y_AverageTemperatureMeasurement.T.value from CreateMeasurement event;

you need to use

select getNumber(event, "c8y_AverageTemperatureMeasurement.T.value") from CreateMeasurement event;

If you have custom properties in an object you cannot access them by dot syntax. You need to use functions like getNumber or getString where you pass the object and the JSONPath to grab. If not found these functions will return null.

TyrManuZ
  • 2,039
  • 1
  • 14
  • 23