@@ -674,20 +674,88 @@ handleSaveOhmkey(MongooseHttpServerRequest *request) {
674674// Returns status json
675675// url: /status
676676// -------------------------------------------------------------------
677+ void handleStatusPost (MongooseHttpServerRequest *request, MongooseHttpServerResponseStream *response)
678+ {
679+ String body = request->body ().toString ();
680+ // Deserialize the JSON document
681+ const size_t capacity = JSON_OBJECT_SIZE (50 ) + 1024 ;
682+ DynamicJsonDocument doc (capacity);
683+ DeserializationError error = deserializeJson (doc, body);
684+ if (!error)
685+ {
686+ if (doc.containsKey (" voltage" ))
687+ {
688+ double volts = doc[" voltage" ];
689+ DBUGF (" voltage:%.1f" , volts);
690+ evse.setVoltage (volts);
691+ }
692+ if (doc.containsKey (" shaper_live_pwr" ))
693+ {
694+ double shaper_live_pwr = doc[" shaper_live_pwr" ];
695+ shaper.setLivePwr (shaper_live_pwr);
696+ DBUGF (" shaper: available power:%dW" , shaper.getAvlPwr ());
697+ }
698+ if (doc.containsKey (" solar" )) {
699+ solar = doc[" solar" ];
700+ DBUGF (" solar:%dW" , solar);
701+ divert.update_state ();
702+ }
703+ else if (doc.containsKey (" grid_ie" )) {
704+ grid_ie = doc[" grid_ie" ];
705+ DBUGF (" grid:%dW" , grid_ie);
706+ divert.update_state ();
707+ }
708+ if (doc.containsKey (" battery_level" )) {
709+ double vehicle_soc = doc[" battery_level" ];
710+ DBUGF (" vehicle_soc:%d%%" , vehicle_soc);
711+ evse.setVehicleStateOfCharge (vehicle_soc);
712+ }
713+ if (doc.containsKey (" battery_range" )) {
714+ double vehicle_range = doc[" battery_range" ];
715+ DBUGF (" vehicle_range:%dKM" , vehicle_range);
716+ evse.setVehicleRange (vehicle_range);
717+ }
718+ if (doc.containsKey (" time_to_full_charge" )){
719+ double vehicle_eta = doc[" time_to_full_charge" ];
720+ DBUGF (" vehicle_eta:%d" , vehicle_eta);
721+ evse.setVehicleEta (vehicle_eta);
722+ }
723+ // send back new value to clients
724+ event_send (doc);
725+
726+ response->setCode (200 );
727+ serializeJson (doc, *response);
728+ } else {
729+ response->setCode (400 );
730+ response->print (" {\" msg\" :\" Could not parse JSON\" }" );
731+ }
732+ }
733+
734+
677735void
678- handleStatus (MongooseHttpServerRequest *request) {
736+ handleStatus (MongooseHttpServerRequest *request)
737+ {
738+
679739 MongooseHttpServerResponseStream *response;
680740 if (false == requestPreProcess (request, response)) {
681741 return ;
682742 }
683743
684- const size_t capacity = JSON_OBJECT_SIZE (40 ) + 1024 ;
685- DynamicJsonDocument doc (capacity);
744+ if (HTTP_GET == request->method ()) {
686745
687- buildStatus (doc);
746+ const size_t capacity = JSON_OBJECT_SIZE (40 ) + 1024 ;
747+ DynamicJsonDocument doc (capacity);
748+ buildStatus (doc);
749+ response->setCode (200 );
750+ serializeJson (doc, *response);
751+
752+ } else if (HTTP_POST == request->method ()) {
753+ handleStatusPost (request, response);
754+ } else {
755+ response->setCode (405 );
756+ response->print (" {\" msg\" :\" Method not allowed\" }" );
757+ }
688758
689- response->setCode (200 );
690- serializeJson (doc, *response);
691759 request->send (response);
692760}
693761
0 commit comments