version foncionnelle
This commit is contained in:
+50
-6
@@ -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
@@ -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
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user