ssieb / esphome_components Goto Github PK
View Code? Open in Web Editor NEWMy collection of components for esphome
License: Other
My collection of components for esphome
License: Other
We’ve come across a desk which appears to be slightly different in one area.
In summary (and to refresh)...
Most desks send:
But what we’ve found with some Jarvis desks is that they appear to actually send the second “9 byte message” over the RJ45 port. Everything else appears to be the same (including how the bytes are used to calculate height.
https://community.home-assistant.io/t/desky-standing-desk-esphome-works-with-desky-uplift-jiecang-assmann-others/383790/105?u=mahko_mahko
So I think the feature request is to be able to select/switch the protocol.
My thought was the revised config might look a bit like below?
Thank you!
desky:
#uart_id: desk_uart (optional, unless multiple uarts are defined)
id: my_desky
height_protocol_variant: (optional, 4byte or 9byte, defaults to 4byte)
height: # optional sensor publishing the current height
name: Desk Height
# any other sensor options
When ESPhome is rebooted, the last known value is not retained.
Config:
external_components:
- source:
type: git
url: https://github.com/ssieb/custom_components/
components: [ serial ]
refresh: 10min
text_sensor:
- platform: serial
name: ${description} Bar Code
uart:
baud_rate: 9600
debug:
direction: BOTH
dummy_receiver: false
after:
delimiter: "\n"
sequence:
- lambda: UARTDebug::log_string(direction, bytes);
tx_pin: GPIO17
rx_pin: GPIO16
Wiegand:
Is there a way to delete the tag of the RFID reader after transmission or to set it to 'xxxx' so that the tag is not accidentally transmitted again.
Gibt es eine Möglichkeit den Tag des RFID Readers nach der Übertragung zu löschen oder auf 'xxxx' zu setzen, damit der Tag nicht ungewollt erneut übertragen wird.
Hey,
could you add a timeout function to the text sensor of the keypad component?
It would be awesome if i could set a "timeout" value to like "10" seconds and if the keypad has not received another input in this timespan, the progress value gets reseted.
If the "timeout" value is not set, the progress won't be reseted.
Have tried https://github.com/ssieb/custom_components/tree/master/growatt
This esphome:
esphome:
name: growatt_modbus
platform: ESP8266
board: d1_mini
substitutions:
esp_name: growatt_modbus
wifi:
ssid: "IOTDOM"
password: !secret IOTDOM_wifi_key
use_address: 192.168.6.42
domain: .local.local
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "${esp_name} fb Hotspot"
password: !secret Fallback_Hotspot
captive_portal:
# Enable logging
logger:
level: VERBOSE
# baud_rate: 9600
# Enable Home Assistant API
api:
ota:
time:
- platform: homeassistant
id: homeassistant_time
uart:
tx_pin: D1
rx_pin: D2
baud_rate: 9600
# stop_bits: 2
sensor:
- platform: wifi_signal
name: "${esp_name} - WiFi Signal"
update_interval: 6s
- platform: uptime
name: "${esp_name} - Uptime"
icon: mdi:clock-outline
update_interval: 60s
- platform: growatt
id: my_growatt
input_power:
id: input_power
name: "${esp_name} Input Power"
pv1_voltage:
id: pv1_voltage
name: "${esp_name} PV1 Voltage"
pv1_current:
id: pv1_current
name: "${esp_name} PV1 Current"
pv1_power:
id: pv1_power
name: "${esp_name} PV1 Power"
pv2_voltage:
id: pv2_voltage
name: "${esp_name} PV2 Voltage"
pv2_current:
id: pv2_current
name: "${esp_name} PV2 Current"
pv2_power:
id: pv2_power
name: "${esp_name} PV2 Power"
grid_frequency:
id: grid_frequency
name: "${esp_name} Grid Frequency"
output_power:
id: output_power
name: "${esp_name} Output Power"
temperature:
id: temperature
name: "${esp_name} Temperature"
# https://github.com/ssieb/custom_components/tree/master/growatt
Hi Sam! I found your ezo custom component through LEDgardener.com/forum
I purchased these probes not knowing the code is specific for these devices, is there a possibility of you making a custom component for these? Or do you know of someone that may be able to help?
Please email me at [email protected]
Looking forward to hearing from you
HI, as the "set_brightness" value is multiplied by 16 in ht16k33_display.cpp (int val = (int) round(level * 16) it would may make sence to mention in the README.md to use vlaues from 0.0625 to 1 with 0.0625 steps.
Hello
After running esphome new.yaml run I receive the following error. I did comment out the working Adafruit code and replace with your upgrade.
*** My ERROR >
Failed config
display.lcd_ht16k33: [source new4.yaml:171]
Platform not found: 'display.lcd_ht16k33'.
platform: lcd_ht16k33
address: 112
scroll: True
scroll_speed: 250ms
scroll_dwell: 2s
lambda: it.print("ABCD");
*** from Yaml>
esphome:
name: ht16k33led
platform: ESP32
board: nodemcu-32s
arduino_version: latest
includes: # get from github link below and put into /config/esphome
# https://learn.adafruit.com/adafruit-led-backpack/0-dot-56-seven-segment-backpack
# https://learn.adafruit.com/adafruit-led-backpack/downloads
# https://github.com/adafruit/Adafruit_LED_Backpack
# Removed Adafruit and my_text_sensor below for ssieb new i2c custom component
# https://github.com/ssieb/custom_components
#- Adafruit_LEDBackpack.h
#- Adafruit_LEDBackpack.cpp
#- my_text_sensor.h
- config\custom_components\lcd_ht16k33\ht16k33_display.h
- config\custom_components\lcd_ht16k33\ht16k33_display.cpp
libraries:
#- "Adafruit GFX Library"
#- "SPI" # unused dependency
...
i2c:
id: bus_a
sda: 21
scl: 22
scan: False
display:
hi not very an issue but a request ( i can t create one ).
was it possible to ADD to esmart3 composant a toggle to activate or desactivate the LOAD .
as describe there : https://github.com/skagmo/esmart_mppt/blob/master/esmart.py
regards
Hi there, thanks for writing this. I'm trying it on a Brilliantsmart Trilogy CWWW downlight. I already have a sort-of-working ESPHome config based on this, but the light goes out when the brightness slider is reduced to less than about 40% and the colour temp slider only works on the right hand half. It's very warm on the right hand side, and cool (blue) in the middle of the slider, but it also dims a lot on the blue end of the scale (middle). If I reduce colour temp below half way, the light goes off.
Anyway, my problem with your code is I wasn't sure how to include it in ESPHome, I copied the whole directory "cwww2" to my Hassio \config\esphome\custom_components\cwww2
and then included it like this:
esphome:
name: brilliantsmart_downlight_cct_1
platform: ESP8266
board: esp01_1m
includes:
- custom_components/cwww2/cwww2_light_output.h
But I get an error related to CONF_GAMMA_CORRECT
INFO Reading configuration /config/esphome/test.yaml...
ERROR Unable to load custom component cwww2.light:
Traceback (most recent call last):
File "/opt/esphome/esphome/config.py", line 140, in _lookup_module
module = importlib.import_module('custom_components.{}'.format(domain))
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/config/esphome/custom_components/cwww2/light.py", line 17, in <module>
cv.Optional(CONF_GAMMA_CORRECT, default=1.0): cv.positive_float,
NameError: name 'CONF_GAMMA_CORRECT' is not defined
Failed config
Using the following config https://gist.github.com/LelandSindt/ebafbf61a2fa916492c0d80296486f1c
I am using esphome:2023.12.9
I am getting good reading from the Rotary Encoder/Push Button. However, the Nexopixel is unresponsive.
Perhaps there is something that I am overlooking?
Thank you -- Leland
I am not able to compile using the ht16k33_alpha custom component.
globals:
- id: on_boot
type: bool
restore_value: false
initial_value: 'true'
substitutions:
# Device informations
device_friendly_name: "HT16K33 Test"
device_name: "ht16k33-test"
device_entity_id: "ht16k33_test"
# Pinout
i2c_a_sda_pin: GPIO21
i2c_a_scl_pin: GPIO22
# Device configuration
esphome:
name: $device_name
platform: esp32
# board: heltec_wifi_kit_32_v2 ### i have a board with 8 MB flash so i tried using this one without success
board: esp32dev
on_boot:
priority: -100
then:
- lambda: |-
id(on_boot) = false;
# Import custom_components
external_components:
- source:
type: local
path: custom_components
# Enable logging
logger:
# Enable Home Assistant API
api:
password: !secret api_password
encryption:
key: !secret api_encryption_key
ota:
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: $device_friendly_name
password: !secret fallback_password
captive_portal:
web_server: # Could be disabled if performance issues appear
port: 80
auth:
username: !secret esphome_web_username
password: !secret esphome_web_password
# Set up I2C bus
i2c:
- id: bus_a
sda: $i2c_a_sda_pin
scl: $i2c_a_scl_pin
scan: true
# Set up display component
display:
- platform: ht16k33_alpha
address: 0x71
scroll: true
scroll_speed: 250ms
scroll_dwell: 2s
scroll_delay: 3
lambda: |-
it.print("Ht16K33 Display Test");
id: ${device_entity_id}_display
Board: Mouser.com
Display: Mouser.com
Hi,
I'm trying to use the ip5306 component, but it doesn't seem to work?
Config:
i2c:
ip5306:
battery_level: # sensor
name: Battery Level
charger_connected: # binary_sensor
id: connected
on_press:
then:
- lambda: ESP_LOGD("TEST", "charging");
on_release:
then:
- lambda: ESP_LOGD("TEST", "not charging");
charge_full: # binary_sensor
id: full
on_press:
then:
- lambda: ESP_LOGD("TEST", "fully charged");
on_release:
then:
- lambda: ESP_LOGD("TEST", "still charging");
Logging:
[11:02:09][C][i2c.arduino:052]: I2C Bus:
[11:02:09][C][i2c.arduino:053]: SDA Pin: GPIO14
[11:02:09][C][i2c.arduino:054]: SCL Pin: GPIO13
[11:02:09][C][i2c.arduino:055]: Frequency: 400000 Hz
[11:02:09][C][i2c.arduino:058]: Recovery: bus successfully recovered
[11:02:09][I][i2c.arduino:068]: Results from i2c bus scan:
[11:02:09][I][i2c.arduino:074]: Found i2c device at address 0x3C
[11:02:09][I][i2c.arduino:074]: Found i2c device at address 0x75
But nothing from ip5306, while I expected something from:
ESP_LOGD(TAG, "Setting up ip5306...");
I'm using esphome with homeassistant and the 'Battery level' entity is available, but at 0%
Hello,
I installed the VBUS controller for my Resol Deltasol CS Plus regarding to this feature-request: esphome/feature-requests#1949. So far, the new device/config is working. But I have the following questions:
I get the following warning in my home assistant log:
Logger: homeassistant.components.sensor
Source: components/sensor/__init__.py:980
Integration: Sensor (documentation, issues)
First occurred: 8. Januar 2023 um 14:49:47 (1 occurrences)
Last logged: 8. Januar 2023 um 14:49:47
Entity sensor.hwr_sensor_deltasol_sc_r1_flow_rate (<class 'homeassistant.components.esphome.sensor.EsphomeSensor'>) is using native unit of measurement 'L/h' which is not a valid unit for the device class ('water') it is using; Please update your configuration if your entity is manually configured, otherwise create a bug report at https://github.com/home-assistant/core/issues?q=is%3Aopen+is%3Aissue+label%3A%22integration%3A+esphome%22
It is correct that the water device class is used for the flow_rate sensor? Theoretically, it should be a device class like "water_speed" (this is not given).
The error sensors will not be exposed to Home Assistant. Is my config for model "Deltasol CS Plus" correct? In ESPHome is sensors are defined.
In addition, the sensor "heat_quantity" shows only a 0 value. Is that normal or there should be value? My installation is the same as "Anlage 1: Standard-Solaranlage" of the manual from page 10.
This is my config:
external_components:
- source:
type: git
url: https://github.com/ssieb/custom_components
ref: vbus
components: [ vbus ]
refresh: 1min
uart:
id: resol
rx_pin: GPIO20
baud_rate: 9600
vbus:
uart_id: resol
sensor:
- platform: vbus
model: deltasol_cs_plus
temperature_1:
id: hwr_sensor_deltasol_sc_kol_temperature #KOL
name: "${friendly_name} Kollektor Temperatur"
device_class: "temperature"
state_class: measurement
unit_of_measurement: "°C"
accuracy_decimals: 1
temperature_2:
id: hwr_sensor_deltasol_sc_tsp_temperature #TSP
name: "${friendly_name} Speicher Temperatur"
device_class: "temperature"
state_class: measurement
unit_of_measurement: "°C"
accuracy_decimals: 1
flow_rate:
id: hwr_sensor_deltasol_sc_r1_flow_rate
name: "${friendly_name} Relais Drehzahl" #R1
#unit_of_measurement: "l/h"
heat_quantity:
id: hwr_sensor_deltasol_sc_heat_quantity
name: "${friendly_name} Wärmemenge" #Heat Quantity
state_class: measurement
#unit_of_measurement: "Wh"
operating_hours_1:
id: hwr_sensor_deltasol_sc_r1_operating_hours
name: "${friendly_name} Relais Betriebsstunden" #Operating Hours
device_class: "duration"
unit_of_measurement: "h"
pump_speed_1:
id: hwr_sensor_deltasol_sc_pump_speed
name: "${friendly_name} Pumpgeschwindigkeit" #Pump Speed 1
#unit_of_measurement: "%"
time:
id: hwr_sensor_deltasol_sc_device_time
name: "${friendly_name} Gerätezeit" #Device Time
entity_category: diagnostic
disabled_by_default: true
binary_sensor:
- platform: vbus
model: deltasol_cs_plus
sensor1_error:
id: hwr_sensor_deltasol_sc_sensor1_error
name: "${friendly_name} Sensor 1 Fehler" #Sensor 1 Error
entity_category: diagnostic
sensor2_error:
id: hwr_sensor_deltasol_sc_sensor2_error
name: "${friendly_name} Sensor 2 Fehler" #Sensor 2 Error
entity_category: diagnostic
Thank you!
When attempting to update to the latest version of esphome with the keypad component the compile fails with the following. if you need any additional information let me know.
INFO Reading configuration /config/esphome/alarm-keypad.yaml...
INFO Detected timezone 'America/Los_Angeles'
INFO Generating C++ source...
INFO Compiling app...
Processing alarm-keypad (board: esp32dev; framework: arduino; platform: espressif32 @ 3.3.2)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
PACKAGES:
- framework-arduinoespressif32 3.10006.210326 (1.0.6)
- tool-esptoolpy 1.30100.210531 (3.1.0)
- toolchain-xtensa32 2.50200.97 (5.2.0)
LDF Modes: Finder ~ off, Compatibility ~ soft
Dependency Graph
|-- <AsyncTCP-esphome> 1.2.2
|-- <WiFi> 1.0
|-- <FS> 1.0
|-- <Update> 1.0
|-- <ESPAsyncWebServer-esphome> 1.3.0
| |-- <AsyncTCP-esphome> 1.2.2
|-- <DNSServer> 1.1.0
|-- <noise-c> 0.1.3
| |-- <libsodium> 1.10018.1
|-- <Wire> 1.0.1
|-- <ESPmDNS> 1.0
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/api/api_connection.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/api/api_frame_helper.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/api/api_pb2.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/api/api_pb2_service.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/api/api_server.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/api/list_entities.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/api/proto.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/api/subscribe_state.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/api/user_services.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/api/util.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/binary_sensor/automation.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/binary_sensor/binary_sensor.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/binary_sensor/filter.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/captive_portal/captive_portal.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/display/display_buffer.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/esp32/core.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/esp32/gpio_arduino.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/esp32/gpio_idf.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/esp32/preferences.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/homeassistant/sensor/homeassistant_sensor.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/homeassistant/text_sensor/homeassistant_text_sensor.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/homeassistant/time/homeassistant_time.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/i2c/i2c.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/i2c/i2c_bus_arduino.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/i2c/i2c_bus_esp_idf.cpp.o
Compiling /data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/keypad/keypad.cpp.o
In file included from src/esphome/components/keypad/keypad.cpp:1:0:
src/esphome/components/keypad/keypad.h:4:33: fatal error: esphome/core/esphal.h: No such file or directory
compilation terminated.
*** [/data/alarm-keypad/.pioenvs/alarm-keypad/src/esphome/components/keypad/keypad.cpp.o] Error 1
========================= [FAILED] Took 10.08 seconds =========================
It would be handy if desky had some sensors telling you about it's current operation, much like Covers (e.g COVER_OPERATION_OPENING).
Perhaps DESKY_OPERATION_STATIONARY, DESKY_OPERATION_RAISING, and DESKY_OPERATION_LOWERING ?
And perhaps a seperate binary sensor for whether it is moving or not?
I have been testing with something similar to this for the latter , but I don't think it's a good implementation?
Thank you!
desky:
id: my_desky
up:
number: 4 #D2
inverted: true
down:
number: 5 #D1
inverted: true
stopping_distance: 15 # optional distance from target to turn off moving, default 15
height: # Sensor publishing the current height
name: Desky Height
id: desky_height
internal: true
filters:
- delta: 0.05 #Only send values to HA if they change
on_value:
then:
#Because of the delta filter, if the value changes, then the desk is moving (except on first value)
- binary_sensor.template.publish:
id: desky_is_moving
state: ON
- delay: 300ms
#Assume it's stopped moving if no height changes after a short time.
- binary_sensor.template.publish:
id: desky_is_moving
state: Off
binary_sensor:
- platform: template
id: desky_is_moving
name: "Desky Is Moving"
filters:
- delayed_off: 400ms
#If the desk isn't moving for a bit we better turn off attempts at movement. It's like poor man's collision detection?
on_release:
then:
- button.press: desky_stop_desk
ESPTime has changed name spaces, and now needs to have the below .h declared, and I think it can loose the time:: namespace.
#include "esphome/core/time.h"
More info here -> esphome/esphome#4926
Hi, this is not so much an issue, but a question.
I created some "backpacks" similar to Adafruit's 14-segment alphanumeric displays, however my displays have 6 digits rather than 4.
I created a new library for Arduino here : https://github.com/WarmCatUK/WarmCat_6x14Backpack
Details of the physical backpack are here if you're interested: http://warmcat.uk/?p=322
I'm trying to amend your code to utilise the extra two digits of my displays, but I can't quite follow your code. Could you perhaps point me to where you create the buffer limiting it to 4 digits?
Thanks in advance, Wayne
Great work on these components!
Do you plan on merging some of them into ESPHome? That way it would be easier to use, keep up to date, and add enhancements for others.
Let me know if you need help with doing so.
It would be handy if desky component users had a way to stop the desk when it is in motion.
In my tests I just used a button which turned off both the up and the down pins (which need to be inverted;).
In my example below, you can also see how I've added interlocking (which we discussed may or may not be a good idea;)
You can also see I added a timeout of 15sec, which I thought might be a good idea to?
Thank you!
button:
#Stop movement
- platform: template
name: Stop Desk
id: desky_stop_desk
on_press:
then:
- switch.turn_off: raise_desk
- switch.turn_off: lower_desk
switch:
#wake up ther desk and request it sends its height
- platform: gpio
id: wake_desk_and_get_height
name: "Request Desk Height"
pin:
number: D5
inverted: true
on_turn_on:
- delay: 100ms
- switch.turn_off: wake_desk_and_get_height
#Raise the desk
- platform: gpio
id: raise_desk
name: "Raise Desk"
pin:
number: D2
# mode: INPUT_PULLUP
inverted: true
interlock: lower_desk
on_turn_on:
#Auto off after 15s just in case
- delay: 15s
- switch.turn_off: raise_desk
#Lower the desk
- platform: gpio
id: lower_desk
name: "Lower Desk"
pin:
number: D1
# mode: INPUT_PULLUP
inverted: true
interlock: raise_desk
on_turn_on:
#Auto off after 15s just in case
- delay: 15s
- switch.turn_off: lower_desk
Hi Ssieb, Is it possible to access url params e.g /setval?value=100 from within the automation linked to web_handler?
Use case is I have a template sensor that I want set the of via the web server e.g not using Home Assistant.
I've been able to increment the value by 1 each time the URL is called but I'd like to be able to set the value to a specific value if possible.
Thanks
I have multiple cards that do not follow the 26-bit or 34-bit standard format, for example HID H10314 (40-bit) as well as other high-frequency tags that are either 56 or 64-bit. I'd like to get the raw hex value into either the text sensor or as a tag value; this would let me use special credentials on my HID readers.
BTW, thanks for the awesome work on this! :-)
Since commit e48ea30 [add 37-bit and refactor parity checking] i have error after tag reading:
[09:16:37][I][RAW:131]: received raw 34 bits, value 200a9dfea
[09:16:37][D][wiegand.text_sensor:080]: received 34-bit tag: 5566453
[09:16:38][W][wiegand.text_sensor:082]: invalid parity
Same error for 34 and 26 bit readers.
I didn't change anything in my hardware.
I traced problem to the function;
bool check_oparity(uint64_t value, int start, int length) {
int parity = 0;
uint64_t mask = 1LL << start;
for (int i = 0; i <= length; i++, mask <<= 1)
if (value & i)
parity++;
return parity & 1;
}
If I change last line to return !(parity & 1); or return 1, everything works just fine.
does the uart mitm forward rx and tx or is it one uart pin each?
since hw uarts are limited to three, does each pin/uart has to be seperated?
could we maybe have a way to configure which pin/direction(rx/tx) to use?
could we also have a filter for forwarding, like a string array to not forward if is contained in the uart payload?
When compiling a yaml with heapmon component in current release everything works as expected but in dev branch is throwing an error.
src/esphome/components/heapmon/heapmon.cpp: In member function 'virtual void esphome::debug::HeapMonitor::update()':
src/esphome/components/heapmon/heapmon.cpp:10:24: error: 'ESP' was not declared in this scope
uint32_t free_heap = ESP.getFreeHeap();
^
Could you add the ability to work in debug mode to uart_mitm?
I use the uart_mitm component for the Philips EP 5444 Coffee machine, so that I can control the coffee machine from the control panel and at the same time download the data for decryption. There is a ready-made project ESPHome-Philips-Smart-Coffee and it is suitable for coffee machines of the 1200-2200 series, and for the 5400 series it is necessary to find bits for control.
external_components:
- source:
type: git
url: https://github.com/ssieb/custom_components
components: [ uart_mitm ]
uart_mitm:
uart1: uart_display
uart2: uart_mainboard
uart:
#UART connection to the control panel. We read the data from the control panel and send it to the motherboard
- rx_pin: GPIO16 #Reading data from the control panel
tx_pin: GPIO17 #We send the data to the control panel
baud_rate: 115200
id: uart_display
stop_bits: 1
data_bits: 8
parity: none
debug:
direction: TX
dummy_receiver: true
#UART connection to the motherboard. We read the data from the motherboard and send it to the control panel
- rx_pin: GPIO3 #Reading data from the motherboard
tx_pin: GPIO1 #We send data to the motherboard
baud_rate: 115200
id: uart_mainboard
stop_bits: 1
data_bits: 8
parity: none
debug:
direction: TX
dummy_receiver: true
I can only use a parallel connection for debagging, and then I don't need to use this uart_mitm component. See the diagram in the figure
If I need to embed the ESP into the wiring and for the ESP to receive and send data, then I can't do without the uart_mitm component, but it works if I don't enable debugging mode. If I turn on debugging mode, the screen goes off and the coffee machine is not controlled from the control panel
Actually we can use two components to drive two HT16K33-Alphanumeric displays with different i2c addresses, but we loose the scrolling feature and the refresh isn't sync between devices.
Would be great if we can provide multiple i2c addresses to drive as if it was one larger display.
Technically, can it be done ? I understand that the I2CDevice actually used is only able to speak to one i2c device. Curious about how it could be implemented.
(I don't know enough about esphome internals to do it, but i can do tests if needed !)
Hi! I'm trying to find a way to control the Atlas Scientific EZO Pumps (I believe you've worked on the sensors before) in ESPHome because there isn't a way to turn on or off an i2c sensor and that's what the EZO devices are classified as.
I found your i2c_button component and believe it would work for the pumps if there was the ability to turn them on/off virtually (like a switch component) instead of reading the state of the physical button presses (like a sensor). I added the i2c_button component to my esphome config file and assigned one of my pumps to it. When I flashed the firmware the pump was recognized and spammed the "Button B Long Clicked" log.
I'm sure it's just a tiny bit of code to make a hybrid "i2c_switch" component but unfortunately my coding skills are terrible.
Some devices use single 0x0d as a line separator and it would be very handy to have it supported here and not have to maintain separately.
ESPHome version
2024.2.2
Project YAML
esphome:
name: sonoffbasicr4
friendly_name: SonoffBasicR4
platformio_options:
board_build.mcu: esp32c3
board_build.variant: esp32c3
esp32:
variant: ESP32C3
board: esp32dev
framework:
type: esp-idf
sdkconfig_options:
CONFIG_BT_BLE_50_FEATURES_SUPPORTED: y
CONFIG_BT_BLE_42_FEATURES_SUPPORTED: y
CONFIG_ESP_TASK_WDT_TIMEOUT_S: "10"
external_components:
magic_switch:
pin: 5
on_switch:
then:
- light.toggle: light_1
esp32_ble_tracker:
scan_parameters:
active: true
bluetooth_proxy:
active: true
binary_sensor:
output:
light:
status_led:
pin:
number: GPIO6
inverted: yes
logger:
LOG
Linking .pioenvs/sonoffbasicr4/firmware.elf
/data/cache/platformio/packages/toolchain-riscv32-esp/bin/../lib/gcc/riscv32-esp-elf/8.4.0/../../../../riscv32-esp-elf/bin/ld: .pioenvs/sonoffbasicr4/src/main.o: in function setup()': /data/build/sonoffbasicr4/src/main.cpp:157: undefined reference to
vtable for esphome::magic_switch::MagicSwitch'
/data/cache/platformio/packages/toolchain-riscv32-esp/bin/../lib/gcc/riscv32-esp-elf/8.4.0/../../../../riscv32-esp-elf/bin/ld: /data/build/sonoffbasicr4/src/main.cpp:157: undefined reference to `vtable for esphome::magic_switch::MagicSwitch'
collect2: error: ld returned 1 exit status
*** [.pioenvs/sonoffbasicr4/firmware.elf] Error 1
========================= [FAILED] Took 14.74 seconds =========================
Hey,
it would be awesome if the ht16k33_alpha component supports a optional setting for the buffer size (default is 64, i had to display stuff that is long than this, so i increased it to 128 myself)
Something like this for example:
display:
- platform: ht16k33_alpha
address: 0x71
buffer: 128 # <-- custom buffer setting (default to 64)
scroll: true
scroll_speed: 250ms
scroll_dwell: 2s
scroll_delay: 3
lambda: |-
it.print("HT16K33 Display Test");
id: ${device_entity_id}_display
The EC sensor https://atlas-scientific.com/circuits/ezo-conductivity-circuit/ allows calibrating the sensor with the temperature to get more accurate readings. Their example code here : https://github.com/Atlas-Scientific/Ezo_I2c_lib/tree/master/Examples/temp_comp_example
Would it be possible for this to automatically take the temp reading from the RTD sensor if you have one? If not, how would you recommend periodically updating this temperature calibration?
Never mind.
It just started working, so I may have had a typo in my code.
I am trying to use an Adafruit HT16K33 with 14-segment LEDs. When I put this at the top of my YAML code, I get the error in the title.
external_components:
- source:
type: git
url: https://github.com/ssieb/esphome_components
components: [ ht16k33_alpha ]
However, when I go to the URL, there is clearly a components folder.
What am I doing wrong?
Hey, would it be possible to have a setting for continuous scrolling of the ht16k33_alpha display component. 🙂
Currently the scroll stops at the end of the text and jumps back to the start. The "continuous"-version would act a little different:
If the scrolling text comes to an end, the beginning is appended with some distance and stops briefly as soon as it has arrived at the beginning again. then the scroll continues and everything starts from the beginning
Probably with timing settings for the scroll and the pause
😊
This issue is based on:
The scrolling doesn't look like it's working right there either. The one on the far right isn't changing. You could open another issue about this if you want. I'll see if I can get one of these modules, but it will be a while.
Originally posted by @ssieb in #18 (comment)
I have a rendering issue with my HT16K33 module. Interacting with for example brightness works fine, scrolling seems to work at least for the first 3 digits (of 4), but letters or numbers (and symbols i guess) are hard to recognize ;).
globals:
- id: on_boot
type: bool
restore_value: false
initial_value: 'true'
substitutions:
# Device informations
device_friendly_name: "HT16K33 Test"
device_name: "ht16k33-test"
device_entity_id: "ht16k33_test"
# Pinout
i2c_a_sda_pin: GPIO21
i2c_a_scl_pin: GPIO22
# Device configuration
esphome:
name: $device_name
platform: esp32
board: heltec_wifi_kit_32_v2
on_boot:
priority: -100
then:
- lambda: |-
id(on_boot) = false;
- script.execute: down # start brightness-test-script
# Import custom_components
external_components:
- source:
type: local
path: custom_components
components: [ ht16k33_alpha ]
# Enable logging
logger:
# Enable Home Assistant API
api:
password: !secret api_password
encryption:
key: !secret api_encryption_key
ota:
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: $device_friendly_name
password: !secret fallback_password
captive_portal:
web_server: # Could be disabled if performance issues appear
port: 80
auth:
username: !secret esphome_web_username
password: !secret esphome_web_password
# Test script to see if changing the brightness works
script:
- id: up
then:
- lambda: "id(${device_entity_id}_display).set_brightness(0.8);"
- delay: 5s
- script.execute: down
- id: down
then:
- lambda: "id(${device_entity_id}_display).set_brightness(0.2);"
- delay: 5s
- script.execute: up
# Set up I2C bus
i2c:
- id: bus_a
sda: $i2c_a_sda_pin
scl: $i2c_a_scl_pin
scan: true
# Set up display component
display:
- platform: ht16k33_alpha
address: 0x71
scroll: true
scroll_speed: 250ms
scroll_dwell: 2s
scroll_delay: 3
lambda: |-
it.print("HT16K33 Display Test");
id: ${device_entity_id}_display
Bonjour,
Je n'arrive pas à compiler sous ESPHOME ver: 2023.9.3, dans Home Assistant.
J'ai essayé beaucoup de chose mais j'en arrive à être obligé de demander votre aide.
Je vous donne mon "yaml" et le log.
Hello
It's possible to add key for clear all progress data?
For example I assign 'C' keys for clear all data. It will be very usefull for correction after long typing.
Hi,
I would like to report a weird report
I set magic_switch with timeout: 1200us but when checking log file from esphome, sometimes it did show like below
[20:32:48][D][magic_switch:019]: detected pulse of 28322us
[20:32:48][D][light:036]: 'Light' Setting:
[20:32:48][D][light:047]: State: ON
[20:32:55][D][magic_switch:019]: detected pulse of 122710us
[20:32:55][D][light:036]: 'Light' Setting:
[20:32:55][D][light:047]: State: OFF
Could you help to check it.
Thank you.
_
[11:30:52][D][magic_switch:019]: detected pulse of 29027us
[11:30:52][D][light:036]: 'Light' Setting:
[11:30:52][D][light:047]: State: ON
[11:30:54][D][magic_switch:019]: detected pulse of 4591us
[11:30:54][D][light:036]: 'Light' Setting:
[11:30:54][D][light:047]: State: OFF
[11:30:54][D][magic_switch:019]: detected pulse of 3782us
[11:30:54][D][light:036]: 'Light' Setting:
[11:30:54][D][light:047]: State: ON
[11:30:54][D][magic_switch:019]: detected pulse of 68933us
[11:30:54][D][light:036]: 'Light' Setting:
[11:30:54][D][light:047]: State: OFF
[11:30:56][D][magic_switch:019]: detected pulse of 33690us
[11:30:56][D][light:036]: 'Light' Setting:
[11:30:56][D][light:047]: State: ON
[11:30:58][D][magic_switch:019]: detected pulse of 1769us
[11:30:58][D][light:036]: 'Light' Setting:
[11:30:58][D][light:047]: State: OFF
[11:30:58][D][magic_switch:019]: detected pulse of 58900us
[11:30:58][D][light:036]: 'Light' Setting:
[11:30:58][D][light:047]: State: ON
[11:30:59][D][magic_switch:019]: detected pulse of 5286us
[11:30:59][D][light:036]: 'Light' Setting:
[11:30:59][D][light:047]: State: OFF
[11:30:59][D][magic_switch:019]: detected pulse of 3193us
[11:30:59][D][light:036]: 'Light' Setting:
[11:30:59][D][light:047]: State: ON
[11:31:00][D][magic_switch:019]: detected pulse of 2352us
[11:31:00][D][light:036]: 'Light' Setting:
[11:31:00][D][light:047]: State: OFF
[11:31:00][D][magic_switch:019]: detected pulse of 8931us
[11:31:00][D][light:036]: 'Light' Setting:
[11:31:00][D][light:047]: State: ON
[11:31:00][D][magic_switch:019]: detected pulse of 9989us
[11:31:00][D][light:036]: 'Light' Setting:
[11:31:00][D][light:047]: State: OFF
_
As you can see in above log, at the same time, magic_switch is trigger several times, that leads to sometimes switch status cannot be reverted
I tried some time_out setting but if I set it like 12-13ms, sometime it cannot recognize pulse, but if set smaller, sometime it detect multiple pulse
I just wonder is there any case to delay detecting new pulse right after one pulse detected and detect again after 1 or few seconds
Thank you.
Hi.
I try to use your magic_switch component in my HA/ESPHome installation.
During configuration all looks fine. On compilation however the linker complains about duplicate method definition as seen in the attached log.
Cant you help please.
Thank you.
Once we have fixed the basics for the HT16K33 display as per this issue
This might be pushing the friendship, but what are the chances of implementing scrolling text for this?
I think about 20 characters would be nice, just simple scrolling from right to left and then repeat? I'd be happy to code it if you give me a starting point with the method structure! Not sure if there should be a parameter in the YAML scroll: true
or simply make it automatic when buffer length > 4 chars? Might need a speed parameter too like scroll_speed: 250ms
which is the pause time for each character.
Let me know your thoughts - thanks!
Sparkfun also sells their own analogue. However, comparing Adafruit's Schematic and SparkFun's shows that SparkFun has a pretty wildly different wiring diagram, in addition to the slightly different display (rather than Adafruit's 4 decimal points, SparkFun's has one decimal point and one colon).
If you boil away all the C++ in SparkFun's Arduino library for their displays, ignoring the colon and dots, SparkFun's basically turned the frame buffer on its side: the fourteen bits per glyph, which Adafruit packed into two contiguous bytes, are now spread out as two bits in each of seven bytes. In particular, the i
th glyph is represented as 0x11 << i
, and the framebuffer's 16 bytes are arranged as...
A
(0x01) and G2
(0x10)B
and H
C
and J
D
and K
E
and L
F
and M
G1
and N
If bit-shuffling's your thing, you can map the 16 bits of a font table entry (that is, with segments densely packed from N
down to A
in the LSB) to the corresponding positions within the 16 * 8 = 2 * 64 = 128-bit framebuffer with something like this wad of Hacker's Delight-esque code (in little-endian representation; big-endian left as an exercise to the reader):
/** Send 0bABCD to 0b0A0B0C0D */
uint32_t nibble_interdigitate_zeros(uint32_t v0) {
uint32_t v1 = (v0 | (v0 << 2)) & 0x33; /* 0b00AB00CD */
return (v1 | (v1 << 1)) & 0x55;
}
/** Send 0bABCDEFGH to 0b000A000B...000H */
uint32_t byte_interdigitate_three_zeros(uint32_t v0) {
uint32_t v1 = (v0 | (v0 << 12)) & 0x000F000F; /* ABCD in top word, EFGH in low word */
uint32_t v2 = (v1 | (v1 << 6)) & 0x03030303; /* AB, CD, EF, GH in successive bytes */
return (v2 | (v2 << 3)) & 0x11111111;
}
/** Send 0xABCDEFGH to 0x00AB00CD00EF00GH */
uint64_t u32_interdigitate_zero_bytes(uint32_t v0) {
uint64_t v1 = (v0 | (v0 << 16)) & 0x0000FFFF0000FFFF;
return (v1 | (v1 << 8)) & 0x00FF00FF00FF00FF;
}
void mangle(uint16_t c, int glyph, uint64_t *fb) {
/* Pack segments K D J C H B G2 A into a byte and then expand that byte */
fb[0] |= u32_interdigitate_zero_bytes(
byte_interdigitate_three_zeros(
nibble_interdigitate_zeros((c & 0x000F) >> 0) /* Segments D C B A */
| (nibble_interdigitate_zeros((c & 0x0780) >> 7) << 1) /* Segments K J H G2 */
) << glyph); /* And shifted left for glyph 0 through 3, and then expanded again */
/* Do the same thing for segments N G1 M F L E */
fb[1] |= u32_interdigitate_zero_bytes(
byte_interdigitate_three_zeros(
nibble_interdigitate_zeros((c & 0x0070) >> 4) /* Segments G1 F E */
| (nibble_interdigitate_zeros((c & 0x3800) >> 11) << 1) /* Segments N M L */
) << glyph);
However, I'm not sure how best to handle :
and .
and how to handle switching between the two display designs. Can the ESPHome machinery generate calls to templatized constructors?
I had the keypad component working before the rename to matrix_keypad. Now esphome editor says "Component not found: keypad". The same goes for binary_sensor.keypad. I have changed components section in my yaml from keypad to matrix_keypad. If I exclude the components part, esphome editor says "Component keypad cannot be loaded via YAML (no CONFIG_SCHEMA)."
I have tried to load the components (matrix_keypad and key_provider) locally (matrix_keypad folder renamed to keypad) but then esphome compiler can't find the file "key_provider.h".
What might be wrong, am I missing something?
Thanks again for developing this custom component. I got around to assembling my circuit and testing today. After seeing garbled characters, but with the correct number of characters in the correct digit position, I found that the order of the 8-bit bytes in the 16-bit number of the bitmap need to be swapped in this line:
https://github.com/ssieb/custom_components/blob/3067cf945198ee357232269aa0fe35ddbf1a68cf/lcd_ht16k33/ht16k33_display.cpp#L71
I replaced that line with this:
this->buffer_[pos] = (fontc << 8) | (fontc >> 8);
And that fixed it! This may not be the most efficient way of swapping the bytes around, and maybe it would be better to do it in the i2C writes, but I couldn't find that code - so feel free to improve.
The brightness works too, after I realised that I have to enter it as a float between 0.0 and 1.0! Might be better to have it as an integer between 0 and 15?
I also added some extra code to include decimal point. The entire function that works for me is:
void HT16K33LCDDisplay::print(const char *str) {
uint8_t pos = 0;
uint16_t fontc = 0;
for (; *str != '\0'; str++) {
if (pos >= 4) {
ESP_LOGW(TAG, "writing off the screen!");
break;
}
uint8_t c = *reinterpret_cast<const uint8_t *>(str);
if (c > 127)
fontc = 0;
else
fontc = pgm_read_word(&alphafonttable[c]);
this->buffer_[pos] = (fontc << 8) | (fontc >> 8);
//ESP_LOGW(TAG, "pos[%u]=%c bitmap=%#04x", pos, c, fontc);
// Look ahead to next character, if decimal point, add it to the current digit
uint8_t next_char = str[1];
if ((next_char != '\0') && (next_char == '.')) {
// set the decimal point segment (bit-14) in current digit
this->buffer_[pos] |= 0b0000000001000000;
// discard the decimal point
str++;
if (*str == '\0')
// break in the unlikely event the string ends with a decimal point!
break;
}
pos++;
}
}
Here's a little test YAML that cycles through all the characters in the first digit position:
display:
# Custom component for Quad-Alphanumeric LED display by Samuel Sieb
# See https://github.com/ssieb/custom_components/tree/master/lcd_ht16k33
- platform: lcd_ht16k33
address: 0x70
update_interval: 500ms
id: led_display
lambda: |-
it.set_brightness(0.5);
it.printf("%c", id(counter));
if (++id(counter) > 127)
id(counter) = 0;
I've noticed that 26-bit H10301 card numbers are being reported without the facility code calculation. For example, a card that has facility code 1 and card code 11572 would be reported as 77108.
Looking at the raw bits, it seems like the FC bits and CC bits are all wrapped into one number. The first 8 bits (after the initial parity bit) should be treated separately, to ensure that only the next 16 bits should be calculated as the card code.
A good way of reporting the correct card format would be to use the FC:CC format which is quite common in the PACS industry, for example 001:11572 in the example above. Thoughts?
Hi there!
I wanted to make a simple panel with few buttons to control my lighting. I have configured keypad like this:
keypad:
id: keypad1
rows:
- pin: D5
- pin: D6
columns:
- pin: TX
- pin: RX
- pin: D1
keys: "123456"
has_diodes: false
binary_sensor:
- platform: keypad
keypad_id: keypad1
id: btn_1
name: button 1
key: 1
- platform: keypad
keypad_id: keypad1
id: btn_2
name: button 2
key: 2
- platform: keypad
keypad_id: keypad1
id: btn_3
name: button 3
key: 3
- platform: keypad ...
But this doesn't detect two buttons pressed at once! Only one :(
I also tried without "keys
" (and row
+ col
instead), but this doesn't work either...
Hello!
I'm struggling, but with no success. Can someone please point me into correct procedure? I just don't know how to run "keypad" (or any other, to be honest) component. I copied keypad folder into config/custom_components, i included keypad_text_sensor.h into my ESPHome code, but i keep getting error : component "keypad" not found.
What am i doing wrong? HA and ESPHome are wonderfull apps, it's just that beginner's help is way too hard to find...
looks like in 2021.8.0 they changed color modes and its broken something
Problematic code: here
In file included from src/esphome.h:14:0,
from src/main.cpp:3:
src/esphome/components/cwww2/cwww2_light_output.h: In member function 'virtual esphome::light::LightTraits esphome::cwww2::CWWW2LightOutput::get_traits()':
src/esphome/components/cwww2/cwww2_light_output.h:19:12: error: 'class esphome::light::LightTraits' has no member named 'set_supports_brightness'
traits.set_supports_brightness(true);
^
src/esphome/components/cwww2/cwww2_light_output.h:20:12: error: 'class esphome::light::LightTraits' has no member named 'set_supports_rgb'
traits.set_supports_rgb(false);
^
src/esphome/components/cwww2/cwww2_light_output.h:21:12: error: 'class esphome::light::LightTraits' has no member named 'set_supports_rgb_white_value'
traits.set_supports_rgb_white_value(false);
^
src/esphome/components/cwww2/cwww2_light_output.h:22:12: error: 'class esphome::light::LightTraits' has no member named 'set_supports_color_temperature'
traits.set_supports_color_temperature(true);
^
*** [.pioenvs/arlec-globe/src/main.cpp.o] Error 1
Desky only sends height UART messages during and for a period after movement.
There is therefore no desk height data when your esp reboots.
But it seems there is a dedicated wire which can be used to request/activate the message stream (messages will then stop automatically after a few seconds and the desk will sleep again).
It would be handy if the Desky component requested height messages on boot so that users could see it's current (initial) height without having to move the desk.
Below is my test code in my config, which behaves as desired, however we discussed that this logic may be better either located in your custom component files, and/or added to your provided config.
Thank you!
esphome:
name: desky-d1mini-v2
platform: ESP8266
board: d1_mini #pinout: https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-WeMos-D1-Mini-pinout-gpio-pin.png?quality=100&strip=all&ssl=1
on_boot:
priority: -100.0
then:
#Request a desk height update after boot.
- delay: 5s
- switch.turn_on: wake_desk_and_get_height
#later on...... (note the inversion)
switch:
#wake up ther desk and request it sends its height
- platform: gpio
id: wake_desk_and_get_height
name: "Request Desk Height"
pin:
number: D5
inverted: true
on_turn_on:
- delay: 100ms
- switch.turn_off: wake_desk_and_get_height
The up and down pins need to be inverted for this component to function as expected, like I've done in the config excerpt below.
I think it could be nice for users if this was just somehow just done by default, or if there isn't a nice solution, you could also just add what I've got below to your config?
Thank you
desky:
id: my_desky
up:
number: 4 #D2
inverted: true
down:
number: 5 #D1
inverted: true
stopping_distance: 15 # optional distance from target to turn off moving, default 15
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.