@@ -810,10 +810,17 @@ namespace http {
810
810
usrname = base64_decode (usrname);
811
811
int iUser = -1 ;
812
812
iUser = FindUser (usrname.c_str ());
813
- if (iUser == -1 )
813
+ if (iUser == -1 ) {
814
+ // log brute force attack
815
+ _log.Log (LOG_ERROR, " Failed login attempt for '%s' !" , usrname.c_str ());
814
816
return ;
815
- if (m_users[iUser].Password != usrpass)
817
+ }
818
+ if (m_users[iUser].Password != usrpass) {
819
+ // log brute force attack
820
+ _log.Log (LOG_ERROR, " Failed login attempt for '%s' !" , m_users[iUser].Username .c_str ());
816
821
return ;
822
+ }
823
+ _log.Log (LOG_STATUS, " Login successfull : user '%s'" , m_users[iUser].Username .c_str ());
817
824
root[" status" ] = " OK" ;
818
825
root[" title" ] = " logincheck" ;
819
826
m_pWebEm->m_actualuser = m_users[iUser].Username ;
@@ -11594,6 +11601,16 @@ namespace http {
11594
11601
method = atoi (sMethod .c_str ());
11595
11602
if (bHaveUsage == false )
11596
11603
method = 0 ;
11604
+
11605
+ // Force Value graph even if device should show Value graph
11606
+ if ((method == 1 ) && (
11607
+ ((dType == pTypeENERGY) && ((dSubType == sTypeELEC2 ) || (dSubType == sTypeELEC3 ))) ||
11608
+ ((dType == pTypeGeneral) && (dSubType == sTypeKwh ))
11609
+ )) {
11610
+ // _log.Log(LOG_ERROR, "Energy/CMxxx or General/kWh device graph method should be 0!");
11611
+ method = 0 ;
11612
+ }
11613
+
11597
11614
if (method != 0 )
11598
11615
{
11599
11616
// realtime graph
@@ -11635,27 +11652,24 @@ namespace http {
11635
11652
}
11636
11653
ulFirstRealValue = ulLastValue;
11637
11654
float TotalValue = float (ulTotalValue);
11638
- if (TotalValue != 0 )
11655
+ switch (metertype )
11639
11656
{
11640
- switch (metertype)
11641
- {
11642
- case MTYPE_ENERGY:
11643
- case MTYPE_ENERGY_GENERATED:
11644
- sprintf (szTmp, " %.3f" , (TotalValue / EnergyDivider)*1000 .0f ); // from kWh -> Watt
11645
- break ;
11646
- case MTYPE_GAS:
11647
- sprintf (szTmp, " %.2f" , TotalValue / GasDivider);
11648
- break ;
11649
- case MTYPE_WATER:
11650
- sprintf (szTmp, " %.3f" , TotalValue / WaterDivider);
11651
- break ;
11652
- case MTYPE_COUNTER:
11653
- sprintf (szTmp, " %.1f" , TotalValue);
11654
- break ;
11655
- }
11656
- root[" result" ][ii][" v" ] = szTmp;
11657
- ii++;
11657
+ case MTYPE_ENERGY:
11658
+ case MTYPE_ENERGY_GENERATED:
11659
+ sprintf (szTmp, " %.3f" , (TotalValue / EnergyDivider)*1000 .0f ); // from kWh -> Watt
11660
+ break ;
11661
+ case MTYPE_GAS:
11662
+ sprintf (szTmp, " %.2f" , TotalValue / GasDivider);
11663
+ break ;
11664
+ case MTYPE_WATER:
11665
+ sprintf (szTmp, " %.3f" , TotalValue / WaterDivider);
11666
+ break ;
11667
+ case MTYPE_COUNTER:
11668
+ sprintf (szTmp, " %.1f" , TotalValue);
11669
+ break ;
11658
11670
}
11671
+ root[" result" ][ii][" v" ] = szTmp;
11672
+ ii++;
11659
11673
}
11660
11674
LastDateTime = actDateTimeHour;
11661
11675
bHaveFirstValue = false ;
0 commit comments