muchasuerte / ha-besmart

Home-Assistant Support for Riello's Besmart thermostats.
MIT License
13 stars 6 forks source link

Info aggiuntive #3

Open PaulusThe1 opened 2 years ago

PaulusThe1 commented 2 years ago

Ciao, Andrea. Sto usando il tuo progetto (fantastico) per gestire su HomeAssistant il mio termostato BeSmart. due info: 1) vorrei monitorare quante ore è acceso il riscaldamento. Sto usando un nuovo sensore derivato da climate ma mi serve sapere quale stato assume il"climate" quando la caldaia è accesa. 2) si può monitorare lo stato della batteria del termostato?

Grazie mille e complimenti per il progetto

faxbio commented 2 years ago

Ciao, io per monitorare quel che chiedi tu ho impostato un sensore template basato sull hvac_action che diventa "heating" quando la caldaia e' accesa (in realta' io ho 2 termostati quindi lo verifico su entrambi) hvac_flame: value_template: > {% if is_state_attr('climate.besmart_casa_nuova', 'hvac_action', 'heating') %} on {% elif is_state_attr('climate.besmart_casa_vecchia', 'hvac_action', 'heating') %} on {% else %} off {% endif %} friendly_name: Caldaia Accesa

per il punto 2 ho appena sottomesso qui ad Andrea (che ringrazio anche io per il progetto) la richiesta di merge per il codice modificato perche' l'attuale non estrae lo status della batteria. se dovesse tardare il merge puoi copiare la modifica e mettertela su, e' solo 1 riga di codice.

muchasuerte commented 2 years ago

Ciao,

@faxbio grazie per la modifica l'ho appena approvata.

@PaulusThe1 per monitorare l'accensione uso un binary_sensor.heating ed uso un "Grafico Storico" per verificare quando è acceso, forse quello della batteria dovrei rivederlo a seguito della modifica integrata.

binary_sensor:
  - platform: template
    sensors:
      heating:
        friendly_name: "Heating"
        value_template: "{{ state_attr('climate.besmart_thermostat', 'hvac_action') == 'heating' }}"
      cooling:
        friendly_name: "Cooling"
        value_template: "{{ state_attr('climate.besmart_thermostat', 'hvac_action') == 'cooling' }}"
      thermostat_status:
        friendly_name: "Thermostat status"
        value_template: "{{ state_attr('climate.besmart_thermostat', 'heating_state') == true }}"
      battery_state:
        friendly_name: "battery state"
        device_class: battery
        value_template: "{{ state_attr('climate.besmart_thermostat', 'battery_state') == '1' }}"
        icon_template: mdi:battery
PaulusThe1 commented 2 years ago

Grazie Andrea. Lo stato della batteria adesso sembra funzionare (mi riporta lo stato "Normal" per il momento e infatti non c'è il simbolo di batterie scariche sul termostato). Ottimo anche il suggerimento per calcolare le ore di funzionamento. Ho creato un contatore orario che mi legge la durata del giorno precedente. Ora creo la continuous query su influxdB e dovrei avere la statistica giornaliera. Ancora complimenti e grazie per la pronta risposta.

PaulusThe1 commented 2 years ago

Ciao Andrea. Una nuova info: ultimamente sta capitando spesso che il server BeSmart non è raggiungibile. E' arrivata anche una mail ufficiale della Riello in merito che dice che ci saranno spesso interruzioni del servizio da remoto. Ora mi chiedevo: non è possibile interrogare il BeSmart direttamente dalla LAN (visto che HA e termostato stanno ovviamente sulla stessa rete) senza passare per il loro server, in modo da poterlo pilotare da remoto via HA e quindi risolvendo automaticamente il problema dei loro server? Grazie mille per la tua disponibilità

muchasuerte commented 2 years ago

@PaulusThe1 , ci ho provato ma la comunicazione tra il termostato ed il gateway della Riello non è in WIFI classico.

Ho sniffato il traffico del boxettino per capire cosa facesse per recuperare i dati ma non ci sono riuscito, ho scoperto altre cose ma nulla di rilevante, credo che usi un protocollo AT stile vecchi modem o cellulari.

il nostro Gateway è un Model HRT-101D (Radio frequency 868MHz or 433MHz) , http://www.szacs.com/doce/product-detail-95.html

faxbio commented 2 years ago

Il server è poco affidabile, ma prima d'ora mai era stato offline così a lungo. È da venerdì ormai.

In un gruppo di supporto della vokera, in gran Bretagna, vociferano di una remota possibilità che questo fermo più lungo possa essere dovuto ad un cambio di infrastruttura (volesse il cielo...) ma tenete presente che è un gruppo di idraulici/caldaisti che di informatica ne sanno ben poco... Però pare che qualche cliente Riello abbia ricevuto una mail che annunciava un fermo. Io non ho ricevuto nulla.

Personalmente propendo più verso la possibilità che sia andato in sofferenza a causa della vulnerabilità Log4J... Tenete presente che facendo qualche tentativo in passato ho riscontrato che una volta autenticati tramite token puoi inviare la richiesta e ottenere le informazioni di qualunque termostato (non solo il tuo) basta mettere il codice identificativo. È vero, nn è banale ma basta fare uno script che reiteri le poche possibilità....

Non che sia un grossissimo problema ma la dice lunga sulla poca attenzione alla sicurezza di questo sistema...

Speriamo bene.

Io ho un impianto un po' complesso e ho dovuto gestire le multiple valvole di zona integrando in ha le aperture leggendo lo stato dei termostati grazie a questa integrazione di Andrea. Ora che non posso fidarmi del cloud riello/besmart ho modificato i termostati mettendo un sensore zigbee sul contatto pulito TA in modo da trasmettere l'apertura delle valvole.

Un po' macchinoso ma efficace anche se il cloud va giù...

Il lun 20 dic 2021, 23:33 Andrea Nicotra @.***> ha scritto:

@PaulusThe1 https://github.com/PaulusThe1 , ci ho provato ma la comunicazione tra il termostato ed il gateway della Riello non è in WIFI classico.

Ho sniffato il traffico del boxettino per capire cosa facesse per recuperare i dati ma non ci sono riuscito, ho scoperto altre cose ma nulla di rilevante, credo che usi un protocollo AT stile vecchi modem o cellulari.

il nostro Gateway è un Model HRT-101D (Radio frequency 868MHz or 433MHz) , http://www.szacs.com/doce/product-detail-89.html

— Reply to this email directly, view it on GitHub https://github.com/muchasuerte/ha-besmart/issues/3#issuecomment-998320609, or unsubscribe https://github.com/notifications/unsubscribe-auth/AKH56456MQCEAANLNBJTJ3TUR6VMXANCNFSM5FPY7M6A . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you were mentioned.Message ID: @.***>

PaulusThe1 commented 2 years ago

A me è arrivata una mail a fine ottobre della Riello che avvisava di possibili disservizi nei prossimi mesi. Ora è da venerdì che non funziona più, l'app risponde "Network busy" o se entra, non vede il termostato connesso, anche se nella mia rete LAN il termostato è presente (risponde al ping). Ecco perché poteva essere utile bypassare il loro server e dialogare nella LAN. Ma qui ci vuole Andrea che è esperto :-)

muchasuerte commented 2 years ago

per fortuna non trattano dati sensibili perché a livello di sicurezza sono carenti considera che le chiamate al Cloud sono in chiaro ma alla fine si tratta di un termostato.

In passato ho sniffato il traffico verso il boxettino ma non sono riuscito ad ottenere molto ho scaricato il firmware ma va oltre le mie capacità tecniche.

PaulusThe1 commented 2 years ago

Ma figurati Andrea. Anzi, grazie per il tuo progetto. Io avevo anche sistemato lo storico del riscaldamento (continuousquery su Influxdb e grafico giornaliero delle ore di accensione su Grafana). Speriamo che sia vera la voce di @faxbio, che stanno fermi perché stanno progettando i loro server...

PaulusThe1 commented 2 years ago

Da ieri pomeriggio il servizio è ripristinato. Speriamo che duri :-)

faxbio commented 2 years ago

Così, tanto per fare qualche ragionamento.. Se effettivamente la comunicazione è tutta in chiaro forse forse potremmo immaginarvi un qualcosa tipo man in the middle (a fin di bene per una volta), non possiamo modificare i puntamenti al server dello scatolotto, ma potremmo modificare i dns locali e faggiungere un nostro server in LAN. A quel punto con tanto tanto lavoro per mappare le comunicazioni (e buona parte la ha già fatta muchasuerte) potremmo scriverci il webservice locale e staccarci dal cloud. A parte il lavorone (che se davvero migrano sui server Carrier Group non dovrebbe aver più grande senso), resta il dubbio su come gestire gli eventuali certificati ssl per far riconoscere il server... È una connessione https giusto?

Il mer 22 dic 2021, 10:19 PaulusThe1 @.***> ha scritto:

Da ieri pomeriggio il servizio è ripristinato. Speriamo che duri :-)

— Reply to this email directly, view it on GitHub https://github.com/muchasuerte/ha-besmart/issues/3#issuecomment-999416114, or unsubscribe https://github.com/notifications/unsubscribe-auth/AKH5647E6HGPVHW6NQKSNJLUSGJYVANCNFSM5FPY7M6A . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you were mentioned.Message ID: @.***>

muchasuerte commented 2 years ago

no dall'app android o la mia al Cloud è tutto in chiaro forse da Cloud al boxettino sarà cifrato o cmq usando un protocollo binario, già provato a tracciare il traffico tra Cloud e box ma non sono riuscito a capire come funziona

dodamerenda commented 2 years ago

salve! assolutamente neofita ... ho un termostato ricloud e un Gateway HRT-101D (Radio frequency 868MHz or 433MHz)... vorrei integrarlo in home assistant .. come mi consigliate di procedere ? qualche indicazione basica su come installare corettamente ha-besmart e come configurarla? grazie

sbusceti commented 2 years ago

Ciao ragazzi, innanzi tutto vorrei fare i complimenti a muchasuerte per l'ottimo plugin che permette l'integrazione del termostato besmart in home assistant. Sono un programmatore mobile android e mi piace smanettare con la domotica; come voi mi sono quindi imbattutto in questo sistema della riello/beretta/vokera e da subito ho notato parecchia instabilità nel loro cloud (per non parlare dell'app che è davvero carente sotto ogni punto di vista). Detto questo, trovo il sistema molto interessante perchè, a differenza dei più blasonati termostati smart che fanno affidamento a non sò quali algoritmi segreti, questo della riello permette una gestione a 360 gradi della caldaia, anche da remoto (quando funziona...). Purtroppo come avete già evidenziato, le api sono in chiaro e il sistema è spesso down. Ho fatto alcune indagini e ho scoperto quanto segue:

  1. le api rispondono anche in https (https://api.besmart-home.com), potreste quindi modificare i puntamenti del plugin per utilizzare il traffico cifrato; anche se comunque il wifibox e l'app continuerebbero a trasmettere in chiaro
  2. il wifibox comunica in radiofrequenza 868mhz con il termostato
  3. il wifibox utilizza il chip wifi HF-LPB100; ho scaricato firmware e ho estratto la password della webpage. All'interno dell'interfaccia web è possibile configurare la rete wifi e poco altro; non ci sono comandi specifici del termostato/caldaia.
  4. ho analizzato il traffico di rete del wifibox e ho scoperto che viene instaurata una connessione TCP con scambio di messaggi tramite la funzione pushMsg; sto cercando di decifrare il protocollo ma non è semplice perchè bisogna fare reverse engineering di tutti i messaggi che transitano tra i device.
  5. il wifibox dispone di un interfaccia seriale, magari proverò a saldare dei pin e connettermi col pc; sempre dal dump del firmware ho estratto una serie di comandi AT che vengono accettati; purtroppo però non vi è traccia dei comandi utilizzati per comandare il sistema, se non il pushMsg e una funzione scritta in php che chiama una pagina web per ottenere la temperatura esterna.

la mia idea è quella di fare un reverse engineering completo del sistema per poi replicarlo su un server locale, far puntare il wifibox a questo server e sganciarmi completamente dai server riello. L'altra possibilità sarebbe quella di saldare un esp8266 sui piedini seriali del termostato e comunicare tramite quello, sbarazzandosi del tutto del wifibox. Altra possibile soluzione sarebbe quella di scrivere un firmware personalizzato da caricare sul wifibox.

Purtroppo non sono in grado di fare tutto da solo, in quanto mi occupo principalmente di app android; quindi non ho molta esperienza su firmware. Possiamo però provare assieme a trovare una soluzione; oppure dite che si fa prima a buttare il termostato e comprarne un'altro?? :D

muchasuerte commented 1 year ago

@sbusceti ho fatto il tuo stesso tipo di verifiche alla fine ho usato le API cloud

sei sicuro che usano RF 868mhz per parlare con il wifibox? il box e' come https://www.ephcontrols.com/section/gateway/ o http://www.szacs.com/doce/product-detail-89.html 'Model HRT-101D'

mi chiedevo se usando un Sonoff RF433MHz bridge fosse possibile sostituire il wifibox, immagino una qualche comunicazione seriale tra wifibox e termostato.

tempo fa navigando sul sito vokera avevo trovato un file zip con del codice php forse delle API, l'avevo scaricato ma non avevo trovato nulla di utile , questa sera provo a guardare se ne ho tenuto una copia

muchasuerte commented 1 year ago

c'e' una document per visualizzare informazioni di log da HF-LPB100 http://docs.gizwits.com/en-us/DeviceDev/Debug/DebugLog.html ma non vorrei compromettere il dispositivo fino a che funziona anche se non benissimo

l'SDK di HF-LPB100 lo trovate qui http://www.hi-flying.com/download-center-1/software-development-kit-1/download-item-lpb100-lpt100-lpt200-lpb100u-lpb105-sdk

sbusceti commented 1 year ago

Buonasera, ho fatto altre verifiche e posso confermare quanto segue:

  1. il wifibox dialoga in radiofrequenza col termostato (potete verificarlo guardando sul retro del termostato oppure sulla scatola; troverete la dicitura "866mhz")
  2. ho analizzato il firmware del wifibox e ho scoperto che si connette in tcp/udp a un server cinese che ha come nome host cloudwarm.net; qui viene utilizzato un protocollo proprietario, allora ho sniffato i pacchetti e ho scoperto, cercando sul web, che qualcuno ha già effettuato il reverse engineering del protocollo; anche se purtroppo non è ancora completo e soprattutto il device che hanno utilizzato è leggermente diverso dal nostro wifibox, però il protocollo è identico (ho confrontato header e trailer di tutti i pacchetti udp e sono identici!)

Come dicevo sopra, dall'interfaccia web non ci sono funzionalità specifiche della caldaia/termostato; però si può cambiare il server delle API, settare il wifi ecc.. (anche se non sono riuscito a salvare le modifiche, come se il filesystem fosse readonly...)

  1. Ho trovato anche io i file zip con i sorgenti php delle API besmart, purtroppo però questi sorgenti sono solamente riferiti alla parte di invio notifiche push alle app mobile; tutte le logiche di gestione caldaia/termostato sono gestite tramite il protocollo di cloudwarm.

A questo punto potremmo, partendo dall'ottimo lavoro di reverse engineering trovato in rete, scrivere un server che implementa il protocollo e sostituire i puntamenti all'interno del wifibox.

questi i riferimenti al lavoro di reverse-engineering: https://github.com/rjpearce/timeguard-supplymaster/issues/1 https://gist.github.com/andrey-yantsen/0e1e18748f5e2f4c0a21a847c6cb38f6 https://github.com/andrey-yantsen/timeguard-mqtt

sbusceti commented 1 year ago

c'e' una document per visualizzare informazioni di log da HF-LPB100 http://docs.gizwits.com/en-us/DeviceDev/Debug/DebugLog.html ma non vorrei compromettere il dispositivo fino a che funziona anche se non benissimo

l'SDK di HF-LPB100 lo trovate qui http://www.hi-flying.com/download-center-1/software-development-kit-1/download-item-lpb100-lpt100-lpt200-lpb100u-lpb105-sdk

ottimo! molto interessante, grazie :)

valeriodipro commented 8 months ago

Hi, great job everyone, how can you solve the server problem? many times it is not reachable

muchasuerte commented 8 months ago

Unfortunately the server issues is something that none here in that thread can manage.

I'm not maintaining anymore this client.

Il Mar 28 Nov 2023, 15:24 valeriodipro @.***> ha scritto:

Hi, great job everyone, how can you solve the server problem? many times it is not reachable

— Reply to this email directly, view it on GitHub https://github.com/muchasuerte/ha-besmart/issues/3#issuecomment-1829944565, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALTEWDTVCMTQOGO5SY5GQTYGXXY5AVCNFSM5FPY7M6KU5DIOJSWCZC7NNSXTN2JONZXKZKDN5WW2ZLOOQ5TCOBSHE4TINBVGY2Q . You are receiving this because you commented.Message ID: @.***>