Página 1 de 1

Monitorização Kaco com dd-wrt

Enviado: domingo mar 08, 2015 12:13 pm
por pedal
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:

Código: Selecionar todos

insmod /jffs/usbserial.o
insmod /jffs/pl2303.o
Com lsmod podem ver se o driver ficou instalado:

Código: Selecionar todos

pl2303                 17720   1
usbserial              26444   0 [pl2303]
jffs2                  97848   1
Inserir o adaptador no router e com comando "dmesg | grep usb" confirmar que detectou adaptador e carregou o driver:

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)
Neste momento já é possivel validar se conseguimos ler os dados da porta serie:

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
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:

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
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:

Código: Selecionar todos

insmod /jffs/usbserial.o
insmod /jffs/pl2303.o
sh /jffs/kacolog.sh &
Espero que esta informação seja util.
Algum duvida, posso tentar esclarecer e ir actualizando o post por forma a ficar mais completo.

Re: Monitorização Kaco com dd-wrt

Enviado: domingo mar 08, 2015 8:50 pm
por JDuarte
Pedal, obrigado pela partilha!
Vou tentar seguir o mesmo caminho para criar e publicar um logger de consumo de energia.
Cmps,

Re: Monitorização Kaco com dd-wrt

Enviado: segunda mar 09, 2015 2:17 pm
por areosa
Pedal,
Quais as alterações para correr num Raspberry Pi?
Dado o seu tamanho e baixo consumo é uma base de hardware bastante interessante para implementar um logger e servidor web para leitura dos dados oriundos do Kaco e tudo o mais que se queira lá colocar.
Cps, :mrgreen:

Re: Monitorização Kaco com dd-wrt

Enviado: segunda mar 09, 2015 3:52 pm
por pedal
areosa Escreveu:Pedal,
Quais as alterações para correr num Raspberry Pi?
Dado o seu tamanho e baixo consumo é uma base de hardware bastante interessante para implementar um logger e servidor web para leitura dos dados oriundos do Kaco e tudo o mais que se queira lá colocar.
Cps, :mrgreen:
Boas areosa.
Não cheguei a testar com Raspberry Pi.
Mas o raciocinio será identico, escolher distro compativel com usb, instalar driver do adaptador serie, criar script para fazer leitura da porta usb e enviar/armazenar a informação.

Re: Monitorização Kaco com dd-wrt

Enviado: sábado ago 22, 2015 2:40 pm
por areosa
pedal Escreveu:
areosa Escreveu:Pedal,
Quais as alterações para correr num Raspberry Pi?
Dado o seu tamanho e baixo consumo é uma base de hardware bastante interessante para implementar um logger e servidor web para leitura dos dados oriundos do Kaco e tudo o mais que se queira lá colocar.
Cps, :mrgreen:
Boas areosa.
Não cheguei a testar com Raspberry Pi.
Mas o raciocinio será identico, escolher distro compativel com usb, instalar driver do adaptador serie, criar script para fazer leitura da porta usb e enviar/armazenar a informação.
Viva,
Nem precisa de usar um conversor USB, o próprio barramento do RP já tem entrada/saída RS232 (GPIO14/GPIO15), basta ligar-lhe um driver RS232/RS485. Neste caso, penso que seria necessário um pequeno programa que coloque a informação que vem pela porta RSxxx para um ficheiro.
Cps, :mrgreen: