/* * MeterDriver.c * * Created on: 2021/6/4 * Author: foluswen */ #include "meterComm.h" #include "curlApi.h" #include "SystemLogMessage.h" #include "json-c/json.h" #define is_error(ptr) ((unsigned long)ptr > (unsigned long)-4000L) #define _DEBUG_ 0 #if _DEBUG_ #define PR(...) printf(__VA_ARGS__) #else #define PR(...) #endif unsigned char meterModel = 0; char meterApiAddress[128]; /** * Meter model initialize * @param model */ void meterInitialize(uint8_t model) { meterModel = model; } /** * Output voltage read * @param meter_info * @return */ int readMeterLivemeasure(uint8_t meterIndex, Meter_Info *meter_info) { int result = FAIL; char host[128]=""; uint8_t data[4096]; sprintf(host, "http://192.168.0.%d/v1/livemeasure", (31 + meterIndex)); switch(meterModel) { case METER_MODEL_LEM_L18005A: default: if(httpGet((uint8_t*)host, data) != FAIL) { //PR("data: %s\n", data); //PR("meterApiAddress: %s\n", meterApiAddress); json_object *livemeasure; livemeasure = json_tokener_parse((char*)data); if(!is_error(livemeasure)) { if(json_object_object_get(livemeasure, "voltage") != NULL) meter_info->presetVoltage = json_object_get_double(json_object_object_get(livemeasure, "voltage")); PR("Output voltage %d : %.3f V\n", meter_info->presetVoltage); if(json_object_object_get(livemeasure, "current") != NULL) meter_info->presentCurrent = json_object_get_double(json_object_object_get(livemeasure, "current")); PR("Output current %d : %.3f V\n", meter_info->presentCurrent); if(json_object_object_get(livemeasure, "power") != NULL) meter_info->presentPower = json_object_get_double(json_object_object_get(livemeasure, "power")); PR("Output power %d : %.3f V\n", meter_info->presentPower); if(json_object_object_get(livemeasure, "energyImportTotal") != NULL) meter_info->totlizeImportEnergy = json_object_get_double(json_object_object_get(livemeasure, "energyImportTotal")); PR("Totalize import energy %d : %.3f V\n", meter_info->totlizeImportEnergy); if(json_object_object_get(livemeasure, "energyExportTotal") != NULL) meter_info->totlizeExportEnergy = json_object_get_double(json_object_object_get(livemeasure, "energyExportTotal")); PR("Totalize export energy %d : %.3f V\n", meter_info->totlizeExportEnergy); if(json_object_object_get(livemeasure, "timestamp") != NULL){ sprintf((char*)&meter_info->timestamp, "%s", json_object_get_string(json_object_object_get(livemeasure, "timestamp"))); PR("timestamp : %s\n",meter_info->timestamp); } PR("\n\n\n\n\n\n\n\n"); result = PASS; } json_object_put(livemeasure); } break; } return result; } /** * Export & import totalize energy read * @param meter_info * @return */ int readMeterStatusInfo(uint8_t meterIndex, Meter_Status_Info *meter_status_info) { int result = FAIL; char host[128]=""; uint8_t data[4096]; sprintf(host, "http://192.168.0.%d/v1/status", (31 + meterIndex)); switch(meterModel) { case METER_MODEL_LEM_L18005A: default: //if(httpGet((uint8_t*)meterApiAddress, data) != FAIL) if(httpGet((uint8_t*)host,data)!= FAIL) { json_object *livemeasure; livemeasure = json_tokener_parse((char*)data); //PR("Get %s\n",data); if(!is_error(livemeasure)) { if(json_object_object_get(json_object_object_get(livemeasure, "status"), "value") != NULL) { meter_status_info->StatusValue = json_object_get_int(json_object_object_get(json_object_object_get(livemeasure, "status"), "value")); PR("status-value : %d \n",meter_status_info->StatusValue); } //ststus bit if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "status"), "bits"), "suLinkStatusIsOk") != NULL) { meter_status_info->MeterStatusFlag.bits.suLinkStatusIsOk = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "status"), "bits"), "suLinkStatusIsOk")); PR("bits-suLinkStatusIsOk : %d \n",meter_status_info->MeterStatusFlag.bits.suLinkStatusIsOk); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "status"), "bits"), "muFatalErrorOccured") != NULL) { meter_status_info->MeterStatusFlag.bits.muFatalErrorOccured = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "status"), "bits"), "muFatalErrorOccured")); PR("bits-muFatalErrorOccured : %d \n",meter_status_info->MeterStatusFlag.bits.muFatalErrorOccured); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "status"), "bits"), "transactionIsOnGoing") != NULL) { meter_status_info->MeterStatusFlag.bits.transactionIsOnGoing = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "status"), "bits"), "transactionIsOnGoing")); PR("bits-transactionIsOnGoing : %d \n",meter_status_info->MeterStatusFlag.bits.transactionIsOnGoing); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "status"), "bits"), "tamperingIsDetected") != NULL) { meter_status_info->MeterStatusFlag.bits.tamperingIsDetected = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "status"), "bits"), "tamperingIsDetected")); PR("bits-tamperingIsDetected : %d \n",meter_status_info->MeterStatusFlag.bits.tamperingIsDetected); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "status"), "bits"), "timeSyncStatusIsOk") != NULL) { meter_status_info->MeterStatusFlag.bits.timeSyncStatusIsOk = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "status"), "bits"), "timeSyncStatusIsOk")); PR("bits-timeSyncStatusIsOk : %d \n",meter_status_info->MeterStatusFlag.bits.timeSyncStatusIsOk); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "status"), "bits"), "overTemperatureIsDetected") != NULL) { meter_status_info->MeterStatusFlag.bits.overTemperatureIsDetected = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "status"), "bits"), "overTemperatureIsDetected")); PR("bits-overTemperatureIsDetected : %d \n",meter_status_info->MeterStatusFlag.bits.overTemperatureIsDetected); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "status"), "bits"), "reversedVoltage") != NULL) { meter_status_info->MeterStatusFlag.bits.reversedVoltage = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "status"), "bits"), "reversedVoltage")); PR("bits-reversedVoltage : %d \n",meter_status_info->MeterStatusFlag.bits.reversedVoltage); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "status"), "bits"), "suMeasureFailureOccurred") != NULL) { meter_status_info->MeterStatusFlag.bits.suMeasureFailureOccurred = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "status"), "bits"), "suMeasureFailureOccurred")); PR("bits-suMeasureFailureOccurred : %d \n",meter_status_info->MeterStatusFlag.bits.suMeasureFailureOccurred); } if(json_object_object_get(json_object_object_get(livemeasure, "version"), "applicationFirmwareVersion") != NULL) { sprintf((char*)&meter_status_info->applicationFirmwareVersion, "%s", json_object_get_string(json_object_object_get (json_object_object_get(livemeasure, "version"), "applicationFirmwareVersion"))); PR("applicationFirmwareVersion : %s\n",meter_status_info->applicationFirmwareVersion); } if(json_object_object_get(json_object_object_get(livemeasure, "version"), "applicationFirmwareAuthTag") != NULL) { sprintf((char*)&meter_status_info->applicationFirmwareAuthTag, "%s", json_object_get_string(json_object_object_get (json_object_object_get(livemeasure, "version"), "applicationFirmwareAuthTag"))); PR("applicationFirmwareAuthTag : %s\n",meter_status_info->applicationFirmwareAuthTag); } if(json_object_object_get(json_object_object_get(livemeasure, "version"), "legalFirmwareVersion") != NULL) { sprintf((char*)&meter_status_info->legalFirmwareVersion, "%s", json_object_get_string(json_object_object_get (json_object_object_get(livemeasure, "version"), "legalFirmwareVersion"))); PR("applicationFirmwareAuthTag : %s\n",meter_status_info->legalFirmwareVersion); } if(json_object_object_get(json_object_object_get(livemeasure, "version"), "legalFirmwareAuthTag") != NULL) { sprintf((char*)&meter_status_info->legalFirmwareAuthTag, "%s", json_object_get_string(json_object_object_get (json_object_object_get(livemeasure, "version"), "legalFirmwareAuthTag"))); PR("applicationFirmwareAuthTag : %s\n",meter_status_info->legalFirmwareAuthTag); } if(json_object_object_get(json_object_object_get(livemeasure, "version"), "sensorFirmwareVersion") != NULL) { sprintf((char*)&meter_status_info->sensorFirmwareVersion, "%s", json_object_get_string(json_object_object_get (json_object_object_get(livemeasure, "version"), "sensorFirmwareVersion"))); PR("applicationFirmwareAuthTag : %s\n",meter_status_info->sensorFirmwareVersion); } if(json_object_object_get(json_object_object_get(livemeasure, "version"), "sensorFirmwareCrc") != NULL) { sprintf((char*)&meter_status_info->sensorFirmwareCrc, "%s", json_object_get_string(json_object_object_get (json_object_object_get(livemeasure, "version"), "sensorFirmwareCrc"))); PR("applicationFirmwareAuthTag : %s\n",meter_status_info->sensorFirmwareCrc); } if(json_object_object_get(livemeasure, "ipAddress") != NULL) { sprintf((char*)&meter_status_info->ipAddress, "%s", json_object_get_string(json_object_object_get(livemeasure, "ipAddress"))); PR("ipAddress : %s\n",meter_status_info->ipAddress); } if(json_object_object_get(livemeasure, "meterId") != NULL) { sprintf((char*)&meter_status_info->meterId, "%s", json_object_get_string(json_object_object_get(livemeasure, "meterId"))); PR("meterId : %s\n",meter_status_info->meterId); } //error bit if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "errors"), "bits"), "muInitIsFailed") != NULL) { meter_status_info->MeterErrorFlag.bits.muInitIsFailed = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "errors"), "bits"), "muInitIsFailed")); PR("bits-muInitIsFailed : %d \n",meter_status_info->MeterErrorFlag.bits.muInitIsFailed); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "errors"), "bits"), "suStateIsInvalid") != NULL) { meter_status_info->MeterErrorFlag.bits.suStateIsInvalid = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "errors"), "bits"), "suStateIsInvalid")); PR("bits-suStateIsInvalid : %d \n",meter_status_info->MeterErrorFlag.bits.suStateIsInvalid); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "errors"), "bits"), "versionCheckIsFailed") != NULL) { meter_status_info->MeterErrorFlag.bits.versionCheckIsFailed = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "errors"), "bits"), "versionCheckIsFailed")); PR("bits-versionCheckIsFailed : %d \n",meter_status_info->MeterErrorFlag.bits.versionCheckIsFailed); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "errors"), "bits"), "muRngInitIsFailed") != NULL) { meter_status_info->MeterErrorFlag.bits.muRngInitIsFailed = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "errors"), "bits"), "muRngInitIsFailed")); PR("bits-muRngInitIsFailed : %d \n",meter_status_info->MeterErrorFlag.bits.muRngInitIsFailed); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "errors"), "bits"), "muDataIntegrityIsFailed") != NULL) { meter_status_info->MeterErrorFlag.bits.muDataIntegrityIsFailed = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "errors"), "bits"), "muDataIntegrityIsFailed")); PR("bits-muDataIntegrityIsFailed : %d \n",meter_status_info->MeterErrorFlag.bits.muDataIntegrityIsFailed); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "errors"), "bits"), "muFwIntegrityIsFailed") != NULL) { meter_status_info->MeterErrorFlag.bits.muFwIntegrityIsFailed = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "errors"), "bits"), "muFwIntegrityIsFailed")); PR("bits-muFwIntegrityIsFailed : %d \n",meter_status_info->MeterErrorFlag.bits.muFwIntegrityIsFailed); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "errors"), "bits"), "suIntegrityIsFailed") != NULL) { meter_status_info->MeterErrorFlag.bits.suIntegrityIsFailed = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "errors"), "bits"), "suIntegrityIsFailed")); PR("bits-suIntegrityIsFailed : %d \n",meter_status_info->MeterErrorFlag.bits.suIntegrityIsFailed); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "errors"), "bits"), "logbookIntegrityIsFailed") != NULL) { meter_status_info->MeterErrorFlag.bits.logbookIntegrityIsFailed = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "errors"), "bits"), "logbookIntegrityIsFailed")); PR("bits-logbookIntegrityIsFailed : %d \n",meter_status_info->MeterErrorFlag.bits.logbookIntegrityIsFailed); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "errors"), "bits"), "logbookIsFull") != NULL) { meter_status_info->MeterErrorFlag.bits.logbookIsFull = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "errors"), "bits"), "logbookIsFull")); PR("bits-logbookIsFull : %d \n",meter_status_info->MeterErrorFlag.bits.logbookIsFull); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "errors"), "bits"), "memoryAccessIsFailed") != NULL) { meter_status_info->MeterErrorFlag.bits.memoryAccessIsFailed = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "errors"), "bits"), "memoryAccessIsFailed")); PR("bits-memoryAccessIsFailed : %d \n",meter_status_info->MeterErrorFlag.bits.memoryAccessIsFailed); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "errors"), "bits"), "muStateIsFailed") != NULL) { meter_status_info->MeterErrorFlag.bits.muStateIsFailed = json_object_get_boolean(json_object_object_get(json_object_object_get (json_object_object_get(livemeasure, "errors"), "bits"), "muStateIsFailed")); PR("bits-muStateIsFailed : %d \n",meter_status_info->MeterErrorFlag.bits.muStateIsFailed); } if(json_object_object_get(livemeasure, "publicKey") != NULL) { sprintf((char*)&meter_status_info->publicKey, "%s", json_object_get_string(json_object_object_get(livemeasure, "publicKey"))); PR("publicKey : %s\n",meter_status_info->publicKey); } if(json_object_object_get(livemeasure, "publicKeyOcmf") != NULL) { sprintf((char*)&meter_status_info->publicKeyOcmf, "%s", json_object_get_string(json_object_object_get(livemeasure, "publicKeyOcmf"))); PR("publicKeyOcmf : %s\n",meter_status_info->publicKeyOcmf); } if(json_object_object_get(livemeasure, "indexOfLastTransaction") != NULL) { meter_status_info->indexOfLastTransaction = json_object_get_int(json_object_object_get(livemeasure, "indexOfLastTransaction")); PR("indexOfLastTransaction : %d \n",meter_status_info->indexOfLastTransaction); } if(json_object_object_get(livemeasure, "numberOfStoredTransactions") != NULL) { meter_status_info->numberOfStoredTransactions = json_object_get_int(json_object_object_get(livemeasure, "numberOfStoredTransactions")); PR("numberOfStoredTransactions : %d \n",meter_status_info->numberOfStoredTransactions); } PR("\n\n\n\n\n\n\n\n"); result = PASS; } json_object_put(livemeasure); } break; } return result; } int startMeterTransaction(uint8_t meterIndex, Meter_transaction_Action *meter_transaction_Action) { int result = FAIL; char host[128]=""; uint8_t data[4096]; uint8_t tmp[4096]; json_object *TransactionStartData = json_object_new_object(); json_object_object_add(TransactionStartData, "evseId", json_object_new_string((char*)meter_transaction_Action->head.evseId)); json_object_object_add(TransactionStartData, "transactionId", json_object_new_string((char*)meter_transaction_Action->head.transactionId)); json_object_object_add(TransactionStartData, "clientId", json_object_new_string((char*)meter_transaction_Action->head.clientId)); json_object_object_add(TransactionStartData, "tariffId", json_object_new_int(meter_transaction_Action->head.tariffId)); json_object_object_add(TransactionStartData, "cableId", json_object_new_int(meter_transaction_Action->head.cableId)); json_object_object_add(TransactionStartData, "userData", json_object_new_string((char*)meter_transaction_Action->head.userData)); sprintf((char*)tmp, "%s", json_object_to_json_string_ext(TransactionStartData, JSON_C_TO_STRING_PLAIN)); sprintf(host, "http://192.168.0.%d/v1/legal", (31 + meterIndex)); switch(meterModel) { case METER_MODEL_LEM_L18005A: default: if(httpPost((uint8_t*)host,tmp,data)!= FAIL) { json_object *livemeasure; livemeasure = json_tokener_parse((char*)data); if(!is_error(livemeasure)) { PR("PostStartGet %s\n",data); result = PASS; } json_object_put(livemeasure); json_object_put(TransactionStartData); } break; } return result; } int stopMeterTransaction(uint8_t meterIndex, Meter_transaction_Action *meter_transaction_Action,Meter_transaction_Result *meter_transaction_Result) { int result = FAIL; char host[128]=""; uint8_t data[4096]; uint8_t tmp[4096]; sprintf(host, "http://192.168.0.%d/v1/legal?transactionId=%s",(31 + meterIndex), meter_transaction_Action->head.transactionId); json_object *TransactionStopData = json_object_new_object(); json_object_object_add(TransactionStopData, "running", json_object_new_boolean(0)); sprintf((char*)tmp, "%s", json_object_to_json_string_ext(TransactionStopData, JSON_C_TO_STRING_PLAIN)); switch(meterModel) { case METER_MODEL_LEM_L18005A: default: if(httpPut((uint8_t*)host,tmp,data)!= FAIL) //if(httpGet(host,data)!= FAIL) { json_object *livemeasure; livemeasure = json_tokener_parse((char*)data); if(!is_error(livemeasure)) { PR("PutStopGet %s\n",data); if(json_object_object_get(livemeasure, "paginationCounter") != NULL) { meter_transaction_Result->paginationCounter = json_object_get_int(json_object_object_get(livemeasure, "paginationCounter")); PR("paginationCounter : %d\n",meter_transaction_Result->paginationCounter); } if(json_object_object_get(livemeasure, "transactionId") != NULL) { sprintf((char*)&meter_transaction_Result->head.transactionId, "%s", json_object_get_string(json_object_object_get(livemeasure, "transactionId"))); PR("transactionId : %s\n",meter_transaction_Result->head.transactionId); } if(json_object_object_get(livemeasure, "evseId") != NULL) { sprintf((char*)&meter_transaction_Result->head.evseId, "%s", json_object_get_string(json_object_object_get(livemeasure, "evseId"))); PR("evseId : %s\n",meter_transaction_Result->head.evseId); } if(json_object_object_get(livemeasure, "clientId") != NULL) { sprintf((char*)&meter_transaction_Result->head.clientId, "%s", json_object_get_string(json_object_object_get(livemeasure, "clientId"))); PR("clientId : %s\n",meter_transaction_Result->head.clientId); } if(json_object_object_get(livemeasure, "tariffId") != NULL) { meter_transaction_Result->head.tariffId = json_object_get_int(json_object_object_get(livemeasure, "tariffId")); PR("tariffId : %d\n",meter_transaction_Result->head.tariffId); } if(json_object_object_get(livemeasure, "userData") != NULL) { sprintf((char*)&meter_transaction_Result->head.userData, "%s", json_object_get_string(json_object_object_get(livemeasure, "userData"))); PR("clientId : %s\n",meter_transaction_Result->head.userData); } if(json_object_object_get(json_object_object_get(livemeasure, "meterValue"), "timestampStart") != NULL) { sprintf((char*)&meter_transaction_Result->timestampStart, "%s", json_object_get_string(json_object_object_get (json_object_object_get(livemeasure, "meterValue"), "timestampStart"))); PR("timestampStart : %s\n",meter_transaction_Result->timestampStart); } if(json_object_object_get(json_object_object_get(livemeasure, "meterValue"), "timestampStop") != NULL) { sprintf((char*)&meter_transaction_Result->timestampStop, "%s", json_object_get_string(json_object_object_get (json_object_object_get(livemeasure, "meterValue"), "timestampStop"))); PR("timestampStop : %s\n",meter_transaction_Result->timestampStop); } if(json_object_object_get(json_object_object_get(livemeasure, "meterValue"), "transactionDuration") != NULL) { meter_transaction_Result->transactionDuration = json_object_get_int(json_object_object_get (json_object_object_get(livemeasure, "meterValue"), "transactionDuration")); PR("transactionDuration : %d\n",meter_transaction_Result->transactionDuration); } if(json_object_object_get(json_object_object_get(livemeasure, "meterValue"), "transactionStatus") != NULL) { meter_transaction_Result->transactionStatus = json_object_get_int(json_object_object_get (json_object_object_get(livemeasure, "meterValue"), "transactionStatus")); PR("transactionStatus : %d\n",meter_transaction_Result->transactionStatus); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "meterValue"), "sampleValue"), "energyUnit") != NULL) { strcpy((char*)meter_transaction_Result->energyUnit, json_object_get_string(json_object_object_get(json_object_object_get(json_object_object_get (livemeasure, "meterValue"), "sampleValue"), "energyUnit"))); PR("energyUnit : %s\n",meter_transaction_Result->energyUnit); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "meterValue"), "sampleValue"), "energyImport") != NULL) { meter_transaction_Result->energyImport = json_object_get_double(json_object_object_get(json_object_object_get(json_object_object_get (livemeasure, "meterValue"), "sampleValue"), "energyImport")); PR("energyImport : %.3f\n",meter_transaction_Result->energyImport); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "meterValue"), "sampleValue"), "energyImportTotalStart") != NULL) { meter_transaction_Result->energyImportTotalStart = json_object_get_double(json_object_object_get(json_object_object_get(json_object_object_get (livemeasure, "meterValue"), "sampleValue"), "energyImportTotalStart")); PR("energyImportTotalStart : %.3f\n",meter_transaction_Result->energyImportTotalStart); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "meterValue"), "sampleValue"), "energyImportTotalStop") != NULL) { meter_transaction_Result->energyImportTotalStop = json_object_get_double(json_object_object_get(json_object_object_get(json_object_object_get (livemeasure, "meterValue"), "sampleValue"), "energyImportTotalStop")); PR("energyImportTotalStop : %.3f\n",meter_transaction_Result->energyImportTotalStop); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "meterValue"), "sampleValue"), "energyExport") != NULL) { meter_transaction_Result->energyExport = json_object_get_double(json_object_object_get(json_object_object_get(json_object_object_get (livemeasure, "meterValue"), "sampleValue"), "energyExport")); PR("energyExport : %.3f\n",meter_transaction_Result->energyExport); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "meterValue"), "sampleValue"), "energyExportTotalStart") != NULL) { meter_transaction_Result->energyExportTotalStart = json_object_get_double(json_object_object_get(json_object_object_get(json_object_object_get (livemeasure, "meterValue"), "sampleValue"), "energyExportTotalStart")); PR("energyExportTotalStart : %.3f\n",meter_transaction_Result->energyExportTotalStart); } if(json_object_object_get(json_object_object_get(json_object_object_get(livemeasure, "meterValue"), "sampleValue"), "energyExportTotalStop") != NULL) { meter_transaction_Result->energyExportTotalStop = json_object_get_double(json_object_object_get(json_object_object_get(json_object_object_get (livemeasure, "meterValue"), "sampleValue"), "energyExportTotalStop")); PR("energyExportTotalStop : %.3f\n",meter_transaction_Result->energyExportTotalStop); } if(json_object_object_get(livemeasure, "signature") != NULL) { sprintf((char*)&meter_transaction_Result->signature, "%s", json_object_get_string(json_object_object_get(livemeasure, "signature"))); PR("signature : %s\n",meter_transaction_Result->signature); } PR("\n\n\n\n\n\n\n\n"); result = PASS; } json_object_put(livemeasure); json_object_put(TransactionStopData); } break; } return result; } int readMeterTransactionOCMF(uint8_t meterIndex, Meter_transaction_Action *meter_transaction_Action) { int result = FAIL; char host[128]=""; uint8_t data[4096]; sprintf(host, "http://192.168.0.%d/v1/ocmf?transactionId=%s",(31 + meterIndex),meter_transaction_Action->head.transactionId); //printf ("host : %s\n",host); switch(meterModel) { case METER_MODEL_LEM_L18005A: default: if(httpGet((uint8_t*)host,data)!= FAIL) { PR("Get %s\n",data); sprintf((char*)&meter_transaction_Action->transactionOCMF, "%s", data); //printf("GETOCMF %s\n",meter_transaction_Result->transactionOCMF); json_object *livemeasure; livemeasure = json_tokener_parse((char*)data); if(!is_error(livemeasure)) { result = PASS; } json_object_put(livemeasure); } break; } return result; } int readMeterLegal(uint8_t meterIndex, Meter_transaction_Action *meter_transaction_Action) { int result = FAIL; char host[128]=""; uint8_t data[4096]; sprintf(host, "http://192.168.0.%d/v1/legal",(31 + meterIndex)); //printf ("host : %s\n",host); switch(meterModel) { case METER_MODEL_LEM_L18005A: default: if(httpGet((uint8_t*)host,data)!= FAIL) { json_object *livemeasure; livemeasure = json_tokener_parse((char*)data); if(!is_error(livemeasure)) { if(json_object_object_get(livemeasure, "transactionId") != NULL) { sprintf((char*)&meter_transaction_Action->head.transactionId, "%s", json_object_get_string(json_object_object_get(livemeasure, "transactionId"))); PR("transactionId : %s\n",meter_transaction_Action->head.transactionId); } result = PASS; } json_object_put(livemeasure); } break; } return result; } int configure_meter_time(uint8_t meterIndex) { int result = FAIL; char host[256]=""; uint8_t postdata[256]; uint8_t data[4096]; time_t tmi; struct tm* utcTime; time(&tmi); utcTime = gmtime(&tmi); //{"time": { "utc":"2022-06-29T13:09:26Z" }} sprintf(host,"http://192.168.0.%d/v1/settings",(31 + meterIndex)); memset(postdata, 0, sizeof(postdata)); sprintf((char*)postdata,"{\"time\": { \"utc\":\"%d-%d-%dT%02d:%02d:%02dZ\" }}", (utcTime->tm_year+1900), (utcTime->tm_mon+1), (utcTime->tm_mday), (utcTime->tm_hour) % 24, utcTime->tm_min, utcTime->tm_sec); //sprintf(postdata,"{\"time\": { \"utc\":\"%d-%d-%dT%02d:%02d:%02dZ\" }}", 2021, (utcTime->tm_mon+1), (utcTime->tm_mday), (utcTime->tm_hour) % 24, utcTime->tm_min, utcTime->tm_sec); PR("Local time and date: %s\n", postdata); switch(meterModel) { case METER_MODEL_LEM_L18005A: default: if(httpPut((uint8_t*)host,postdata, data)!= FAIL) { json_object *livemeasure; livemeasure = json_tokener_parse((char*)data); if(!is_error(livemeasure)) { PR("PutConfingTimeGet %s\n",data); PR("\n\n\n\n\n\n\n\n"); if(json_object_object_get(livemeasure, "result") != NULL) { PR("configure_meter_time resul: %d \n",json_object_get_int(json_object_object_get(livemeasure, "result"))); } result = PASS; } json_object_put(livemeasure); } break; } return result; }