Vilken är den bästa (läs: enklaste med flest egenskaper) P1-adaptern för Home Assistant?

  • Currently One (https://currently.one/)

    0 Röster 0,0%
  • Antal röster
    20
Tänkte försöka göra en jag också. Men har inte huvudet med mig för tillfället..

Hur gör jag efter att ha lödat ihop hårdvaran?

Ska jag ladda ner koden från Github och flasha den på ESP-kortet, och sedan gå in och skapa en p1mini.yaml genom HA?

Secrets.yaml har jag redan, så antar att jag helt enkelt lägger till p1mini_password och p1mini_api_key i den?

Väldigt tacksam för en steg för steg förklaring, på mellanstadienivå!
 
Nej jag lyckas inte.. Saknar uppenbarligen basala kunskaper.

Får upp enheten via USB på en PC, lyckas installera esphome genom Home Assistant, men sen begriper jag inte hur jag ska få in koderna/filerna från Github..
 
Johan Gunverth Johan Gunverth skrev:
Japp. API-nyckeln från länken i instruktionen. Istället för secrets.yaml hårdkodade jag WiFi + lösenord direkt i p1mini.yaml. Detta för att de skulle installeras på annan plats,
Min mätare skickar telegram kontinuerligt och om jag tolkar koden rätt så letar den inte rätt på starten på telegrammet utan antar att första tecknet är starten. Om det inte är starten så kastar den bort alla tecken som kommit... Min teori är att min elmätare inte bryr sig om RTS (eller att jag lött fel, men tycker jag dubbelkollat allt) och att koden inte hanterar att det sprutar in meddelanden kontinuerligt. Ska försöka skriva om, men om det funkar fint för dig så känns det lite konstigt. Hur ofta får du ett telegram från din elmätare?
 
V Vardagsrum skrev:
Nej jag lyckas inte.. Saknar uppenbarligen basala kunskaper.

Får upp enheten via USB på en PC, lyckas installera esphome genom Home Assistant, men sen begriper jag inte hur jag ska få in koderna/filerna från Github..
Du behöver komma åt filsystemet på HA maskinen och lägga dit filerna enligt strukturen nederst i instruktionerna på Github. För att komma åt filsystemet kan du antingen köra SSH mot HA och jobba därifrån (linux) ELLER så installerar du SAMBA share addon och kör från en windows maskin
 
J jerval skrev:
Min mätare skickar telegram kontinuerligt och om jag tolkar koden rätt så letar den inte rätt på starten på telegrammet utan antar att första tecknet är starten. Om det inte är starten så kastar den bort alla tecken som kommit... Min teori är att min elmätare inte bryr sig om RTS (eller att jag lött fel, men tycker jag dubbelkollat allt) och att koden inte hanterar att det sprutar in meddelanden kontinuerligt. Ska försöka skriva om, men om det funkar fint för dig så känns det lite konstigt. Hur ofta får du ett telegram från din elmätare?
Om jag förstår dataformatet rätt så kommer '/' enbart vid start på meddelande. Då borde det räcka med att kommentera ut raderna:

ESP_LOGW(TAG, "Unknown data format (0x%02X). Resetting.", read_byte);
ChangeState(states::ERROR_RECOVERY);

Men ha kvar "return;" på nästföljande rad för att söka tills den hittar '/'.
 
J jerval skrev:
Du behöver komma åt filsystemet på HA maskinen och lägga dit filerna enligt strukturen nederst i instruktionerna på Github. För att komma åt filsystemet kan du antingen köra SSH mot HA och jobba därifrån (linux) ELLER så installerar du SAMBA share addon och kör från en windows maskin
Tack snälla!

Jag kommer åt filsystemet, genom ”File editor”.

Men hur menar du att filerna ska läggas dit..? Hur gör man?

Vad ska jag flasha in på ESP-kortet och vad ska jag lägga till i filsystemet..?

Flashar genom HA’s ESPhome tillägg.



Skärmbild av en filredigerare som visar konfigurationsfiler och mappar, inklusive automations.yaml, binary_sensor.yaml och configuration.yaml, under grenen "master".
Inloggade ser högupplösta bilder
Skapa konto
Gratis och tar endast 30 sekunder
Menyn i Home Assistant, med File Editor-motorn som är markerad med en röd oval.
Inloggade ser högupplösta bilder
Skapa konto
Gratis och tar endast 30 sekunder
 
Ska filerna ligga i en egen mapp inne i esphomemappen kanske..?

T.ex: config/esphome/beakymätaren
 
V Vardagsrum skrev:
Ska filerna ligga i en egen mapp inne i esphomemappen kanske..?

T.ex: config/esphome/beakymätaren
Under components, se bild. Så först flashar du igång din ESPhome så den dyker upp i HAs filsystem, sen lägger du dit components filerna.Sen går du in på rätt device under ESPHome delen i HA intefacet (ute till vä asså) och väljer rätt device, Edit, stoppa dit yaml delarna och sedan Install.
 
  • Filträd i filhanteraren som visar mappstrukturen för ESPhome. Under "components" finns en mapp "p1_mini" med tre filer: _init_.py, p1_mini.cpp och p1_mini.h.
    Inloggade ser högupplösta bilder
    Skapa konto
    Gratis och tar endast 30 sekunder
redarn redarn skrev:
Om jag förstår dataformatet rätt så kommer '/' enbart vid start på meddelande. Då borde det räcka med att kommentera ut raderna:

ESP_LOGW(TAG, "Unknown data format (0x%02X). Resetting.", read_byte);
ChangeState(states::ERROR_RECOVERY);

Men ha kvar "return;" på nästföljande rad för att söka tills den hittar '/'.
Tack för idén. Jag har provat och den fångar ett meddelande här och där, ibland flera i rad men sen missar den under flera minuter. Kanske ingen stor praktisk betydelse, men jag gillar när det funkar hela tiden, så ska datorer bete sig :)
Jag tror att det går för fort utan fungerade RTS handskakning, med 115200 baudrate kommer ca 11500 tecken / s , dvs mer än 10 per millisekund. Ska nog skriva om den så att den fyller inbufferten och sedan letar och parse:ar ett meddelade ur den. Sen kastar resten och börjar om. Men först dubbelkolla med Gbg energi om de kan justera baudrate eller om de ställt in nåt annat knepigt som att ignorera flödeskontrollen.
Vad händer om du sätter RTS att aldrig bli aktiv?
Alltså såhär:
buffer_size: 3072 # Needs to be large enough to hold one entire update from the meter.
secondary_p1: false
on_ready_to_receive:
then:
- switch.turn_off: p1_rts #org ON
- switch.turn_on: status_led
on_update_received:
then:
- switch.turn_off: p1_rts #org off
- switch.turn_off: status_led
on_communication_error:
then:
- switch.turn_off: p1_rts #org off
- switch.turn_off: status_led
sensor:
- platform: wifi_signal
 
J jerval skrev:
Under components, se bild. Så först flashar du igång din ESPhome så den dyker upp i HAs filsystem, sen lägger du dit components filerna.Sen går du in på rätt device under ESPHome delen i HA intefacet (ute till vä asså) och väljer rätt device, Edit, stoppa dit yaml delarna och sedan Install.
Tack, verkligen! 👍 Snällt av dig! Nu börjar jag få lite bättre kläm på det.

Har inte lyckats helt än, då installationen lipar över [platform] is an invalid option for [ota] samt ”Reading failed: BAD_INDICATOR errno11”.

Har väl någonting med API:n att göra..

Jag använder en API-nyckel som jag genererat på sidan som länkas från Github, dvs det är den jag angett i secrets.yaml

På tal om secrets, ska wifi SSID skrivas in i ”huvud” secrets.yaml som ligger i config/ eller ska man skapa en till och lägga i esphome-mappen eller någon av subfoldrarna där?

Och en hårdvarufråga! Lyser eller blinkar era P1:surprised:r när de är anslutna till HAN-porten i elmätaren?

Min lös med fast blått sken under hela tiden den var ansluten till PC, när jag skulle testa den i elmätaren så hände det inte ett smack dock, varken sken eller blink 🤔

Mätte med USB-multimeter 2mA med reset-knappen intryckt (dioden är då släckt), 5mA med dioden tänd. Girig diod, men elmätaren ska väl ge åtminstone 250mA genom HAN-porten, så det torde inte vara där felet ligger.

Jag provar att löda en till, så får vi se.
 
Redigerat:
Den nya lyser/blinkar, och jag lyckas även se värden från elmätaren! 😀

Stort tack för hjälpen @jerval

Tyvärr kan jag inte se något genom HA, utan endast genom visit/p1mini.local

Försökte använda p1mini.yaml rakt av, från Github, men HA klagade hela tiden vid installationen, så jag fick stryka vissa delar för att det ens skulle gå att installera.

Såhär ser min p1mini.yaml ut:

substitutions:
device_name: p1mini
device_password: !secret p1mini_password
device_api_key: !secret p1mini_api_key

esphome:
name: ${device_name}

esp8266:
board: d1_mini

wifi:
ssid: XXX
password: XXX

# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "esp-${device_name}"
password: "${device_password}"

captive_portal:

# Enable logging
logger:
level: INFO # Set to DEBUG if you are having issues!
baud_rate: 0 # disable logging over uart

# Enable Home Assistant API

web_server:
port: 80
ota: false
# auth:
# username: admin
# password: "${device_password}"

external_components:
- source: components

switch:
- platform: gpio
id: p1_rts # Not needed if the RTS signal is not connected to a GPIO
pin:
number: D2
- platform: gpio
id: status_led
pin:
number: D4
inverted: true

binary_sensor:
- platform: gpio
id: secondary_p1_rts # Currently not used, but make sure D0 is configured as input in case it is connected.
pin:
number: D0
mode: INPUT_PULLDOWN
inverted: false

uart:
- id: my_uart_1
tx_pin:
number: TX
inverted: true
mode: OUTPUT_OPEN_DRAIN
rx_pin:
number: RX
inverted: true # Set to false if inverting in hardware
mode: INPUT_PULLUP # Set to INPUT if inverting in hardware
baud_rate: 115200
rx_buffer_size: 512 # Probably not needed, but it is good to have some margin.
# - id: my_uart_2
# ...

p1_mini:
- id: p1_mini_1
uart_id: my_uart_1
minimum_period: 2s # Should be 0 (zero) if the RTS signal is not used.
buffer_size: 3072 # Needs to be large enough to hold one entire update from the meter.
secondary_p1: false
on_ready_to_receive:
then:
- switch.turn_on: p1_rts
- switch.turn_on: status_led
on_update_received:
then:
- switch.turn_off: p1_rts
- switch.turn_off: status_led
on_communication_error:
then:
- switch.turn_off: p1_rts
- switch.turn_off: status_led
# - id: p1_mini_2
# uart_id: my_uart_2
# ...
Sen fortsätter det, det är bara parametrarna ”där uppe” som jag ändrat.

Hur ser era .yamls ut?

[edit]Äh, indentationen blir helt fel när jag postar koden här, men HA klagar inte på den iaf Skärmdump av ESPHome-gränssnittet med filen "murstocken.yaml" online och knappen "visit" markerad för p1mini.
Inloggade ser högupplösta bilder
Skapa konto
Gratis och tar endast 30 sekunder
Skärmbild av elmätarvärden från Home Assistant inklusive import, export, ström för tre faser, momentana och kumulativa värden samt WiFi-signalstyrka.
Inloggade ser högupplösta bilder
Skapa konto
Gratis och tar endast 30 sekunder


Bilderna ovan visar vad jag ser i tillägger, och sen när jag klickar på ”visit”.

Kan tyvärr inte skapa några sensorer till HA, fören jag vet vad jag gjort fel i installationen.
 
Redigerat:
Johan Gunverth Johan Gunverth skrev:
Det är ett rent interface med ett webinterface i form av ESPhome. I princip läser du bara av momentana värden. Man behöver ha något i ”bakändan” som lagrar de momentana värdena kontinuerligt och kan presentera dem via beräkningar. Home Assistant är ett av de verktygen. Om det finns några andra verktyg i form av appar vet jag inte.
Min förhoppning var att kunna ge bort några sådana här till vänner och bekanta som saknar både HA och teknikintresse.

http://p1mini.local/ ger ju iaf de momentana värdena, åtkomligt från telefon/dator/Westerberg på samma nätverk.

Så för enkel felsökning/”vad ligger på vilken huvudsäkring”/”hur mycket drar mitt SPA-bad”, så borde folk kunna ha nytta av en sådan här läsare!

Torde väl ”bara” vara att ange aktuellt SSID samt PW, till det nätverk där ens vän tänkt ansluta Beakyn? Eller tänker jag fel?
 
V Vardagsrum skrev:
Tack, verkligen! 👍 Snällt av dig! Nu börjar jag få lite bättre kläm på det.

Har inte lyckats helt än, då installationen lipar över [platform] is an invalid option for [ota] samt ”Reading failed: BAD_INDICATOR errno11”.

Har väl någonting med API:n att göra..

Jag använder en API-nyckel som jag genererat på sidan som länkas från Github, dvs det är den jag angett i secrets.yaml

På tal om secrets, ska wifi SSID skrivas in i ”huvud” secrets.yaml som ligger i config/ eller ska man skapa en till och lägga i esphome-mappen eller någon av subfoldrarna där?

Och en hårdvarufråga! Lyser eller blinkar era P1:surprised:r när de är anslutna till HAN-porten i elmätaren?

Min lös med fast blått sken under hela tiden den var ansluten till PC, när jag skulle testa den i elmätaren så hände det inte ett smack dock, varken sken eller blink 🤔

Mätte med USB-multimeter 2mA med reset-knappen intryckt (dioden är då släckt), 5mA med dioden tänd. Girig diod, men elmätaren ska väl ge åtminstone 250mA genom HAN-porten, så det torde inte vara där felet ligger.

Jag provar att löda en till, så får vi se.
Jag skapade en egen secrets.yaml i ESPhome mappen
 
V Vardagsrum skrev:
Den nya lyser/blinkar, och jag lyckas även se värden från elmätaren! 😀

Stort tack för hjälpen @jerval

Tyvärr kan jag inte se något genom HA, utan endast genom visit/p1mini.local

Försökte använda p1mini.yaml rakt av, från Github, men HA klagade hela tiden vid installationen, så jag fick stryka vissa delar för att det ens skulle gå att installera.

Såhär ser min p1mini.yaml ut:



Sen fortsätter det, det är bara parametrarna ”där uppe” som jag ändrat.

Hur ser era .yamls ut?

[edit]Äh, indentationen blir helt fel när jag postar koden här, men HA klagar inte på den iaf[bild][bild]

Bilderna ovan visar vad jag ser i tillägger, och sen när jag klickar på ”visit”.

Kan tyvärr inte skapa några sensorer till HA, fören jag vet vad jag gjort fel i installationen.
Så här ser min yaml-fil ut (notera att jag har viss problem själv, se tråden...):

substitutions:
device_name: HAN-reader
name: esphome-web-c9ccc9
friendly_name: ESPHome U3

esphome:
name: ${name}
friendly_name: ${friendly_name}
min_version: 2024.6.0
name_add_mac_suffix: false
project:
name: esphome.web
version: dev

esp8266:
board: esp01_1m

# Enable logging
logger:
level: WARN # Set to DEBUG if you are having issues!
baud_rate: 0

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

# Allow provisioning Wi-Fi via serial
# improv_serial:

wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password

# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esphome-Web-xxxxx"
password: "xxxxxxxxxx"

# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
captive_portal:


external_components:
- source: components

switch:
- platform: gpio
id: p1_rts # Not needed if the RTS signal is not connected to a GPIO
pin:
number: D2
- platform: gpio
id: status_led
pin:
number: D4
inverted: true

# binary_sensor:
# - platform: gpio
# id: secondary_p1_rts # Currently not used, but make sure D0 is configured as input in case it is connected.
# pin:
# number: 0
# mode: INPUT_PULLDOWN
# inverted: false

uart:
id: my_uart
tx_pin:
number: TX
inverted: true
mode: OUTPUT_OPEN_DRAIN
rx_pin:
number: RX
inverted: true # Set to false if inverting in hardware
mode: INPUT_PULLUP # Set to INPUT if inverting in hardware
baud_rate: 115200
data_bits: 8
parity: NONE
stop_bits: 1
rx_buffer_size: 512 # Probably not needed, but it is good to have some margin.

p1_mini:
id: p1_mini_1
uart_id: my_uart
minimum_period: 2s # Should be 0 (zero) if the RTS signal is not used.
buffer_size: 3072 # Needs to be large enough to hold one entire update from the meter.
secondary_p1: false
on_ready_to_receive:
then:
- switch.turn_on: p1_rts #org ON
- switch.turn_on: status_led
on_update_received:
then:
- switch.turn_on: p1_rts #org off
- switch.turn_off: status_led
on_communication_error:
then:
- switch.turn_on: p1_rts #org off
- switch.turn_off: status_led

sensor:
- platform: wifi_signal
name: "${device_name} WiFi Signal"
update_interval: 10s
- platform: p1_mini
obis_code: "1.8.0"
name: "Cumulative Active Import"
unit_of_measurement: kWh
 
J jerval skrev:
Tack för idén. Jag har provat och den fångar ett meddelande här och där, ibland flera i rad men sen missar den under flera minuter. Kanske ingen stor praktisk betydelse, men jag gillar när det funkar hela tiden, så ska datorer bete sig :)
Jag tror att det går för fort utan fungerade RTS handskakning, med 115200 baudrate kommer ca 11500 tecken / s , dvs mer än 10 per millisekund. Ska nog skriva om den så att den fyller inbufferten och sedan letar och parse:ar ett meddelade ur den. Sen kastar resten och börjar om. Men först dubbelkolla med Gbg energi om de kan justera baudrate eller om de ställt in nåt annat knepigt som att ignorera flödeskontrollen.
Vad händer om du sätter RTS att aldrig bli aktiv?
Alltså såhär:
buffer_size: 3072 # Needs to be large enough to hold one entire update from the meter.
secondary_p1: false
on_ready_to_receive:
then:
- switch.turn_off: p1_rts #org ON
- switch.turn_on: status_led
on_update_received:
then:
- switch.turn_off: p1_rts #org off
- switch.turn_off: status_led
on_communication_error:
then:
- switch.turn_off: p1_rts #org off
- switch.turn_off: status_led
sensor:
- platform: wifi_signal
Jag misstänker att detta fungerar

case states::IDENTIFYING_MESSAGE:
if (!available()) {
constexpr unsigned long max_wait_time_ms{ 60000 };
if (max_wait_time_ms < loop_start_time - m_identifying_message_time) {
ESP_LOGW(TAG, "No data received for %d seconds.", max_wait_time_ms / 1000);
ChangeState(states::ERROR_RECOVERY);
}
break;
}
while (available()) {
char const read_byte{ GetByte() };
if (read_byte == '/') {
ESP_LOGD(TAG, "ASCII data format");
m_data_format = data_formats::ASCII;
m_message_buffer[m_message_buffer_position++] = read_byte;
ChangeState(states::READING_MESSAGE);
break;
}
else if (read_byte == 0x7e) {
ESP_LOGD(TAG, "BINARY data format");
m_data_format = data_formats::BINARY;
m_message_buffer[m_message_buffer_position++] = read_byte;
ChangeState(states::READING_MESSAGE);
break;
}
else {
//ESP_LOGW(TAG, "Unknown data format (0x%02X). Resetting.", read_byte);
//ChangeState(states::ERROR_RECOVERY);
//return;
}
}
// Not breaking here! The delay caused by exiting the loop function here can cause
// the UART buffer to overflow, so instead, go directly into the READING_MESSAGE
// part.
case states::READING_MESSAGE:

Efter att ha läst meddelandet på slutet så ja, det är nog inte snabbt nog att göra exit ur denna klass för att sedan bli återropad lite senare.

(beskyll inte mig för den hemska kodformateringen, behåller bara vad som var där innan)
 
Vi vill skicka notiser för ämnen du bevakar och händelser som berör dig.