Hello , newbie here
I am trying to build 7 segment clock , everything is working but i am not able to change time format from 24 hour to 12 hour
substitutions:
device_name: led_clock
esphome:
name: $device_name
platform: ESP8266
board: esp01_1m
on_boot:
- light.turn_on:
id: led_strip
brightness: 100%
red: 0
green: 0
blue: 0
effect: "${device_name} Time effect"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "${device_name} Fallback Hotspot"
password: !secret wifi_fallback_api_password
logger:
level: DEBUG
# Enable Home Assistant API
api:
password: !secret hassio_api_password
ota:
password: !secret ota_password
globals:
- id: hours_red_value
type: int
restore_value: yes
initial_value: '0'
- id: hours_green_value
type: int
restore_value: yes
initial_value: '0'
- id: hours_blue_value
type: int
restore_value: yes
initial_value: '0'
- id: minutes_red_value
type: int
restore_value: yes
initial_value: '0'
- id: minutes_green_value
type: int
restore_value: yes
initial_value: '0'
- id: minutes_blue_value
type: int
restore_value: yes
initial_value: '0'
- id: dots_red_value
type: int
restore_value: yes
initial_value: '0'
- id: dots_green_value
type: int
restore_value: yes
initial_value: '0'
- id: dots_blue_value
type: int
restore_value: yes
initial_value: '0'
output:
#======== Hours ============
- platform: template
id: hours_red_output
type: float
write_action:
lambda: |-
id(hours_red_value) = 255.0 * state;
- platform: template
id: hours_green_output
type: float
write_action:
- lambda: |-
id(hours_green_value) = 255.0 * state;
- platform: template
id: hours_blue_output
type: float
write_action:
lambda: |-
id(hours_blue_value) = 255.0 * state;
#========= Minutes ===========
- platform: template
id: minutes_red_output
type: float
write_action:
lambda: |-
id(minutes_red_value) = 255.0 * state;
- platform: template
id: minutes_green_output
type: float
write_action:
lambda: |-
id(minutes_green_value) = 255.0 * state;
- platform: template
id: minutes_blue_output
type: float
write_action:
lambda: |-
id(minutes_blue_value) = 255.0 * state;
#========= dots ===========
- platform: template
id: dots_red_output
type: float
write_action:
lambda: |-
id(dots_red_value) = 255.0 * state;
- platform: template
id: dots_green_output
type: float
write_action:
lambda: |-
id(dots_green_value) = 255.0 * state;
- platform: template
id: dots_blue_output
type: float
write_action:
lambda: |-
id(dots_blue_value) = 255.0 * state;
time:
- platform: sntp
id: sntp_time
timezone: "Europe/Moscow"
servers:
- 0.pool.ntp.org
- 1.pool.ntp.org
- 2.pool.ntp.org
light:
- platform: rgb
name: "${device_name} hours lights"
id: 'hours_lights'
red: hours_red_output
green: hours_green_output
blue: hours_blue_output
- platform: rgb
name: "${device_name} minutes lights"
id: 'minutes_lights'
red: minutes_red_output
green: minutes_green_output
blue: minutes_blue_output
- platform: rgb
name: "${device_name} dots lights"
id: 'dots_lights'
red: dots_red_output
green: dots_green_output
blue: dots_blue_output
#--------- LED strip ----------------
- platform: fastled_clockless
id: led_strip
name: "Led strip"
internal: True
pin: GPIO3
num_leds: 30
chipset: WS2812B
rgb_order: GRB
effects:
- addressable_lambda:
name: "${device_name} Time effect"
update_interval: 200ms
lambda: |-
const int ledsInDigitCount = 7;
const int digitsCount = 4;
int digitsLeds[10][ledsInDigitCount] = {
{1,1,0,1,1,1,1},
{0,0,0,1,0,0,1},
{1,1,1,1,1,0,0},
{1,0,1,1,1,0,1},
{0,0,1,1,0,1,1},
{1,0,1,0,1,1,1},
{1,1,1,0,1,1,1},
{0,0,0,1,1,0,1},
{1,1,1,1,1,1,1},
{1,0,1,1,1,1,1}
};
int ledOffsets[digitsCount] = {23 , 16, 7, 0};
auto time = id(sntp_time).now();
int colors[4][3] = {
{id(hours_red_value), id(hours_green_value), id(hours_blue_value)},
{id(hours_red_value), id(hours_green_value), id(hours_blue_value)},
{id(minutes_red_value), id(minutes_green_value), id(minutes_blue_value)},
{id(minutes_red_value), id(minutes_green_value), id(minutes_blue_value)}
};
int values[digitsCount] = {};
values[0] = time.hour / 10;
values[1] = time.hour % 10;
values[2] = time.minute / 10;
values[3] = time.minute % 10;
it.all() = Color(0,0,0);
if ((time.second % 2) > 0) {
it[14] = Color(id(dots_red_value), id(dots_green_value), id(dots_blue_value));
it[15] = Color(id(dots_red_value), id(dots_green_value), id(dots_blue_value));
}
for (int valueI = 0; valueI < digitsCount; valueI++) {
int ledsOffset = ledOffsets[valueI];
int timeValue = values[valueI];
int *color = colors[valueI];
int *leds = digitsLeds[timeValue];
for (int ledI = 0; ledI < ledsInDigitCount; ledI++) {
if(leds[ledI] > 0) {
int ledIndex = ledI + ledsOffset;
it[ledIndex] = Color(color[0], color[1], color[2]);
}
}
}
code is taken from Alex18881
I have tried to change
auto time = id(sntp_time).now().strftime("%H:%M:%S - %d-%m-%Y");
but getting error
error -
/config/esphome/time.yaml: In lambda function:
/config/esphome/time.yaml:252:24: error: ‘class std::basic_string’ has no member named ‘hour’
values[0] = time.hour / 10;
^
/config/esphome/time.yaml:253:24: error: ‘class std::basic_string’ has no member named ‘hour’
values[1] = time.hour % 10;
^
/config/esphome/time.yaml:254:24: error: ‘class std::basic_string’ has no member named ‘minute’
values[2] = time.minute / 10;
^
/config/esphome/time.yaml:255:24: error: ‘class std::basic_string’ has no member named ‘minute’
values[3] = time.minute % 10;
^
/config/esphome/time.yaml:259:17: error: ‘class std::basic_string’ has no member named ‘second’
if ((time.second % 2) > 0) {
^