Bonjour,
J’ai démarré un script dans scénario pour récupérer les valeurs d’un json (retour d’un curl GET pour les infos de ma Tesla).
Ex du bloc json qui m’intéresse :
{"response":{"result":true,"reason":"The request was successfully processed.","vin":"LRWYGCFS9PC11111","command":"vehicle_data","response":{"charge_state":{"timestamp":1737126831,"charging_state":"Disconnected","charge_limit_soc":100,"charge_limit_soc_std":80,"charge_limit_soc_min":50,"charge_limit_soc_max":100,"battery_heater_on":false,"not_enough_power_to_heat":false,"max_range_charge_counter":20,"fast_charger_present":false,"fast_charger_type":"\u003cnil\u003e","battery_range":195.63318,"est_battery_range":203.63884,"ideal_battery_range":195.63318,"battery_level":78,"usable_battery_level":77,"charge_energy_added":42.82,"charge_miles_added_rated":187,"charge_miles_added_ideal":187,"charger_voltage":2,"charger_pilot_current":16,"charger_actual_current":0,"charger_power":0,"trip_charging":false,"charge_rate":0,"charge_port_door_open":false,"scheduled_charging_mode":"ScheduledChargingModeStartAt","scheduled_departure_time":1737273600,"scheduled_departure_time_minutes":0,"supercharger_session_trip_planner":false,"scheduled_charging_start_time":1737147600000,"scheduled_charging_pending":false,"user_charge_enable_request":false,"charge_enable_request":false,"charger_phases":0,"charge_port_latch":"Engaged","charge_current_request":16,"charge_current_request_max":16,"charge_amps":16,"off_peak_charging_enabled":false,"off_peak_charging_times":"weekdays","off_peak_hours_end_time":0,"preconditioning_enabled":false,"preconditioning_times":"weekdays","managed_charging_active":false,"managed_charging_user_canceled":false,"managed_charging_start_time":0,"charge_port_cold_weather_mode":false,"charge_port_color":"ChargePortColorOff","conn_charge_cable":"\u003cnil\u003e","fast_charger_brand":"\u003cnil\u003e","minutes_to_full_charge":0}}}}
Je veux récupérer certaines valeurs en entier (sans les "), booleans, et des chaines (avec ").
OK pour les entiers (et booleans) mais pas pour les chaines, elles sont toujours vides :
Log scénario :
[2025-01-17 16:13:46][SCENARIO] -- Début : Scenario lance manuellement.
[2025-01-17 16:13:46][SCENARIO] - Exécution du sous-élément de type [action] : code
[2025-01-17 16:13:46][SCENARIO] Exécution d'un bloc code
[2025-01-17 16:13:52][SCENARIO] la fonction renvoie : {"response":{"result":true,"reason":"The request was successfully processed.","vin":"LRWYGCFS9PC11111","command":"vehicle_data","response":{"charge_state":{"timestamp":1737126831,"charging_state":"Disconnected","charge_limit_soc":100,"charge_limit_soc_std":80,"charge_limit_soc_min":50,"charge_limit_soc_max":100,"battery_heater_on":false,"not_enough_power_to_heat":false,"max_range_charge_counter":20,"fast_charger_present":false,"fast_charger_type":"\u003cnil\u003e","battery_range":195.63318,"est_battery_range":203.63884,"ideal_battery_range":195.63318,"battery_level":78,"usable_battery_level":77,"charge_energy_added":42.82,"charge_miles_added_rated":187,"charge_miles_added_ideal":187,"charger_voltage":2,"charger_pilot_current":16,"charger_actual_current":0,"charger_power":0,"trip_charging":false,"charge_rate":0,"charge_port_door_open":false,"scheduled_charging_mode":"ScheduledChargingModeStartAt","scheduled_departure_time":1737273600,"scheduled_departure_time_minutes":0,"supercharger_session_trip_planner":false,"scheduled_charging_start_time":1737147600000,"scheduled_charging_pending":false,"user_charge_enable_request":false,"charge_enable_request":false,"charger_phases":0,"charge_port_latch":"Engaged","charge_current_request":16,"charge_current_request_max":16,"charge_amps":16,"off_peak_charging_enabled":false,"off_peak_charging_times":"weekdays","off_peak_hours_end_time":0,"preconditioning_enabled":false,"preconditioning_times":"weekdays","managed_charging_active":false,"managed_charging_user_canceled":false,"managed_charging_start_time":0,"charge_port_cold_weather_mode":false,"charge_port_color":"ChargePortColorOff","conn_charge_cable":"\u003cnil\u003e","fast_charger_brand":"\u003cnil\u003e","minutes_to_full_charge":0}}}}
[2025-01-17 16:13:52][SCENARIO] Variable Chaby_Result = true
[2025-01-17 16:13:52][SCENARIO] Variable Chaby_Charging_state =
[2025-01-17 16:13:52][SCENARIO] Variable Chaby_Charge_limit_soc_max = 100
[2025-01-17 16:13:53][SCENARIO] Variable Chaby_battery_level = 78
[2025-01-17 16:13:53][SCENARIO] Variable Chaby_charge_amps = 16
[2025-01-17 16:13:53][SCENARIO] Variable Chaby_charger_voltage = 2
[2025-01-17 16:13:53][SCENARIO] Fin correcte du scénario
Mon scénario :
$json = system("curl -X 'GET' \
'http://localhost:5678/api/1/vehicles/LRWYGCFS9PC11111/vehicle_data?endpoints=charge_state'");
$json = preg_replace("#(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|([\s\t]//.*)|(^//.*)#", '', $json);
if (!empty($json))
{
$findme = 'response';
$pos = strpos($json, $findme);
$scenario->setLog('la fonction renvoie : ' .$json);
if ($pos === false)
{
$scenario->setLog('Erreur de retour de la fonction CURL, la fonction renvoie : ' .$json);
}
else
{
$obj = json_decode($json, TRUE);
$b = 'Chaby_'; // Préfixe nom de variable
if (json_last_error() === JSON_ERROR_NONE)
{
if($obj['response']['result'])
{
$Result = "true";
}
else {
$Result = "false";
}
$scenario->setLog('Variable ' . $b . 'Result = ' . $Result);
$scenario->setData($b . 'Result', $Result);
//cmd::byString('#[Maison][Fronius][Puissance]#')->event(($P));
//$ChargingState = $obj['response']['response']['charge_state']['charging_state'];
$ChargingState = $obj->response->response->charge_state->charging_state;
$scenario->setLog('Variable ' . $b . 'Charging_state = ' . $Charging_state);
$scenario->setData($b . 'Charging_state', $Charging_state);
$ChargeLimitSocMax = $obj['response']['response']['charge_state']['charge_limit_soc_max'];
$scenario->setLog('Variable ' . $b . 'Charge_limit_soc_max = ' . $ChargeLimitSocMax);
$scenario->setData($b . 'Charge_limit_soc_max', $ChargeLimitSocMax);
$BatteryLevel = $obj['response']['response']['charge_state']['battery_level'];
$scenario->setLog('Variable ' . $b . 'battery_level = ' . $BatteryLevel);
$scenario->setData($b . 'battery_level', $BatteryLevel);
$ChargeAmps = $obj['response']['response']['charge_state']['charge_amps'];
$scenario->setLog('Variable ' . $b . 'charge_amps = ' . $ChargeAmps);
$scenario->setData($b . 'charge_amps', $ChargeAmps);
$ChargerVoltage = $obj['response']['response']['charge_state']['charger_voltage'];
$scenario->setLog('Variable ' . $b . 'charger_voltage = ' . $ChargerVoltage);
$scenario->setData($b . 'charger_voltage', $ChargerVoltage);
}
}
}
else
{
$scenario->setLog('Erreur json est : ' . $json_errors[json_last_error()]);
}
J’ai tenté plein de choses avec des propriétés de json_decode ou des regex de remplacement du net sans trop de succès et je ne voudrais pas que ça devienne un usine à gaz.
Il y aurait un expert en php/json/regex pour me conseiller ?
Merci