Monitorização Kaco com dd-wrt
Enviado: domingo mar 08, 2015 12:13 pm
Boas.
Como é do vosso conhecimento os inversores Kaco possuem porta RS-232/RS-485, enviando informação de algumas variaveis do seu funcionamento, em tempo real.
Oficialmente a Kaco disponibiliza software KacoViso para se obter essa informação, mas apenas para Sistema Operativo Windows.
Para quem não quer alocar um sistema windows para esta função tem outras alternativas mais economicas tanto a nivel de custo de hardware como de consumo de energia.
Esta solução assenta em reutilizar um router que já possa exista em casa, usando um firmware opensource compativel com bastantes equipamentos, o dd-wrt.
Material necessario:
Inversor Kaco (podem testar com outros inversores, só deve mudar o formato da linha obtida)
Router compativel com dd-wrt e com porta usb.
Imagem dd-wrt com suporte para jffs (por exemplo a versão mega)
Adaptdor usb-serie (preferencia com chipset prolific pl2303, também experimentei com ftdi mas sem sucesso)
Cabo serie db9 macho femea 1:1
Por forma a ser possivel instalar o driver do adaptador usb-serie no dd-wrt, teremos de activar jffs para que exista uma directoria onde os dados são persistentes.
Activar também suporte para usb no dd-wrt.
Copiar o driver (já compilado para a versão de kernel 2.4.37 que o BusyBox do dd-wrt usa)
usbserial.o
ftdi_sio.o
para a directoria /jffs
Instalar com:
Com lsmod podem ver se o driver ficou instalado:
Inserir o adaptador no router e com comando "dmesg | grep usb" confirmar que detectou adaptador e carregou o driver:
Neste momento já é possivel validar se conseguimos ler os dados da porta serie:
De acordo com o manual do inversor, por ordem, cada coluna da linha indica:
1 Espaço livre
2 Turno operacional diurno
3 Conexão
4 Tensão do gerador, em V
5 Corrente do gerador, em A
6 Potência do gerador, em W
7 Tensão da alimentação, em V
8 Corrente de alimentação, corrente injectada, em A
9 Potência injectada, em W
10 Temperatura do aparelho, em °C
O software ofical KacoViso ao ler da porta serie insere a informação do dia e a hora nos dois primeiros campos.
Assim houve a necessidade de criar um script para adicionar essa informação em cada linha recebida.
Outra necessidade que encontrei, foi guardar toda esta informação num ficheiro por dia, num storage à parte do router, para que depois possa usar para fazer upload para um site ou carregar numa base de dados.
Para estas duas necessidade criei o seguinte codigo:
Primeira linha recebe de 10 em 10 segundos a informação enviada pelo Kaco via porta serie.
Segunda linha substitui o primeiro campo da linha pela data do router (convém terem o ntp activo no router por forma a garantir sempre a hora e dia certo)
Terceira linha substitui o segundo campo da linha pela hora
Quarta linha faz append da linha num ficheiro (via share samba) criado para o dia em questão.
Este pequeno script em bash podem gravar dentro da directoria /jffs por exemplo /jffs/kacolog.sh.
Em caso de reboot do equipamento, devem no dd-wrt criar um startup script para carregar os drivers e iniciar a leitura da porta serie:
Espero que esta informação seja util.
Algum duvida, posso tentar esclarecer e ir actualizando o post por forma a ficar mais completo.
Como é do vosso conhecimento os inversores Kaco possuem porta RS-232/RS-485, enviando informação de algumas variaveis do seu funcionamento, em tempo real.
Oficialmente a Kaco disponibiliza software KacoViso para se obter essa informação, mas apenas para Sistema Operativo Windows.
Para quem não quer alocar um sistema windows para esta função tem outras alternativas mais economicas tanto a nivel de custo de hardware como de consumo de energia.
Esta solução assenta em reutilizar um router que já possa exista em casa, usando um firmware opensource compativel com bastantes equipamentos, o dd-wrt.
Material necessario:
Inversor Kaco (podem testar com outros inversores, só deve mudar o formato da linha obtida)
Router compativel com dd-wrt e com porta usb.
Imagem dd-wrt com suporte para jffs (por exemplo a versão mega)
Adaptdor usb-serie (preferencia com chipset prolific pl2303, também experimentei com ftdi mas sem sucesso)
Cabo serie db9 macho femea 1:1
Por forma a ser possivel instalar o driver do adaptador usb-serie no dd-wrt, teremos de activar jffs para que exista uma directoria onde os dados são persistentes.
Activar também suporte para usb no dd-wrt.
Copiar o driver (já compilado para a versão de kernel 2.4.37 que o BusyBox do dd-wrt usa)
usbserial.o
ftdi_sio.o
para a directoria /jffs
Instalar com:
Código: Selecionar todos
insmod /jffs/usbserial.o
insmod /jffs/pl2303.o
Código: Selecionar todos
pl2303 17720 1
usbserial 26444 0 [pl2303]
jffs2 97848 1
Código: Selecionar todos
usbserial.c: USB Serial Driver core v1.4
usbserial.c: USB Serial support registered for PL-2303
usbserial.c: PL-2303 converter detected
usbserial.c: PL-2303 converter now attached to ttyUSB0 (or usb/tts/0 for devfs)
Código: Selecionar todos
cat /dev/usb/tts/0
00.00.0000 02:47:00 4 531.9 4.38 2328 238.6 9.37 2235 34
1 Espaço livre
2 Turno operacional diurno
3 Conexão
4 Tensão do gerador, em V
5 Corrente do gerador, em A
6 Potência do gerador, em W
7 Tensão da alimentação, em V
8 Corrente de alimentação, corrente injectada, em A
9 Potência injectada, em W
10 Temperatura do aparelho, em °C
O software ofical KacoViso ao ler da porta serie insere a informação do dia e a hora nos dois primeiros campos.
Assim houve a necessidade de criar um script para adicionar essa informação em cada linha recebida.
Outra necessidade que encontrei, foi guardar toda esta informação num ficheiro por dia, num storage à parte do router, para que depois possa usar para fazer upload para um site ou carregar numa base de dados.
Para estas duas necessidade criei o seguinte codigo:
Código: Selecionar todos
while true
do
read line </dev/usb/tts/0
line=${line/00.00.0000/`date +"%d.%m.%Y"`}
line=${line/??:??:??/`date +"%T"`}
echo ${line} >> /tmp/smbshare/kaco_`date +"%Y%m%d"`.log
done
Segunda linha substitui o primeiro campo da linha pela data do router (convém terem o ntp activo no router por forma a garantir sempre a hora e dia certo)
Terceira linha substitui o segundo campo da linha pela hora
Quarta linha faz append da linha num ficheiro (via share samba) criado para o dia em questão.
Este pequeno script em bash podem gravar dentro da directoria /jffs por exemplo /jffs/kacolog.sh.
Em caso de reboot do equipamento, devem no dd-wrt criar um startup script para carregar os drivers e iniciar a leitura da porta serie:
Código: Selecionar todos
insmod /jffs/usbserial.o
insmod /jffs/pl2303.o
sh /jffs/kacolog.sh &
Algum duvida, posso tentar esclarecer e ir actualizando o post por forma a ficar mais completo.