FEAT : Station météo OK
This commit is contained in:
parent
b33565876c
commit
009f71a7a4
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@ __pycache__
|
|||||||
venv/
|
venv/
|
||||||
ssl/
|
ssl/
|
||||||
password.*
|
password.*
|
||||||
|
archive/
|
||||||
|
|||||||
@ -2,7 +2,7 @@ version: '3'
|
|||||||
services:
|
services:
|
||||||
esphome:
|
esphome:
|
||||||
container_name: esphome
|
container_name: esphome
|
||||||
image: ghcr.io/esphome/esphome:2025.4.2
|
image: ghcr.io/esphome/esphome:2025.5.1
|
||||||
volumes:
|
volumes:
|
||||||
- "${PWD}/config:/config"
|
- "${PWD}/config:/config"
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
esphome:
|
esphome:
|
||||||
name: seeed-studio
|
name: meteo
|
||||||
friendly_name: seeed studio
|
friendly_name: meteo
|
||||||
|
|
||||||
esp32:
|
esp32:
|
||||||
board: esp32-s3-devkitc-1
|
board: esp32-s3-devkitc-1
|
||||||
@ -10,36 +10,39 @@ esp32:
|
|||||||
# Enable logging
|
# Enable logging
|
||||||
logger:
|
logger:
|
||||||
level: DEBUG
|
level: DEBUG
|
||||||
|
baud_rate: 0
|
||||||
|
|
||||||
# Enable Home Assistant API
|
# Enable Home Assistant API
|
||||||
api:
|
api:
|
||||||
encryption:
|
encryption:
|
||||||
key: "1tRYVfsGzt8mFr+ay9hE24pdPd8IACedduh9tLWg4xs="
|
key: "lcr/4ePmB78mYjnyTElGrJXa1xM7an6hCUWolhvT684="
|
||||||
|
|
||||||
ota:
|
ota:
|
||||||
- platform: esphome
|
- platform: esphome
|
||||||
password: "d68060a1d18b9d61354434595717070c"
|
password: "4d1a5c36ea8858dbece920c9bedeb8db"
|
||||||
|
|
||||||
wifi:
|
wifi:
|
||||||
ssid: !secret wifi_ssid
|
ssid: !secret wifi_ssid
|
||||||
password: !secret wifi_password
|
password: !secret wifi_password
|
||||||
|
|
||||||
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||||
|
ap:
|
||||||
|
ssid: "Meteo Fallback Hotspot"
|
||||||
|
password: "2GJSSrOmscwi"
|
||||||
|
|
||||||
|
captive_portal:
|
||||||
|
|
||||||
uart:
|
uart:
|
||||||
id: mod_bus_id
|
id: uart_1
|
||||||
tx_pin: GPIO44 # Il faut les inverser !!!!
|
tx_pin:
|
||||||
rx_pin: GPIO43
|
number: GPIO44
|
||||||
|
rx_pin:
|
||||||
|
number: GPIO43
|
||||||
baud_rate: 4800
|
baud_rate: 4800
|
||||||
# debug:
|
|
||||||
# direction: BOTH
|
|
||||||
# dummy_receiver: false
|
|
||||||
# after:
|
|
||||||
# delimiter: "\n"
|
|
||||||
# sequence:
|
|
||||||
# - lambda: UARTDebug::log_string(direction, bytes);
|
|
||||||
|
|
||||||
modbus:
|
modbus:
|
||||||
id: modbus1
|
id: modbus1
|
||||||
uart_id: mod_bus_id
|
uart_id: uart_1
|
||||||
|
|
||||||
modbus_controller:
|
modbus_controller:
|
||||||
- id: modbus_controller1
|
- id: modbus_controller1
|
||||||
@ -59,7 +62,7 @@ sensor:
|
|||||||
- platform: modbus_controller
|
- platform: modbus_controller
|
||||||
id: sensor1
|
id: sensor1
|
||||||
modbus_controller_id: modbus_controller1
|
modbus_controller_id: modbus_controller1
|
||||||
name: "Wind speed"
|
name: "Anémomètre"
|
||||||
register_type: read
|
register_type: read
|
||||||
address: 0
|
address: 0
|
||||||
value_type: U_WORD
|
value_type: U_WORD
|
||||||
@ -74,11 +77,12 @@ sensor:
|
|||||||
on_value:
|
on_value:
|
||||||
then:
|
then:
|
||||||
- mqtt.publish:
|
- mqtt.publish:
|
||||||
topic: "rbo2"
|
topic: "data"
|
||||||
payload: !lambda 'return "Vent (x 10 en m/s) --> " + to_string(x);'
|
payload: !lambda 'return "Vent (x 10 en m/s) --> " + to_string(x);'
|
||||||
- platform: modbus_controller
|
- platform: modbus_controller
|
||||||
|
id: sensor2
|
||||||
modbus_controller_id: modbus_controller2
|
modbus_controller_id: modbus_controller2
|
||||||
name: "Wind direction gear"
|
name: "Girouette"
|
||||||
register_type: read
|
register_type: read
|
||||||
address: 0
|
address: 0
|
||||||
value_type: U_WORD
|
value_type: U_WORD
|
||||||
@ -93,16 +97,17 @@ sensor:
|
|||||||
on_value:
|
on_value:
|
||||||
then:
|
then:
|
||||||
- mqtt.publish:
|
- mqtt.publish:
|
||||||
topic: "rbo2"
|
topic: "data"
|
||||||
payload: !lambda 'return "Sens --> " + to_string(x);'
|
payload: !lambda 'return "Sens --> " + to_string(x);'
|
||||||
|
|
||||||
mqtt:
|
mqtt:
|
||||||
broker: "pc-raymond.home"
|
broker: "pc-raymond.home"
|
||||||
id: mqtt1
|
id: mqtt1
|
||||||
log_topic: null
|
# log_topic: log
|
||||||
port: 8883
|
port: 8883
|
||||||
username: admin
|
username: admin
|
||||||
password: !secret mqtt
|
password: !secret mqtt
|
||||||
|
# skip_cert_cn_check: True
|
||||||
certificate_authority: |
|
certificate_authority: |
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIDFzCCAf+gAwIBAgIUVQ1Osb4crzbNV4NvXb9K7EmbemYwDQYJKoZIhvcNAQEL
|
MIIDFzCCAf+gAwIBAgIUVQ1Osb4crzbNV4NvXb9K7EmbemYwDQYJKoZIhvcNAQEL
|
||||||
@ -124,5 +129,5 @@ mqtt:
|
|||||||
Ap2FlRX2rpKJFiX5rJbjGuzED4G2wv4QNrLl
|
Ap2FlRX2rpKJFiX5rJbjGuzED4G2wv4QNrLl
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
birth_message:
|
birth_message:
|
||||||
topic: rbo
|
topic: data
|
||||||
payload: 'Nouvelle connexion MQTT...'
|
payload: '---> Nouvelle connexion MQTT...'
|
||||||
38
proto/l.py
Executable file
38
proto/l.py
Executable file
@ -0,0 +1,38 @@
|
|||||||
|
#!python
|
||||||
|
import serial
|
||||||
|
import serial.tools.list_ports
|
||||||
|
|
||||||
|
def list_serial_ports():
|
||||||
|
ports = serial.tools.list_ports.comports()
|
||||||
|
for port in ports:
|
||||||
|
print(port.device)
|
||||||
|
|
||||||
|
def read_from_serial_port(port_name, baud_rate=9600):
|
||||||
|
try:
|
||||||
|
# Ouvrir le port série
|
||||||
|
ser = serial.Serial(port_name, baud_rate, timeout=1)
|
||||||
|
print(f"Lecture du port série {port_name}...")
|
||||||
|
|
||||||
|
while True:
|
||||||
|
# Lire une ligne du port série
|
||||||
|
line = ser.readline()
|
||||||
|
if line:
|
||||||
|
hex_line = ' '.join(f'{byte:02x}' for byte in line)
|
||||||
|
print(f"Reçu (hexa): {hex_line}")
|
||||||
|
|
||||||
|
except serial.SerialException as e:
|
||||||
|
print(f"Erreur: {e}")
|
||||||
|
finally:
|
||||||
|
if 'ser' in locals():
|
||||||
|
ser.close()
|
||||||
|
print("Port série fermé.")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# Lister les ports série disponibles
|
||||||
|
print("Ports série disponibles:")
|
||||||
|
list_serial_ports()
|
||||||
|
|
||||||
|
# Remplacer 'COM3' par le nom de votre port série
|
||||||
|
port_name = input("Entrez le nom du port série à lire (par exemple, COM3 ou /dev/ttyUSB0): ")
|
||||||
|
read_from_serial_port(port_name)
|
||||||
|
|
||||||
34
proto/t.py
34
proto/t.py
@ -2,13 +2,17 @@
|
|||||||
from pymodbus.client import ModbusSerialClient, ModbusTcpClient
|
from pymodbus.client import ModbusSerialClient, ModbusTcpClient
|
||||||
from pymodbus.pdu.register_read_message import ReadInputRegistersResponse
|
from pymodbus.pdu.register_read_message import ReadInputRegistersResponse
|
||||||
from configModel import Algo, Metrique, Capteur, ModbusType
|
from configModel import Algo, Metrique, Capteur, ModbusType
|
||||||
import struct, time
|
import struct, time, logging
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
|
# log = logging.getLogger('pymodbus.protocol.*')
|
||||||
|
# log.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
# client = ModbusTcpClient(host="shellyproem50-08f9e0e79718") # grarage (borne et pac)
|
# client = ModbusTcpClient(host="shellyproem50-08f9e0e79718") # grarage (borne et pac)
|
||||||
# client = ModbusTcpClient(host="ShellyPro3EM-FCE8C0D97664") # bureau (prises 1 à 3)
|
# client = ModbusTcpClient(host="ShellyPro3EM-FCE8C0D97664") # bureau (prises 1 à 3)
|
||||||
client = ModbusSerialClient(
|
client = ModbusSerialClient(
|
||||||
port="/dev/ttyACM0",
|
port="/dev/ttyUSB1",
|
||||||
baudrate=4800,
|
baudrate=9600,
|
||||||
# stopbits=capteur.comConfig.stopbits,
|
# stopbits=capteur.comConfig.stopbits,
|
||||||
# bytesize=capteur.comConfig.bytesize,
|
# bytesize=capteur.comConfig.bytesize,
|
||||||
# parity=capteur.comConfig.parity
|
# parity=capteur.comConfig.parity
|
||||||
@ -22,14 +26,11 @@ def uint32(a, b):
|
|||||||
ret:int = (a << 16) | b
|
ret:int = (a << 16) | b
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
slave = 1
|
def lireMetrique(metrique:Metrique, registre:int, slave:int = 1, nom:str = "sans nom"):
|
||||||
|
|
||||||
def lireMetrique(metrique:Metrique, registre):
|
|
||||||
client.connect()
|
client.connect()
|
||||||
try:
|
try:
|
||||||
data:ReadInputRegistersResponse = client.read_input_registers(registre, 2, slave=slave)
|
data:ReadInputRegistersResponse = client.read_input_registers(registre, 1, slave=slave)
|
||||||
if data:
|
if data:
|
||||||
print(f"--> {data}")
|
|
||||||
registres = data.registers
|
registres = data.registers
|
||||||
if metrique.algo == Algo.NORMAL:
|
if metrique.algo == Algo.NORMAL:
|
||||||
val = registres[0]
|
val = registres[0]
|
||||||
@ -41,23 +42,24 @@ def lireMetrique(metrique:Metrique, registre):
|
|||||||
val = ''.join(chr(register) for register in data.registers)
|
val = ''.join(chr(register) for register in data.registers)
|
||||||
if metrique.algo == Algo.BOOLEAN:
|
if metrique.algo == Algo.BOOLEAN:
|
||||||
val = registres[0]
|
val = registres[0]
|
||||||
print(f"Captation sur {registre} : {val}")
|
print(f"--> Registre {registre} du périmérique {slave} ({nom}) : {val}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Erreur lors de la captation sur {registre} : {e}")
|
print(f"Erreur lors de la lecture du registre {registre} du périmérique {slave} ({nom}) : {e}")
|
||||||
finally:
|
finally:
|
||||||
client.close()
|
client.close()
|
||||||
|
|
||||||
registre = -1
|
slave = 0
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
slave = 2
|
|
||||||
while True:
|
while True:
|
||||||
registre = 0
|
# slave = slave + 1
|
||||||
m:Metrique = Metrique(
|
m:Metrique = Metrique(
|
||||||
idMetrique=1,
|
idMetrique=0,
|
||||||
indexRegistreDepart=registre,
|
indexRegistreDepart=0,
|
||||||
precision=3,
|
precision=3,
|
||||||
algo=Algo.NORMAL
|
algo=Algo.NORMAL
|
||||||
)
|
)
|
||||||
lireMetrique(m, registre)
|
lireMetrique(m, 1, slave=1)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
# lireMetrique(m, 0, 2, "orientation")
|
||||||
|
# time.sleep(1)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user