l'hai provato lo script? io ci ho dato un occhiata e il codice cosi com'è non va bene perche ti sei perso una parte che nel mio codice di esempio era
stato = myjson.stato; //aggiorno variabile d'appoggio con lo stato dell'ultima chiamata
Non ho visto questo passaggio nel tuo script, la variabile globale "prev_device_status" rimarrà sempre vuota e di conseguenza l'istruzione "if ($.isEmptyObject(prev)) {" sarà sempre vera. Puoi confermarmelo provando lo script. Non capisco inoltre perche usi la funzione complete della chiamata ajax invece della funzione success, la funzione complete viene richiamata anche quando la richiesta non è andata a buon fine.
Ultima cosa e più importante è il fatto che usi sempre la stessa immagine (sofia12), allora mi chiedo perche tutto sto ragionamento se poi l'immagine è sempre una? non dovrebbe esserci qualcosa del genere?
icon_image.src = icon_name;
invece di
icon_image.src = "web/sofa12.png";