Script correzione temperatura valvole: funziona!

12346

Commenti

  • Jacopo2
    Jacopo2 ✭✭✭

    Ovviamente per i problemi descritti sopra (durata batterie e rumore), non si può aggiornare costantemente l'offset e quindi, aspettando troppo tempo fra un'update e l'altro, la valvola vedrà dei picchi o salti improvvisi di temperatura che mal si sposano con il controllore PID (sempre comunque meglio di niente)

    In realtà c'è anche un altro fattore che limita la frequenza degli aggiornamenti, ovvero il tempo che la valvola impiega ad aggiornare l'offset, che è nell'ordine di un paio di minuti (per qualche motivo l'offset e la temperatura corretta della valvola non si aggiornano nello stesso istante sul server)

  • In realtà c'è un altro problema, dovuto ad un bug di tado, che non permette di usare la funzione di rilevamento finestre aperte.

    Quando si imposta un offset più basso di un grado l'impianto crede che si sia abbassata velocemente la temperatura e, invece di aprire di più, chiude tutta la valvola !

  • Jacopo2
    Jacopo2 ✭✭✭

    ah ok, io la funzione rilevamento finestra aperta l'ho disattivata dappertutto, è inutile

    quando voglio ventilare devo assicurarmi che il radiatore sia freddo, quindi di certo non apro la finestra radiatore caldo; i 15 minuti di spegnimento predefinito danno giusto il tempo al radiatore di disperdere il calore verso l'esterno e poi si riaccende (magari essendosi dimenticati la finestra aperta)

  • Concettualmente corretto ma nella realtà poco praticabile se di giorno non c'è nessuno a casa.

    Poter chiudere le valvole a calorifero acceso è un aiuto, nulla di più nulla di meno, perchè perderlo ?

  • Ciao a tutti,

    ho letto con molto interesse questo thread, visto che anche io stavo cercando una maniera per regolare l'offset delle valvole tado. Ho provato ad integrare lo script che avete condiviso, ma ho due problemi/dubbi:

    * non ho capito dove trovo la zona, definita come numero, sull'app Tado. Le zone sono definite con dei nomi: cucina, camera, ecc.

    * eseguendo comunque lo script in hassioOs 4.13 versione 0.116.3 su raspberry 3b, su log ottengo sempre

    2020-10-16 10:40:14 ERROR (SyncWorker_4) [homeassistant.components.command_line] Command failed: python3 /config/Tado_script.py

    2020-10-16 10:40:14 WARNING (SyncWorker_4) [homeassistant.components.command_line.sensor] Empty reply found when expecting JSON data


    In configuration.yaml ho inserito:

    e lo script è questo

    qualcuno mi. può aiutare?

    Grazie

    Alberto

  • Jacopo2
    Jacopo2 ✭✭✭

    Ciao,

    sono l'autore dello script; il numero della zona lo puoi verificare da qua


    cliccando su una stanza e guardando la barra degli indirizzi del browser

    Guarda se così funziona

  • Ciao Jacopo, grazie. Non avevo proprio notato che la zona fosse indicata lì. Adesso lo script funziona direi correttamente, e mi viene restituito il valore di offset con lo storico, soltanto che sul log mi restituisce sempre
    2020-10-16 16:38:49 ERROR (SyncWorker_12) [homeassistant.components.command_line] Command failed: python3 /config/Tado_script.py
    2020-10-16 16:38:49 WARNING (SyncWorker_12) [homeassistant.components.command_line.sensor] Empty reply found when expecting JSON data

    Stó sbagliando qualcosa?
  • Ciao, credo di avere risolto il problema precedente. Dalla riga
    "command: python3 /config/Tado_script.py" ho tolto il "/config/" e adesso non restituisce più errore.
    Ho però qualche domanda:
    - come configuro un'altra zona con un'altra valvola? Devo replicare lo script e creare un nuovo sensor su configuration.yaml? Leggevo nel thread che qualcuno ha avuto problemi di "mescolamento" di dati.
    - lo script come si comporta se all'interno della zona c'è più di una valvola? O come nel mio caso, una valvola e un termostato aggiuntivo? Ho notato che l'offset viene impostato solo sul termostato (che avevo scollegato da misuratore di temperatura dall'app Tado).
    - come faccio ad avere restituita dallo script la temperatura della valvola per poterla tracciare?

    Grazie.
  • Ciao @albi anche io ottengo un errore come il tuo anche se lo script funziona perfettamente... io non ho "/config/" nel percorso ma "/home/homeassistant/.homeassistant/" dal momento che ho un installazione core su raspbian (e ci ho messo un po' a capirlo all'inizio, lo scrivo servisse mai a qualcuno), in ogni caso proverò a seguire il tuo consiglio anche se non capisco... quel percorso deve interpretarlo correttamente sennò non troverebbe lo script da eseguire!
    Magari qualcuno ci spiega!?

    PS se hai una valvola e un termostato lo script non serve, imposti tado per fare riferimento alla temperatura del termostato e sei a posto. Se hai più di una valvola non saprei...
  • La temperatura della valvola invece perché non la vedi da HA?
  • Ciao EmilioOo, per il discorso del percorso /config può essere dovuto al fatto che il file configuration.yaml sia già sotto la cartella config e non ci sia bisogno di indicarla.
    Il termostato l'avevo comprato l'anno scorso proprio per risolvere il problema della temperatura sulla valvola e adesso l'ho scollegata per provare lo script di @Jacopo2.
    La temperatura della valvola non la vedo perché non ho integrato la valvola in home assistant, ma stó provando a gestire tramite lo script, e vorrei avere dal di lì il monitoraggio della temperatura.
  • Ciao @albi ho provato e a me la tua soluzione non funziona...

    Se tolgo il percorso dal nome dello script ottengo gli stessi errori di prima:

    ott 18 14:57:27 raspberryPi hass[8642]: 2020-10-18 14:57:27 ERROR (SyncWorker_17) [homeassistant.components.command_line] Timeout for command: python3 /home/homeassistant/.homeassistant/Tado_script_cucina.py

    ott 18 14:57:27 raspberryPi hass[8642]: 2020-10-18 14:57:27 WARNING (SyncWorker_17) [homeassistant.components.command_line.sensor] Empty reply found when expecting JSON data

    Ma preceduti da:

    ott 18 15:17:58 raspberryPi hass[8805]: python3: can't open file 'Tado_script_cucina.py': [Errno 2] No such file or directory

  • Jacopo2
    Jacopo2 ✭✭✭
    modificato ottobre 2020

    @albi, lo script funziona solo se c'è una valvola per zona

    il motivo è che il numero che gli dai è il numero della zona, ma per cambiare l'offset ha bisogno del numero di serie del dispositivo, quello che inizia con VA*******

    essendo più semplice trovare il numero della zona (almeno per me) ed avendo un solo un dispositivo per stanza, ho deciso di far cercare allo script il numero di serie del dispositivo, ma non ho testato come si comporta quando c'è più di un dispositivo per zona


    Puoi provare a sostituire questa linea di codice

    SERIAL = ZONES[index].get("devices")[0].get("serialNo")

    con

    SERIAL = VA**

    (usando il numero di serie del dispositivo)


    Ovviamente ciò ha senso solo se hai più di un radiatore per stanza, altrimenti se hai già un altro dispositivo Tado adibito alla sola misura (una valvola disconnessa o un termostato) il mio script non ha senso di esistere


    **

    Per rispondere all'altra domanda, devi creare uno script (file py) per ogni stanza, ovviamente con nome diverso e cambiando il numero della zona e il sensore di riferimento

    Devi anche aggiungere un nuovo command line sensor in configuration.yaml

    Nel mio caso non serve togliere il /config da qua

      command: 'python3 /config/Tado_Camera1.py'

  • Ciao @Jacopo2 ok, allora lo script gestisce una valvola per zona. Il termostato che ho nel sistema adesso lo spengo per sostituirlo con la nuova gestione del tuo script.
    Mi rimane ancora a il dubbio di come ottenere dallo script la temperatura della valvola per poterla tracciare su Hassio.
    Alberto
  • Jacopo2
    Jacopo2 ✭✭✭
    Hai l’integrazione di Tado per HA?
    Usando il mio script la temperatura della valvola viene modificata dall’offset, quindi non vedi quella reale; dovresti sottrargli l’offset
  • Si giusto, la temperatura viene modificata dall'offset. Ora ho configurato l'integrazione con Tado e prendo da lì la temperatura. Il fatto di prenderla dallo script è più che altro la curiosità di capire come funziona lo script stesso. Complimenti ancora per il tuo lavoro.

  • Jacopo2
    Jacopo2 ✭✭✭

    Quello che ti consiglio di fare per vedere come/se funziona è plottare la temperatura del tuo sensore e quella di Tado; dovresti vedere che il tuo sensore ha un andamento molto lineare e dovrebbe raggiungere la temperatura target per poi piano piano appiattirsi; quella di Tado dovrebbe sovrapporsi all'altra e seguirlo con qualche salto in qua e là (dovuto al repentino cambio di offset)

  • @Jacopo2
    Potresti condividere nuovamente lo script ho lo stesso problema con le teste tadoo ed anche io avevo comprato un sonoff th10 per questo scopo, ma non conoscendo py mi ero fermato, con una base penso di cavarmela oggi intanto flash il th10 con tassata l ambiente ha e già pronto
    Grazie a tutti
  • Jacopo2
    Jacopo2 ✭✭✭
    modificato ottobre 2020

    Questo è quello che sto usando


  • Grazie questa sera il flash il th 10 ed inizio a studiare
  • Ciao @Jacopo2 si in effetti il grafico delle due temperature è come l'hai descritto te. Adesso queste benedette valvole funzionano un po' meglio 😊
  • Dopo aver risolto vari problemini banali (v. oltre) finalmente ho tutto funzionante, ma il sistema è instabile e dopo un po' di ore di funzionamento (mediamente meno di una giornata) mi si ripresentano i seguenti errori:

    ott 25 21:07:41 raspberryPi hass[6856]: 2020-10-25 21:07:41 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.tadooffset_cucina is taking over 10 seconds

    ott 25 21:07:46 raspberryPi hass[6856]: 2020-10-25 21:07:46 ERROR (SyncWorker_1) [homeassistant.components.command_line] Timeout for command: python3 /home/homeassistant/.homeassistant/Tado_script_cucina.py

    ott 25 21:07:47 raspberryPi hass[6856]: 2020-10-25 21:07:46 WARNING (SyncWorker_1) [homeassistant.components.command_line.sensor] Empty reply found when expecting JSON data

    ott 25 21:08:18 raspberryPi hass[6856]: Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>

    ott 25 21:08:18 raspberryPi hass[6856]: BrokenPipeError: [Errno 32] Broken pipe

    NB: il warning dell' "over 10 seconds" lo ho sempre anche quando tutto funziona.

    Come si vede da questi grafici, anche quando dà questi errori la correzione dell'offset della valvola sembra avvenga (anche se forse un po' in ritardo, l'offset massimo è impostato a 0.5 ma sembra sforare un po'), quello che non viene aggiornato è il sensore TadoOffset (NB alle 21.15 ho poi riavviato. Altra nota, come riferimento ho preso il termostato in ingresso che comunque è vicinissimo alla cucina, non ho ancora scelto i sensori wireless da adottare).

    Infatti con un riavvio di HA apparentemente si risolve tutto, ma il problema si ripresenterà puntualmente. Configurazione: HA core su raspbian, Python 3.8.6 appena aggiornato (ma con 3.7 stessi problemi). Rasperry PI piuttosto datato (Raspberry Pi Model B+ del 2015).

    Qualche idea di quale possa essere la causa? Grazie!


    ----

    Un breve resoconto dei problemini banali che ho risolto per arrivare fin qui, casomai fosse di aiuto a qualcun altro alle prime armi.

    1) La directory "config" citata nello script di @Jacopo2 è la cartella dove sta il file configuration.yaml quindi varia a seconda dell'installazione che avete, io ad esempio ho /home/homeassistant/.homeassistant/

    2) Gli errori riscontrati da @albi (v. messaggi sopra) nel mio caso si sono risolti cambiando l'owner e il gruppo dello script con il comando sudo chown homeassistant:homeassistant Tado_script_cucina.py Notare che con HA 0.115.x nonostante gli errori lo script funzionava, con HA 0.116.x l'errore invece impediva il funzionamento

    3) Dopo aver effettuato l'aggiornamento a Python 3.8 (seguendo questa guida), lo script non funzionava più (errore: ImportError: No module named requests) e per risolvere è bastato installare il modulo mancante con sudo pip3 install requests).

  • Buongiorno a tutti

    dopo un po di problemi sono riuscito a far funzionare il fantastico script di @Jacopo2

    che ringrazio nuovamente per la condivisione.

    Lo sto tenendo in test ... ma avendo un impianto centralizzato fino a quando non accendono non ne vedrò effettivamente i benefici.

    Un consiglio per chi vuole implementarlo non usate homme assistant installato su pyton windows è impossibile fargli eseguire lo script almeno sulla mia installazione è stato cosi ...

    HA non riconosce il percorso anche avendo impostato correttamente le variabili di ambiente e le permission sul file.

    Alcune idee che vorrei provare che ne pensate ?

    1) nel caso il termometro delle valvole sia tarato nel mio caso ho 4 valvole sono tutte + o - tarate un delta di + 0.5 C° tra tado e AM2301 su sonoff Tasmota. Lo script risulta inutile con i riscaldamenti spenti quindi vorrei realizzare un trigger condizionale del genere

    se il sensore tado power è on e se il delta è maggiore di 0.5 esegui lo script lo script.

    Quest'ultimo potrebbe anche essere semplificato passandogli come variabile di input il delta evitando di fatto di dover interrogare il sensore termometro tasmota e tado temp e limitandosi solo al get/set dell'offset sulle api di tado.

    il config per il sensore delta è così

    - platform: template

      sensors:

       soggiorno_delta_t:

        unique_id: "soggiorno_delta_t"

        unit_of_measurement: "°C"

        value_template: >-

         {% set th10 = states.sensor.temp_soggiorno.state | float %}

         {% set tado = states.sensor.soggiorno_temperature.state | float %}

         {{ (tado - th10) }}


    Attendo vostri commenti

    grazie buona giornata.

    Senzatempo

    P.S Per @EmilioOo 

    prova ad aggiungere allo script di@Jacopo2 un file di log in modo da capire dove hai il problema se sull'interrogazione ad home assitant o vesro tado , inoltre se già non lo hai aggiungi al sensore tasmota un interrogazione MQTT LWT per avere lo stato su HA

    aggiungendo queste due righe alla config del sensore

    - platform: mqtt

      name: "Temp. Soggiorno"

      unique_id: "DC:4F:22:43:9D:02_T"

      state_topic: "tele/tasmota_439D02/SENSOR"

      unit_of_measurement: "°C"

      value_template: "{{ value_json['AM2301'].Temperature }}"

      availability_topic: "tele/tasmota_439D02/LWT"

      payload_available: "Online"

      payload_not_available: "Offline"


    Per il file di log dello script puoi aggiungere

    queste righe in alto dopo l'import della classe request

    import logging

    logger = logging.getLogger('tado_auto_offset_soggiorno')

    hdlr = logging.FileHandler('tado_auto_offset_soggiorno.log')

    formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')

    hdlr.setFormatter(formatter)

    logger.addHandler(hdlr) 

    logger.setLevel(logging.INFO)


    ed alla fine queste

    if info == 'Error':

    logger.error(json_dump)

    else :

    logger.info(json_dump)

  • Ciao Jacopo,

    sto utilizzando il tuo validissimo script su home assistant (versione Hassio) per la regolazione dell’offset delle valvole e fino ad ora, senza l’installazione dell’add’on DUCKDNS, tutto funziona alla grande. I problemi sorgono quando installo l’addon sopracitato perché, se l’addon funziona perfettamente e riesco a collegarmi dal cellulare senza alcun problema, a questo punto lo script non funziona più. Ho provato a vedere sui siti che trattano di home assistant se esiste qualche altro parametro da impostare ma non ho trovato nulla.

    Gentilmente tu avresti qualche suggerimento da potermi dare?

    Ti ringrazio anticipatamente per quello che potrai fare.

    graffio

  • Ciao Jacopo,

    sto provando ad usare il tuo script con HASSIO, ma ricevo sempre gli errori che qualcuno ha già segnalato

    • Command failed: python3 /config/Tado_script_Camera.py
    • Empty reply found when expecting JSON data

    Ho provato già a togliere /config, e settare i permessi a 755, ma non funziona lo stesso..

    Sai aiutarmi? grazie

  • intanto, buon anno a tutti.

    sono nuovo della questione Tado e dai post immagino (ma ho anche già visto dai tracciati di Home Assistant) che avrò problemi con 2 degli 8 radiatori che ho installato. Prima di infilarmi nella programmazione di cui non ho grossa pratica volevo capire qualcosa di più,

    Ho guardato lo script di @Jacopo2 e ovviamente è risolutivo, ma non ho sensori aggiuntivi ora sottomano e per far qualche prova finchè sono in ferie mi chiedevo se gentilmente potevo avere lo script senza sensori esterni che qualche pagina fa jacopo aveva proposto.

    per integrarlo ecc penso di potercela fare, comunque mi auguro di poter contare su di voi!

    Grazie

    Roby

  • Ciao @Dughy ,

    al solo fine di fare qualche prova di funzionamento dello script, puoi utilizzare come sensore di riferimento quello integrato in un altra testa tado (in questo modo imponi ad una testa di rilevare la stessa temperatura misurata da un'altra, o dal termostato... io ho fatto così per provare).

    Buon anno a tutti!!! 😀

  • si quello lo avevo valutato, e in effetti sarebbe una soluzione temporanea per capire il funzionamento, ma la soluzione senza sensori potrebbe essere sufficiente per gestire tutto il sistema che deve essere il più invisibile possibile vista la totale reticenza della mia compagna ad accocchi elettronici che girano per casa (ho il router principale nascosto in un armadio e il secondario dietro una tenda...

  • Jacopo2
    Jacopo2 ✭✭✭
    @Dughy, ho abbandonato l’idea del farlo senza sensore perché si complicava inutilmente
  • ah benissimo! l'idea era di creare una rampa per cambiare di default l'offeset e di utizzare qualche giorno di monitoraggio per capire come inserire i dati, ma dubito di riuscire a programmare la cosa da solo.

    ho pensato di poter partire dal tuo script ragionando sul modificare la parte in cui richiedi i Dati al sensore e li invii... ma non so se sono in grado.

    innanzitutto dovrei riuscire a capire come sapere quando la valvola è in funzione e soprattuto di quanto, perchè ovvio che la partenza della mattina sarà diversa da quando modula e quindi ci vorrebbero delle rampe diverse in base alla temperatura di partenza e all'apertura della valvola che ho visto si può leggere in percentuale