funktioin fertig

This commit is contained in:
2025-07-06 19:01:25 +02:00
parent dfe00d073d
commit 08408c2764
2 changed files with 89 additions and 15 deletions

28
3d/box.scad Normal file
View File

@ -0,0 +1,28 @@
// Maße
width = 100;
height = 70;
depth = 30;
wall = 2;
// Hauptgehäuse
difference() {
// Außengehäuse
cube([width, height, depth]);
// Innenaushöhlung
translate([wall, wall, wall])
cube([width - 2*wall, height - 2*wall, depth - wall]);
// Display-Ausschnitt vorne
translate([15, 20, depth - 1])
cube([70, 30, 2]);
// USB-Ausschnitt unten hinten
translate([width/2 - 5, -1, 5])
cube([10, wall + 1, 5]);
// Kippschalter oben (rundes Loch)
translate([width/2, height - wall, depth - 10])
rotate([90, 0, 0])
cylinder(h = wall + 2, r = 10, $fn=64);
}

View File

@ -11,10 +11,8 @@ esp32:
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "gLfRXKqMU9IvvwZnIdrWYIclAnc4q5sHVwTkRzUxKyw="
@ -24,28 +22,30 @@ ota:
password: "1618b7dc423684c5d3661481ce284359"
font:
- file: "gfonts://Roboto"
id: my_font
size: 20
size: 18
image:
- file: "cat.svg"
id: cat_img
resize: 64x64
type: BINARY # oder MONO für 1-Bit
type: BINARY
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Doorwhat Fallback Hotspot"
password: "KBiNyP7EkHCJ"
captive_portal:
time:
- platform: homeassistant
id: ha_time
sensor:
- platform: homeassistant
entity_id: sensor.shellyhtg3_8cbfeaa53d88_humidity
@ -55,13 +55,55 @@ spi:
clk_pin: 2
mosi_pin: 15
color:
- id: red
hex: "FF0000"
- id: black
hex: "FFFFFF"
globals:
- id: last_on_time
type: std::string
restore_value: no
initial_value: '"Noch nie"'
- id: previous_on_time
type: std::string
restore_value: no
initial_value: '"Noch nie"'
text_sensor:
- platform: template
name: "Letzter Gong"
id: letzter_gong_sensor
- platform: template
name: "Vorheriger Gong"
id: vorheriger_gong_sensor
binary_sensor:
- platform: gpio
pin:
number: 18
mode: INPUT
id: opto_in
name: "Optokoppler Eingang"
on_press:
then:
- lambda: |-
auto time = id(ha_time).now();
std::string new_time;
if (time.is_valid()) {
new_time = time.strftime("%Y-%m-%d %H:%M:%S");
} else {
new_time = "Zeit unbekannt";
}
id(previous_on_time) = id(last_on_time);
id(last_on_time) = new_time;
id(letzter_gong_sensor).publish_state(id(last_on_time));
id(vorheriger_gong_sensor).publish_state(id(previous_on_time));
- component.update: my_display
display:
- platform: waveshare_epaper
model: 2.90in3c
@ -71,10 +113,14 @@ display:
busy_pin: 5
rotation: 270
reset_duration: 2ms
update_interval: 30s
lambda: !lambda |-
it.print(0, 4, id(my_font), id(black), "DoorWhat v0.1");
it.print(80, 40, id(my_font), id(red), "Meow!");
//it.printf(0, 80, id(my_font), id(red), "Feuchtigkeit Bad %.1f", id(bad_feuchtigkeit).state);
it.image(150, 40, id(cat_img));
id: my_display
update_interval: 600s # alle 10 Minuten automatisch
lambda: |-
it.print(0, 4, id(my_font), id(black), "DoorWhat v1.0");
it.print(170, 65, id(my_font), id(red), "Meow!");
it.image(186, 1, id(cat_img));
it.print(0, 30, id(my_font), id(black), "Letzter Gong:");
it.print(0, 50, id(my_font), id(red), id(last_on_time).c_str());
it.print(0, 70, id(my_font), id(black), "Vorheriger Gong:");
it.print(0, 90, id(my_font), id(red), id(previous_on_time).c_str());