Este es un post largo, ya que quiero llevarte a través de todo el trabajo que he hecho. La versión TL; DR es que tengo un controlador desconocido para una bomba de calor mecánica y estoy tratando de aplicar ingeniería inversa a la señal y los datos ... así que si crees que puedes ayudar, sigue leyendo.
Primero que nada, no soy ingeniero eléctrico. Soy un ingeniero de software que está un poco fuera de su profundidad.
Tengo un ITS heatpump y tiene un controlador que quiero hacer ingeniería inversa para leer datos de los sensores y configurar algunos parámetros en el software. Busqué especificaciones técnicas y le pregunté al fabricante, pero me dijeron a GTFO. Al final, la ingeniería inversa parecía la única forma de obtener lo que quería.
Entre la unidad y el panel de control hay una conexión de 3 cables. De lo que he podido deducir es GND, + 12V (al panel de alimentación) y un cable de señal.
Luego me conseguí un analizador de protocolo Saleae para ver qué podía ver. He confirmado que el cable de datos único se utiliza para RX / TX. Pensé que el punto más fácil de abordar es el panel de control y desconecté el cable de señal para que pudiera leer solo lo que el panel está transmitiendo. Se puede encontrar una muestra en enlace . Estoy utilizando la 1.1.24 versión beta para descodificación. Parece decodificar muy bien usando Async Serial 8N1 autobaud. He probado un montón de otros decodificadores y parámetros, pero todos tienen errores de encuadre u otros.
Luego comencé a cambiar sistemáticamente los valores en el controlador para ver cómo cambia el flujo de bytes. Cambié el parámetro 1 usando valores [51-55] y este fue el resultado (espaciado intencionalmente para facilitar la detección de diferencias) de los flujos de bytes.
Format <Param>-<value>:<decoded byte string in hex>
01-51:8055DD555555555555555555555555555575577557F58075757757 DD 757577577755DD55555D7777775577755D 55 5D 77 FD
01-52:8055DD555555555555555555555555555575577557F58075757757 D5 DD7577577755DD55555D7777775577755D 55 77 77 F5
01-53:8055DD555555555555555555555555555575577557F58075757757 5D DD7577577755DD55555D7777775577755D 55 75 77 FD
01-54:8055DD555555555555555555555555555575577557F58075757757 75 DD7577577755DD55555D7777775577755D 55 D7 77 F5
01-55:8055DD555555555555555555555555555575577557F58075757757 DD D757DD5D7755D757555D75DD7755DDD575 57 D5 77 57
A partir de eso, el patrón no era obvio, así que decidí cambiar otro parámetro (param: 0 cambiado a 16 de 15) manteniendo el parámetro 01 en 52 y esto es lo que obtuve.
Format <Param>-<value>:<decoded byte string in hex>
00-15:8055DD555555555555555555555555555575577557F5807575 7757 D5 DD7577577755DD55555D7777775577755D 55 77 77 F5
00-16:8055DD555555555555555555555555555575577557F5807575 5555 D7 57DD5D7755D757555D75DD7755DDD57557 55 77 F5
Aquellos de ustedes que sean rápidos en el sorteo notarán que la captura de 00-16 es de 1 byte más corta. Mi única conclusión es que o estoy usando la decodificación incorrecta o el panel está haciendo algo de compresión.
Necesito consejos sobre qué intentar a continuación, ya que me siento bastante estancado.