@@ -375,7 +375,7 @@ void EvseManager::ready() {
375
375
hlc_waiting_for_auth_pnc = false ;
376
376
}
377
377
r_hlc[0 ]->call_set_Auth_Okay_PnC (types::authorization::AuthorizationStatus::Accepted,
378
- types::authorization::CertificateStatus::Accepted);
378
+ types::authorization::CertificateStatus::Accepted);
379
379
} else {
380
380
std::scoped_lock lock (hlc_mutex);
381
381
hlc_waiting_for_auth_eim = false ;
@@ -614,6 +614,110 @@ void EvseManager::ready() {
614
614
charger->setMaxCurrent (0 .0F , date::utc_clock::now ());
615
615
charger->run ();
616
616
charger->enable ();
617
+
618
+ telemetryThreadHandle = std::thread ([this ]() {
619
+ while (!telemetryThreadHandle.shouldExit ()) {
620
+ sleep (10 );
621
+ auto p = get_latest_powermeter_data_billing ();
622
+ Everest::TelemetryMap telemetry_data{{" timestamp" , p.timestamp },
623
+ {" type" , " power_meter" },
624
+ {" meter_id" , p.meter_id .get_value_or (" N/A" )},
625
+ {" energy_import_total_Wh" , p.energy_Wh_import .total }};
626
+
627
+ if (p.energy_Wh_import .L1 .is_initialized ()) {
628
+ telemetry_data[" energy_import_L1_Wh" ] = p.energy_Wh_import .L1 .get ();
629
+ }
630
+ if (p.energy_Wh_import .L2 .is_initialized ()) {
631
+ telemetry_data[" energy_import_L2_Wh" ] = p.energy_Wh_import .L2 .get ();
632
+ }
633
+ if (p.energy_Wh_import .L3 .is_initialized ()) {
634
+ telemetry_data[" energy_import_L3_Wh" ] = p.energy_Wh_import .L3 .get ();
635
+ }
636
+
637
+ if (p.energy_Wh_export .is_initialized ()) {
638
+ telemetry_data[" energy_export_total_Wh" ] = p.energy_Wh_export .get ().total ;
639
+ }
640
+ if (p.energy_Wh_export .is_initialized () && p.energy_Wh_export .get ().L1 .is_initialized ()) {
641
+ telemetry_data[" energy_export_L1_Wh" ] = p.energy_Wh_export .get ().L1 .get ();
642
+ }
643
+ if (p.energy_Wh_export .is_initialized () && p.energy_Wh_export .get ().L2 .is_initialized ()) {
644
+ telemetry_data[" energy_export_L2_Wh" ] = p.energy_Wh_export .get ().L2 .get ();
645
+ }
646
+ if (p.energy_Wh_export .is_initialized () && p.energy_Wh_export .get ().L3 .is_initialized ()) {
647
+ telemetry_data[" energy_export_L3_Wh" ] = p.energy_Wh_export .get ().L3 .get ();
648
+ }
649
+
650
+ if (p.power_W .is_initialized ()) {
651
+ telemetry_data[" power_total_W" ] = p.power_W .get ().total ;
652
+ }
653
+ if (p.power_W .is_initialized () && p.power_W .get ().L1 .is_initialized ()) {
654
+ telemetry_data[" power_L1_W" ] = p.power_W .get ().L1 .get ();
655
+ }
656
+ if (p.power_W .is_initialized () && p.power_W .get ().L2 .is_initialized ()) {
657
+ telemetry_data[" power_L3_W" ] = p.power_W .get ().L2 .get ();
658
+ }
659
+ if (p.power_W .is_initialized () && p.power_W .get ().L3 .is_initialized ()) {
660
+ telemetry_data[" power_L3_W" ] = p.power_W .get ().L3 .get ();
661
+ }
662
+
663
+ if (p.VAR .is_initialized ()) {
664
+ telemetry_data[" var_total" ] = p.VAR .get ().total ;
665
+ }
666
+ if (p.VAR .is_initialized () && p.VAR .get ().L1 .is_initialized ()) {
667
+ telemetry_data[" var_L1" ] = p.VAR .get ().L1 .get ();
668
+ }
669
+ if (p.VAR .is_initialized () && p.VAR .get ().L2 .is_initialized ()) {
670
+ telemetry_data[" var_L1" ] = p.VAR .get ().L2 .get ();
671
+ }
672
+ if (p.VAR .is_initialized () && p.VAR .get ().L3 .is_initialized ()) {
673
+ telemetry_data[" var_L1" ] = p.VAR .get ().L3 .get ();
674
+ }
675
+
676
+ if (p.voltage_V .is_initialized () && p.voltage_V .get ().L1 .is_initialized ()) {
677
+ telemetry_data[" voltage_L1_V" ] = p.voltage_V .get ().L1 .get ();
678
+ }
679
+ if (p.voltage_V .is_initialized () && p.voltage_V .get ().L2 .is_initialized ()) {
680
+ telemetry_data[" voltage_L2_V" ] = p.voltage_V .get ().L2 .get ();
681
+ }
682
+ if (p.voltage_V .is_initialized () && p.voltage_V .get ().L3 .is_initialized ()) {
683
+ telemetry_data[" voltage_L3_V" ] = p.voltage_V .get ().L3 .get ();
684
+ }
685
+ if (p.voltage_V .is_initialized () && p.voltage_V .get ().DC .is_initialized ()) {
686
+ telemetry_data[" voltage_DC_V" ] = p.voltage_V .get ().DC .get ();
687
+ }
688
+
689
+ if (p.current_A .is_initialized () && p.current_A .get ().L1 .is_initialized ()) {
690
+ telemetry_data[" current_L1_A" ] = p.current_A .get ().L1 .get ();
691
+ }
692
+ if (p.current_A .is_initialized () && p.current_A .get ().L2 .is_initialized ()) {
693
+ telemetry_data[" current_L2_A" ] = p.current_A .get ().L2 .get ();
694
+ }
695
+ if (p.current_A .is_initialized () && p.current_A .get ().L3 .is_initialized ()) {
696
+ telemetry_data[" current_L3_A" ] = p.current_A .get ().L3 .get ();
697
+ }
698
+ if (p.current_A .is_initialized () && p.current_A .get ().DC .is_initialized ()) {
699
+ telemetry_data[" current_DC_A" ] = p.current_A .get ().DC .get ();
700
+ }
701
+
702
+ if (p.frequency_Hz .is_initialized ()) {
703
+ telemetry_data[" frequency_L1_Hz" ] = p.frequency_Hz .get ().L1 ;
704
+ }
705
+ if (p.frequency_Hz .is_initialized () && p.frequency_Hz .get ().L2 .is_initialized ()) {
706
+ telemetry_data[" frequency_L2_Hz" ] = p.frequency_Hz .get ().L2 .get ();
707
+ }
708
+ if (p.frequency_Hz .is_initialized () && p.frequency_Hz .get ().L3 .is_initialized ()) {
709
+ telemetry_data[" frequency_L3_Hz" ] = p.frequency_Hz .get ().L3 .get ();
710
+ }
711
+
712
+ if (p.phase_seq_error .is_initialized ()) {
713
+ telemetry_data[" phase_seq_error" ] = p.phase_seq_error .get ();
714
+ }
715
+
716
+ // Publish as external telemetry data
717
+ telemetry.publish (" livedata" , " power_meter" , telemetry_data);
718
+ }
719
+ });
720
+
617
721
EVLOG_info << fmt::format (fmt::emphasis::bold | fg (fmt::terminal_color::green), " 🌀🌀🌀 Ready to start charging 🌀🌀🌀" );
618
722
}
619
723
@@ -791,7 +895,7 @@ void EvseManager::charger_was_authorized() {
791
895
std::scoped_lock lock (hlc_mutex);
792
896
if (hlc_waiting_for_auth_pnc && charger->Authorized_PnC ()) {
793
897
r_hlc[0 ]->call_set_Auth_Okay_PnC (types::authorization::AuthorizationStatus::Accepted,
794
- types::authorization::CertificateStatus::Accepted);
898
+ types::authorization::CertificateStatus::Accepted);
795
899
hlc_waiting_for_auth_eim = false ;
796
900
hlc_waiting_for_auth_pnc = false ;
797
901
}
0 commit comments