Compare commits

...

11 Commits

Author SHA1 Message Date
github-actions[bot]
9d6c73fb05 Update HA version badge to 2025.12.2 2025-12-12 17:38:58 +00:00
Carlo Costanzo
8ec5173f4d Update HA version to 2025.12.2 - N8N Testing. 2025-12-12 12:38:35 -05:00
github-actions[bot]
c245c1ca78 Update HA version badge to 2025.12.1 2025-12-11 21:08:38 +00:00
Carlo Costanzo
96e86d6587 Refactor automation in garadget.yaml to simplify media player actions for showing and hiding the garage camera. Update vacuum.yaml to enhance on-demand vacuum control with input_boolean integration, ensuring proper state management during cleaning cycles. 2025-12-11 16:08:20 -05:00
Carlo Costanzo
3345bf3b95 Merge pull request #1549 from CCOSTAN/llm-vision 2025-12-11 16:07:28 -05:00
Carlo Costanzo
a8eca6f4bb Remove backups.yaml configuration file and update llmvision.yaml for garbage can detection, including renaming entities and adjusting automation logic. Modify air quality condition in briefing.yaml to display only when the index exceeds 50. 2025-12-11 09:23:36 -05:00
github-actions[bot]
d900c642dd Update HA version badge to 2025.12.1 2025-12-10 15:54:12 +00:00
Carlo Costanzo
1e490e53f6 Update holiday.yaml to change resource URLs to local paths and refactor flag days logic for improved readability and efficiency. 2025-12-10 10:53:50 -05:00
github-actions[bot]
5892711916 Update HA version badge to 2025.12.1 2025-12-10 15:26:29 +00:00
Carlo Costanzo
1ff1d9d81c Remove deprecated configuration files for various integrations including Arris Router, Battery Levels, Grafana, SkyBell HD, USPS, and YouTube Picker to streamline the setup and improve maintainability. 2025-12-10 10:25:58 -05:00
Carlo Costanzo
02a554a793 Refactor air quality display in briefing.yaml to improve clarity. Adjusted conditions for displaying air quality information, ensuring it only shows when the index is above 15. 2025-12-09 18:49:29 -05:00
17 changed files with 361 additions and 360 deletions

View File

@@ -1 +1 @@
2025.12.1 2025.12.2

View File

@@ -1,25 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# Neato Support for D7 Connected Botvac - control my [Neato Vacuum](http://amzn.to/2kqnnqu) with Home Assistant.
#-------------------------------------------
homeassistant:
customize_glob:
"*.arris_tg1682g_router*":
#-------------------------------------------
group:
router:
name: Router Stats
entities:
- sensor.arris_tg1682g_router_bytes_received
- sensor.arris_tg1682g_router_bytes_sent
- sensor.arris_tg1682g_router_kbytesec_received
- sensor.arris_tg1682g_router_kbytesec_sent
- sensor.arris_tg1682g_router_packets_received
- sensor.arris_tg1682g_router_packets_sent
- sensor.arris_tg1682g_router_packetssec_received
- sensor.arris_tg1682g_router_packetssec_sent

View File

@@ -1,37 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# Backups - Monitor backup jobs and alert on failures.
#-------------------------------------------
######################################################################
## Duplicati/backup status sensors and notifications.
######################################################################
# Added Duplicati to HA - https://github.com/CCOSTAN/Home-AssistantConfig/issues/1498
automation:
- alias: 'Backup Job Failed Notification'
id: 5b3a4c89-1234-4567-8901-23456789abcf
trigger:
- platform: state
entity_id: sensor.dockerconfigs_backup_error_message
from: '-'
action:
- service: script.notify_engine
data:
who: 'carlo'
value1: 'Backup Job Error!'
value2: "Error: {{ states('sensor.dockerconfigs_backup_error_message') }}"
- alias: 'Backup Size Change Alert'
id: 5b3a4c89-1234-4567-8901-23456789abd0
trigger:
- platform: numeric_state
entity_id: sensor.dockerconfigs_backup_target_size
above: 10000000000 # Alert if backup size is over 10GB
action:
- service: script.notify_engine
data:
who: 'carlo'
value1: 'Backup Size Warning'
value2: >
Backup target size has grown to {{ states('sensor.dockerconfigs_backup_target_size') | float / 1000000000 }} GB.
Please verify backup contents and available storage.

View File

@@ -1,54 +0,0 @@
#-------------------------------------------
# Fire Tablet Alarm Panel -
# https://www.vcloudinfo.com/2017/07/visualizing-smart-home-using-home.html
#-------------------------------------------
#
# homeassistant:
# customize_glob:
# "sensor.*_alarm_panel*":
#
#
# "binary_sensor.*_alarm_panel*":
#
#
sensor:
- platform: template
sensors:
low_battery:
friendly_name: 'Low Battery'
value_template: >
{%- set threshold = 15 -%}
{%- set domains = ['light', 'switch', 'sensor', 'zwave', 'lock', 'binary_sensor'] -%}
{%- for domain in domains -%}
{%- for item in states[domain] if ((item.attributes.battery_level is defined and item.attributes['battery_level'] | int < threshold) or ("battery" in item.name | lower and ((item.state | int < threshold and item.state|int != 0) or item.state | lower == "low" or item.state | lower == "unknown"))) -%}
{{ item.attributes.friendly_name }} (
{%- if item.attributes.battery_level is defined -%}
{{ item.attributes.battery_level}}
{%- else -%}
{{item.state}}
{%- endif -%}%)
{%- if not loop.last -%}
{{', '}}
{%- endif -%}
{%- endfor -%}
{%- endfor -%}
automation:
- alias: 'Battery Alert'
id: 1a4f06f0-8763-4801-ba6c-55b87d1b0286
initial_state: 'on'
trigger:
- platform: time
at: '10:00:00'
- platform: time
at: '18:00:00'
condition:
condition: template
value_template: "{% if states('sensor.low_battery') %}true{% endif %}"
action:
- service: script.notify_engine
data:
value1: "Low battery levels: {{ states('sensor.low_battery') }}"
who: 'carlo'
apns_id: 'information'

View File

@@ -413,22 +413,6 @@ automation:
from: 'home' from: 'home'
action: action:
- choose:
- conditions: "{{ is_state('binary_sensor.sleepnumber_carlo_stacey_is_in_bed','on') }}"
sequence:
- service: media_player.play_media
data:
entity_id: media_player.stacey_bedroom
media_content_id: 'show garage camera from home assistant'
media_content_type: custom
- delay: '00:10:00'
- service: media_player.play_media
data:
entity_id: media_player.stacey_bedroom
media_content_id: 'hide garage camera'
media_content_type: custom
default:
- service: media_player.play_media - service: media_player.play_media
target: target:
entity_id: media_player.kitchen entity_id: media_player.kitchen

View File

@@ -1,53 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# More Info : https://www.vcloudinfo.com/
#-------------------------------------------
sensor:
- platform: command_line
name: "Download Grafana Solar"
command: 'curl -s -H "Authorization: Bearer eyJrIjoiZ0UwS1hpRVdCbFVVSTNSdER0Z29maHc4QmVuSXhxalYiLCJuIjoiSEFDYW1lcmEiLCJpZCI6MX0=" "http://192.168.10.10:3000/render/d/h_wosLIik/solar?orgId=1&from=now-1d%2Fd&to=now-1d%2Fd&height=750&width=1920" > /config/www/custom_ui/floorplan/images/branding/solar_readings.png'
scan_interval: 3000
- platform: command_line
name: "Download Grafana ATT SpeedTest"
command: 'curl -s -H "Authorization: Bearer eyJrIjoiZ0UwS1hpRVdCbFVVSTNSdER0Z29maHc4QmVuSXhxalYiLCJuIjoiSEFDYW1lcmEiLCJpZCI6MX0=" "http://192.168.10.10:3000/render/d/bdR1ZnFZk/att-speedtest?viewPanel=2&orgId=1" > /config/www/custom_ui/floorplan/images/branding/att_speedtest.png'
scan_interval: 3000
camera:
- platform: generic
name: "Grafana Solar Graph"
still_image_url: 'http://192.168.10.10:3000/render/d/h_wosLIik/solar?orgId=1&from=now-1d%2Fd&to=now-1d%2Fd&height=750&width=1920'
username: HA
password: HA
##############################################################################
### Automations - Detect when things are not right. Like any Good Watchdog.
##############################################################################
automation:
- alias: 'Tweet Solar Production'
id: bd698bd9-780b-4268-bf90-2c7ff6daae99
trigger:
- platform: sun
event: sunset
offset: '+02:30:00'
action:
- service: script.tweet_engine_image
data:
tweet: >-
{{ [
"I have just finished crunching the numbers and here is the latest #Solar Production graph. "
] | random + " #Charts #Tesla "
+ [
"(https://youtu.be/BartadUzGOA)",
"(https://www.vcloudinfo.com/2018/01/going-green-to-save-some-green-in-2018.html)",
"(https://www.vcloudinfo.com/2018/09/re-installing-tesla-solar-panels-again.html)"
]| random
}}
image: >-
{% set pictures = [
"/config/www/custom_ui/floorplan/images/branding/solar_readings.png"
] %}
{{ pictures|random }}

View File

@@ -29,7 +29,7 @@ homeassistant:
############################################################################### ###############################################################################
sensor: sensor:
- platform: rest - platform: rest
resource: https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/config/json_data/holidays.json resource: http://localhost:8123/local/json_data/holidays.json
name: Holiday name: Holiday
scan_interval: 14400 scan_interval: 14400
value_template: > value_template: >
@@ -45,29 +45,22 @@ sensor:
# Sensor Uses Flag data generated by AI # Sensor Uses Flag data generated by AI
################################################################################ ################################################################################
- platform: rest - platform: rest
resource: https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/config/json_data/flag_days.json resource: http://localhost:8123/local/json_data/flag_days.json
name: Flag name: Flag
scan_interval: 14400 scan_interval: 14400
value_template: >- value_template: >-
{% set now_string = now().strftime('%m/%d') %} {% set now_string = now().month ~ '/' ~ now().day %}
{% set now_full_string = now().strftime('%m/%d/%Y') %} {% set now_full_string = now().strftime('%m/%d/%Y') %}
{% if value_json is defined and value_json.Flag_Days_US is defined %} {% set flag_data = value_json.Flag_Days_US if value_json is defined and value_json.Flag_Days_US is defined else {} %}
{% set static_days = value_json.Flag_Days_US.static %} {% set static_days = flag_data.static if flag_data.static is defined else {} %}
{% set dynamic_days = value_json.Flag_Days_US.dynamic %} {% set dynamic_days = flag_data.dynamic if flag_data.dynamic is defined else {} %}
{% if static_days is defined and now_string in static_days %} {% if now_string in static_days %}
True True
{% elif dynamic_days is defined %} {% elif now_full_string in dynamic_days %}
{% for day_val in dynamic_days %}
{% if day_val.date == now_full_string %}
True True
{% endif %}
{% endfor %}
{% else %} {% else %}
False False
{% endif %} {% endif %}
{% else %}
{% endif %}
################################################################################ ################################################################################
# Countdown Sensor using WolfRam Alpha Natural language queries # Countdown Sensor using WolfRam Alpha Natural language queries

View File

@@ -0,0 +1,96 @@
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# LLM Vision - Garage Cans X Check - detects reflective X on right wall
# Trigger with input_button.llmvision_garbage_check to update garbage_cans_out.
# -------------------------------------------------------------------
# Notes: LLMVision analyzes camera.garagecam; expects strict "on"/"off" output.
# Docs: https://llmvision.gitbook.io/getting-started/usage/image-analyzer
######################################################################
input_button:
llmvision_garbage_check:
name: "LLM Vision: Garage cans check"
icon: mdi:delete-variant
input_boolean:
garbage_cans_out:
name: "Garbage Cans Out"
icon: mdi:trash-can
input_text:
llmvision_garbage_last_response:
name: "LLM Vision garage response"
max: 255
llmvision_garbage_last_keyframe:
name: "LLM Vision garage key frame"
max: 255
input_datetime:
llmvision_garbage_last_run:
name: "LLM Vision garage last run"
has_date: true
has_time: true
template:
- binary_sensor:
- name: "Garbage Cans Out"
unique_id: llmvision_garbage_cans_out
device_class: presence
state: "{{ is_state('input_boolean.garbage_cans_out', 'on') }}"
attributes:
last_run: "{{ states('input_datetime.llmvision_garbage_last_run') }}"
last_response: "{{ states('input_text.llmvision_garbage_last_response') }}"
last_key_frame: "{{ states('input_text.llmvision_garbage_last_keyframe') }}"
source_camera: camera.garagecam
automation:
- alias: LLM Vision - Garbage cans out
id: d88a2e6d-78f3-4bb7-9d9f-c4d06e6eb5a9
mode: restart
trigger:
- platform: state
entity_id: input_button.llmvision_garbage_check
variables:
prompt_text: >
Examine the image. I have taped a reflective X on the right wall. Look for the reflective X on the right wall. If you clearly see the X, respond exactly: on. If you cannot see the X, respond exactly: off. No other words.
action:
- service: llmvision.data_analyzer
response_variable: llmvision_result
data:
provider: !secret llmvision_provider_entry
model: gpt-4.1-nano
message: "{{ prompt_text }}"
sensor_entity: input_boolean.garbage_cans_out
image_entity:
- camera.garagecam
include_filename: false
target_width: 1280
max_tokens: 16
expose_images: true
- service: input_text.set_value
target:
entity_id: input_text.llmvision_garbage_last_response
data:
value: "{{ (llmvision_result.response_text | default('unknown'))[:250] }}"
- choose:
- conditions: "{{ llmvision_result is defined and llmvision_result.key_frame is defined }}"
sequence:
- service: input_text.set_value
target:
entity_id: input_text.llmvision_garbage_last_keyframe
data:
value: "{{ llmvision_result.key_frame }}"
default:
- service: input_text.set_value
target:
entity_id: input_text.llmvision_garbage_last_keyframe
data:
value: ""
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.llmvision_garbage_last_run
data:
datetime: "{{ now() }}"

23
config/packages/n8n.yaml Normal file
View File

@@ -0,0 +1,23 @@
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# n8n Discord Router - Route HA events to Discord via JoAnnaBot
# Central REST command into n8n's Discord routing webhook
# -------------------------------------------------------------------
# <No related GitHub issue>
# REST endpoint: n8n webhook /discord-router
######################################################################
rest_command:
send_to_discord:
url: "http://192.168.10.69:5678/webhook/discord-router"
method: POST
content_type: "application/json"
payload: >
{
"topic": "{{ topic }}",
"message": "{{ message }}"
}

View File

@@ -1,96 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
###################################
## [SkyBell HD](https://amzn.to/2dcexIB)
###################################
skybell:
username: !secret skybell_username
password: !secret skybell_password
camera:
- platform: skybell
monitored_conditions:
- avatar
- activity
activity_name: "Last Activity"
binary_sensor:
- platform: skybell
monitored_conditions:
- button
- motion
light:
- platform: skybell # Part of the Outdoor Front Lights Group
sensor:
- platform: skybell
monitored_conditions:
- chime_level
button:
- platform: skybell
monitored_conditions:
# - do_not_disturb
- motion_sensor
###################################
## Automations
###################################
## Doorbell Press
automation:
- alias: 'Log SkyBell Pressed Activity'
id: 64226512-f35d-4179-bfcb-9de158b8d3f4
trigger:
- platform: state
entity_id:
- binary_sensor.skybell_front_door_button
to: 'on'
- platform: event
event_type: skybell_pressed
condition:
- condition: template
value_template: >
{%- if states.binary_sensor.skybell_front_door_button.attributes.last_triggered -%}
{{ (as_timestamp(now()) - as_timestamp(states.binary_sensor.skybell_front_door_button.attributes.last_triggered)) > 200 }}
{%- else -%}
true
{%- endif -%}
action:
- service: script.skybell_pressed
# Motion Sensing
- alias: 'Log SkyBell Motion detection'
id: a22c2cb7-08b2-4bd1-bc82-77201253a000
trigger:
- platform: event
event_type: skybell_motion
action:
- service: script.front_house_motion
# Turn SkyBell Light and Neato Schedule back on if it's turned off. Like any Good Watchdog.
- alias: Automated Mismatch WatchDog!
id: bff434b9-5916-42d1-8620-5723b4b1879d
trigger:
- platform: state
entity_id:
- light.front_door
- switch.carlo_neato_schedule
to: 'off'
#Turn it back on!
action:
- service: homeassistant.turn_on
data:
entity_id: "{{ trigger.entity_id }}"

View File

@@ -1,20 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
#---Sensor Mail and Packages-----------------------------
usps:
username: !secret myusps_username
password: !secret myusps_password
camera:
- platform: usps
scan_interval: 5
group:
mail:
name: Mailbox Information
entities:
- sensor.usps_mail
- sensor.usps_packages
- camera.usps_mail

View File

@@ -168,6 +168,9 @@ automation:
- condition: template - condition: template
value_template: "{{ not is_state('vacuum.l10s_vacuum', 'cleaning') }}" value_template: "{{ not is_state('vacuum.l10s_vacuum', 'cleaning') }}"
action: action:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.l10s_vacuum_on_demand
- service: script.l10s_vacuum_start_next_room - service: script.l10s_vacuum_start_next_room
- alias: 'Away Vacuum: Dock When Family Returns' - alias: 'Away Vacuum: Dock When Family Returns'
@@ -232,6 +235,9 @@ automation:
- condition: state - condition: state
entity_id: vacuum.l10s_vacuum entity_id: vacuum.l10s_vacuum
state: 'cleaning' state: 'cleaning'
- condition: state
entity_id: input_boolean.l10s_vacuum_on_demand
state: 'on'
action: action:
- service: input_text.set_value - service: input_text.set_value
@@ -300,6 +306,9 @@ automation:
entity_id: input_text.l10s_vacuum_room_queue entity_id: input_text.l10s_vacuum_room_queue
data: data:
value: "" value: ""
- service: input_boolean.turn_off
target:
entity_id: input_boolean.l10s_vacuum_on_demand
- service: script.l10s_vacuum_start_next_room - service: script.l10s_vacuum_start_next_room
- alias: 'Vacuum Sensor Cleaning Silencer' - alias: 'Vacuum Sensor Cleaning Silencer'

View File

@@ -35,11 +35,8 @@
[Here is the current weather outside] [Here is the current weather outside]
{% set aq_description = state_attr('sensor.bear_stone_common_air_quality_index', 'description') | default('') %} {% set aq_description = state_attr('sensor.bear_stone_common_air_quality_index', 'description') | default('') %}
{% set aq_index = states('sensor.bear_stone_common_air_quality_index') | int(0) %} {% set aq_index = states('sensor.bear_stone_common_air_quality_index') | int(0) %}
{% if aq_description %} {% if aq_index >= 50 %}
Air Quality: {{ aq_description }} [Air Quality: {{ aq_description }}]
{% endif %}
{% if aq_index >= 150 %}
[Air quality is unhealthy; limit outdoor activity]
{% endif %} {% endif %}
{% set pirateweather_metrics = states.sensor {% set pirateweather_metrics = states.sensor
| selectattr('entity_id','search','pirateweather') | selectattr('entity_id','search','pirateweather')

View File

@@ -1,14 +0,0 @@
>-
{% set pick = [
"ThrowBack", "S01E01", "S01E02","S01E03", "S01E04","S01E05", "S01E06","S01E07", "S01E08","S01E09", "S01E10",
"S01E11", "S01E12","S01E13", "S01E14","S01E15", "S01E16","S01E17", "S01E18","S01E19", "S01E20", "S01E21",
"S02E01", "S02E02","S02E03", "S02E04","S02E05", "S02E06","S02E07", "S02E08","S02E09", "S02E10",
"S02E11", "S02E12","S02E13", "S02E14","S02E15", "S02E16","S02E17", "S02E18","S02E19", "S02E20",
"S02E22", "S02E25", "S02E26", "S02E27", "S02E28", "S02E29", "S02E30", "S02E31", "S02E32", "S02E33", "S02E34",
"S02E35", "S02E36", "S02E37", "S02E38", "S02E39", "S02E40","S02E41", "Bearnews1", "Bearnews2", "Bearnews3", "Bearnews4",
"S03E01", "Bearnews5", "Bearnews6", "Bearnews7", "S03E02", "S03E03", "Logger", "SolarPalmLight", "5TipsToLevelUp", "AlexaMusicCommands",
"SolarFountainOKMEE", "NoCloudGaradget", "AlexaGuardMediaPlayer", "LightningSensor", "LEDBackboard", "CuckooClock", "NodeAnchors", "yahoostocks",
"AugustBatteries", "Remote_Finder", "VideoProjectionMappingDemo", "FeedTheDog", "AlexaGiftNotifications","iPhoneDuplicates", "NotifyScript", "WeightLossJourney",
"SnapPower", "LocalControl", "TossingWink", "EnergyDashboard", "IOSBrokeNoifications", "SolarDriveway", "UPS_Replacement", "VillaNERI", "GardenLED", "RokuOnHA", "RunningAutomationsCard"
] %}
{{ pick|random }}

View File

@@ -0,0 +1,82 @@
{
"Flag_Days_US": {
"static": {
"2/12": "Lincoln's Birthday",
"5/15": "Peace Officers Memorial Day",
"6/14": "Flag Day",
"7/4": "Independence Day",
"7/27": "National Korean War Veterans Armistice Day",
"9/11": "Patriot Day",
"9/17": "Constitution Day",
"10/27": "Navy Day",
"11/11": "Veterans Day",
"12/7": "Pearl Harbor Remembrance Day"
},
"dynamic": {
"01/20/2025": "Inauguration Day",
"01/16/2023": "Martin Luther King Jr. Day",
"01/15/2024": "Martin Luther King Jr. Day",
"01/19/2026": "Martin Luther King Jr. Day",
"01/18/2027": "Martin Luther King Jr. Day",
"01/17/2028": "Martin Luther King Jr. Day",
"01/15/2029": "Martin Luther King Jr. Day",
"01/21/2030": "Martin Luther King Jr. Day",
"02/20/2023": "Washington's Birthday (Presidents Day)",
"02/19/2024": "Washington's Birthday (Presidents Day)",
"02/17/2025": "Washington's Birthday (Presidents Day)",
"02/16/2026": "Washington's Birthday (Presidents Day)",
"02/15/2027": "Washington's Birthday (Presidents Day)",
"02/21/2028": "Washington's Birthday (Presidents Day)",
"02/19/2029": "Washington's Birthday (Presidents Day)",
"02/18/2030": "Washington's Birthday (Presidents Day)",
"05/20/2023": "Armed Forces Day",
"05/18/2024": "Armed Forces Day",
"05/17/2025": "Armed Forces Day",
"05/16/2026": "Armed Forces Day",
"05/15/2027": "Armed Forces Day",
"05/20/2028": "Armed Forces Day",
"05/19/2029": "Armed Forces Day",
"05/18/2030": "Armed Forces Day",
"05/29/2023": "Memorial Day",
"05/27/2024": "Memorial Day",
"05/26/2025": "Memorial Day",
"05/25/2026": "Memorial Day",
"05/31/2027": "Memorial Day",
"05/29/2028": "Memorial Day",
"05/28/2029": "Memorial Day",
"05/27/2030": "Memorial Day",
"09/04/2023": "Labor Day",
"09/02/2024": "Labor Day",
"09/01/2025": "Labor Day",
"09/07/2026": "Labor Day",
"09/06/2027": "Labor Day",
"09/04/2028": "Labor Day",
"09/03/2029": "Labor Day",
"09/02/2030": "Labor Day",
"09/15/2023": "National POW/MIA Recognition Day",
"09/20/2024": "National POW/MIA Recognition Day",
"09/19/2025": "National POW/MIA Recognition Day",
"09/18/2026": "National POW/MIA Recognition Day",
"09/17/2027": "National POW/MIA Recognition Day",
"09/15/2028": "National POW/MIA Recognition Day",
"09/21/2029": "National POW/MIA Recognition Day",
"09/20/2030": "National POW/MIA Recognition Day",
"10/09/2023": "Columbus Day",
"10/14/2024": "Columbus Day",
"10/13/2025": "Columbus Day",
"10/12/2026": "Columbus Day",
"10/11/2027": "Columbus Day",
"10/09/2028": "Columbus Day",
"10/08/2029": "Columbus Day",
"10/14/2030": "Columbus Day",
"11/07/2023": "Election Day",
"11/05/2024": "Election Day",
"11/04/2025": "Election Day",
"11/03/2026": "Election Day",
"11/02/2027": "Election Day",
"11/07/2028": "Election Day",
"11/06/2029": "Election Day",
"11/05/2030": "Election Day"
}
}
}

View File

@@ -0,0 +1,116 @@
{
"MAJOR_US": {
"static": {
"1/1": "New Years Day",
"2/2": "Groundhog Day",
"2/3": "Staceys Birthday",
"2/14": "Valentines Day",
"3/14": "Pi Day",
"3/17": "St. Patricks Day",
"3/26": "Justins Birthday",
"4/1": "April Fools Day",
"4/22": "Earth Day",
"5/4": "Star Wars Day",
"5/5": "Cinco de Mayo",
"6/14": "Flag Day",
"7/4": "Independence Day",
"8/30": "Paiges Birthday",
"9/10": "Mom and Dads Wedding Anniversary",
"9/11": "Patriot Day",
"10/31": "Halloween",
"11/11": "Veterans Day",
"11/16": "Carlos Birthday",
"12/7": "Pearl Harbor Day",
"12/24": "Christmas Eve",
"12/25": "Christmas Day",
"12/31": "New Years Eve"
},
"dynamic": {
"11/23/2023": "Thanksgiving Day",
"01/15/2024": "MLK Day",
"02/14/2024": "Ash Wednesday",
"02/19/2024": "Presidents Day",
"03/24/2024": "Palm Sunday",
"03/29/2024": "Good Friday",
"03/31/2024": "Easter Sunday",
"04/22/2024": "Memorial Day",
"05/12/2024": "Mothers Day",
"06/16/2024": "Fathers Day",
"09/02/2024": "Labor Day",
"10/14/2024": "Columbus Day",
"11/28/2024": "Thanksgiving Day",
"01/20/2025": "MLK Day",
"02/17/2025": "Presidents Day",
"03/05/2025": "Ash Wednesday",
"04/13/2025": "Palm Sunday",
"04/18/2025": "Good Friday",
"04/20/2025": "Easter Sunday",
"04/21/2025": "Memorial Day",
"05/11/2025": "Mothers Day",
"06/15/2025": "Fathers Day",
"09/01/2025": "Labor Day",
"10/13/2025": "Columbus Day",
"11/27/2025": "Thanksgiving Day",
"01/19/2026": "MLK Day",
"02/16/2026": "Presidents Day",
"02/18/2026": "Ash Wednesday",
"03/29/2026": "Palm Sunday",
"04/03/2026": "Good Friday",
"04/05/2026": "Easter Sunday",
"04/20/2026": "Memorial Day",
"05/10/2026": "Mothers Day",
"06/21/2026": "Fathers Day",
"09/07/2026": "Labor Day",
"10/12/2026": "Columbus Day",
"11/26/2026": "Thanksgiving Day",
"01/18/2027": "MLK Day",
"02/10/2027": "Ash Wednesday",
"02/15/2027": "Presidents Day",
"03/21/2027": "Palm Sunday",
"03/26/2027": "Good Friday",
"03/28/2027": "Easter Sunday",
"04/19/2027": "Memorial Day",
"05/09/2027": "Mothers Day",
"06/20/2027": "Fathers Day",
"09/06/2027": "Labor Day",
"10/11/2027": "Columbus Day",
"11/25/2027": "Thanksgiving Day",
"01/17/2028": "MLK Day",
"02/21/2028": "Presidents Day",
"03/01/2028": "Ash Wednesday",
"04/09/2028": "Palm Sunday",
"04/14/2028": "Good Friday",
"04/16/2028": "Easter Sunday",
"04/17/2028": "Memorial Day",
"05/14/2028": "Mothers Day",
"06/18/2028": "Fathers Day",
"09/04/2028": "Labor Day",
"10/09/2028": "Columbus Day",
"11/23/2028": "Thanksgiving Day",
"01/15/2029": "MLK Day",
"02/14/2029": "Ash Wednesday",
"02/19/2029": "Presidents Day",
"03/25/2029": "Palm Sunday",
"03/30/2029": "Good Friday",
"04/01/2029": "Easter Sunday",
"04/23/2029": "Memorial Day",
"05/13/2029": "Mothers Day",
"06/17/2029": "Fathers Day",
"09/03/2029": "Labor Day",
"10/08/2029": "Columbus Day",
"11/22/2029": "Thanksgiving Day",
"01/21/2030": "MLK Day",
"02/18/2030": "Presidents Day",
"03/06/2030": "Ash Wednesday",
"04/14/2030": "Palm Sunday",
"04/19/2030": "Good Friday",
"04/21/2030": "Easter Sunday",
"04/22/2030": "Memorial Day",
"05/12/2030": "Mothers Day",
"06/16/2030": "Fathers Day",
"09/02/2030": "Labor Day",
"10/14/2030": "Columbus Day",
"11/28/2030": "Thanksgiving Day"
}
}
}

View File

@@ -1,16 +1,16 @@
<svg width="68.5" height="20" viewBox="0 0 685 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="2025.12.1"> <svg width="68.5" height="20" viewBox="0 0 685 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="2025.12.2">
<title>2025.12.1</title> <title>2025.12.2</title>
<linearGradient id="zseUi" x2="0" y2="100%"> <linearGradient id="pOwrd" x2="0" y2="100%">
<stop offset="0" stop-opacity=".1" stop-color="#EEE"/> <stop offset="0" stop-opacity=".1" stop-color="#EEE"/>
<stop offset="1" stop-opacity=".1"/> <stop offset="1" stop-opacity=".1"/>
</linearGradient> </linearGradient>
<mask id="nBbtk"><rect width="685" height="200" rx="30" fill="#FFF"/></mask> <mask id="aXyHH"><rect width="685" height="200" rx="30" fill="#FFF"/></mask>
<g mask="url(#nBbtk)"> <g mask="url(#aXyHH)">
<rect width="685" height="200" fill="#08C" x="0"/> <rect width="685" height="200" fill="#08C" x="0"/>
<rect width="685" height="200" fill="url(#zseUi)"/> <rect width="685" height="200" fill="url(#pOwrd)"/>
</g> </g>
<g aria-hidden="true" fill="#fff" text-anchor="start" font-family="Verdana,DejaVu Sans,sans-serif" font-size="110"> <g aria-hidden="true" fill="#fff" text-anchor="start" font-family="Verdana,DejaVu Sans,sans-serif" font-size="110">
<text x="65" y="148" textLength="570" fill="#000" opacity="0.25">2025.12.1</text> <text x="65" y="148" textLength="570" fill="#000" opacity="0.25">2025.12.2</text>
<text x="55" y="138" textLength="570">2025.12.1</text> <text x="55" y="138" textLength="570">2025.12.2</text>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 815 B

After

Width:  |  Height:  |  Size: 815 B