mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	Add generate home assistant config command (#208)
* Add generate home assistant config command * Lint * Lint
This commit is contained in:
		| @@ -132,6 +132,13 @@ class EsphomeyamlCleanHandler(EsphomeyamlCommandWebSocket): | ||||
|         return ["esphomeyaml", config_file, "clean"] | ||||
|  | ||||
|  | ||||
| class EsphomeyamlHassConfigHandler(EsphomeyamlCommandWebSocket): | ||||
|     def build_command(self, message): | ||||
|         js = json.loads(message) | ||||
|         config_file = os.path.join(CONFIG_DIR, js['configuration']) | ||||
|         return ["esphomeyaml", config_file, "hass-config"] | ||||
|  | ||||
|  | ||||
| class SerialPortRequestHandler(BaseHandler): | ||||
|     def get(self): | ||||
|         if not self.is_authenticated(): | ||||
| @@ -230,6 +237,7 @@ def make_app(debug=False): | ||||
|         (r"/validate", EsphomeyamlValidateHandler), | ||||
|         (r"/clean-mqtt", EsphomeyamlCleanMqttHandler), | ||||
|         (r"/clean", EsphomeyamlCleanHandler), | ||||
|         (r"/hass-config", EsphomeyamlHassConfigHandler), | ||||
|         (r"/download.bin", DownloadBinaryRequestHandler), | ||||
|         (r"/serial-ports", SerialPortRequestHandler), | ||||
|         (r"/wizard.html", WizardRequestHandler), | ||||
|   | ||||
| @@ -215,6 +215,7 @@ | ||||
|           <ul id="dropdown-{{ i }}" class="dropdown-content"> | ||||
|             <li><a href="#" class="action-clean-mqtt" data-node="{{ file }}">Clean MQTT</a></li> | ||||
|             <li><a href="#" class="action-clean" data-node="{{ file }}">Clean Build</a></li> | ||||
|             <li><a href="#" class="action-hass-config" data-node="{{ file }}">Home Assistant Configuration</a></li> | ||||
|           </ul> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -491,6 +492,18 @@ | ||||
|   </div> | ||||
| </div> | ||||
|  | ||||
| <div id="modal-hass-config" class="modal modal-fixed-footer"> | ||||
|   <div class="modal-content"> | ||||
|     <h4>Generate Home Assistant Configuration <code class="inlinecode filename"></code></h4> | ||||
|     <div class="log-container"> | ||||
|       <pre class="log"></pre> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="modal-footer"> | ||||
|     <a class="modal-close waves-effect waves-green btn-flat stop-logs">Stop</a> | ||||
|   </div> | ||||
| </div> | ||||
|  | ||||
| <a class="btn-floating btn-large ribbon-fab waves-effect waves-light pink accent-2" id="setup-wizard-start"> | ||||
|   <i class="material-icons">add</i> | ||||
| </a> | ||||
| @@ -904,6 +917,54 @@ | ||||
|     }); | ||||
|   }); | ||||
|  | ||||
|   const hassConfigModalElem = document.getElementById("modal-hass-config"); | ||||
|  | ||||
|   document.querySelectorAll(".action-hass-config").forEach((btn) => { | ||||
|     btn.addEventListener('click', (e) => { | ||||
|       configuration = e.target.getAttribute('data-node'); | ||||
|       const modalInstance = M.Modal.getInstance(hassConfigModalElem); | ||||
|       const log = hassConfigModalElem.querySelector(".log"); | ||||
|       log.innerHTML = ""; | ||||
|       const stopLogsButton = hassConfigModalElem.querySelector(".stop-logs"); | ||||
|       let stopped = false; | ||||
|       stopLogsButton.innerHTML = "Stop"; | ||||
|       modalInstance.open(); | ||||
|  | ||||
|       const filenameField = hassConfigModalElem.querySelector('.filename'); | ||||
|       filenameField.innerHTML = configuration; | ||||
|  | ||||
|       const logSocket = new WebSocket(wsUrl + "/hass-config"); | ||||
|       logSocket.addEventListener('message', (event) => { | ||||
|         const data = JSON.parse(event.data); | ||||
|         if (data.event === "line") { | ||||
|           const msg = data.data; | ||||
|           log.innerHTML += colorReplace(msg); | ||||
|         } else if (data.event === "exit") { | ||||
|           if (data.code === 0) { | ||||
|             M.toast({html: "Program exited successfully."}); | ||||
|             downloadButton.classList.remove('disabled'); | ||||
|           } else { | ||||
|             M.toast({html: `Program failed with code ${data.code}`}); | ||||
|           } | ||||
|           stopLogsButton.innerHTML = "Close"; | ||||
|           stopped = true; | ||||
|         } | ||||
|       }); | ||||
|       logSocket.addEventListener('open', () => { | ||||
|         const msg = JSON.stringify({configuration: configuration}); | ||||
|         logSocket.send(msg); | ||||
|       }); | ||||
|       logSocket.addEventListener('close', () => { | ||||
|         if (!stopped) { | ||||
|           M.toast({html: 'Terminated process.'}); | ||||
|         } | ||||
|       }); | ||||
|       modalInstance.options.onCloseStart = () => { | ||||
|         logSocket.close(); | ||||
|       }; | ||||
|     }); | ||||
|   }); | ||||
|  | ||||
|   const modalSetupElem = document.getElementById("modal-wizard"); | ||||
|   const setupWizardStart = document.getElementById('setup-wizard-start'); | ||||
|   const startWizard = () => { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user