Fatti:
A.
Nel 2007 la ditta B._SA ha presentato un'offerta di fr. 71'338.80 per l'impianto sanitario e una di fr. 66'389.20 per l'impianto di riscaldamento della casa che A._ stava facendo costruire a Brione sopra Minusio. A._ ha in seguito deciso, per motivi di risparmio energetico, di modificare l'impianto integrandolo con un sistema denominato xxx della ditta C._SA. La B._SA ha quindi allestito un'offerta supplementare di fr. 25'739.-- e nel 2008 ha realizzato l'opera.
Dopo avere preso possesso della casa A._ ha costatato due ordini di difetti: d'un canto aprendo i rubinetti dell'acqua fredda fuoriusciva prima acqua calda per parecchi minuti; d'altro canto l'acqua calda non raggiungeva mai una temperatura sufficiente per riscaldare adeguatamente la vasca da bagno e la piscina. Ne sono seguiti segnalazioni, sopralluoghi e interventi, dei quali si dirà nella misura necessaria.
Nell'ottobre 2012 l'assicuratore di responsabilità civile della B._SA ha riconosciuto a A._ un risarcimento complessivo di fr. 78'918.-- come liquidazione di tutte le pretese in relazione con il difetto della " commistione " acqua calda/acqua fredda.
B.
Con petizione del 25 novembre 2013 A._ ha avviato una causa davanti alla Pretura di Locarno-Campagna chiedendo che la B._SA fosse condannata a risarcirgli la somma di almeno fr. 30'000.-- per il minor valore dell'opera dipendente dalla produzione insufficiente di acqua calda, difetto ch'egli riconduceva al sottodimensionamento dell'impianto. La convenuta si è opposta all'azione, in particolare contestando che alla controversia si applicassero le norme del mandato ed eccependo la tardività della segnalazione del difetto.
Dopo il secondo scambio di allegati, l'assunzione di alcune prove e la raccolta delle domande peritali, con decisione del 7 gennaio 2016 il Pretore aggiunto ha limitato la procedura " all'eccezione d'intempestiva notifica del preteso difetto ed alla questione della responsabilità della convenuta quale asserita mandataria ". Il reclamo presentato dall'attore contro questa decisione è stato dichiarato inammissibile il 29 marzo 2016 dalla III Camera civile del Tribunale di appello ticinese, la quale aveva ritenuto che non vi fosse rischio di pregiudizio difficilmente riparabile nel senso dell'art. 319 lett. b n. 2 CPC.
C.
Al termine dell'istruzione, limitata nel modo anzidetto, le parti hanno presentato i rispettivi memoriali conclusivi. L'attore ha chiesto che fosse accertata la responsabilità della convenuta per il " difetto di ritardata/ insufficiente erogazione d'acqua calda " e che fossero respinte " l'eccezione di perenzione (tardività della segnalazione del difetto) (...) e di prescrizione "; la convenuta che la petizione fosse respinta " a seguito di perenzione per mancanza di tempestiva e precisa notifica del difetto ".
Il 4 gennaio 2017 il Pretore aggiunto ha respinto la petizione. Con sentenza dell'8 ottobre 2018 la II Camera civile del Tribunale di appello ticinese ha respinto il successivo appello dell'attore.
D.
A._ insorge davanti al Tribunale federale con ricorso in materia civile del 14 novembre 2018. Chiede che, in riforma della sentenza cantonale, la causa sia rinviata al Pretore aggiunto " affinché completi l'istruttoria con la prova peritale ed emani il giudizio " e che sia dato atto che non sia intervenuta " perenzione e/o prescrizione della pretesa risarcitoria "; subordinatamente che anche tale questione sia demandata alla prima istanza.
La convenuta propone di respingere il ricorso nella misura in cui fosse ammissibile con risposta del 28 dicembre 2018. L'autorità cantonale non si è espressa.
Diritto:
1.
Il ricorso, presentato tempestivamente dalla parte soccombente nella procedura cantonale (art. 100 cpv. 1 e 76 cpv. 1 lett. a LTF) e volto contro una sentenza finale (art. 90 LTF) emanata su ricorso dall'autorità ticinese di ultima istanza (art. 75 LTF) in una causa civile (art. 72 cpv. 1 LTF) con valore litigioso superiore a fr. 30'000.-- (art. 74 cpv. 1 lett. b LTF), è di per sé ammissibile, con riserva di quanto si dirà in merito alla motivazione.
2.
La violazione del diritto federale è motivo di ricorso secondo l'art. 95 lett. a LTF. Il Tribunale federale lo applica d'ufficio (art. 106 cpv. 1 LTF). Tuttavia, tenuto conto dell'onere di allegazione e motivazione imposto dall'art. 42 cpv. 1 e 2 LTF, di regola esso considera solo gli argomenti proposti nell'atto di ricorso (DTF 140 III 86 consid. 2). Il Tribunale federale fonda invece il suo ragionamento giuridico sugli accertamenti di fatto svolti dall'autorità inferiore (art. 105 cpv. 1 LTF). Può scostarsene o completarli solo se sono stati effettuati in violazione del diritto ai sensi dell'art. 95 LTF o in modo manifestamente inesatto (art. 105 cpv. 2 LTF).
Il ricorrente può censurare l'accertamento dei fatti alle stesse condizioni; occorre inoltre che l'eliminazione dell'asserito vizio possa influire in maniera determinante sull'esito della causa (art. 97 cpv. 1 LTF). Se rimprovera all'autorità cantonale un accertamento dei fatti manifestamente inesatto - ossiaarbitrario (art. 9 Cost.) -egli deve motivare la censura conformemente alle esigenze rigorose poste dall'art. 106 cpv. 2 LTF. Deve indicare chiaramente i diritti costituzionali che si pretendono violati e precisare in cosa consiste la violazione. Non basta opporre il proprio punto di vista alle conclusioni del giudizio impugnato; il Tribunale federale non esamina le critiche di carattere appellatorio (DTF 145 I 26 consid. 1.2). Siccome il giudice cantonale fruisce di un grande potere discrezionale nel campo dell'apprezzamento delle prove (e dell'accertamento dei fatti in genere), chi invoca l'arbitrio deve dimostrare che la sentenza impugnata ignora il senso e la portata di un mezzo di prova preciso, omette senza ragioni valide di tenere conto di una prova importante suscettibile di modificare l'esito della lite, oppure ammette o nega un fatto ponendosi in aperto contrasto con gli atti di causa o interpretandoli in modo insostenibile (DTF 143 IV 500 consid. 1.1; 140 III 264 consid. 2.3; 140 III 16 consid. 1.3.1).
3.
Richiamati gli art. 310 e 311 cpv. 1 CPC, i giudici cantonali hanno osservato preliminarmente che l'appellante non si era confrontato espressamente con le argomentazioni del Pretore aggiunto riguardanti la qualificazione del contratto e la segnalazione tardiva dei difetti, per cui su tali aspetti l'appello era irricevibile. Il ricorrente obietta di avere criticato in modo chiaro la motivazione del Pretore aggiunto, seguendo persino l'ordine espositivo della sentenza di primo grado; nella motivazione del gravame egli ricorda ripetutamente le contestazioni mosse con l'atto di appello.
La Corte cantonale, nonostante questa premessa, ha comunque riassunto le considerazioni del primo giudice ed ha effettuato un esame di merito della natura del contratto e della tempestività della notifica dei difetti, riferendosi anche alle contestazioni dell'appellante. Può quindi rimanere indeciso se l'appello fosse motivato correttamente o no; anche perché la sentenza impugnata non permette sempre di capire quali siano le argomentazioni specifiche del Pretore aggiunto con le quali l'appellante non si sarebbe confrontato.
4.
Controversa è anzitutto la qualificazione del contratto. La Corte cantonale - comeil Pretore aggiunto - ha stabilito che la ditta convenuta ha fornito e posato l'impianto xxx, prestazione d'opera che è tipica di un contratto di appalto. Essa ha costatato che la convenuta ha anche allestito i piani esecutivi e di dettaglio e ha diretto i lavori d'istallazione dell'impianto; ha però considerato che queste sono prestazioni accessorie, al servizio di quella principale che caratterizza il contratto. Anche l'allestimento dei piani, ha precisato l'autorità cantonale, costituisce peraltro prestazione d'appalto.
4.1. Il ricorrente sostiene che il contratto che lo legava all'opponenteera un mandato. Asserisce che l'accertamento dei fatti svolto dall'autorità cantonale a tale riguardo "è contrario alle risultanze istruttorie e risulta a senso unico a favore della convenuta ". Il ricorrente riprende a suo modo " lo svolgimento dei fatti " e ne deduce che l'opponente aveva assunto un incarico " tipico di un progettista d'impianti di riscaldamento " e aveva commesso errori nell'allestimento dei piani esecutivi, quindi " a livello progettuale ".
L'opponenteobietta giustamente che le critiche volte contro l'accertamento dei fatti non rispettano le esigenze che la prassi impone. Il ricorrente si limita infatti a contrapporre la propria versione ai fatti accertati dall'autorità cantonale, con riferimenti generici alle risultanze istruttorie e senza spiegare puntualmente quali prove precise sarebbero state apprezzate in modo arbitrario. Tali critiche, come tutti gli argomenti che si fondano su fatti che non risultano dalla sentenza impugnata, sono inammissibili (cfr. consid. 2).
4.2. Il ricorrente afferma che la perizia, rifiutata dal Pretore aggiunto con l'avallo del Tribunale di appello, avrebbe contribuito a chiarire la vera natura del contratto. Le due istanze ticinesi avrebbero perciò " indebitamente negato (...) un mezzo di prova rilevante per il giudizio ". Anche questi argomenti non sono ammissibili.
Il Pretore aggiunto aveva deciso di non assumere la perizia con l'ordinanza del 7 gennaio 2016 con la quale aveva limitato la procedura. La sentenza impugnata accenna a tale procedura incidentale, ma solo nel riassunto dei fatti; non affronta affatto il tema controverso della perizia. In tali circostanze nemmeno il Tribunale federale può occuparsene. Il ricorrente avrebbe tutt'al più potuto censurare un diniego di giustizia formale, specificando con precisione dove e come aveva contestato in sede di appello l'ordinanza sulle prove del Pretore aggiunto.
4.3. La sentenza impugnata accerta - inmodo vincolante, quindi - chela convenuta ha allestito i piani esecutivi e di dettaglio, ha fornito l'impianto di riscaldamento e lo ha istallato. Si tratta indubbiamente di prestazioni d'opera caratteristiche del contratto d'appalto, come ha stabilito correttamente la Corte ticinese. In tale contesto il richiamo da parte del ricorrente delle regole sulla qualificazione del contratto globale d'architetto o di ingegnere non è pertinente.
Le prestazioni preliminari di progettazione, sulle quali insiste il ricorrente, non sono comunque suscettibili di mutare la natura del contratto. La giurisprudenza sottopone infatti alle norme sul contratto di appalto anche l'attività di progettazione che si concreta in un progetto da realizzare, non solo l'allestimento di piani esecutivi (DTF 134 III 361 consid. 5.1; sentenze 4A_271/2013 del 26 settembre 2013 consid. 7.3, 4A_55/2012 del 31 luglio 2012 consid. 4.4). Così è, a maggior ragione, laddove la progettazione preliminare ed esecutiva è effettuata dall'artigiano che fornisce e posa l'opera, come è avvenuto nel caso in esame secondo gli accertamenti vincolanti della sentenza d'appello.
La qualificazione di contratto di appalto effettuata dall'autorità cantonale, a conferma di quella del Pretore aggiunto, è pertanto conforme al diritto federale.
5.
Una volta chiarita la natura dei rapporti giuridici, il Tribunale di appello si è occupato della tempestività della notifica dei difetti da parte del committente. Ha stabilito d'un canto, basandosi su due documenti, una testimonianza e le allegazioni dello stesso attore, che collaudo e consegna erano avvenuti il 25 novembre 2008 per l'impianto di produzione dell'acqua calda, il 4 giugno 2009 per l'impianto di riscaldamento della piscina; d'altro canto che l'appellante non aveva contestato gli accertamenti di prima istanza secondo i quali a partire da quest'ultima data egli conosceva " tutti gli elementi per poter notificare in modo preciso il difetto alla convenuta ".
Il ricorrente asserisce che la conclusione del Tribunale di appello concernente le date dei collaudi è " sbagliata " e lesiva dell'art. 8 CC, perché l'onere di provare l'effettuazione del collaudo incombeva all'opponente, la quale non vi avrebbe fatto fronte.
Di nuovo egli non si premura affatto di dimostrare l'arbitrio degli accertamenti di fatto concernenti le date dei collaudi, per cui sotto questo profilo la censura è inammissibile (consid. 2). Quanto all'art. 8 CC, basti ricordare ch'esso regola la ripartizione dell'onere della prova; stabilisce cioè quale parte debba sopportare le conseguenze della mancata prova di un fatto rilevante. La questione diviene però priva d'oggetto quando il fatto è accertato per apprezzamento delle prove; la norma non prescrive quali prove debbano essere assunte né come esse debbano essere apprezzate (sentenza 4A_615/2016 del 15 marzo 2017 consid. 5.3; DTF 130 III 591 consid. 5.4).
6.
Passando alla segnalazione dei difetti, la Corte d'appello ha anzitutto confermato la distinzione operata dal Pretore aggiunto tra la fuoriuscita ritardata dell'acqua alla temperatura desiderata a causa della " commistione ", che è un difetto relativo alle " tempistiche ", e la produzione insufficiente di acqua calda dovuta al sottodimensionamento dell'impianto xxx, difetto che coinvolge " aspetti quantitativi e qualitativi ". Essa ha costatato che la prima segnalazione di quest'ultimo difetto è costituita dallo scritto del 21 marzo 2013. La Corte ticinese ha quindi condiviso il giudizio di prima istanza per il quale, dato che il collaudo dell'impianto di riscaldamento era avvenuto il 4 giugno 2009, il termine di garanzia biennale istituito dalla norma SIA 118 scadeva il 4 giugno 2011, per cui la segnalazione del 21 marzo 2013 era tardiva e i diritti del committente secondo l'art. 368 CO erano " perenti ". I giudici cantonali hanno aggiunto che diversi documenti dei quali si prevaleva l'attore o segnalavano il ritardo di erogazione e non la produzione insufficiente di acqua calda, o non erano stati trasmessi con certezza alla convenuta, o erano comunque tardivi.
Anche le critiche che il ricorrente volge contro gli accertamenti di fatto di questa parte del giudizio cantonale sono inammissibili. Egli contesta sia la distinzione operata dall'autorità cantonale tra i due tipi di difetti, sia la data della prima segnalazione alla controparte, soffermandosi in particolare su una lettera del 27 maggio 2009 (doc. PPP) che a suo parere toccava anche il problema della produzione insufficiente di acqua calda. Lo fa tuttavia in modo prettamente appellatorio, contrapponendo la propria versione dei fatti alla valutazione delle prove della sentenza e omettendo di censurare l'arbitrio, ossia di spiegare in cosa consisterebbe l'errore manifesto commesso dall'autorità cantonale. Per sostenere la notifica tempestiva del difetto commenta anche un intervento di riparazione dell'impianto effettuato verso la fine del 2011, che a suo dire avrebbe fatto decorrere un nuovo periodo di garanzia, e narra diversi accadimenti successivi; tutti fatti che non risultano però dalla sentenza impugnata.
7.
Al termine del gravame il ricorrente rimprovera ai giudici cantonali di avere ignorato, come il Pretore aggiunto, la censura " che l'eccezione di prescrizione sollevata dalla convenuta costituisce un abuso di diritto ex. art. 2 cpv. 2 CC ". Riproduce alla lettera le argomentazioni d'appello con le quali sosteneva che l'opponente si era resa conto fin dall'inizio che l'impianto era sottodimensionato e per questo motivo si era " tenuta in disparte ", aveva " tergiversato e differito i propri interventi, nell'evidente intento di far decorrere i termini di garanzia ". A sostegno di questa tesi il ricorrente adduce che l'opponente " si era prestata, ancora il 24 luglio 2012 (doc. BBB), ad un sopralluogo per l'accertamento delle cause del problema senza nulla eccepire " e che la " scaltra intenzione della convenuta di liberarsi dalla responsabilità per i difetti " è dimostrata anche dalla prima proposta di liquidazione dell'assicuratore di responsabilità civile del 2 agosto 2012 (doc. QQQ) che prevedeva un indennizzo totale.
7.1. L'invocazione della prescrizione può costituire un abuso di diritto qualora il debitore induca con astuzia il creditore a non agire in tempo utile, oppure assuma, anche senza cattive intenzioni, un comportamento tale da indurlo a rinunciare a intraprendere passi giuridici prima dell'intervento della prescrizione, a condizione che il ritardo appaia comprensibile sulla base di un apprezzamento ragionevole fondato su criteri oggettivi. Il solo trascorrere del tempo non è sufficiente; occorre che vi sia un rapporto di causalità tra il comportamento del debitore e il ritardo ad agire del creditore (DTF 143 III 348 consid. 5.5.1 e rinvii).
Questa giurisprudenza vale anche per l'appaltatore che eccepisce l'intempestività della segnalazione dei difetti da parte del committente (DTF 107 II 172 consid. 2).
7.2. Contrariamente a quanto afferma il ricorrente, il Pretore aggiunto aveva esaminato, respingendola, l'eccezione di abuso di diritto. Vero è invece che la Corte cantonale ha ignorato le critiche formulate a tale riguardo con l'appello. Trattandosi di una questione di diritto, il Tribunale federale può nondimeno esaminarla - potrebbefarlo anche d'ufficio - nellamisura in cui l'eccezione poggia su fatti accertati dall'autorità cantonale (cfr. sentenza 4A_756/2011 del 20 giugno 2012 consid. 6).
Nel caso specifico la violazione dell'art. 2 cpv. 2 CC può essere esclusa sulla base delle allegazioni dello stesso ricorrente. I fatti dei quali egli si prevale - il sopralluogo del 24 luglio 2012 e la proposta di liquidazione assicurativa del 2 agosto 2012 - sono entrambi successivi alla scadenza del termine di garanzia avvenuta, secondo gli accertamenti vincolanti dell'autorità cantonale, il 4 giugno 2011 (cfr. consid. 6); ciò esclude d'acchito qualsiasi influenza causale sul ritardo della segnalazione dei difetti. Il rimprovero di temporeggiamento e inerzia dell'appaltatrice contraddice invece palesemente quanto il ricorrente aveva sostenuto davanti al Pretore aggiunto, proprio per sostanziare l'abuso di diritto, ovvero che la convenuta si era " inizialmente prodigata nella ricerca delle cause e nella risoluzione dei difetti notificati " (sentenza del Pretore aggiunto consid. 12 pag. 16).
8.
Ne viene l'infondatezza del ricorso, nella misura in cui è ammissibile. Gli oneri processuali della procedura federale seguono la soccombenza (art. 66 cpv. 1 e 68 cpv. 1 LTF).
Per questi motivi, il Tribunale federale pronuncia:
1.
Nella misura in cui è ammissibile, il ricorso è respinto.
2.
Le spese giudiziarie di fr. 2'000.-- sono poste a carico del ricorrente, che rifonderà all'opponente fr. 2'500.-- a titolo di ripetibili per la procedura innanzi al Tribunale federale.
3.
Comunicazione ai patrocinatori delle parti e alla II Camera civile del Tribunale d'appello del Cantone Ticino.