6af9fcad7e
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 4m42s
🆕 Funzionalità Auto-Discovery - Aggiunto metodo AutoDiscoverBufferSizes() per rilevamento automatico QPIGS/QPIRI/QMOD/QPIWS - Supporto variabili d'ambiente (INVERTER_DEVICE, MQTT_SERVER, etc.) - Caching persistente buffer sizes in /cache/inverter.conf.cache - Flag -a/--auto-discover per modalità auto-detection 🐛 Bug Fixes Critici - **Parsing interi**: Aggiunta attemptAddSettingInt() con stoi() invece di stof() - Fix: stof('98') = 98.0f → 97 (int), ora stoi('98') = 98 direttamente - Applicato a: qpiri, qpiws, qmod, qpigs - **Thread sync**: Aggiunto ups_qpiws_changed a main loop e condizione exit poll() - Fix: loop principale controllava solo 3 flag su 4, causava hang - Fix: thread poll() non usciva in runOnce perché mancava controllo QPIWS - **Config accuracy**: Corretti buffer sizes (qpiri: 98→103, qpiws: 36→40) - Rimosso sources/inverter-cli/inverter.conf che sovrascriveva config globale - Validato con test: inverter_poller -1 completa in 6s con JSON completo 📚 Documentazione Completa - Creato documentation/CODE_ARCHITECTURE.md (38KB) - Mappa logica variabili globali - Flusso esecuzione main() con diagrammi ASCII - Sequence diagram classe cInverter (poll, query, auto-discovery) - Thread synchronization diagrams - MQTT integration bash scripts flow - Mappa concettuale 5-layer system architecture - Error handling e performance optimizations - Organizzati file .md in documentation/ (AUTO_DISCOVERY, IMPLEMENTATION, QUICKSTART, DEBUG) - Aggiornato README.md con sezione v2.0 e indice documentazione - Aggiornato .github/copilot-instructions.md con novità v2.0 🔧 Miglioramenti Build & CI/CD - Gitea Actions per build multi-arch (arm/v6, arm/v7, arm64, amd64, 386) - Configurazione VS Code completa (tasks, launch, debug GDB) - Script test-autodiscovery.sh e test-device.sh ✅ Testing Validato - inverter_poller -1 completa in 6 secondi - Output JSON completo con tutte le metriche - Exit pulito senza timeout (exit code 0) - Tutte le 4 query QMOD/QPIGS/QPIRI/QPIWS funzionanti
51 lines
1.1 KiB
C++
51 lines
1.1 KiB
C++
#ifndef ___INVERTER_H
|
|
#define ___INVERTER_H
|
|
|
|
#include <string>
|
|
#include <thread>
|
|
#include <mutex>
|
|
|
|
using namespace std;
|
|
|
|
class cInverter {
|
|
unsigned char buf[1024]; //internal work buffer
|
|
|
|
char warnings[1024];
|
|
char status1[1024];
|
|
char status2[1024];
|
|
char mode;
|
|
|
|
std::string device;
|
|
std::mutex m;
|
|
|
|
// Buffer sizes for different commands
|
|
int buf_qpiri;
|
|
int buf_qpiws;
|
|
int buf_qmod;
|
|
int buf_qpigs;
|
|
|
|
void SetMode(char newmode);
|
|
bool CheckCRC(unsigned char *buff, int len);
|
|
bool query(const char *cmd, int replysize);
|
|
int query_auto(const char *cmd, int max_size);
|
|
uint16_t cal_crc_half(uint8_t *pin, uint8_t len);
|
|
|
|
public:
|
|
cInverter(std::string devicename, int qpiri, int qpiws, int qmod, int qpigs);
|
|
void poll();
|
|
void runMultiThread() {
|
|
std::thread t1(&cInverter::poll, this);
|
|
t1.detach();
|
|
}
|
|
|
|
string *GetQpiriStatus();
|
|
string *GetQpigsStatus();
|
|
string *GetWarnings();
|
|
|
|
int GetMode();
|
|
void ExecuteCmd(const std::string cmd);
|
|
void AutoDiscoverBufferSizes();
|
|
};
|
|
|
|
#endif // ___INVERTER_H
|