« Odpowiedź #299 dnia: Lutego 24, 2022, 12:45:11 »
Macie namiary na ten skrypty? Gdzieś na github może? Kiedyś może uda mi się to dodać do integracji. To "tylko" wywołanie kolejnej komendy dla konkretnych urządzeń. Problemem jest tylko jak to sensownie zrobić, bo biblioteka do komunikacji jest tak zrobiona, że nie ma logiki, która rozróżnia co to za urządzenia i czy trzeba coś jeszcze doczytać, ale może kiedyś coś mi się uda tam zmienić. Będzie łatwiej jak będzie gdzieś działający gotowiec
Wrzucam moje rozwiązanie tutaj dla potomności - implementacja pobierania danych o głowicach (z doświadczenia widzę, że komunikuje się tylko z kontrolerem, nie wymusza żadnej komunikacji radiowej):
1. Definicje sensorów command_line (takie coś dla każdej głowicy):
- platform: command_line
name: "Termostat Sypialnia"
json_attributes:
- valve_val
- sync_time
- last_sync
- time
- readings_time
- button_lock
- colors
- global_temperatures
command: "python ~/py/command25.py 34"
unit_of_measurement: "%"
scan_interval: 60
value_template: "{{ value_json.valve_val }}"
2. Obsługa komendy 25 kontrolera - zwraca JSON-a: command25.py
import sys
import socket
import json
import exta
# Pobiera dane z glowicy (m.in. ostania synchronizacja i poziom zamkniecia zaworu)
# Parametry:
# [1] - numer urzadzenia, np. 31 (climate.salon)
device = int(sys.argv[1])
s = exta.exta_socket()
exta.login(s)
obj = {
"command": 25,
"data": {
"channel": 1,
"id": device
}
}
s.sendall(bytes(json.dumps(obj)+'\x03', 'UTF-8'))
data = s.recv(1024)
j = json.loads(str(data, 'UTF-8')[:-1])
print(json.dumps(j.get("data")))
3. Kawałek wspólny dla różnych innych skryptów (które póki co w powijakach, do obsługi komend 75 i 77): exta.py
import socket
def host():
return 'x.x.x.x'
def port():
return 20400
def exta_socket():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host(), port()))
return s
def login(s):
s.sendall(b'{"command":1,"data":{"login":"xxx","password":"xxx"}}\x03')
data = s.recv(1024)
return True
Efekt działania - przykładowa zawartość sensor.termostat_sypialnia:
valve_val: 100
sync_time: 1645706570
last_sync: 282
time: 1645706852
readings_time: 300
button_lock: false
colors:
- 10092339
- 10092531
- 16773887
- 2236979
global_temperatures:
- 180
- 200
- 240
- 220
unit_of_measurement: '%'
friendly_name: Termostat Sypialnia
Jeszcze dodatkowe sensory template "odwracające" poziom zamknięcia na poziom otwarcia (lepsze do wykresów):
- sensor:
- name: "Valve Sypialnia"
unit_of_measurement: "%"
state: >
{% set valve = state_attr('sensor.termostat_sypialnia','valve_val') %}
{% if valve == None %}
{{ 0 | float() }}
{% else %}
{{ 100 - valve | float() }}
{% endif %}
« Ostatnia zmiana: Lutego 24, 2022, 12:57:27 wysłana przez Fantomas »
Zapisane
Elementy systemu, których używam: Bramka AIS DEV 3 + pilot, EFC-01, 3x ROP-01, 3x ROP-02, RDP-01, ROP-07, RNK-02, 5x RNK-04, RNP-01, P-257/2, 2x ROP-21, 3x ROP-22, 5x RNK-24, RCK-21, 3x RCR-21, RCM-21, 4x RGT-01, urządzenia Zigbee, kamera IP.