Monitorização Kaco com dd-wrt

Para assuntos relacionados com o Micro-Produção.
Responder

Autor do tópico
pedal
Membro
Membro
Mensagens: 13
Registado: segunda jan 05, 2015 1:18 pm

Monitorização Kaco com dd-wrt

Mensagem 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.


JDuarte
Membro Gold
Membro Gold
Mensagens: 1081
Registado: sábado mar 06, 2010 10:12 pm
Localização: Caldas da Rainha

Re: Monitorização Kaco com dd-wrt

Mensagem por JDuarte »

Pedal, obrigado pela partilha!
Vou tentar seguir o mesmo caminho para criar e publicar um logger de consumo de energia.
Cmps,


areosa
Membro Silver
Membro Silver
Mensagens: 382
Registado: terça out 11, 2011 7:30 pm

Re: Monitorização Kaco com dd-wrt

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


Autor do tópico
pedal
Membro
Membro
Mensagens: 13
Registado: segunda jan 05, 2015 1:18 pm

Re: Monitorização Kaco com dd-wrt

Mensagem 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.


areosa
Membro Silver
Membro Silver
Mensagens: 382
Registado: terça out 11, 2011 7:30 pm

Re: Monitorização Kaco com dd-wrt

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


Ressuscitado pela última vez por pedal em sábado ago 22, 2015 2:40 pm.

Responder

Voltar para “Micro-Produção”