version foncionnelle

This commit is contained in:
bjacquot
2022-12-10 14:16:14 +01:00
parent 50c651f7dd
commit 61961b655c
4 changed files with 128 additions and 12 deletions
+50 -6
View File
@@ -27,7 +27,7 @@ Compteur::Compteur(QObject *parent)
connect(&m_client,SIGNAL(disconnected()),this,SLOT(mqttDisConnected()));
connect(&retryMqttTimer,SIGNAL(timeout()),this,SLOT(mqttReconnect()));
listeEtiquette.append("EASF01");
/* listeEtiquette.append("EASF01");
listeTopic.append("fluide/elec/hc");
listeValeur.append("");
listeNewValeur.append("");
@@ -40,7 +40,7 @@ Compteur::Compteur(QObject *parent)
listeNewValeur.append("");
listeDiv.append(100);
listeArrondi.append(0);
*/
listeEtiquette.append("PTEC");
listeTopic.append("fluide/elec/tarif");
listeValeur.append("");
@@ -129,18 +129,19 @@ void Compteur::getData()
if (iInst<0) iInst=-iInst;
pInst=pSout;
}
/* if (iInst!=iInstPrec)
if (iInst!=iInstPrec)
{
iInstPrec=iInst;
//qDebug()<<"topic"<<"fluide/elec/iinst"<<iInst;
mqttSend("fluide/elec/iinst",QString::number(iInst),1,true);
//mqttSend("fluide/elec/iinst",QString::number(iInst),1,true);
energyMeter.setCourant(iInst);
}
*/
if (pInst!=pInstPrec)
else if (pInst!=pInstPrec)
{
pInstPrec=pInst;
//qDebug()<<"topic"<<"fluide/elec/puissance"<<pInst;
mqttSend("homeassistant/sensor/teleinfoPinst/state",QString::number(pInst),1,true);
energyMeter.setPuissanceInstantanee(pInst);
}
pConso=pInst+pSolaire;
if (pConso!=pConsoPrec)
@@ -152,6 +153,30 @@ void Compteur::getData()
{
indexInjPrec=indexInj;
mqttSend("homeassistant/sensor/teleinfoIndexInjection/state",QString::number(indexInj/10)+'.'+QString::number(indexInj%10),1,true);
energyMeter.setIndexInjection(indexInj);
}
if (indexHC!=indexHCprec)
{
indexHCprec=indexHC;
indexTotal=indexHC+indexHP;
mqttSend("homeassistant/sensor/teleinfoIndexHC/state",QString::number(indexHC/10)+'.'+QString::number(indexHC%10),1,true);
}
if (indexHP!=indexHPprec)
{
indexHPprec=indexHP;
indexTotal=indexHC+indexHP;
mqttSend("homeassistant/sensor/teleinfoIndexHP/state",QString::number(indexHP/10)+'.'+QString::number(indexHP%10),1,true);
}
if (indexTotal!=indexTotalprec)
{
indexTotalprec=indexTotal;
energyMeter.setIndexConso(indexTotal);
}
if (uInst!=uInstPrec)
{
uInstPrec=uInst;
energyMeter.setTension(uInst);
}
for(int i=0;i<nbEtiquettes;i++)
@@ -163,12 +188,21 @@ void Compteur::getData()
mqttSend(listeTopic[i],listeValeur[i],1,true);
}
}
if (isEnergyMeterStarted==false)
{
energyMeter.startModbus();
isEnergyMeterStarted=true;
}
}
}
else if (liste.at(0)=="IRMS1")
{
iInst=liste.at(1).toInt();
}
else if (liste.at(0)=="URMS1")
{
uInst=liste.at(1).toInt();
}
else if (liste.at(0)=="SINSTS")
{
pSout=liste.at(1).toInt();
@@ -185,6 +219,14 @@ void Compteur::getData()
{
indexInj=liste.at(1).toLong()/100;
}
else if (liste.at(0)=="EASF01")
{
indexHC = liste.at(1).toLong()/100;
}
else if (liste.at(0)=="EASF02")
{
indexHP = liste.at(1).toLong()/100;
}
else
{
int i=listeEtiquette.indexOf(liste.at(0));
@@ -244,6 +286,8 @@ void Compteur::mqttConnected()
addHomeAssistant("IndexHC","energy","kWh");
addHomeAssistant("IndexHP","energy","kWh");
addHomeAssistant("IndexInjection","energy","kWh");
addHomeAssistant("IndexHP","energy","kWh");
addHomeAssistant("IndexHC","energy","kWh");
qDebug()<<"connect to Mosquitto !";
}
+10
View File
@@ -35,6 +35,7 @@ private:
QEM24EnergyMeter energyMeter;
bool isEnergyMeterStarted=false;
int nbEtiquettes;
@@ -47,10 +48,19 @@ private:
int pConsoPrec=-9999;
int iInst;
int iInstPrec=-9999;
int uInst=230;
int uInstPrec=0;
long indexInj;
long indexInjPrec=-9999;
int pSolaire=0;
bool injection;
int64_t indexHC=0;
int64_t indexHCprec=0;
int64_t indexHP=0;
int64_t indexHPprec=0;
int64_t indexTotal=0;
int64_t indexTotalprec=0;
signals:
+58 -6
View File
@@ -69,7 +69,6 @@ QEM24EnergyMeter::QEM24EnergyMeter(QObject *parent)
setRegistre( 0x5006, 0x3100 ); //Serial Digit 13
setRegistre( 0xA000, 7 ); //Application : Doit être égal à 7 pour Victron
//Infos triphasées non utilisées:
setRegistre( 0x0000, 2300 ); // V-L1
setRegistre( 0x0001, 0 );
setRegistre( 0x0002, 0 ); // V-L3
setRegistre( 0x0003, 0 );
@@ -81,11 +80,9 @@ QEM24EnergyMeter::QEM24EnergyMeter(QObject *parent)
setRegistre( 0x000F, 0 );
setRegistre( 0x0010, 0 ); // A-L2
setRegistre( 0x0011, 0 );
setRegistre( 0x0012, 1000 ); // W-L1
setRegistre( 0x0013, 0 );
setRegistre( 0x0016, 0 ); // W-L2
setRegistre( 0x0017, 0 );
setRegistre( 0x0018, 1000 ); // VA-L1
setRegistre( 0x0019, 0 );
setRegistre( 0x0042, 0 ); // kWh-L2
setRegistre( 0x0043, 0 );
@@ -107,6 +104,9 @@ QEM24EnergyMeter::QEM24EnergyMeter(QObject *parent)
setRegistre( 0x0048, 0 ); // kWh+ T2
setRegistre( 0x0049, 0 );
setPuissanceInstantanee(0);
setTension(0);
modbusDevice.setConnectionParameter(QModbusDevice::NetworkPortParameter, 502);
@@ -116,8 +116,8 @@ QEM24EnergyMeter::QEM24EnergyMeter(QObject *parent)
//modbusDevice.setValue(QModbusServer::DeviceBusy, 0xfff);
connect(&modbusDevice, &QModbusTcpServer::dataWritten,
this, &QEM24EnergyMeter::updateWidgets);
//connect(&modbusDevice, &QModbusTcpServer::dataWritten,
// this, &QEM24EnergyMeter::updateWidgets);
connect(&modbusDevice, &QModbusTcpServer::stateChanged,
this, &QEM24EnergyMeter::onStateChanged);
connect(&modbusDevice, &QModbusTcpServer::errorOccurred,
@@ -129,7 +129,7 @@ QEM24EnergyMeter::QEM24EnergyMeter(QObject *parent)
modbusDevice.setData(QModbusDataUnit::Coils, 0, 1);
modbusDevice.setData(QModbusDataUnit::Coils, 1, 2);
modbusDevice.connectDevice();
}
@@ -139,6 +139,24 @@ void QEM24EnergyMeter::setRegistre(quint16 address, quint16 value)
modbusDevice.setData(QModbusDataUnit::InputRegisters,address,value);
}
void QEM24EnergyMeter::setRegistre32(quint16 address, int value)
{
{
qint16 v;
v=(value&0xFFFF);
modbusDevice.setData(QModbusDataUnit::HoldingRegisters,address,v);
modbusDevice.setData(QModbusDataUnit::InputRegisters,address,v);
}
{
qint16 v;
v=((value>>16)&0xFFFF);
modbusDevice.setData(QModbusDataUnit::HoldingRegisters,address+1,v);
modbusDevice.setData(QModbusDataUnit::InputRegisters,address+1,v);
}
}
void QEM24EnergyMeter::onStateChanged(int state)
{
qDebug()<<"state :"<<state;
@@ -162,3 +180,37 @@ void QEM24EnergyMeter::clientDisconnected(QTcpSocket *modbusClient)
{
qDebug()<<"deconnexion : "<<modbusClient->peerAddress() ;
}
void QEM24EnergyMeter::setPuissanceInstantanee(int p)
{
setRegistre32(0x12,p*10); // puissance active L1
setRegistre32(0x28,p*10); // puissance totale
}
void QEM24EnergyMeter::setTension(int u)
{
setRegistre( 0x0000, u*10 ); // V-L1
}
void QEM24EnergyMeter::setCourant(int i)
{
setRegistre32( 0x000C, i*1000 ); // I-L1
}
void QEM24EnergyMeter::setIndexConso(long index)
{
setRegistre32( 0x0034, index ); //
setRegistre32( 0x0040, index ); //
}
void QEM24EnergyMeter::setIndexInjection(long index)
{
setRegistre32( 0x004E, index ); //
}
void QEM24EnergyMeter::startModbus()
{
if (modbusDevice.state()!=QModbusDevice::ConnectedState) modbusDevice.connectDevice();
}
+10
View File
@@ -18,6 +18,7 @@ private:
QModbusDataUnitMap reg;
void setRegistre(quint16 address, quint16 value);
void setRegistre32(quint16 address, int value);
private Q_SLOTS:
void onStateChanged(int state);
@@ -26,6 +27,15 @@ private Q_SLOTS:
void clientDisconnected(QTcpSocket *modbusClient);
public :
void setPuissanceInstantanee(int p);
void setTension(int u);
void setCourant(int i);
void setIndexConso(long index);
void setIndexInjection(long index);
void startModbus();
signals:
};