This document is generated by AI, and there may be issues with the specific details.
- Version: 1.0
- Date: 2025-01-XX
- Purpose: Public technical specification for format conversion
- Target Platform: ESP32 E-Paper Display Devices
| <!DOCTYPE html> | |
| <html lang="zh-CN"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>批量XTH文件生成器</title> | |
| <style> | |
| * { | |
| box-sizing: border-box; | |
| margin: 0; |
| blueprint: | |
| name: Sengled light switch (Zigbee2MQTT) | |
| description: 'Control anything using Sengled E1E-G7F smart light switch / dimmer. | |
| Customizable actions for each press. | |
| Supported actions: on, on_double, on_long, up, up_long, down, down_long, off, off_double, off_long. | |
| Note: up/down actions always trigger before up_long/down_long. This is not the case for on/off actions. | |
| ' |
| blueprint: | |
| name: Philips Hue Dimmer switch v2 (Zigbee2MQTT) | |
| description: | |
| "Tested with Philips Hue Smart Wireless Dimmer Switch V2 (929002398602). | |
| \n\n | |
| To have different actions on short press and on hold (long press), use 'button release' (`*_press_release`) and 'button hold once' (`*_hold_once`) commands, | |
| as 'press' (`*_press`) will always trigger before 'button hold' (`*_hold`). | |
| \n\n | |
| When you hold a button, 'button hold' (`*_hold`) command is repeated roughly once per second. This may not work as desired with actions like toggling light/switch. | |
| If you want an action to run only once when the button hold action is registered, use 'button hold once' (`*_hold_once`). It's better than using 'button hold release' |
| blueprint: | |
| name: Aqara Wireless Switch (single, double, hold, release) | |
| description: 'Control anything using Aqara Wireless Switch. | |
| Customizable actions for each press. | |
| This version of the blueprint is for buttons supporting single, double, hold and | |
| release actions. ' | |
| domain: automation |
| # 1. Open https://link.springer.com/search/page/1?facet-content-type=%22Book%22&package=mat-covid19_textbooks | |
| # 2. Click on the button on the top right of the table to save results into CSV file (SearchResults.csv) | |
| # 3. Run: python springer.py SearchResults.csv | |
| # Note: Python 3 is needed, `pip install requests` if the module is missing | |
| import sys | |
| import csv | |
| import requests | |
| from pathlib import Path | |
| from os import path |
| #include <gtk/gtk.h> | |
| #include <glib.h> | |
| #include <glib/gprintf.h> | |
| void map_cb(GtkWidget *widget, gpointer data) | |
| { | |
| gtk_window_set_keep_above(GTK_WINDOW(widget), TRUE); | |
| g_print("gtk fullscreen window active\n"); | |
| FILE *fp = fopen("/var/tmp/crfswin.running", "w"); | |
| fclose(fp); |
| Index: bin/ocra | |
| =================================================================== | |
| --- bin/ocra (revision 2cb11c915af52197f90abd944d84219305d8c602) | |
| +++ bin/ocra (revision ) | |
| @@ -181,7 +181,7 @@ | |
| IGNORE_GEMFILES = %r{( | |
| # Auxiliary files in the root of the gem | |
| - ^(\.\/)?(History|Install|Manifest|README|Licen[sc]e|Contributors|ChangeLog|BSD|GPL).*$ | | |
| + ^(\.\/)?(History|Install|Manifest|README|CHANGES|Licen[sc]e|Contributors|ChangeLog|BSD|GPL).*$ | |
| static const char *PL_START = "000000000000FACEB003AABBCCDD"; | |
| static const char *PL3_START = "505347726F6F7665"; | |
| static const char *PL3_END = "1201000200000008AAAABBBB"; | |
| unsigned int PL_SIZE = 3822; | |
| int hex2bin(char *hex_file, char *bin_file) { | |
| FILE *infile, *outfile; | |
| char line[100]; | |
| char buffer[50*1024]; | |
| char outc = 0; |