Quick upgrade 
This flow is the same but now include a cache so that new or reloaded tabs get data straight away. It also lets you clear the cache.
[{"id":"754d4186.5057b","type":"inject","z":"63281c77.40a064","name":"","topic":"global","payload":"{\"devices\":{\"R+2\":{\"216\":{\"alarme\":\"none\",\"etat_systeme\":\"0\",\"adresse_ip\":\"192.168.1.5\",\"SoftVersion\":\"A.05\",\"capteur_lit\":\"0\",\"capteur_porte\":\"0\",\"nom\":\"M LETOURNEUR\",\"trame_vie\":\"1\",\"num_chambre\":\"216\"}},\"RDC\":{\"018\":{\"alarme\":\"none\",\"etat_systeme\":\"1\",\"adresse_ip\":\"192.168.1.7\",\"SoftVersion\":\"A.06\",\"capteur_lit\":\"0\",\"capteur_porte\":\"0\",\"nom\":\"Mme MARTIN\",\"trame_vie\":\"1\",\"num_chambre\":\"018\"},\"002\":{\"alarme\":\"none\",\"etat_systeme\":\"1\",\"adresse_ip\":\"192.168.1.4\",\"SoftVersion\":\"A.06\",\"capteur_lit\":\"0\",\"capteur_porte\":\"0\",\"nom\":\"TEST\",\"trame_vie\":\"1\",\"num_chambre\":\"002\"}},\"R+1\":{\"103\":{\"alarme\":\"none\",\"etat_systeme\":\"0\",\"adresse_ip\":\"192.168.1.6\",\"SoftVersion\":\"A.05\",\"capteur_lit\":\"0\",\"capteur_porte\":\"0\",\"nom\":\"Mme LE ROY\",\"trame_vie\":\"1\",\"num_chambre\":\"103\"}}}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":4080,"wires":[["bb55bf3.22ed24"]]},{"id":"5b00da78.23a744","type":"uibuilder","z":"63281c77.40a064","name":"","topic":"","url":"uibuilder","fwdInMessages":false,"allowScripts":false,"allowStyles":false,"copyIndex":true,"showfolder":false,"x":500,"y":4080,"wires":[["8a286149.41b2b"],["e54ac468.dee4f8","a61fc74c.9fae18"]]},{"id":"8a286149.41b2b","type":"debug","z":"63281c77.40a064","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":670,"y":4040,"wires":[]},{"id":"e54ac468.dee4f8","type":"debug","z":"63281c77.40a064","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":730,"y":4100,"wires":[]},{"id":"bb55bf3.22ed24","type":"function","z":"63281c77.40a064","name":"cache","func":"var cacheVarName = 'uib_cache_1'\n\n// saved context\nvar ui_msgs = context.get(cacheVarName) || {}\n\n// Handle cache control messages\nif (msg.hasOwnProperty('cacheControl')) {\n // Replay cache if requested\n if (msg.cacheControl === 'REPLAY') {\n for (var name in ui_msgs) {\n node.send({\n \"topic\": name,\n \"payload\": ui_msgs[name],\n \"_socketId\": msg._socketId\n })\n }\n return null\n } else if (msg.cacheControl === 'CLEAR') {\n // Or clear the cach (no msg sent)\n ui_msgs = {}\n context.set(cacheVarName, ui_msgs)\n return null\n } else {\n // or do nothing\n return null\n }\n}\n\n// ignore other uibuilder control messages\nif (msg.hasOwnProperty('uibuilderCtrl')) return null\n\n// Keep the last msg.payload by topic\nif ( msg.hasOwnProperty('payload') ) {\n ui_msgs[msg.topic] = msg.payload\n \n // save context for next time\n context.set(cacheVarName, ui_msgs)\n \n msg._socketId = null\n} else {\n node.warn(\"no payload\")\n msg = null\n}\n\n// Show number of cached msgs in status\nnode.status({fill:'green',shape:'ring',text:'Cached: ' + Object.keys(ui_msgs).length})\n\nreturn msg;\n","outputs":1,"noerr":0,"x":330,"y":4080,"wires":[["5b00da78.23a744"]]},{"id":"b887a56.6c23e58","type":"link in","z":"63281c77.40a064","name":"","links":["a61fc74c.9fae18","d15ffb42.533388"],"x":195,"y":4040,"wires":[["bb55bf3.22ed24"]]},{"id":"a61fc74c.9fae18","type":"link out","z":"63281c77.40a064","name":"","links":["b887a56.6c23e58"],"x":635,"y":4120,"wires":[]},{"id":"a8213cd.c0242c","type":"inject","z":"63281c77.40a064","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":115,"y":4160,"wires":[["6c70f767.94a6f8"]],"l":false},{"id":"6c70f767.94a6f8","type":"change","z":"63281c77.40a064","name":"Clear Cache","rules":[{"t":"set","p":"cacheControl","pt":"msg","to":"CLEAR","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":210,"y":4160,"wires":[["d15ffb42.533388"]]},{"id":"d15ffb42.533388","type":"link out","z":"63281c77.40a064","name":"","links":["b887a56.6c23e58"],"x":315,"y":4160,"wires":[]}]
And here is slightly improved html:
<div v-for="(floor, stair) in rooms">
<h2>Stair: {{stair}}</h2>
<div v-for="(room, rmName) in floor">
<h3>Room: {{rmName}}</h3>
<dl v-for="(val, prop) in room">
<dt>{{prop}}</dt>
<dd>{{val}}</dd>
</dl>
</div>
</div>
You should be able to extract from that the code needed to produce a navigation menu.