void MeterSML::_parse(sml_list *entry, Reading *rd) { //int unit = (entry->unit) ? *entry->unit : 0; int scaler = (entry->scaler) ? *entry->scaler : 1; rd->value(sml_value_to_double(entry->value) * pow(10, scaler)); Obis obis((unsigned char)entry->obj_name->str[0], (unsigned char)entry->obj_name->str[1], (unsigned char)entry->obj_name->str[2], (unsigned char)entry->obj_name->str[3], (unsigned char)entry->obj_name->str[4], (unsigned char)entry->obj_name->str[5]); ReadingIdentifier *rid(new ObisIdentifier(obis)); rd->identifier(rid); // TODO handle SML_TIME_SEC_INDEX or time by SML File/Message struct timeval tv; if (entry->val_time) { /* use time from meter */ tv.tv_sec = *entry->val_time->data.timestamp; tv.tv_usec = 0; } else { gettimeofday(&tv, NULL); /* use local time */ } rd->time(tv); }
void meter_sml_parse(sml_list *entry, reading_t *rd) { //int unit = (entry->unit) ? *entry->unit : 0; int scaler = (entry->scaler) ? *entry->scaler : 1; rd->value = sml_value_to_double(entry->value) * pow(10, scaler); rd->identifier.obis = obis_init(entry->obj_name->str); /* get time */ // TODO handle SML_TIME_SEC_INDEX or time by SML File/Message if (entry->val_time) { rd->time.tv_sec = *entry->val_time->data.timestamp; rd->time.tv_usec = 0; } else { gettimeofday(&rd->time, NULL); } }