diff --git a/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin b/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin index 4d37b33..ac7666d 100644 Binary files a/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin and b/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin differ diff --git a/Arduino_Sketch/HASwitchPlate/HASwitchPlate.ino b/Arduino_Sketch/HASwitchPlate/HASwitchPlate.ino index 35fe23d..adff676 100644 --- a/Arduino_Sketch/HASwitchPlate/HASwitchPlate.ino +++ b/Arduino_Sketch/HASwitchPlate/HASwitchPlate.ino @@ -45,6 +45,8 @@ char nextionBaud[7] = "115200"; //////////////////////////////////////////////////////////////////////////////////////////////////// #include +#include +#include #include #include #include @@ -57,11 +59,10 @@ char nextionBaud[7] = "115200"; #include #include #include -#include #include #include -const float haspVersion = 0.41; // Current HASP software release version +const float haspVersion = 1.00; // Current HASP software release version const uint16_t mqttMaxPacketSize = 2048; // Size of buffer for incoming MQTT message byte nextionReturnBuffer[128]; // Byte array to pass around data coming from the panel uint8_t nextionReturnIndex = 0; // Index for nextionReturnBuffer @@ -96,8 +97,8 @@ unsigned int beepCounter; // Count the number of bee uint8_t beepPin = D2; // define beep pin output uint8_t motionPin = 0; // GPIO input pin for motion sensor if connected and enabled bool motionActive = false; // Motion is being detected -const unsigned long motionLatchTimeout = 30000; // Latch time for motion sensor -const unsigned long motionBufferTimeout = 1000; // Latch time for motion sensor +const unsigned long motionLatchTimeout = 1000; // Latch time for motion sensor +const unsigned long motionBufferTimeout = 100; // Trigger threshold time for motion sensor unsigned long lcdVersion = 0; // Int to hold current LCD FW version number unsigned long updateLcdAvailableVersion; // Int to hold the new LCD FW version number bool lcdVersionQueryFlag = false; // Flag to set if we've queried lcdVersion @@ -156,19 +157,16 @@ ESP8266HTTPUpdateServer httpOTAUpdate; // Arduino OTA server WiFiServer telnetServer(23); // Telnet server (if enabled) WiFiClient telnetClient; // Telnet client MDNSResponder::hMDNSService hMDNSService; // mDNS +EspSaveCrash SaveCrash; // Save crash details to flash // Additional CSS style to match Hass theme -const char HASP_STYLE[] PROGMEM = ""; +const char HASP_STYLE[] PROGMEM = ""; // URL for auto-update "version.json" -const char UPDATE_URL[] PROGMEM = "https://raw.githubusercontent.com/aderusha/HASwitchPlate/master/update/version.json"; - -const char HTTP_HEADER[] PROGMEM = "{v}"; -const char HTTP_HEADER_END[] PROGMEM = "
"; - +const char UPDATE_URL[] PROGMEM = "https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/update/version.json"; // Default link to compiled Arduino firmware image -String espFirmwareUrl = "https://raw.githubusercontent.com/aderusha/HASwitchPlate/master/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin"; +String espFirmwareUrl = "https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin"; // Default link to compiled Nextion firmware images -String lcdFirmwareUrl = "https://raw.githubusercontent.com/aderusha/HASwitchPlate/master/Nextion_HMI/HASwitchPlate.tft"; +String lcdFirmwareUrl = "https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/Nextion_HMI/HASwitchPlate.tft"; //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() @@ -177,6 +175,7 @@ void setup() debugPrintln(String(F("SYSTEM: Starting HASwitchPlate v")) + String(haspVersion)); debugPrintln(String(F("SYSTEM: Last reset reason: ")) + String(ESP.getResetInfo())); debugPrintln(String(F("SYSTEM: heapFree: ")) + String(ESP.getFreeHeap()) + String(F(" heapMaxFreeBlockSize: ")) + String(ESP.getMaxFreeBlockSize())); + debugPrintCrash(); debugPrint(String(F("================================================================================\n\n"))); pinMode(nextionResetPin, OUTPUT); // Take control over the power switch for the LCD @@ -230,6 +229,8 @@ void setup() espSetupOta(); // Start OTA firmware update + motionSetup(); // Setup motion sensor if configured + mqttConnect(); // Connect to MQTT if (mdnsEnabled) @@ -244,8 +245,6 @@ void setup() MDNS.update(); } - motionSetup(); // Setup motion sensor if configured - if (beepEnabled) { // Setup beep/tactile output if configured pinMode(beepPin, OUTPUT); @@ -457,14 +456,16 @@ void mqttConnect() { // Force any subscribed clients to toggle OFF/ON when we first connect to // make sure we get a full panel refresh at power on. Sending OFF, // "ON" will be sent by the mqttStatusTopic subscription action below. - debugPrintln(String(F("MQTT OUT: '")) + mqttStatusTopic + "' : 'OFF'"); - mqttClient.publish(mqttStatusTopic, "OFF", true, 1); mqttFirstConnect = false; + debugPrintln(String(F("MQTT OUT: '")) + mqttStatusTopic + "' : 'OFF'"); + mqttClient.publish(mqttStatusTopic, "OFF", true, 0); } + if (mqttClient.subscribe(mqttStatusTopic)) { debugPrintln(String(F("MQTT: subscribed to ")) + mqttStatusTopic); } + mqttClient.loop(); } else { // Retry until we give up and restart after connectTimeout seconds @@ -616,6 +617,30 @@ void mqttProcessInput(String &strTopic, String &strPayload) beepOffTime = mqqtvar2.toInt(); beepCounter = mqqtvar3.toInt(); } + else if (strTopic == (mqttCommandTopic + "/crashtest")) + { // '[...]/device/command/crashtest' -m 'divzero' == divide by zero + if (strPayload == "divzero") + { + debugPrintln(String(F("DEBUG: attempt to divide by zero"))); + int result, zero; + zero = 0; + result = 1 / zero; + debugPrintln(String(F("DEBUG: div zero result: ")) + String(result)); + } + else if (strPayload == "nullptr") + { // '[...]/device/command/crashtest' -m 'nullptr' == dereference a null pointer + debugPrintln(String(F("DEBUG: attempt to dereference null pointer"))); + int *nullPointer = NULL; + debugPrintln(String(F("DEBUG: dereference null pointer: ")) + String(*nullPointer)); + } + else if (strPayload == "wdt") + { // '[...]/device/command/crashtest' -m 'wdt' == trigger soft WDT + debugPrintln(String(F("DEBUG: enter tight loop and cause WDT"))); + while (true) + { + } + } + } else if (strTopic.startsWith(mqttCommandTopic) && (strPayload == "")) { // '[...]/device/command/p[1].b[4].txt' -m '' == nextionGetAttr("p[1].b[4].txt") String subTopic = strTopic.substring(mqttCommandTopic.length() + 1); @@ -666,6 +691,8 @@ void mqttProcessInput(String &strTopic, String &strPayload) { // catch a dangling LWT from a previous connection if it appears debugPrintln(String(F("MQTT OUT: '")) + mqttStatusTopic + String(F("' : 'ON'"))); mqttClient.publish(mqttStatusTopic, "ON", true, 0); + mqttClient.publish(mqttStateJSONTopic, String(F("{\"event_type\":\"hasp_device\",\"event\":\"online\"}"))); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F(" : {\"event_type\":\"hasp_device\",\"event\":\"online\"}"))); } } @@ -701,10 +728,11 @@ void mqttStatusUpdate() } mqttSensorPayload += String(F("\"espUptime\":")) + String(long(millis() / 1000)) + String(F(",")); mqttSensorPayload += String(F("\"signalStrength\":")) + String(WiFi.RSSI()) + String(F(",")); + mqttSensorPayload += String(F("\"haspName\":\"")) + String(haspNode) + String(F("\",")); mqttSensorPayload += String(F("\"haspIP\":\"")) + WiFi.localIP().toString() + String(F("\",")); mqttSensorPayload += String(F("\"haspClientID\":\"")) + mqttClientId + String(F("\",")); mqttSensorPayload += String(F("\"haspMac\":\"")) + String(espMac[0], HEX) + String(F(":")) + String(espMac[1], HEX) + String(F(":")) + String(espMac[2], HEX) + String(F(":")) + String(espMac[3], HEX) + String(F(":")) + String(espMac[4], HEX) + String(F(":")) + String(espMac[5], HEX) + String(F("\",")); - mqttSensorPayload += String(F("\"haspManufacturer\":\"HASwitchPlate\",\"haspModel\":\"HASP v1.0.0\",")); + mqttSensorPayload += String(F("\"haspManufacturer\":\"HASwitchPlate\",\"haspModel\":\"HASPone v1.0.0\",")); mqttSensorPayload += String(F("\"heapFree\":")) + String(ESP.getFreeHeap()) + String(F(",")); mqttSensorPayload += String(F("\"heapFragmentation\":")) + String(ESP.getHeapFragmentation()) + String(F(",")); mqttSensorPayload += String(F("\"heapMaxFreeBlockSize\":")) + String(ESP.getMaxFreeBlockSize()) + String(F(",")); @@ -719,27 +747,35 @@ void mqttStatusUpdate() //////////////////////////////////////////////////////////////////////////////////////////////////// void mqttDiscovery() { // Publish Home Assistant discovery messages - // Start with the binary_sensor for connectivity + String macAddress = String(espMac[0], HEX) + String(F(":")) + String(espMac[1], HEX) + String(F(":")) + String(espMac[2], HEX) + String(F(":")) + String(espMac[3], HEX) + String(F(":")) + String(espMac[4], HEX) + String(F(":")) + String(espMac[5], HEX); - String mqttDiscoveryTopic = String(F("homeassistant/binary_sensor/")) + String(haspNode) + String(F("/config")); - String mqttDiscoveryPayload = String(F("{\"device_class\":\"connectivity\",\"name\":\"")) + String(haspNode) + String(F(" connected\",\"state_topic\":\"")) + mqttStatusTopic + String(F("\",\"availability_topic\":\"")) + mqttStatusTopic + String(F("\",\"unique_id\":\"")) + mqttClientId + String(F("\",\"payload_on\":\"ON\",\"payload_off\":\"OFF\",\"payload_available\":\"ON\",\"payload_not_available\":\"OFF\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASP v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); - mqttClient.publish(mqttDiscoveryTopic, mqttDiscoveryPayload, true, 1); - debugPrintln(String(F("MQTT OUT: '")) + mqttDiscoveryTopic + String(F("' : '")) + String(mqttDiscoveryPayload) + String(F("'"))); + // light discovery for backlight - mqttDiscoveryTopic = String(F("homeassistant/light/")) + String(haspNode) + String(F("/config")); - mqttDiscoveryPayload = String(F("{\"name\":\"")) + String(haspNode) + String(F(" backlight\",\"command_topic\":\"")) + mqttLightCommandTopic + String(F("\",\"state_topic\":\"")) + mqttLightStateTopic + String(F("\",\"brightness_state_topic\":\"")) + mqttLightBrightStateTopic + String(F("\",\"brightness_command_topic\":\"")) + mqttLightBrightCommandTopic + String(F("\",\"availability_topic\":\"")) + mqttStatusTopic + String(F("\",\"brightness_scale\":100,\"unique_id\":\"")) + mqttClientId + String(F("-backlight\",\"payload_on\":\"ON\",\"payload_off\":\"OFF\",\"payload_available\":\"ON\",\"payload_not_available\":\"OFF\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASP v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); + String mqttDiscoveryTopic = String(F("homeassistant/light/")) + String(haspNode) + String(F("/config")); + String mqttDiscoveryPayload = String(F("{\"name\":\"")) + String(haspNode) + String(F(" backlight\",\"command_topic\":\"")) + mqttLightCommandTopic + String(F("\",\"state_topic\":\"")) + mqttLightStateTopic + String(F("\",\"brightness_state_topic\":\"")) + mqttLightBrightStateTopic + String(F("\",\"brightness_command_topic\":\"")) + mqttLightBrightCommandTopic + String(F("\",\"availability_topic\":\"")) + mqttStatusTopic + String(F("\",\"brightness_scale\":100,\"unique_id\":\"")) + mqttClientId + String(F("-backlight\",\"payload_on\":\"ON\",\"payload_off\":\"OFF\",\"payload_available\":\"ON\",\"payload_not_available\":\"OFF\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASPone v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); mqttClient.publish(mqttDiscoveryTopic, mqttDiscoveryPayload, true, 1); debugPrintln(String(F("MQTT OUT: '")) + mqttDiscoveryTopic + String(F("' : '")) + String(mqttDiscoveryPayload) + String(F("'"))); + // sensor discovery for device telemetry mqttDiscoveryTopic = String(F("homeassistant/sensor/")) + String(haspNode) + String(F("/config")); - mqttDiscoveryPayload = String(F("{\"name\":\"")) + String(haspNode) + String(F(" sensor\",\"json_attributes_topic\":\"")) + mqttSensorTopic + String(F("\",\"state_topic\":\"")) + mqttStatusTopic + String(F("\",\"availability_topic\":\"")) + mqttStatusTopic + String(F("\",\"unique_id\":\"")) + mqttClientId + String(F("-sensor\",\"payload_available\":\"ON\",\"payload_not_available\":\"OFF\",\"icon\":\"mdi:cellphone-text\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASP v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); + mqttDiscoveryPayload = String(F("{\"name\":\"")) + String(haspNode) + String(F(" sensor\",\"json_attributes_topic\":\"")) + mqttSensorTopic + String(F("\",\"state_topic\":\"")) + mqttStatusTopic + String(F("\",\"unique_id\":\"")) + mqttClientId + String(F("-sensor\",\"icon\":\"mdi:cellphone-text\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASPone v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); mqttClient.publish(mqttDiscoveryTopic, mqttDiscoveryPayload, true, 1); debugPrintln(String(F("MQTT OUT: '")) + mqttDiscoveryTopic + String(F("' : '")) + String(mqttDiscoveryPayload) + String(F("'"))); + // number discovery for active page mqttDiscoveryTopic = String(F("homeassistant/number/")) + String(haspNode) + String(F("/config")); - mqttDiscoveryPayload = String(F("{\"name\":\"")) + String(haspNode) + String(F(" active page\",\"command_topic\":\"")) + mqttCommandTopic + String(F("/page\",\"state_topic\":\"")) + mqttStateTopic + String(F("/page\",\"retain\":\"true\",\"optimistic\":\"true\",\"icon\":\"mdi:page-next-outline\",\"unique_id\":\"")) + mqttClientId + String(F("-page\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASP v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); + mqttDiscoveryPayload = String(F("{\"name\":\"")) + String(haspNode) + String(F(" active page\",\"command_topic\":\"")) + mqttCommandTopic + String(F("/page\",\"state_topic\":\"")) + mqttStateTopic + String(F("/page\",\"retain\":true,\"optimistic\":true,\"icon\":\"mdi:page-next-outline\",\"unique_id\":\"")) + mqttClientId + String(F("-page\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASPone v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); mqttClient.publish(mqttDiscoveryTopic, mqttDiscoveryPayload, true, 1); debugPrintln(String(F("MQTT OUT: '")) + mqttDiscoveryTopic + String(F("' : '")) + String(mqttDiscoveryPayload) + String(F("'"))); + + if (motionEnabled) + { // binary_sensor for motion + String macAddress = String(espMac[0], HEX) + String(F(":")) + String(espMac[1], HEX) + String(F(":")) + String(espMac[2], HEX) + String(F(":")) + String(espMac[3], HEX) + String(F(":")) + String(espMac[4], HEX) + String(F(":")) + String(espMac[5], HEX); + String mqttDiscoveryTopic = String(F("homeassistant/binary_sensor/")) + String(haspNode) + String(F("-motion/config")); + String mqttDiscoveryPayload = String(F("{\"device_class\":\"motion\",\"name\":\"")) + String(haspNode) + String(F(" motion\",\"state_topic\":\"")) + mqttMotionStateTopic + String(F("\",\"unique_id\":\"")) + mqttClientId + String(F("-motion\",\"payload_on\":\"ON\",\"payload_off\":\"OFF\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASPone v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); + mqttClient.publish(mqttDiscoveryTopic, mqttDiscoveryPayload, true, 1); + debugPrintln(String(F("MQTT OUT: '")) + mqttDiscoveryTopic + String(F("' : '")) + String(mqttDiscoveryPayload) + String(F("'"))); + } } //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1443,7 +1479,7 @@ void nextionOtaStartDownload(const String &lcdOtaUrl) if (mqttClient.connected()) { debugPrintln(F("LCDOTA: LCD firmware upload starting, closing MQTT connection.")); - mqttClient.publish(mqttStatusTopic, "OFF", true, 1); + mqttClient.publish(mqttStatusTopic, "OFF", true, 0); debugPrintln(String(F("MQTT OUT: '")) + mqttStatusTopic + String(F("' : 'OFF'"))); mqttClient.disconnect(); } @@ -1717,10 +1753,17 @@ void nextionReset() { debugPrintln(F("ERROR: Rebooting LCD completed, but LCD is not responding.")); } - mqttClient.publish(mqttStatusTopic, "OFF"); + mqttClient.publish(mqttStatusTopic, "OFF", true, 0); debugPrintln(String(F("MQTT OUT: '")) + mqttStatusTopic + String(F("' : 'OFF'"))); } +//////////////////////////////////////////////////////////////////////////////////////////////////// +void nextionUpdateProgress(const unsigned int &progress, const unsigned int &total) +{ + uint8_t progressPercent = (float(progress) / float(total)) * 100; + nextionSetAttr("p[0].b[4].val", String(progressPercent)); +}; + //////////////////////////////////////////////////////////////////////////////////////////////////// void espWifiConnect() { // Connect to WiFi @@ -1783,7 +1826,6 @@ void espWifiConnect() WiFiManagerParameter custom_mqttPort("mqttPort", "MQTT Port (required)", mqttPort, 5, " maxlength=5 type='number'"); WiFiManagerParameter custom_mqttUser("mqttUser", "MQTT User (optional)", mqttUser, 127, " maxlength=127"); WiFiManagerParameter custom_mqttPassword("mqttPassword", "MQTT Password (optional)", mqttPassword, 127, " maxlength=127 type='password'"); - // WiFiManagerParameter custom_mqttTlsLabel("MQTT TLS enabled:"); String mqttTlsEnabled_value = "F"; if (mqttTlsEnabled) { @@ -1811,7 +1853,6 @@ void espWifiConnect() wifiManager.addParameter(&custom_mqttPort); wifiManager.addParameter(&custom_mqttUser); wifiManager.addParameter(&custom_mqttPassword); - // wifiManager.addParameter(&custom_mqttTlsLabel); wifiManager.addParameter(&custom_mqttTlsEnabled); wifiManager.addParameter(&custom_mqttFingerprint); wifiManager.addParameter(&custom_configHeader); @@ -1919,24 +1960,27 @@ void espWifiConfigCallback(WiFiManager *myWiFiManager) //////////////////////////////////////////////////////////////////////////////////////////////////// void espSetupOta() -{ // (mostly) boilerplate OTA setup from library examples +{ // Update ESP firmware from network via Arduino OTA ArduinoOTA.setHostname(haspNode); ArduinoOTA.setPassword(configPassword); + ArduinoOTA.setRebootOnSuccess(false); ArduinoOTA.onStart([]() { debugPrintln(F("ESP OTA: update start")); + nextionSetAttr("p[0].b[1].txt", "\"\\rHASP update:\\r\\r\\r \""); nextionSendCmd("page 0"); - nextionSetAttr("p[0].b[1].txt", "\"ESP OTA Update\""); + nextionSendCmd("vis 4,1"); }); ArduinoOTA.onEnd([]() { - nextionSendCmd("page 0"); debugPrintln(F("ESP OTA: update complete")); - nextionSetAttr("p[0].b[1].txt", "\"ESP OTA Update\\rComplete!\""); + nextionSetAttr("p[0].b[1].txt", "\"\\rHASP update:\\r\\r Complete!\\rRestarting.\""); + nextionSendCmd("vis 4,1"); + delay(1000); espReset(); }); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - nextionSetAttr("p[0].b[1].txt", "\"ESP OTA Update\\rProgress: " + String(progress / (total / 100)) + "%\""); + nextionUpdateProgress(progress, total); }); ArduinoOTA.onError([](ota_error_t error) { debugPrintln(String(F("ESP OTA: ERROR code ")) + String(error)); @@ -1950,8 +1994,9 @@ void espSetupOta() debugPrintln(F("ESP OTA: ERROR - Receive Failed")); else if (error == OTA_END_ERROR) debugPrintln(F("ESP OTA: ERROR - End Failed")); - nextionSetAttr("p[0].b[1].txt", "\"ESP OTA FAILED\""); - delay(5000); + nextionSendCmd("vis 4,0"); + nextionSetAttr("p[0].b[1].txt", "\"HASP update:\\r FAILED\\rerror: " + String(error) + "\""); + delay(1000); nextionSendCmd("page " + String(nextionActivePage)); }); ArduinoOTA.begin(); @@ -1960,15 +2005,20 @@ void espSetupOta() //////////////////////////////////////////////////////////////////////////////////////////////////// void espStartOta(const String &espOtaUrl) -{ // Update ESP firmware from HTTP/HTTPS +{ // Update ESP firmware from HTTP/HTTPS URL + + nextionSetAttr("p[0].b[1].txt", "\"\\rHASP update:\\r\\r\\r \""); nextionSendCmd("page 0"); - nextionSetAttr("p[0].b[1].txt", "\"ESP update\\rstarting...\""); + nextionSendCmd("vis 4,1"); + WiFiUDP::stopAll(); // Keep mDNS responder from breaking things delay(1); + ESPhttpUpdate.rebootOnUpdate(false); + ESPhttpUpdate.onProgress(nextionUpdateProgress); t_httpUpdate_return espOtaUrlReturnCode; if (espOtaUrl.startsWith(F("https"))) { - debugPrintln("ESPFW: Attempting firmware update from HTTPS host: " + espOtaUrl); + debugPrintln(String(F("ESPFW: Attempting firmware update from HTTPS host: ")) + espOtaUrl); WiFiClientSecure wifiEspOtaClientSecure; wifiEspOtaClientSecure.setInsecure(); wifiEspOtaClientSecure.setBufferSizes(512, 512); @@ -1976,25 +2026,29 @@ void espStartOta(const String &espOtaUrl) } else { - debugPrintln("ESPFW: Attempting firmware update from HTTP host: " + espOtaUrl); + debugPrintln(String(F("ESPFW: Attempting firmware update from HTTP host: ")) + espOtaUrl); espOtaUrlReturnCode = ESPhttpUpdate.update(wifiClient, espOtaUrl); } switch (espOtaUrlReturnCode) { case HTTP_UPDATE_FAILED: - debugPrintln("ESPFW: HTTP_UPDATE_FAILED error " + String(ESPhttpUpdate.getLastError()) + " " + ESPhttpUpdate.getLastErrorString()); - nextionSetAttr("p[0].b[1].txt", "\"ESP Update\\rFAILED\\rerror: " + ESPhttpUpdate.getLastErrorString() + "\""); + debugPrintln(String(F("ESPFW: HTTP_UPDATE_FAILED error ")) + String(ESPhttpUpdate.getLastError()) + " " + ESPhttpUpdate.getLastErrorString()); + nextionSendCmd("vis 4,0"); + nextionSetAttr("p[0].b[1].txt", "\"HASP update:\\r FAILED\\rerror: " + ESPhttpUpdate.getLastErrorString() + "\""); break; case HTTP_UPDATE_NO_UPDATES: debugPrintln(F("ESPFW: HTTP_UPDATE_NO_UPDATES")); - nextionSetAttr("p[0].b[1].txt", "\"ESP Update\\rNo update\""); + nextionSendCmd("vis 4,0"); + nextionSetAttr("p[0].b[1].txt", "\"HASP update:\\rNo update\""); break; case HTTP_UPDATE_OK: debugPrintln(F("ESPFW: HTTP_UPDATE_OK")); - nextionSetAttr("p[0].b[1].txt", "\"ESP Update\\rcomplete!\\r\\rRestarting.\""); + nextionSetAttr("p[0].b[1].txt", "\"\\rHASP update:\\r\\r Complete!\\rRestarting.\""); + nextionSendCmd("vis 4,1"); + delay(1000); espReset(); } delay(1000); @@ -2007,7 +2061,9 @@ void espReset() debugPrintln(F("RESET: HASP reset")); if (mqttClient.connected()) { - mqttClient.publish(mqttStatusTopic, "OFF", true, 1); + mqttClient.publish(mqttStateJSONTopic, String(F("{\"event_type\":\"hasp_device\",\"event\":\"offline\"}"))); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F(" : {\"event_type\":\"hasp_device\",\"event\":\"offline\"}"))); + mqttClient.publish(mqttStatusTopic, "OFF", true, 0); mqttClient.disconnect(); debugPrintln(String(F("MQTT OUT: '")) + mqttStatusTopic + String(F("' : 'OFF'"))); } @@ -2249,14 +2305,14 @@ void configClearSaved() void webHandleNotFound() { // webServer 404 debugPrintln(String(F("HTTP: Sending 404 to client connected from: ")) + webServer.client().remoteIP().toString()); - String httpHeader = FPSTR(HTTP_HEADER); + String httpHeader = FPSTR(HTTP_HEAD_START); httpHeader.replace("{v}", "HASwitchPlate " + String(haspNode) + " 404"); webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); webServer.send(404, "text/html", httpHeader); webServer.sendContent_P(HTTP_SCRIPT); webServer.sendContent_P(HTTP_STYLE); webServer.sendContent_P(HASP_STYLE); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); webServer.sendContent(F("

404: File Not Found

One of us appears to have done something horribly wrong.
URI: ")); webServer.sendContent(webServer.uri()); webServer.sendContent(F("
Method: ")); @@ -2285,7 +2341,7 @@ void webHandleRoot() } debugPrintln(String(F("HTTP: Sending root page to client connected from: ")) + webServer.client().remoteIP().toString()); - String httpHeader = FPSTR(HTTP_HEADER); + String httpHeader = FPSTR(HTTP_HEAD_START); httpHeader.replace("{v}", "HASwitchPlate " + String(haspNode)); webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); webServer.send(200, "text/html", httpHeader); @@ -2293,7 +2349,7 @@ void webHandleRoot() webServer.sendContent_P(HTTP_SCRIPT); webServer.sendContent_P(HTTP_STYLE); webServer.sendContent_P(HASP_STYLE); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); webServer.sendContent(F("

")); webServer.sendContent(haspNode); @@ -2523,14 +2579,14 @@ void webHandleSaveConfig() } } debugPrintln(String(F("HTTP: Sending /saveConfig page to client connected from: ")) + webServer.client().remoteIP().toString()); - String httpHeader = FPSTR(HTTP_HEADER); + String httpHeader = FPSTR(HTTP_HEAD_START); httpHeader.replace("{v}", "HASwitchPlate " + String(haspNode) + " Saving configuration"); webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); webServer.send(200, "text/html", httpHeader); webServer.sendContent_P(HTTP_SCRIPT); webServer.sendContent_P(HTTP_STYLE); webServer.sendContent_P(HASP_STYLE); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); bool shouldSaveWifi = false; // Check required values @@ -2661,7 +2717,7 @@ void webHandleSaveConfig() { // Config updated, notify user and trigger write to SPIFFS webServer.sendContent(F("")); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); webServer.sendContent(F("

")); webServer.sendContent(haspNode); webServer.sendContent(F("

")); @@ -2679,7 +2735,7 @@ void webHandleSaveConfig() else { // No change found, notify user and link back to config page webServer.sendContent(F("")); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); webServer.sendContent(F("

")); webServer.sendContent(haspNode); webServer.sendContent(F("

")); @@ -2700,14 +2756,14 @@ void webHandleResetConfig() } } debugPrintln(String(F("HTTP: Sending /resetConfig page to client connected from: ")) + webServer.client().remoteIP().toString()); - String httpHeader = FPSTR(HTTP_HEADER); + String httpHeader = FPSTR(HTTP_HEAD_START); httpHeader.replace("{v}", "HASwitchPlate " + String(haspNode) + " Resetting configuration"); webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); webServer.send(200, "text/html", httpHeader); webServer.sendContent_P(HTTP_SCRIPT); webServer.sendContent_P(HTTP_STYLE); webServer.sendContent_P(HASP_STYLE); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); if (webServer.arg("confirm") == "yes") { // User has confirmed, so reset everything @@ -2742,7 +2798,7 @@ void webHandleResetBacklight() } } debugPrintln(String(F("HTTP: Sending /resetBacklight page to client connected from: ")) + webServer.client().remoteIP().toString()); - String httpHeader = FPSTR(HTTP_HEADER); + String httpHeader = FPSTR(HTTP_HEAD_START); httpHeader.replace("{v}", "HASwitchPlate " + String(haspNode) + " Backlight reset"); webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); webServer.send(200, "text/html", httpHeader); @@ -2750,7 +2806,7 @@ void webHandleResetBacklight() webServer.sendContent_P(HTTP_STYLE); webServer.sendContent_P(HASP_STYLE); webServer.sendContent(F("")); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); webServer.sendContent(F("

")); webServer.sendContent(haspNode); @@ -2773,22 +2829,20 @@ void webHandleFirmware() } } debugPrintln(String(F("HTTP: Sending /firmware page to client connected from: ")) + webServer.client().remoteIP().toString()); - String httpHeader = FPSTR(HTTP_HEADER); + String httpHeader = FPSTR(HTTP_HEAD_START); httpHeader.replace("{v}", "HASwitchPlate " + String(haspNode) + " Firmware updates"); webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); webServer.send(200, "text/html", httpHeader); webServer.sendContent_P(HTTP_SCRIPT); webServer.sendContent_P(HTTP_STYLE); webServer.sendContent_P(HASP_STYLE); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); webServer.sendContent(F("

")); webServer.sendContent(haspNode); webServer.sendContent(F(" Firmware updates

Note: If updating firmware for both the ESP8266 and the Nextion LCD, you'll want to update the ESP8266 first followed by the Nextion LCD

")); // Display main firmware page - // HTTPS Disabled pending resolution of issue: https://github.com/esp8266/Arduino/issues/4696 - // Until then, using a proxy host at http://haswitchplate.com to deliver unsecured firmware images from GitHub webServer.sendContent(F("
")); if (updateEspAvailable) { @@ -2849,7 +2903,7 @@ void webHandleEspFirmware() } debugPrintln(String(F("HTTP: Sending /espfirmware page to client connected from: ")) + webServer.client().remoteIP().toString()); - String httpHeader = FPSTR(HTTP_HEADER); + String httpHeader = FPSTR(HTTP_HEAD_START); httpHeader.replace("{v}", "HASwitchPlate " + String(haspNode) + " ESP8266 firmware update"); webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); webServer.send(200, "text/html", httpHeader); @@ -2857,7 +2911,7 @@ void webHandleEspFirmware() webServer.sendContent_P(HTTP_STYLE); webServer.sendContent_P(HASP_STYLE); webServer.sendContent(F("")); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); webServer.sendContent(F("

")); webServer.sendContent(haspNode); webServer.sendContent(F(" ESP8266 firmware update

")); @@ -2894,7 +2948,7 @@ void webHandleLcdUpload() if (tftFileSize == 0) { debugPrintln(String(F("LCDOTA: FAILED, no filesize sent."))); - String httpHeader = FPSTR(HTTP_HEADER); + String httpHeader = FPSTR(HTTP_HEAD_START); httpHeader.replace("{v}", "HASwitchPlate " + String(haspNode) + " LCD update error"); webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); webServer.send(200, "text/html", httpHeader); @@ -2902,7 +2956,7 @@ void webHandleLcdUpload() webServer.sendContent_P(HTTP_STYLE); webServer.sendContent_P(HASP_STYLE); webServer.sendContent(F("")); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); webServer.sendContent(F("

")); webServer.sendContent(haspNode); webServer.sendContent(F(" LCD update FAILED

")); @@ -3117,7 +3171,7 @@ void webHandleLcdUpdateSuccess() } } debugPrintln(String(F("HTTP: Sending /lcdOtaSuccess page to client connected from: ")) + webServer.client().remoteIP().toString()); - String httpHeader = FPSTR(HTTP_HEADER); + String httpHeader = FPSTR(HTTP_HEAD_START); httpHeader.replace("{v}", "HASwitchPlate " + String(haspNode) + " LCD firmware update success"); webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); webServer.send(200, "text/html", httpHeader); @@ -3125,7 +3179,7 @@ void webHandleLcdUpdateSuccess() webServer.sendContent_P(HTTP_STYLE); webServer.sendContent_P(HASP_STYLE); webServer.sendContent(F("")); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); webServer.sendContent(F("

")); webServer.sendContent(haspNode); webServer.sendContent(F(" LCD update success

")); @@ -3145,7 +3199,7 @@ void webHandleLcdUpdateFailure() } } debugPrintln(String(F("HTTP: Sending /lcdOtaFailure page to client connected from: ")) + webServer.client().remoteIP().toString()); - String httpHeader = FPSTR(HTTP_HEADER); + String httpHeader = FPSTR(HTTP_HEAD_START); httpHeader.replace("{v}", "HASwitchPlate " + String(haspNode) + " LCD firmware update failed"); webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); webServer.send(200, "text/html", httpHeader); @@ -3153,7 +3207,7 @@ void webHandleLcdUpdateFailure() webServer.sendContent_P(HTTP_STYLE); webServer.sendContent_P(HASP_STYLE); webServer.sendContent(F("")); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); webServer.sendContent(F("

")); webServer.sendContent(haspNode); webServer.sendContent(F(" LCD update failed :(

")); @@ -3173,14 +3227,14 @@ void webHandleLcdDownload() } } debugPrintln(String(F("HTTP: Sending /lcddownload page to client connected from: ")) + webServer.client().remoteIP().toString()); - String httpHeader = FPSTR(HTTP_HEADER); + String httpHeader = FPSTR(HTTP_HEAD_START); httpHeader.replace("{v}", "HASwitchPlate " + String(haspNode) + " LCD firmware update"); webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); webServer.send(200, "text/html", httpHeader); webServer.sendContent_P(HTTP_SCRIPT); webServer.sendContent_P(HTTP_STYLE); webServer.sendContent_P(HASP_STYLE); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); webServer.sendContent(F("

")); webServer.sendContent(haspNode); webServer.sendContent(F(" LCD update

")); @@ -3202,11 +3256,11 @@ void webHandleTftFileSize() } } debugPrintln(String(F("HTTP: Sending /tftFileSize page to client connected from: ")) + webServer.client().remoteIP().toString()); - String httpHeader = FPSTR(HTTP_HEADER); + String httpHeader = FPSTR(HTTP_HEAD_START); httpHeader.replace("{v}", "HASwitchPlate " + String(haspNode) + " TFT Filesize"); webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); webServer.send(200, "text/html", httpHeader); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); tftFileSize = webServer.arg("tftFileSize").toInt(); debugPrintln(String(F("WEB: Received tftFileSize: ")) + String(tftFileSize)); } @@ -3222,7 +3276,7 @@ void webHandleReboot() } } debugPrintln(String(F("HTTP: Sending /reboot page to client connected from: ")) + webServer.client().remoteIP().toString()); - String httpHeader = FPSTR(HTTP_HEADER); + String httpHeader = FPSTR(HTTP_HEAD_START); httpHeader.replace("{v}", "HASwitchPlate " + String(haspNode) + " reboot"); webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); webServer.send(200, "text/html", httpHeader); @@ -3230,7 +3284,7 @@ void webHandleReboot() webServer.sendContent_P(HTTP_STYLE); webServer.sendContent_P(HASP_STYLE); webServer.sendContent(F("")); - webServer.sendContent_P(HTTP_HEADER_END); + webServer.sendContent_P(HTTP_HEAD_END); webServer.sendContent(F("

")); webServer.sendContent(haspNode); webServer.sendContent(F(" Reboot

")); @@ -3481,6 +3535,15 @@ void debugPrint(const String &debugText) } } +// //////////////////////////////////////////////////////////////////////////////////////////////////// +void debugPrintCrash() +{ // Debug output line of text to our debug targets + SoftwareSerial debugSerial(-1, 1); // -1==nc for RX, 1==TX pin + debugSerial.begin(debugSerialBaud); + SaveCrash.print(debugSerial); + SaveCrash.clear(); +} + //////////////////////////////////////////////////////////////////////////////////////////////////// // Submitted by benmprojects to handle "beep" commands. Split // incoming String by separator, return selected field as String diff --git a/Arduino_Sketch/debug/HASwitchPlate.ino.d1_mini.elf b/Arduino_Sketch/debug/HASwitchPlate.ino.d1_mini.elf new file mode 100644 index 0000000..f9fe4e2 Binary files /dev/null and b/Arduino_Sketch/debug/HASwitchPlate.ino.d1_mini.elf differ diff --git a/Home_Assistant/blueprints/hasp_Activate_Page.yaml b/Home_Assistant/blueprints/hasp_Activate_Page.yaml index c4f018e..0528d5d 100644 --- a/Home_Assistant/blueprints/hasp_Activate_Page.yaml +++ b/Home_Assistant/blueprints/hasp_Activate_Page.yaml @@ -14,19 +14,19 @@ blueprint: | Page 0 | Pages 1-3 | Pages 4-5 | |--------|-----------|-----------| - | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) | + | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p4-p5_3sliders.png) | | Page 6 | Page 7 | Page 8 | |--------|--------|--------| - | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) | + | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | | Page 9 | Page 10 | Page 11 | |--------|---------|---------| - | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button+1slider.png) + | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p11_1button+1slider.png) - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Activate_Page.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Activate_Page.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Core_Functionality.yaml b/Home_Assistant/blueprints/hasp_Core_Functionality.yaml index 104106a..765f9f7 100644 --- a/Home_Assistant/blueprints/hasp_Core_Functionality.yaml +++ b/Home_Assistant/blueprints/hasp_Core_Functionality.yaml @@ -6,7 +6,7 @@ blueprint: Provides core HASP functionality. Deploy one copy of this blueprint for each HASP device. - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Core_Functionality.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Core_Functionality.png) ## HASP Page and Button Reference @@ -16,15 +16,15 @@ blueprint: | Page 0 | Pages 1-3 | Pages 4-5 | |--------|-----------|-----------| - | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) | + | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p4-p5_3sliders.png) | | Page 6 | Page 7 | Page 8 | |--------|--------|--------| - | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) | + | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | | Page 9 | Page 10 | Page 11 | |--------|---------|---------| - | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button+1slider.png) + | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p11_1button+1slider.png) @@ -50,15 +50,15 @@ blueprint: ### Icons - Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/Images/hasp-fontawesome5.html) + Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/HASwitchPlate/HASPone/blob/main/Images/hasp-fontawesome5.html) ### Font examples - ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_8-10.png) + ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_8-10.png) - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Core_Functionality.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Core_Functionality.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Create_Device_Triggers.yaml b/Home_Assistant/blueprints/hasp_Create_Device_Triggers.yaml index c355661..28d1899 100644 --- a/Home_Assistant/blueprints/hasp_Create_Device_Triggers.yaml +++ b/Home_Assistant/blueprints/hasp_Create_Device_Triggers.yaml @@ -16,19 +16,19 @@ blueprint: | Page 0 | Pages 1-3 | Pages 4-5 | |--------|-----------|-----------| - | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) | + | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p4-p5_3sliders.png) | | Page 6 | Page 7 | Page 8 | |--------|--------|--------| - | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) | + | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | | Page 9 | Page 10 | Page 11 | |--------|---------|---------| - | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button+1slider.png) + | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p11_1button+1slider.png) - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Create_Device_Triggers.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Create_Device_Triggers.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Alarm_Control_page7.yaml b/Home_Assistant/blueprints/hasp_Display_Alarm_Control_page7.yaml index a236b71..c9d4324 100644 --- a/Home_Assistant/blueprints/hasp_Display_Alarm_Control_page7.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Alarm_Control_page7.yaml @@ -6,7 +6,7 @@ blueprint: Page 7 controls a selected alarm panel for code entry and arm/disarm. - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Alarm_Control_page7.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Alarm_Control_page7.png) ## HASP Page and Button Reference @@ -16,11 +16,11 @@ blueprint: | Page 7 | |--------| - | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | + | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Alarm_Control_page7.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Alarm_Control_page7.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Calendar_with_Icon.yaml b/Home_Assistant/blueprints/hasp_Display_Calendar_with_Icon.yaml index 1224213..bf3ab62 100644 --- a/Home_Assistant/blueprints/hasp_Display_Calendar_with_Icon.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Calendar_with_Icon.yaml @@ -6,7 +6,7 @@ blueprint: A HASP button displays month + date on the right with a calendar icon on the left. - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Calendar_with_Icon.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Calendar_with_Icon.png) ## HASP Page and Button Reference @@ -16,11 +16,11 @@ blueprint: | Pages 1-3 | |-----------| - | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | + | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Calendar_with_Icon.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Calendar_with_Icon.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Clock.yaml b/Home_Assistant/blueprints/hasp_Display_Clock.yaml index 3e19594..3ddc001 100644 --- a/Home_Assistant/blueprints/hasp_Display_Clock.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Clock.yaml @@ -6,7 +6,7 @@ blueprint: A HASP button displays a clock with configurable text options. - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Clock.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Clock.png) ## HASP Page and Button Reference @@ -16,15 +16,15 @@ blueprint: | Page 0 | Pages 1-3 | Pages 4-5 | |--------|-----------|-----------| - | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) | + | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p4-p5_3sliders.png) | | Page 6 | Page 7 | Page 8 | |--------|--------|--------| - | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) | + | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | | Page 9 | Page 10 | Page 11 | |--------|---------|---------| - | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button+1slider.png) + | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p11_1button+1slider.png) @@ -50,15 +50,15 @@ blueprint: ### Icons - Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/Images/hasp-fontawesome5.html) + Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/HASwitchPlate/HASPone/blob/main/Images/hasp-fontawesome5.html) ### Font examples - ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_8-10.png) + ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_8-10.png) - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Clock.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Clock.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Clock_with_Icon.yaml b/Home_Assistant/blueprints/hasp_Display_Clock_with_Icon.yaml index 337ae8b..46fb465 100644 --- a/Home_Assistant/blueprints/hasp_Display_Clock_with_Icon.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Clock_with_Icon.yaml @@ -6,7 +6,7 @@ blueprint: A HASP button displays a clock on the right with a clock icon on the left. - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Clock_with_Icon.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Clock_with_Icon.png) ## HASP Page and Button reference @@ -16,11 +16,11 @@ blueprint: | Pages 1-3 | |-----------| - | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | + | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Clock_with_Icon.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Clock_with_Icon.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Dimmer_with_Icon.yaml b/Home_Assistant/blueprints/hasp_Display_Dimmer_with_Icon.yaml index 1ba669f..2b4415e 100644 --- a/Home_Assistant/blueprints/hasp_Display_Dimmer_with_Icon.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Dimmer_with_Icon.yaml @@ -6,7 +6,7 @@ blueprint: A HASP button displays a dimmer control on page 4 and 5 with a toggle on/off icon to the left. - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Dimmer_with_Icon.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Dimmer_with_Icon.png) ## HASP Page and Button reference @@ -20,7 +20,7 @@ blueprint: - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Dimmer_with_Icon.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Dimmer_with_Icon.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Entity_State_or_Attribute.yaml b/Home_Assistant/blueprints/hasp_Display_Entity_State_or_Attribute.yaml index 8b9a463..07c891e 100644 --- a/Home_Assistant/blueprints/hasp_Display_Entity_State_or_Attribute.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Entity_State_or_Attribute.yaml @@ -6,7 +6,7 @@ blueprint: A HASP button displays the state or attribute value of an entity - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Entity_State_or_Attribute.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Entity_State_or_Attribute.png) ## Examples @@ -38,15 +38,15 @@ blueprint: | Page 0 | Pages 1-3 | Pages 4-5 | |--------|-----------|-----------| - | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) | + | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p4-p5_3sliders.png) | | Page 6 | Page 7 | Page 8 | |--------|--------|--------| - | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) | + | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | | Page 9 | Page 10 | Page 11 | |--------|---------|---------| - | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button+1slider.png) + | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p11_1button+1slider.png) @@ -72,15 +72,15 @@ blueprint: ### Icons - Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/Images/hasp-fontawesome5.html) + Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/HASwitchPlate/HASPone/blob/main/Images/hasp-fontawesome5.html) ### Font examples - ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_8-10.png) + ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_8-10.png) - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Entity_State_or_Attribute.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Entity_State_or_Attribute.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Media_Control_page8.yaml b/Home_Assistant/blueprints/hasp_Display_Media_Control_page8.yaml index 26eafe1..0e6dd75 100644 --- a/Home_Assistant/blueprints/hasp_Display_Media_Control_page8.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Media_Control_page8.yaml @@ -6,7 +6,7 @@ blueprint: Page 8 controls a selected media player with artist and track info, track back/play|pause/track forward, and volume control - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Media_Control_page8.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Media_Control_page8.png) ## HASP Page and Button reference @@ -16,12 +16,12 @@ blueprint: | Page 8 | |--------| - | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) | + | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Media_Control_page8.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Media_Control_page8.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Temperature_with_Icon_and_Colors.yaml b/Home_Assistant/blueprints/hasp_Display_Temperature_with_Icon_and_Colors.yaml index 3c187bc..296a018 100644 --- a/Home_Assistant/blueprints/hasp_Display_Temperature_with_Icon_and_Colors.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Temperature_with_Icon_and_Colors.yaml @@ -6,7 +6,7 @@ blueprint: A HASP button displays the current temperature on the right with a dynamic thermometer icon on the left and (optional) colors. - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Temperature_with_Icon_and_Colors.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Temperature_with_Icon_and_Colors.png) ## HASP Page and Button reference @@ -16,7 +16,7 @@ blueprint: | Pages 1-3 | |-----------| - | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | + | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | @@ -41,7 +41,7 @@ blueprint: | Brown | 48192 | - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Temperature_with_Icon_and_Colors.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Temperature_with_Icon_and_Colors.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Template.yaml b/Home_Assistant/blueprints/hasp_Display_Template.yaml index ea7ab07..7abf0a2 100644 --- a/Home_Assistant/blueprints/hasp_Display_Template.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Template.yaml @@ -6,7 +6,7 @@ blueprint: A button on the HASP will display the output of a template. The template is updated when the state of a selected entity updates. - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Template.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Template.png) ## Examples @@ -28,15 +28,15 @@ blueprint: | Page 0 | Pages 1-3 | Pages 4-5 | |--------|-----------|-----------| - | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) | + | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p4-p5_3sliders.png) | | Page 6 | Page 7 | Page 8 | |--------|--------|--------| - | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) | + | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | | Page 9 | Page 10 | Page 11 | |--------|---------|---------| - | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button+1slider.png) + | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p11_1button+1slider.png) @@ -62,15 +62,15 @@ blueprint: ### Icons - Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/Images/hasp-fontawesome5.html) + Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/HASwitchPlate/HASPone/blob/main/Images/hasp-fontawesome5.html) ### Font examples - ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_8-10.png) + ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_8-10.png) - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Template.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Template.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Text.yaml b/Home_Assistant/blueprints/hasp_Display_Text.yaml index 2d36458..3f3baa1 100644 --- a/Home_Assistant/blueprints/hasp_Display_Text.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Text.yaml @@ -7,7 +7,7 @@ blueprint: A button on the HASP will display text. This can be useful when combined with other blueprints which perform an action, but don't apply a label to a button. Deploy both blueprints on the same button, and now you have a button that says things things and does things. - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Text.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Text.png) ## HASP Page and Button Reference @@ -17,15 +17,15 @@ blueprint: | Page 0 | Pages 1-3 | Pages 4-5 | |--------|-----------|-----------| - | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) | + | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p4-p5_3sliders.png) | | Page 6 | Page 7 | Page 8 | |--------|--------|--------| - | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) | + | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | | Page 9 | Page 10 | Page 11 | |--------|---------|---------| - | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button+1slider.png) + | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p11_1button+1slider.png) @@ -51,15 +51,15 @@ blueprint: ### Icons - Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/Images/hasp-fontawesome5.html) + Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/HASwitchPlate/HASPone/blob/main/Images/hasp-fontawesome5.html) ### Font examples - ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_8-10.png) + ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_8-10.png) - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Text.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Text.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Toggle.yaml b/Home_Assistant/blueprints/hasp_Display_Toggle.yaml index 1ee58b5..37b5c3c 100644 --- a/Home_Assistant/blueprints/hasp_Display_Toggle.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Toggle.yaml @@ -8,7 +8,7 @@ blueprint: There are a lot of options below! No worries, the defaults should work in a lot of cases. - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Toggle.gif) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Toggle.gif) ## Examples @@ -51,15 +51,15 @@ blueprint: | Page 0 | Pages 1-3 | Pages 4-5 | |--------|-----------|-----------| - | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) | + | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p4-p5_3sliders.png) | | Page 6 | Page 7 | Page 8 | |--------|--------|--------| - | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) | + | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | | Page 9 | Page 10 | Page 11 | |--------|---------|---------| - | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button+1slider.png) + | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p11_1button+1slider.png) @@ -85,11 +85,11 @@ blueprint: ### Icons - Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/Images/hasp-fontawesome5.html) + Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/HASwitchPlate/HASPone/blob/main/Images/hasp-fontawesome5.html) ### Font examples - ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_8-10.png) + ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_8-10.png) @@ -115,7 +115,7 @@ blueprint: - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Toggle.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Toggle.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Volume_Control_page8.yaml b/Home_Assistant/blueprints/hasp_Display_Volume_Control_page8.yaml index 7c00e85..91e62ac 100644 --- a/Home_Assistant/blueprints/hasp_Display_Volume_Control_page8.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Volume_Control_page8.yaml @@ -6,7 +6,7 @@ blueprint: The slider button on page 8 displays a volume control - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Volume_Control_page8.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Volume_Control_page8.png) ## HASP Page and Button reference @@ -16,12 +16,12 @@ blueprint: | Page 8 | |--------| - | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) | + | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Volume_Control_page8.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Volume_Control_page8.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Weather_Condition.yaml b/Home_Assistant/blueprints/hasp_Display_Weather_Condition.yaml index 9cc394a..2b6dc0f 100644 --- a/Home_Assistant/blueprints/hasp_Display_Weather_Condition.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Weather_Condition.yaml @@ -6,7 +6,7 @@ blueprint: A HASP button displays the current weather condition - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Weather_Condition.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Weather_Condition.png) ## HASP Page and Button Reference @@ -16,15 +16,15 @@ blueprint: | Page 0 | Pages 1-3 | Pages 4-5 | |--------|-----------|-----------| - | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) | + | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p4-p5_3sliders.png) | | Page 6 | Page 7 | Page 8 | |--------|--------|--------| - | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) | + | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | | Page 9 | Page 10 | Page 11 | |--------|---------|---------| - | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button+1slider.png) + | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p11_1button+1slider.png) @@ -50,15 +50,15 @@ blueprint: ### Icons - Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/Images/hasp-fontawesome5.html) + Fonts 5-10 also include [1400+ icons which you can copy and paste from here](https://htmlpreview.github.io/?https://github.com/HASwitchPlate/HASPone/blob/main/Images/hasp-fontawesome5.html) ### Font examples - ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_8-10.png) + ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_8-10.png) - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Weather_Condition.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Weather_Condition.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Weather_Condition_with_Icon.yaml b/Home_Assistant/blueprints/hasp_Display_Weather_Condition_with_Icon.yaml index 5f64252..4cdbd0a 100644 --- a/Home_Assistant/blueprints/hasp_Display_Weather_Condition_with_Icon.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Weather_Condition_with_Icon.yaml @@ -6,7 +6,7 @@ blueprint: A HASP button displays the current weather condition on the right with a matching icon on the left - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Weather_Condition_with_Icon.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Weather_Condition_with_Icon.png) ## HASP Page and Button reference @@ -16,10 +16,10 @@ blueprint: | Pages 1-3 | |-----------| - | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | + | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Weather_Condition_with_Icon.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Weather_Condition_with_Icon.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Display_Weather_Forecast.yaml b/Home_Assistant/blueprints/hasp_Display_Weather_Forecast.yaml index c11a6a6..5f310b9 100644 --- a/Home_Assistant/blueprints/hasp_Display_Weather_Forecast.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Weather_Forecast.yaml @@ -8,7 +8,7 @@ blueprint: Available forecast conditions will vary by weather provider, check your selected provider's state under `Developer Tools` > `States` to get a sense of what your selected provider has to offer. - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Display_Weather_Forecast.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Display_Weather_Forecast.png) ### HASP Page and Button reference @@ -16,15 +16,15 @@ blueprint: | Page 0 | Pages 1-3 | Pages 4-5 | |--------|-----------|-----------| - | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) | + | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p4-p5_3sliders.png) | | Page 6 | Page 7 | Page 8 | |--------|--------|--------| - | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) | + | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | | Page 9 | Page 10 | Page 11 | |--------|---------|---------| - | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button+1slider.png) + | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p11_1button+1slider.png) @@ -55,10 +55,10 @@ blueprint: ### Font examples - ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_Fonts_8-10.png) + ![HASP Fonts 0-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_0-3.png) ![HASP Fonts 4-7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_4-7.png) ![HASP Fonts 8-10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_Fonts_8-10.png) - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Display_Weather_Forecast.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Display_Weather_Forecast.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Perform_Action.yaml b/Home_Assistant/blueprints/hasp_Perform_Action.yaml index bb7bc4f..7251066 100644 --- a/Home_Assistant/blueprints/hasp_Perform_Action.yaml +++ b/Home_Assistant/blueprints/hasp_Perform_Action.yaml @@ -12,19 +12,19 @@ blueprint: | Page 0 | Pages 1-3 | Pages 4-5 | |--------|-----------|-----------| - | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p4-p5_3sliders.png) | + | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p4-p5_3sliders.png) | | Page 6 | Page 7 | Page 8 | |--------|--------|--------| - | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p8_5buttons+1slider.png) | + | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | | Page 9 | Page 10 | Page 11 | |--------|---------|---------| - | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/NextionUI_p11_1button+1slider.png) + | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p11_1button+1slider.png) - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Perform_Action.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Perform_Action.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Remove_MQTT_Discovery_Devices.yaml b/Home_Assistant/blueprints/hasp_Remove_MQTT_Discovery_Devices.yaml index 2ef487d..7cef58a 100644 --- a/Home_Assistant/blueprints/hasp_Remove_MQTT_Discovery_Devices.yaml +++ b/Home_Assistant/blueprints/hasp_Remove_MQTT_Discovery_Devices.yaml @@ -1,7 +1,7 @@ blueprint: name: "HASP Remove MQTT discovery messages" description: "Press RUN ACTIONS to remove retained MQTT discovery messages for a decommissioned HASP" - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Remove_MQTT_Discovery_Devices.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Remove_MQTT_Discovery_Devices.yaml" domain: automation input: haspname: diff --git a/Home_Assistant/blueprints/hasp_Theme_Dark_on_Light.yaml b/Home_Assistant/blueprints/hasp_Theme_Dark_on_Light.yaml index 9497cc7..ba379c5 100644 --- a/Home_Assistant/blueprints/hasp_Theme_Dark_on_Light.yaml +++ b/Home_Assistant/blueprints/hasp_Theme_Dark_on_Light.yaml @@ -6,9 +6,9 @@ blueprint: Press RUN ACTIONS to apply the theme Dark on Light to the selected HASP device - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Theme_Dark_on_Light.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Theme_Dark_on_Light.png) - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Theme_Dark_on_Light.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Theme_Dark_on_Light.yaml" domain: automation input: haspdevice: diff --git a/Home_Assistant/blueprints/hasp_Theme_Light_on_Dark.yaml b/Home_Assistant/blueprints/hasp_Theme_Light_on_Dark.yaml index 28bdd3e..9e04c49 100644 --- a/Home_Assistant/blueprints/hasp_Theme_Light_on_Dark.yaml +++ b/Home_Assistant/blueprints/hasp_Theme_Light_on_Dark.yaml @@ -6,9 +6,9 @@ blueprint: Press RUN ACTIONS to apply the theme Light on Dark to the selected HASP device - ![Preview](https://raw.githubusercontent.com/HASwitchPlate/Blueprints/main/images/hasp_Theme_Light_on_Dark.png) + ![Preview](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/hasp_Theme_Light_on_Dark.png) - source_url: "https://github.com/HASwitchPlate/Blueprints/blob/main/hasp_Theme_Light_on_Dark.yaml" + source_url: "https://github.com/HASwitchPlate/HASPone/blob/main/Home_Assistant/blueprints/hasp_Theme_Light_on_Dark.yaml" domain: automation input: haspdevice: diff --git a/images/hasp-fontawesome5.html b/images/hasp-fontawesome5.html new file mode 100644 index 0000000..a8cdb9d --- /dev/null +++ b/images/hasp-fontawesome5.html @@ -0,0 +1,4356 @@ + + + + + + + + + + HASwitchPlate Font Awesome 5 Icons + + + +
+ + +
+
+
+ +

The subset of Font Awesome v5.12 icons available in HASP are shown below. Highlight the icon + image, copy, and paste into Home Assistant blueprints for your HASP.

+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/images/hasp-fontawesome5.woff b/images/hasp-fontawesome5.woff new file mode 100644 index 0000000..b88b6ee --- /dev/null +++ b/images/hasp-fontawesome5.woff @@ -0,0 +1,1293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HASwitchPlate/hasp-fontawesome5.woff at master · aderusha/HASwitchPlate + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content + + + + + + + + + +
+ +
+ + + + + +
+ + + +
+ + + + + + + + + +
+
+
+ + + + + + + + + + + + +
+ +
+ +
+

+ + + / + + HASwitchPlate + + +

+ + +
+ +
    + +
  • + +
    + + + + + + Unwatch + + + + + + + +
    +
    +

    Notifications

    + +
    + +
    +
    + + + + + + + + +
    + +
    +
    +
    + + +
    +
    + +
    + +
  • + +
  • +
    +
    + + +
    +
    + + +
    + +
  • + +
  • +
    +
    + + + Fork + + + +
    + +

    Fork HASwitchPlate

    +
    + +
    + +
    +

    If this dialog fails to load, you can visit the fork page directly.

    +
    +
    + +
    +
    +
    + + +
  • +
+ +
+ + +
+ + +
+
+ + + + + +
+ + + + Permalink + + + +
+ +
+
+ + + master + + + + +
+ + + +
+
+
+ +
+ + + + Go to file + + +
+ + +
+ +
+ + + +
+ +
+
+
 
+
+ +
+
 
+ Cannot retrieve contributors at this time +
+
+ + + + + + +
+ +
+
+ + 186 KB +
+ +
+ +
+ Download +
+ +
+ + + + +
+ +
+
+
+ + + +
+
+ View raw +
+
+ +
+ + + +
+ + +
+ + +
+
+ + +
+ + + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + diff --git a/images/hasp-fontawesome5.woff2 b/images/hasp-fontawesome5.woff2 new file mode 100644 index 0000000..98efda6 Binary files /dev/null and b/images/hasp-fontawesome5.woff2 differ