Gestion excedentes con aires acondicionados .

Enseña tus proyectos!
Avatar de Usuario
cverdul
Mensajes: 30
Registrado: 06 Feb 2021, 21:46
Has thanked: 21 times
Been thanked: 8 times

Re: Gestion excedentes con aires acondicionados .

#61

Mensaje por cverdul »

javiguarena escribió: 08 Abr 2021, 14:26 pese a haber sacado los codigos con el node red, al entrar por python me salta siempre el error:
import broadlink
>>> devices = broadlink.discover(timeout=3,local_ip_address='192.168.18.213')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.7/dist-packages/broadlink/__init__.py", line 162, in discover
return [gendevice(*resp) for resp in responses]
File "/usr/local/lib/python3.7/dist-packages/broadlink/__init__.py", line 162, in <listcomp>
return [gendevice(*resp) for resp in responses]
File "/usr/local/lib/python3.7/dist-packages/broadlink/device.py", line 29, in scan
conn.bind((local_ip_address, 0))
OSError: [Errno 99] Cannot assign requested address
Tengo exactamente el mismo error en el mismo módulo y en la misma línea con el RMPro+ que me acaba de llegar. :cryb

Analizando el fuente, veo que es posible no poner la ip para lanzar el discover. Eso provoca que haga un barrido ¡y encuentre el dispositivo en la ip correcta (192.168.0.199 en mi caso)!:

devices = broadlink.discover(timeout=15)
>>>
>>> devices[0].auth()
True
>>> devices[0].host
('192.168.0.199', 80)
16 paneles / 5.4Kw
Inversor Huawei SUN2000L-KTL
Volcado a red de excedentes.
Jordirr
Mensajes: 8
Registrado: 22 Ago 2019, 21:55
Has thanked: 1 time
Been thanked: 1 time

Re: Gestion excedentes con aires acondicionados .

#62

Mensaje por Jordirr »

Buenas tardes ...yo soy uno que tenía un mini y no he conseguido hacer nada ....no hay manera ....ahora voy a ver si me compro el pro que habéis indicado... alguien tiene un aire toshiba¿
javiguarena
Mensajes: 18
Registrado: 28 Abr 2020, 12:39
Has thanked: 1 time
Been thanked: 1 time

Re: Gestion excedentes con aires acondicionados .

#63

Mensaje por javiguarena »

como dice el compañero de arriba ya he conseguido que conecte y me lea los codigos con el R3 mini, aqui teneis como lo he conseguido sacar:

python3
Python 3.7.3 (default, Jan 22 2021, 20:04:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import broadlink
ç>>> devices = broadlink.discover(timeout=15)
>>> devices[0].auth()
True
>>> devices[0].enter_learning()
>>> codigo = devices[0].check_data()
>>> myhex = codigo.hex()
>>> print (codigo)
b'&\x00\xca\x00\x89\x91\x117\x10\x13\x117\x107\x11\x13\x10\x14\x107\x10\x14\x10\ x14\x107\x11\x13\x10\x14\x107\x116\x11\x13\x117\x10\x14\x107\x10\x14\x107\x107\x 117\x107\x107\x117\x10\x14\x107\x10\x14\x10\x14\x10\x13\x11\x13\x11\x13\x10\x14\ x10\x14\x107\x10\x14\x10\x13\x11\x13\x11\x13\x10\x14\x107\x116\x11\x13\x117\x107 \x107\x117\x107\x12\xab\x8e\x91\x116\x11\x13\x117\x107\x10\x14\x10\x13\x117\x10\ x14\x10\x13\x117\x10\x14\x10\x13\x117\x107\x10\x14\x107\x10\x14\x107\x11\x13\x10 7\x117\x107\x107\x107\x117\x10\x14\x107\x10\x14\x10\x13\x11\x13\x11\x13\x10\x14\ x10\x14\x10\x13\x117\x10\x13\x11\x13\x10\x14\x10\x14\x10\x13\x117\x107\x10\x14\x 107\x107\x117\x107\x107\x12\x00\r\x05'
>>> devices[0].enter_learning()
Avatar de Usuario
cverdul
Mensajes: 30
Registrado: 06 Feb 2021, 21:46
Has thanked: 21 times
Been thanked: 8 times

Re: Gestion excedentes con aires acondicionados .

#64

Mensaje por cverdul »

Acabo de encontrar una alternativa a la llamada 'discover' que hemos visto que falla cuando se le indica una ip concreta a descubrir. Se trata de usar la funcion 'hello', que devuelve un objeto 'device' en lugar de una enumeración de varios objetos.

MiDevice = broadlink.hello(host='192.168.0.199', port=80, timeout=15)

Además de cambiar esta función en el código, habría que sustituir la variable 'devices[0]' que hace referencia al primer elemento de la enumeración, por la variable 'MiDevice' (por ejemplo) que referenciaría al mando Broadlink concreto que tiene asignada esa IP.

Supongo que la librería 'broadlink' ha cambiado desde que se hicieron las primeras implantaciones y que ahora funciona difrente. Eso explicaría que el 'discover' haya dejado de funcionar cuando se le indica una IP concreta a descubrir.
16 paneles / 5.4Kw
Inversor Huawei SUN2000L-KTL
Volcado a red de excedentes.
Avatar de Usuario
cverdul
Mensajes: 30
Registrado: 06 Feb 2021, 21:46
Has thanked: 21 times
Been thanked: 8 times

Re: Gestion excedentes con aires acondicionados .

#65

Mensaje por cverdul »

fran_pascualin escribió: 12 Ene 2021, 15:04 Esta es la version con 1800s de espera de excedentes, por lo menos a mi me gusta mas que no se apague y encienda tanto los dias que estan los excedentes justitos o pasen nubarrones.
La modifico Gabriel, era bastante mas complejo que colocar un retardo en alguna linea del script.

saludos
Una consulta. Con esta estructura de servicio (broad.py), ¿hay que seguir definiendo el relé 271 como 'ON / salto 100 / prioridad 0' o deberia ser del tipo 'PRG / salto 20 / prioridad > 0' ? Para una instalación con volcado de excedentes, ¿se usa la variable Wred como 'sensor_PID'? ¿El 'objetivo_PID' debe ser cero?

Los dos manuales al respecto no sé si son correctos respecto a esta versión del servicio (broad.py) en que veo que se van produciendo cambios de estado cuando el valor del topic se modifica en 20 (para ir variando progresivamente el consumo del AA).

Además de lo anterior, no me queda claro el funcionamiento del fv.py al ir actualizando relés. Entiendo que cada vez que detecta excedentes por el algortimo PID, calcula un PWM a repartir. Ese PWM incrementa el estado de los relés PRG en, como máximo 100

# Repartimos PWM entre los reles
PWM_R = PWM
for P in range(Nreles_Diver):
id_rele = Reles_D_Ord[P][0]

valor = min(100,PWM_R)
salto = Reles_D_Ord[P][2]

Rele[id_rele] = int(salto * round(valor/salto))

if Rele[id_rele] != Rele_Ant[id_rele]:
act_rele(id_rele,Rele[id_rele])
#Rele_Ant[id_rele] = Rele[id_rele]

PWM_R -= Rele[id_rele]
PWM_R = max(0,PWM_R)


¿Qué unidades maneja la variable PWM? ¿Es un porcentaje de 0 a 100?
Al ejecutar el servicio veo que el relé se actualiza o con el valor 0 o con el valor 100, nada intermedio. ¿Es correcto?
16 paneles / 5.4Kw
Inversor Huawei SUN2000L-KTL
Volcado a red de excedentes.
Miquel1975
Gigante roja
Gigante roja
Mensajes: 555
Registrado: 26 Mar 2020, 13:10
Has thanked: 5 times
Been thanked: 71 times

Re: Gestion excedentes con aires acondicionados .

#66

Mensaje por Miquel1975 »

en estos temas poco te puedo ayudar yo... quizas gabriel o manuel si le pegan un vistazo te lo aclaren.
javiguarena
Mensajes: 18
Registrado: 28 Abr 2020, 12:39
Has thanked: 1 time
Been thanked: 1 time

Re: Gestion excedentes con aires acondicionados .

#67

Mensaje por javiguarena »

Buenas, pues despues de haber estado haciendo pruebas con mi rm 4 pro, no hay manera de sacarle los codigos, ni con el metodo que yo puse ni con la funcion hello que puso el compañero, lo que si me ha funcionado, es los codigos que saque con el RM mini 3, mandarlos con el rm 4 pro, por si alguno le sirve de ayuda
javiguarena
Mensajes: 18
Registrado: 28 Abr 2020, 12:39
Has thanked: 1 time
Been thanked: 1 time

Re: Gestion excedentes con aires acondicionados .

#68

Mensaje por javiguarena »

buenas, sigo a vueltas con el aire, nose si el codigo aa1.py lo tendre bien relleno, os explico, saco los codigos de esta manera segun puse en un post anteiror:
python3
Python 3.7.3 (default, Jan 22 2021, 20:04:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import broadlink
ç>>> devices = broadlink.discover(timeout=15)
>>> devices[0].auth()
True
>>> devices[0].enter_learning()
>>> codigo = devices[0].check_data()
>>> myhex = codigo.hex()
>>> print (codigo)
b'&\x00\xca\x00\x89\x91\x117\x10\x13\x117\x107\x11\x13\x10\x14\x107\x10\x14\x10\ x14\x107\x11\x13\x10\x14\x107\x116\x11\x13\x117\x10\x14\x107\x10\x14\x107\x107\x 117\x107\x107\x117\x10\x14\x107\x10\x14\x10\x14\x10\x13\x11\x13\x11\x13\x10\x14\ x10\x14\x107\x10\x14\x10\x13\x11\x13\x11\x13\x10\x14\x107\x116\x11\x13\x117\x107 \x107\x117\x107\x12\xab\x8e\x91\x116\x11\x13\x117\x107\x10\x14\x10\x13\x117\x10\ x14\x10\x13\x117\x10\x14\x10\x13\x117\x107\x10\x14\x107\x10\x14\x107\x11\x13\x10 7\x117\x107\x107\x107\x117\x10\x14\x107\x10\x14\x10\x13\x11\x13\x11\x13\x10\x14\ x10\x14\x10\x13\x117\x10\x13\x11\x13\x10\x14\x10\x14\x10\x13\x117\x107\x10\x14\x 107\x107\x117\x107\x107\x12\x00\r\x05'
>>> devices[0].enter_learning()



y tengo asi relleno el archivo aa1.py


import csv
import time
import datetime
import broadlink
import paho.mqtt.client as mqtt

from Parametros_FV import *

Nodo = 'PVControl/Reles/27' #el rele virtual sera el '27'+'1', ver mas abajo de donde sale el 1

estado = 0
estado_ant = 0

devices = broadlink.discover(timeout=15)

time.sleep(2)

devices[0].auth()

### Encendido bomba de calor con AA1_T26CM
### Encendido bomba de frio con AA1_T20FM


IR_CODIGOS = { 'AA1_T20FM' : b'&\x00\xca\x00\x89\x91\x117\x10\x13\x117\x107\x11\x13\x10\x14\x107\x10\x14\x10\x14\x107\x11\x13\x10\x14\x107\x116\x11\x13\x117\x10\x14\x107\x10\x14\x107\x107\x117\x107\x107\x117\x10\x14\x107\x10\x14\x10\x14\x10\x13\x11\x13\x11\x13\x10\x14\x10\x14\x107\x10\x14\x10\x13\x11\x13\x11\x13\x10\x14\x107\x116\x11\x13\x117\x107\x107\x117\x107\x12\xab\x8e\x91\x116\x11\x13\x117\x107\x10\x14\x10\x13\x117\x10\x14\x10\x13\x117\x10\x14\x10\x13\x117\x107\x10\x14\x107\x10\x14\x107\x11\x13\x107\x117\x107\x107\x107\x117\x10\x14\x107\x10\x14\x10\x13\x11\x13\x11\x13\x10\x14\x10\x14\x10\x13\x117\x10\x13\x11\x13\x10\x14\x10\x14\x10\x13\x117\x107\x10\x14\x107\x107\x117\x107\x107\x12\x00\r\x05' ,
'AA1_T22FM' : b'&\x00\xca\x00\x8b\x8f\x125\x12\x12\x125\x135\x12\x11\x13\x11\x125\x13\x11\x13\x11\x125\x13\x11\x13\x11\x125\x134\x13\x11\x135\x12\x12\x125\x12\x12\x125\x125\x134\x135\x125\x135\x12\x11\x135\x12\x12\x12\x11\x13\x11\x13\x11\x12\x12\x12\x12\x125\x125\x134\x13\x11\x13\x11\x12\x12\x12\x12\x125\x12\x12\x12\x12\x12\x11\x135\x125\x125\x135\x13\xa9\x91\x8e\x135\x12\x12\x125\x125\x13\x11\x12\x12\x125\x12\x12\x12\x12\x125\x12\x12\x12\x12\x125\x125\x12\x12\x125\x13\x11\x125\x13\x11\x134\x135\x125\x125\x134\x135\x12\x12\x125\x13\x11\x12\x12\x12\x11\x13\x11\x13\x11\x12\x12\x125\x134\x135\x12\x11\x13\x11\x13\x11\x12\x12\x125\x13\x11\x12\x12\x12\x11\x135\x125\x134\x135\x13\x00\r\x05' ,
'AA1_T24FM' : b'&\x00\xca\x00\x8b\x90\x125\x12\x12\x125\x125\x13\x11\x13\x11\x125\x13\x11\x12\x12\x116\x13\x11\x12\x12\x125\x125\x13\x11\x126\x12\x12\x125\x12\x12\x116\x125\x134\x135\x125\x126\x12\x11\x135\x12\x12\x12\x11\x13\x11\x11\x13\x12\x12\x12\x11\x135\x11\x13\x12\x11\x13\x11\x12\x12\x11\x13\x12\x11\x126\x12\x12\x125\x125\x135\x125\x125\x125\x13\xaa\x91\x8e\x135\x12\x11\x135\x125\x11\x13\x12\x12\x125\x12\x12\x11\x13\x116\x12\x12\x11\x12\x135\x125\x12\x12\x125\x12\x12\x125\x12\x12\x125\x134\x135\x125\x125\x135\x12\x12\x125\x12\x12\x12\x11\x12\x12\x12\x12\x12\x12\x12\x12\x125\x12\x12\x12\x12\x12\x11\x13\x11\x12\x12\x12\x12\x125\x12\x12\x125\x134\x135\x125\x125\x134\x13\x00\r\x05' ,
'AA1_T26FM' : b'&\x00\xca\x00\x8c\x8e\x135\x12\x11\x135\x125\x13\x11\x12\x12\x125\x12\x12\x12\x12\x125\x13\x11\x12\x12\x125\x125\x13\x11\x125\x13\x11\x134\x13\x11\x135\x125\x134\x134\x135\x125\x13\x11\x134\x13\x11\x13\x11\x13\x11\x12\x12\x12\x11\x135\x125\x13\x11\x125\x13\x11\x12\x12\x12\x11\x13\x11\x13\x11\x13\x11\x125\x13\x11\x134\x135\x125\x134\x13\xab\x90\x8e\x135\x12\x11\x135\x125\x13\x11\x12\x12\x125\x12\x12\x12\x11\x135\x12\x12\x12\x11\x134\x135\x12\x12\x125\x13\x11\x125\x13\x11\x125\x134\x135\x125\x134\x135\x12\x12\x125\x13\x11\x12\x12\x12\x11\x13\x11\x13\x11\x125\x134\x13\x11\x134\x16\x0f\x12\x11\x13\x11\x12\x12\x12\x11\x13\x11\x134\x13\x11\x135\x125\x134\x135\x13\x00\r\x05' ,
'AA1_T28FM' : b'&\x00\xca\x00\x8b\x8f\x134\x13\x11\x134\x134\x13\x11\x13\x11\x134\x14\x10\x13\x11\x134\x13\x11\x13\x11\x134\x135\x12\x11\x135\x13\x11\x125\x13\x11\x125\x134\x135\x125\x134\x135\x12\x12\x125\x13\x11\x12\x11\x13\x11\x13\x11\x13\x11\x125\x13\x11\x13\x11\x12\x11\x13\x11\x13\x11\x13\x11\x12\x12\x12\x11\x135\x125\x134\x134\x135\x125\x134\x13\xaa\x91\x8f\x125\x13\x11\x125\x134\x13\x11\x13\x11\x134\x13\x11\x13\x11\x125\x13\x11\x13\x11\x125\x134\x13\x11\x134\x13\x11\x134\x13\x11\x135\x125\x134\x134\x135\x125\x13\x11\x134\x13\x11\x13\x11\x13\x11\x12\x11\x13\x11\x134\x13\x11\x13\x11\x13\x11\x12\x12\x12\x11\x13\x11\x13\x11\x12\x12\x125\x134\x134\x135\x125\x134\x135\x12\x00\r\x05' ,

'AA1_T26CM' : b'&\x00\xca\x00\x8a\x90\x107\x10\x14\x107\x116\x11\x13\x11\x13\x107\x11\x13\x11\x13\x117\x10\x13\x11\x13\x107\x117\x10\x14\x107\x10\x14\x107\x11\x13\x107\x117\x107\x107\x117\x107\x11\x13\x107\x11\x13\x11\x13\x10\x14\x10\x13\x11\x13\x117\x107\x10\x14\x107\x116\x117\x10\x14\x10\x13\x11\x13\x11\x13\x107\x11\x13\x11\x13\x10\x14\x107\x116\x12\xab\x8f\x90\x117\x10\x14\x107\x107\x11\x13\x10\x14\x107\x10\x14\x10\x14\x107\x11\x13\x10\x14\x107\x107\x11\x13\x107\x11\x13\x117\x10\x13\x117\x107\x107\x117\x107\x107\x11\x13\x117\x10\x13\x11\x13\x10\x14\x10\x14\x10\x13\x117\x107\x10\x14\x107\x116\x117\x10\x14\x10\x13\x11\x13\x11\x13\x107\x11\x13\x10\x14\x10\x14\x107\x107\x12\x00\r\x05' ,
'AA1_T24CM' : b'&\x00\xca\x00\x8c\x8e\x135\x12\x11\x135\x134\x13\x11\x13\x11\x125\x13\x11\x12\x12\x125\x13\x11\x12\x12\x125\x125\x13\x11\x134\x13\x11\x134\x13\x11\x134\x135\x134\x134\x135\x125\x13\x11\x134\x13\x11\x13\x11\x13\x11\x12\x11\x13\x11\x13\x11\x134\x13\x11\x13\x11\x134\x134\x13\x11\x13\x11\x135\x12\x11\x135\x125\x13\x11\x12\x12\x125\x125\x12\xab\x91\x8e\x134\x13\x11\x134\x135\x12\x12\x12\x11\x134\x13\x11\x13\x11\x134\x13\x11\x13\x11\x134\x135\x12\x11\x135\x12\x12\x125\x13\x11\x125\x134\x134\x135\x125\x134\x13\x11\x135\x12\x11\x13\x11\x13\x11\x13\x11\x12\x11\x13\x11\x135\x12\x11\x13\x11\x134\x135\x12\x11\x13\x11\x135\x12\x11\x135\x125\x13\x11\x12\x12\x125\x125\x12\x00\r\x05' ,
'AA1_T22CM' : b'&\x00\xca\x00\x8c\x8e\x135\x12\x12\x125\x134\x13\x11\x13\x11\x134\x13\x11\x13\x11\x125\x13\x11\x13\x11\x125\x134\x13\x11\x135\x12\x12\x125\x12\x12\x125\x134\x135\x125\x134\x135\x12\x12\x125\x13\x11\x12\x11\x13\x11\x13\x11\x13\x11\x12\x12\x125\x134\x135\x125\x134\x13\x11\x13\x11\x125\x13\x11\x13\x11\x12\x12\x12\x11\x13\x11\x134\x135\x12\xab\x90\x8f\x125\x13\x11\x134\x134\x13\x11\x13\x11\x134\x13\x11\x13\x11\x134\x13\x11\x13\x11\x134\x134\x13\x11\x135\x12\x11\x135\x12\x12\x125\x134\x134\x135\x125\x135\x12\x11\x135\x12\x11\x13\x11\x13\x11\x13\x11\x12\x12\x12\x11\x135\x125\x134\x134\x135\x12\x12\x12\x11\x135\x13\x11\x12\x11\x13\x11\x13\x11\x13\x11\x125\x134\x12\x00\r\x05' ,
'AA1_T20CM' : b'&\x00\xca\x00\x8a\x90\x125\x13\x11\x125\x135\x12\x11\x13\x11\x134\x13\x11\x13\x11\x134\x13\x11\x13\x11\x134\x134\x13\x11\x135\x12\x12\x125\x12\x12\x125\x134\x134\x135\x125\x135\x12\x11\x135\x12\x12\x12\x11\x13\x11\x13\x11\x12\x12\x12\x11\x13\x11\x134\x13\x11\x135\x125\x12\x12\x12\x12\x125\x125\x13\x11\x125\x13\x11\x13\x11\x125\x134\x13\xaa\x91\x8e\x134\x13\x11\x135\x125\x12\x12\x12\x11\x135\x12\x12\x12\x11\x135\x12\x11\x13\x11\x134\x135\x12\x12\x125\x12\x12\x125\x13\x11\x125\x134\x135\x125\x125\x135\x12\x11\x135\x12\x12\x12\x11\x13\x11\x13\x11\x12\x12\x12\x11\x13\x11\x134\x13\x11\x134\x135\x12\x12\x12\x11\x135\x125\x13\x11\x125\x13\x11\x12\x12\x125\x125\x13\x00\r\x05' ,
'AA1_T18CM' : b'&\x00\xca\x00\x88\x91\x117\x10\x14\x107\x107\x11\x13\x10\x14\x107\x11\x13\x10\x14\x107\x11\x13\x10\x14\x107\x107\x11\x13\x117\x10\x13\x117\x10\x14\x107\x107\x116\x117\x107\x108\x10\x13\x117\x10\x14\x10\x13\x11\x13\x10\x14\x10\x14\x10\x13\x11\x13\x11\x13\x107\x117\x107\x10\x14\x10\x14\x107\x107\x117\x10\x13\x11\x13\x11\x13\x107\x117\x12\xaa\x8f\x91\x107\x10\x14\x107\x107\x11\x13\x11\x13\x107\x11\x13\x10\x14\x107\x11\x13\x10\x14\x107\x107\x11\x13\x107\x11\x13\x117\x10\x13\x117\x107\x107\x116\x117\x107\x11\x13\x107\x11\x13\x11\x13\x10\x14\x10\x13\x11\x13\x11\x13\x10\x14\x10\x14\x107\x107\x117\x10\x13\x11\x13\x117\x107\x107\x10\x14\x10\x14\x10\x13\x117\x107\x12\x00\r\x05' ,

'AA1_OFFT26CM' : b'&\x00\xca\x00\x8b\x90\x125\x13\x11\x125\x134\x13\x11\x13\x11\x134\x13\x11\x13\x11\x134\x13\x11\x13\x11\x134\x135\x12\x11\x135\x13\x11\x125\x134\x135\x125\x13\x11\x125\x134\x135\x13\x11\x12\x12\x12\x11\x13\x11\x134\x13\x11\x13\x11\x134\x135\x125\x13\x11\x12\x12\x12\x11\x13\x11\x13\x11\x13\x11\x12\x11\x13\x11\x135\x125\x134\x134\x135\x12\xab\x91\x8e\x134\x13\x11\x135\x125\x13\x11\x12\x11\x135\x12\x12\x12\x11\x135\x12\x12\x12\x11\x135\x125\x12\x12\x125\x13\x11\x125\x134\x135\x125\x13\x11\x125\x134\x135\x12\x12\x12\x11\x13\x11\x13\x11\x125\x13\x11\x13\x11\x125\x134\x135\x12\x12\x12\x11\x13\x11\x13\x11\x12\x12\x12\x11\x13\x11\x13\x11\x125\x134\x135\x125\x134\x12\x00\r\x05' ,
'AA1_OFFT20FM' : b'&\x00\xca\x00\x8b\x8e\x135\x13\x11\x125\x134\x13\x11\x13\x11\x134\x13\x11\x13\x11\x134\x13\x11\x13\x11\x134\x134\x13\x11\x135\x13\x11\x125\x134\x134\x135\x13\x11\x125\x134\x135\x13\x11\x12\x11\x13\x11\x13\x11\x134\x13\x11\x13\x11\x134\x135\x125\x13\x11\x12\x12\x12\x11\x13\x11\x13\x11\x13\x11\x12\x12\x12\x11\x135\x125\x134\x134\x135\x12\xab\x91\x8e\x135\x12\x11\x135\x125\x13\x11\x12\x12\x125\x12\x12\x12\x11\x135\x13\x11\x12\x11\x135\x125\x13\x11\x125\x13\x11\x134\x134\x135\x125\x13\x11\x125\x135\x125\x13\x11\x12\x12\x12\x11\x13\x11\x134\x13\x11\x13\x11\x134\x135\x125\x13\x11\x12\x12\x12\x11\x13\x11\x13\x12\x11\x12\x12\x11\x13\x11\x135\x125\x134\x134\x135\x12\x00\r\x05' ,
}

# ----------------------- MOSQUITTO ------------------------
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe(Nodo+str(1)) #aqui vemos el 1 que decia antes, entonces 27+1=> 271

def on_disconnect(client, userdata, rc):
if rc != 0:
print ("Unexpected MQTT disconnection. Will auto-reconnect")
else:
client.loop_stop()
client.disconnect()

def on_message(client, userdata, msg):
global ultimo_msg, duty
duty = int(msg.payload)
#print(msg.topic+" estado="+str(duty))
ultimo_msg = time.time()


client = mqtt.Client("AA1") #crear nueva instancia, de nombre AA1 = Aire Acondicionado 1
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_message = on_message
client.reconnect_delay_set(3,15)
client.username_pw_set(usuario, password=clave)
try:
client.connect(192.168.18.150, 1883) #conectar al broker: url, puerto
except:
print('Error de conexion al servidor MQTT')
time.sleep(.2)


en el campo client.connect(192.168.18.150, esa ip es la de la raspberry, no se si tiene que ser esa la que se ponga??, pero no me funciona, a ver si alguno que entienda de python sabe como tengo que ponerlo.

Gracias.
Avatar de Usuario
cverdul
Mensajes: 30
Registrado: 06 Feb 2021, 21:46
Has thanked: 21 times
Been thanked: 8 times

Re: Gestion excedentes con aires acondicionados .

#69

Mensaje por cverdul »

fran_pascualin escribió: 23 Mar 2021, 12:52 El mini se de otro caso que no lo logro enganchar , Jesús plasrer , que andará por aquí por el foro también.
Hola. Confirmo que el RM4 Mini (más barato y más reciente que el RMPro+) se puede manejar sin problemas con la librería 'broadlink' de Python.

Hay que tener en cuenta que, para que sea manejable desde otras aplicaciones, NO hay que finalizar el proceso de registro del mando en la app de Broadlink. Solo hay que llegar al momento de las instrucciones en que se le indica al aparato la red Wifi a la que debe conectarse. Una vez nos dice que se ha conectado a la red, hay que salir de la app.

Si el dispositivo se ha registrado en la nube de Broadlink, queda bloqueado y hay que forzar un factory reset. La forma de saber que está bloqueado puede ser la siguiente. Si aparece 'is_locked=True' hay que resetear el mando y empezar desde cero. Aquí un ejemplo en el que tengo un RM Pro+ y un RM4 mini conectados a mi red:

>>> import broadlink
>>> devices=broadlink.discover(timeout=15)
>>> devices[0]
broadlink.remote.rmpro(('192.168.0.199', 80), mac=b'\xc8\xf7B\xd9\xf8\xb2', devtype=10141, timeout=10, name='智能遥控', model='RM pro+', manufacturer='Broadlink', is_locked=False)
>>> devices[1]
broadlink.remote.rm4mini(('192.168.0.116', 80), mac=b'\xa0C\xb0\x15{\x0c', devtype=25914, timeout=10, name='智能遥控', model='RM4 mini', manufacturer='Broadlink', is_locked=True)
>>>

Hay que tener en cuenta también que la función para poder conectarse a cada mando según su dirección IP NO es la que aparece en la ayuda que circula en el foro (discover):

device=broadlink.discover(timeout=3,local_ip_address='192.168.0.199')

sino ésta (hello):

device = broadlink.hello(host='192.168.0.199', port=80, timeout=15)

Puedo decir que tengo ya dos aires acondicionados gestionados por PVControl+. Ahora estoy ajustando el reparto de excedentes para que, si los dos aires tienen la misma prioridad, ambos incrementen o decrementen su potencia en el mismo porcentaje.

Si alguien necesita ayuda, que me la pida.
16 paneles / 5.4Kw
Inversor Huawei SUN2000L-KTL
Volcado a red de excedentes.
Avatar de Usuario
cverdul
Mensajes: 30
Registrado: 06 Feb 2021, 21:46
Has thanked: 21 times
Been thanked: 8 times

Re: Gestion excedentes con aires acondicionados .

#70

Mensaje por cverdul »

javiguarena escribió: 04 May 2021, 13:35 buenas, sigo a vueltas con el aire, nose si el codigo aa1.py lo tendre bien relleno, os explico, saco los codigos de esta manera segun puse en un post anteiror:


...

client = mqtt.Client("AA1") #crear nueva instancia, de nombre AA1 = Aire Acondicionado 1
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_message = on_message
client.reconnect_delay_set(3,15)
client.username_pw_set(usuario, password=clave)
try:
client.connect(192.168.18.150, 1883) #conectar al broker: url, puerto
except:
print('Error de conexion al servidor MQTT')
time.sleep(.2)


en el campo client.connect(192.168.18.150, esa ip es la de la raspberry, no se si tiene que ser esa la que se ponga??, pero no me funciona, a ver si alguno que entienda de python sabe como tengo que ponerlo.

Gracias.
En mi caso el servidor MQTT al que me conecto está definido en Parametros_FV.py como 'localhost':

######################################
###### Parametros Base de Datos ######
######################################
servidor = "localhost"
usuario = "rpi"
clave = "fv"
basedatos = "control_solar"


Y el código dentro de aa1.py es el siguiente:

client = mqtt.Client("AA1") #crear nueva instancia, de nombre AA1 = Aire Acondicionado 1
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_message = on_message
client.reconnect_delay_set(3,15)
client.username_pw_set(usuario, password=clave)
try:
client.connect(servidor, 1883) #conectar al broker: url, puerto
except:
print('Error de conexion al servidor MQTT')
time.sleep(.2)


Por si te sirve. Si quieres porner la IP en el propio módulo aa1.py creo que deberías enmarcarla en comillas dobles.

Un saludo.
16 paneles / 5.4Kw
Inversor Huawei SUN2000L-KTL
Volcado a red de excedentes.
fran_pascualin
Forero con ADNSolar
Gigante roja
Gigante roja
Mensajes: 783
Registrado: 23 Ene 2019, 17:12
Has thanked: 142 times
Been thanked: 93 times

Re: Gestion excedentes con aires acondicionados .

#71

Mensaje por fran_pascualin »

Olee !, Que buenos aportes.
Cuando termines ese código podías ponerlo por aquí si haces el favor , que yo quiero hacer que funcione un segundo a/a.
Avatar de Usuario
cverdul
Mensajes: 30
Registrado: 06 Feb 2021, 21:46
Has thanked: 21 times
Been thanked: 8 times

Re: Gestion excedentes con aires acondicionados .

#72

Mensaje por cverdul »

He trasteado bastante con los aires acondicionados y con la lógica de reparto de excedentes y he visto que el control actual con aires acondicionados no es capaz de evitar saltos cuando los excedentes están en la frontera. Cuando hay mucho excedente o ningún excedente no hay problema: el sistema los pone rápidamente al 100% o al 0%. Pero eso no es lo que me gustaría para los aires aunque entiendo que pueda ser suficiente en algunos casos.

La causa fundamental de este funcionamiento es que, a diferencia de las cargas resistivas (el calentador p.e.), un aire acondicionado (y más si es inverter), tarda bastante tiempo en empezar a consumir o en dejar de consumir los excedentes que le llegan/faltan desde el módulo fv.py en forma de porcentaje de activación. Cuando esto ocurre, dado que el modulo fv.py sigue con sus muestreos cada 5", acaba volviendo a informar al módulo de aires acondicionados que debe seguir subiendo (o bajando) su consumo de nuevo y así cada 5 segundos. En mi caso he muestreado que desde que le mando la orden de encenderse o de subir potencia, hasta que empieza a consumir consecuentemente pueden tardar unos 3 minutos. Ese retraso tan grande no puede ser compensado por el algortimo de ControlPID y sus constantes.

El resultado es que los aires pasan por los estados intermedios (20%, 40%, 60%, 80%) solo de forma virtual ya que acaban en poco tiempo al 100% o al 0%.

Este retraso también impactaría en otros tipos de relés si mezcláramos cargas resistivas junto a aires acondicionados. El programa asume que ha dado una orden pero la orden no se ha cumplido y el PWM que calcula y que se reparte entre todos relés del tipo que sean, no es el que debería.

Por todo lo anterior estoy probando cambios tanto en los módulos de aire acondicionado (aa1, aa2,...) como en el propio fv.py. Además de contemplar los retardos he modificado el reparto de excedentes entre relés de la misma prioridad, de manera que no se vayan asignado secuencialmente los excedentes sino que todos los relés de la misma prioridad se coloquen en el mismo porcentaje de activación para hacer a continuación lo mismo con la siguiente prioridad en el caso de que queden excedentes que sumar o restar.

También hay que comentar que mi variable de control PID para excedentes es wRed (lo que consumo/inyecto de red) ya que mi infraestructura es sin baterías con volcado a red.

Por todo lo anterior tengo mis dudas sobre remitir esos programas ya que me estoy saliendo demasiado del tronco común de desarrollo y no quisiera liar a nadie. Los puedo pasar sin problemas si teneis en cuenta lo anterior y a título informativo para entender la lógica que comento.

En cuaquier caso me ofrezco a resolver dudas que tengáis sobre estos matices específicos de los aires acondicionados
16 paneles / 5.4Kw
Inversor Huawei SUN2000L-KTL
Volcado a red de excedentes.
Vicent1972
Mensajes: 2
Registrado: 31 Ene 2021, 19:19
Has thanked: 3 times

Re: Gestion excedentes con aires acondicionados .

#73

Mensaje por Vicent1972 »

Hola, estoy interesado en la gestión de excedentes con aire acondicionado-bomba de calor y como mi inversor es outback power, creo que no se puede adaptar a la gestion con pvcontrol.
Mi intención és intentar gestionarlo mediante un programa en python puesto que puedo leer los datos del inversor mediante una api del fabricante.
Al ver como gestionais la potencia en diversos estados me llama la atencion que el proceso de arranque lo haceis 10 segundos a tope y luego bajais potencia.
pongo vuestro código al que hago referéncia.
Off Topic
print('Encendido',time.time(),'t_apagado',t_apagado)
if modo == 'C':
devices[0].send_data(IR_CODIGOS['AA1_T26CM'])
time.sleep(10)
devices[0].send_data(IR_CODIGOS['AA1_T18CM'])

¿Es así? y si es así, ¿ Cual és el motivo?
Muchas gracias por compartir tanta experiencia.
Responder