Aplikace na vyčítání dat z TS MPPT 60 pod *NIXem
Napsal: pon lis 26, 2012 8:19 pm
Zde je kód pod GNU GPL pro vyčítání dat z Tristaru. Je to jen rychle a didakticky načrtnuto.
je třeba mít libmodbus5 knihovnu
upravit IP adresu a zkompilovat (je-li program uložen jako mppt.c):
např. z cronu lze spouštět takto:
Kód: Vybrat vše
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <modbus/modbus.h>
#include <time.h>
int
main (void)
{
modbus_t *mb;
time_t timer;
uint16_t Vhi=0, Vlo=0, Vbat=0, Ihi=0, Ilo=0, Ibat=0, Varr=0, Pout=0, Vtar=0, Wh=0;
float Vscale, Vbattery, Iscale, Ibattery, Varray, Poutput, Vtarget, Whdaily;
mb = modbus_new_tcp ("192.168.23.26", 502);
modbus_set_slave (mb, 0x01);
if (modbus_connect (mb) == -1)
{
fprintf (stderr, "Primary connection failed: %s\n", modbus_strerror (errno));
exit (1);
}
timer=time(NULL);
if (modbus_read_input_registers (mb, 0x0000, 0x01, &Vhi) == -1)
{
fprintf (stderr, "Connection failed (Vhi): %s\n", modbus_strerror (errno));
}
if (modbus_read_input_registers (mb, 0x0001, 0x01, &Vlo) == -1)
{
fprintf (stderr, "Connection failed: %s\n", modbus_strerror (errno));
}
if (modbus_read_input_registers (mb, 0x0018, 0x01, &Vbat) == -1)
{
fprintf (stderr, "Connection failed: %s\n", modbus_strerror (errno));
}
if (modbus_read_input_registers (mb, 0x001B, 0x01, &Varr) == -1)
{
fprintf (stderr, "Connection failed: %s\n", modbus_strerror (errno));
}
if (modbus_read_input_registers (mb, 0x0002, 0x01, &Ihi) == -1)
{
fprintf (stderr, "Connection failed (Vhi): %s\n", modbus_strerror (errno));
}
if (modbus_read_input_registers (mb, 0x0003, 0x01, &Ilo) == -1)
{
fprintf (stderr, "Connection failed: %s\n", modbus_strerror (errno));
}
if (modbus_read_input_registers (mb, 0x001C, 0x01, &Ibat) == -1)
{
fprintf (stderr, "Connection failed: %s\n", modbus_strerror (errno));
}
if (modbus_read_input_registers (mb, 0x003A, 0x01, &Pout) == -1)
{
fprintf (stderr, "Connection failed: %s\n", modbus_strerror (errno));
}
if (modbus_read_input_registers (mb, 0x0033, 0x01, &Vtar) == -1)
{
fprintf (stderr, "Connection failed: %s\n", modbus_strerror (errno));
}
if (modbus_read_input_registers (mb, 0x0044, 0x01, &Wh) == -1)
{
fprintf (stderr, "Connection failed: %s\n", modbus_strerror (errno));
}
modbus_close (mb);
modbus_free (mb);
Iscale = Ihi + Ilo / (2 ^ 16);
Ibattery = Ibat * Iscale / 32768;
Vscale = Vhi + Vlo / (2 ^ 16);
Vbattery = Vbat * Vscale / 32768;
Varray = Varr * Vscale / 32768;
Poutput = Pout * Vscale * Iscale / 131072;
Vtarget= Vtar * Vscale / 32768;
printf ("unix=%d&u_in=%f&i_in=%f&u_bat=%f&u_tgt=%f&p_bat=%f&e_dly=%d\n", timer,Varray,Ibattery,Vbattery,Vtarget,Poutput,Wh);
return (0);
}
Kód: Vybrat vše
apt-get update
apt-get install libmodbus5 libmodbus-dev
Kód: Vybrat vše
gcc -o mppt -lmodbus mppt.c
Kód: Vybrat vše
# m h dom mon dow command
* * * * * URL="http://log.mypower.cz/?fveid=VASEFVEID&"$(/plna/cesta/k/vasemu/tsmppt); wget -q -O - $URL >/dev/null