Arduino a Microlog2 - externí display

Automatizace, řízení, měření, logování a programování s využitím platformy Arduino.
Odpovědět
TyTycko
Příspěvky: 110
Registrován: pon zář 03, 2012 8:47 pm
Reputace: 1

Arduino a Microlog2 - externí display

Příspěvek od TyTycko »

Zdravím všechny,
mám takový problém.Chtěl bych vyčítat z micrologu2 pomocí jiného arduina přes ethernet hodnoty které umí microlog posílat.Nemáte někdo kus kódu jak to vyčíst a uložit do nějakého registru .Pak už promě není problém toto zobrazit na LCD displeji s jinejma hodnotama jako celková výroba za den a tak.Chtěl jsem si udělat výstup na grafickej displej ale nedaří se mi z micrologu správně načíst data,vybrat jen ty co potřebuji a uložit do paměti.
Už se s tím zabejvám jak dlouho ale prostě asi na to nemám ty správný buňky.
Dík za jakoukoli pomoc
Polánka 2790W (24v),8 x MoserBaer 195w Jih,6 x 205W Sever :-( ,Midnite 150 Lite,NiCd 4x160Ah(life blackout)+18650 2,5kW+LiFePo 160Ah Winston+LiFePo 2x 120Ah by Mivvy, PowerJack LF 6kW by Matěj +5kW záložní by Matěj, HomeAssistant s komunikací BT BMS
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am
Reputace: 521

Re: Arduino a Microlog2 - externí display

Příspěvek od mypower.cz »

Veškré věci, které se dají zobrazit ve www rozhraní micrologu si rozhraní z micrologu stahuje přes HTTP

http://microlog.mypower.cz/mod:webservices

Jsou tam data od výstupů z jednotlivých analogových vstupů, po výstup ze sampleru, po stav displaye po nastavení (pozor, včetně FVEID).

To znamená na dalším arduinu je potřeba udělat HTTP klienta, který si bude sahat na microlog a stahovat data v nějkých rozumných intervalech a tyto si poté interpretovat tak jak bude potřeba.

Formát dat je možné zjistit buď ze zdrojového kódu micrologu, případně si je vhodně upravit na straně micrologu dle potřeb, nebo můžu samozřejmě konkrétní formát popsat detailněji, například uložení samplů ze sampleru je uloženo poněkud specifičtěji (8 + 2 bity).

http://arduino.cc/en/Tutorial/WebClientRepeating
TyTycko
Příspěvky: 110
Registrován: pon zář 03, 2012 8:47 pm
Reputace: 1

Re: Arduino a Microlog2 - externí display

Příspěvek od TyTycko »

No a v tom je pro mě ta potíž.
Mám arduino nano s 28j60 mini adapterem.Funguje mi jako klient s knihovnou UIPEthernet.V arduinu nejsem moc kovanej,tak jsem chtěl jen pokud už někdo řešil ,tak sem dat vzorek kódu abych pochopil jak se to řeší.
Vím že mám poslat něco jako GET:ipadresa.... ,to odešlu ale nevím jak zpracovat ten řetězec co mi přijde.
Polánka 2790W (24v),8 x MoserBaer 195w Jih,6 x 205W Sever :-( ,Midnite 150 Lite,NiCd 4x160Ah(life blackout)+18650 2,5kW+LiFePo 160Ah Winston+LiFePo 2x 120Ah by Mivvy, PowerJack LF 6kW by Matěj +5kW záložní by Matěj, HomeAssistant s komunikací BT BMS
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am
Reputace: 521

Re: Arduino a Microlog2 - externí display

Příspěvek od mypower.cz »

Faze I. vyzkouset vzorovy priklad www klienta z arduino.cc (misto nacitani dat z arduino.cc zmenit adresu na microlog na lokalni siti - treba 192.168.1.200) a dostat se do stavu, ze to na seriovou konzoli na arduino nano vypise totez co je na wiki. Tim mame prenos dat vyresen.

Faze II. zpracovani dat "on the fly" a bud primo behem cteni ze sitoveho rozhrani zobrazeni na displayi, nebo ulozeni do promenne a pak zobrazeni na displayi.

Faze II je specificka. Fazi I je mozne realizovat i pomoci prikladu z arduino.cc a dostat vypis na seriovou konzoli. Fazi II muzeme pak tady dovymyslet primo na foru jakmile se prenos a vypis do seriove konzole povede
TyTycko
Příspěvky: 110
Registrován: pon zář 03, 2012 8:47 pm
Reputace: 1

Re: Arduino a Microlog2 - externí display

Příspěvek od TyTycko »

pomocí "char c = client.read(); Serial.print(c); to na seriovou konzoli dostanu,dokoce to vypíše i všechny hodnoty co se přečtou z micrologu.....a dál už je to pro mě španělská vesnice.Kam co jak uložit podle čeho porovnat a tak
Polánka 2790W (24v),8 x MoserBaer 195w Jih,6 x 205W Sever :-( ,Midnite 150 Lite,NiCd 4x160Ah(life blackout)+18650 2,5kW+LiFePo 160Ah Winston+LiFePo 2x 120Ah by Mivvy, PowerJack LF 6kW by Matěj +5kW záložní by Matěj, HomeAssistant s komunikací BT BMS
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am
Reputace: 521

Re: Arduino a Microlog2 - externí display

Příspěvek od mypower.cz »

tzn pojdme si rici ktera data nacitame, co mame v seriove konzoli jako zdroj dat a dospejeme k tomu jak z tohoto bloku dat vyklofnout jen to co potrebujeme ..

Jestli je mozne postnout sem ukazku toho co se vypisuje do seriove konzole, urcite dame vyklofavaci kod, alebrz parser dohromady.
TyTycko
Příspěvky: 110
Registrován: pon zář 03, 2012 8:47 pm
Reputace: 1

Re: Arduino a Microlog2 - externí display

Příspěvek od TyTycko »

OK,jakmile budu z prace doma ,pošlu
Polánka 2790W (24v),8 x MoserBaer 195w Jih,6 x 205W Sever :-( ,Midnite 150 Lite,NiCd 4x160Ah(life blackout)+18650 2,5kW+LiFePo 160Ah Winston+LiFePo 2x 120Ah by Mivvy, PowerJack LF 6kW by Matěj +5kW záložní by Matěj, HomeAssistant s komunikací BT BMS
TyTycko
Příspěvky: 110
Registrován: pon zář 03, 2012 8:47 pm
Reputace: 1

Re: Arduino a Microlog2 - externí display

Příspěvek od TyTycko »

Posílám v příloze data co mi lezou na seriovou konzoli a výpis jak to čtu.No jo ale co s tim dál?
Přílohy
srduino.ino
(2.65 KiB) Staženo 114 x
ar_data.jpg
Polánka 2790W (24v),8 x MoserBaer 195w Jih,6 x 205W Sever :-( ,Midnite 150 Lite,NiCd 4x160Ah(life blackout)+18650 2,5kW+LiFePo 160Ah Winston+LiFePo 2x 120Ah by Mivvy, PowerJack LF 6kW by Matěj +5kW záložní by Matěj, HomeAssistant s komunikací BT BMS
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am
Reputace: 521

Re: Arduino a Microlog2 - externí display

Příspěvek od mypower.cz »

Data ze sampleru.. dobre .. co z toho konkretne chceme vycist ? Ktere udaje nas zajimaji?
TyTycko
Příspěvky: 110
Registrován: pon zář 03, 2012 8:47 pm
Reputace: 1

Re: Arduino a Microlog2 - externí display

Příspěvek od TyTycko »

Ahoj
potrenboval bych ze sampleru dostat "average" hodnoty jednotlivých pinu, /ideální by byla hodnota již prepočtená na měřenou/ a tu uložit někam ve formátu třeba float do registru arduina.
Polánka 2790W (24v),8 x MoserBaer 195w Jih,6 x 205W Sever :-( ,Midnite 150 Lite,NiCd 4x160Ah(life blackout)+18650 2,5kW+LiFePo 160Ah Winston+LiFePo 2x 120Ah by Mivvy, PowerJack LF 6kW by Matěj +5kW záložní by Matěj, HomeAssistant s komunikací BT BMS
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am
Reputace: 521

Re: Arduino a Microlog2 - externí display

Příspěvek od mypower.cz »

Dobra... pokusim se dnes napsat, odladit a hodim sem kod.
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am
Reputace: 521

Re: Arduino a Microlog2 - externí display

Příspěvek od mypower.cz »

Dér iz it:

Kód: Vybrat vše

/*
  Repeating Web client
 
 This sketch connects to a a web server and makes a request
 using a Wiznet Ethernet shield. You can use the Arduino Ethernet shield, or
 the Adafruit Ethernet shield, either one will work, as long as it's got
 a Wiznet Ethernet module on board.
 
 This example uses DNS, by assigning the Ethernet client with a MAC address,
 IP address, and DNS address.
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 
 created 19 Apr 2012
 by Tom Igoe
 
 http://arduino.cc/en/Tutorial/WebClientRepeating
 This code is in the public domain.
 
 */

#include <SPI.h>
#include <Ethernet.h>

// assign a MAC address for the ethernet controller.
// fill in your address here:
byte mac[] = { 
  0xDE, 0xAA, 0xBE, 0xEF, 0xFE, 0xED};
// fill in an available IP address on your network here,
// for manual configuration:
IPAddress ip(192,168,1,63);

// fill in your Domain Name Server address here:
IPAddress myDns(8,8,8,8);

// initialize the library instance:
EthernetClient client;

// http: //192.168.1.238/cfg?cmd=7370

char server[] = "192.168.1.238";

const int maxPinCount=16;

struct extPin {
  int pinVALUE;
  int pinRMS;
  int pinAVG;
  int pinMIN;
  int pinMAX;
};

extPin extPinData[maxPinCount];

unsigned long lastConnectionTime = 0;          // last time you connected to the server, in milliseconds
boolean lastConnected = false;                 // state of the connection last time through the main loop
const unsigned long postingInterval = 10*1000;  // delay between updates, in milliseconds

void setup() {
  // start serial port:
  Serial.begin(9600);
  // give the ethernet module time to boot up:
  delay(1000);
  // start the Ethernet connection using a fixed IP address and DNS server:
  Ethernet.begin(mac, ip, myDns);
  // print the Ethernet board/shield's IP address:
  Serial.print("My IP address: ");
  Serial.println(Ethernet.localIP());
}

boolean newLine=false;
boolean pinLine=false;
boolean pinParamEnd=false;
byte pinValIndex=0;
byte pinNoIndex=0;
int pinVal=0;
char pinType='-';
char pinStr[10];

void loop() {
  // if there's incoming data from the net connection.
  // send it out the serial port.  This is for debugging
  // purposes only:
  if (client.available()) {
    char c = client.read();
    if (pinLine)
      {
      int xs=strlen(pinStr);        
//      Serial.print(c);
      if (c=='\n')
        {
        pinParamEnd=true;
        pinLine=false;
        newLine=true;
        }
      else
      if ((c==':') || (c==','))
        pinParamEnd=true;
      else
      if (xs<(sizeof(pinStr)-1))
        {
        pinStr[xs]=c;
        pinStr[xs+1]=0;
        }      
        
      if (pinParamEnd)
        {
//        Serial.print(pinValIndex);
//        Serial.print(":");
//        Serial.println(pinStr);
        
        if (pinValIndex==0)
          pinNoIndex=atoi(pinStr);
        else
        if ((pinNoIndex>=0) && (pinNoIndex<maxPinCount) && 
            (strlen(pinStr)>2) && (pinStr[1]=='='))
          {
          pinType=pinStr[0];
          pinVal=atoi(pinStr+2);
//          Serial.print(pinNoIndex);
//          Serial.print(":");
//          Serial.print(pinType);
//          Serial.print(" ");
//          Serial.println(pinVal);
          extPin * qpin=&extPinData[pinNoIndex];
          if (pinType=='V') qpin->pinVALUE=pinVal;
          if (pinType=='S') qpin->pinRMS=pinVal;
          if (pinType=='A') qpin->pinAVG=pinVal;
          if (pinType=='M') qpin->pinMIN=pinVal;
          if (pinType=='X') qpin->pinMAX=pinVal;
          }
          
        pinValIndex++;
        pinStr[0]=0;        
        pinParamEnd=false;
        }
      }
    else
    if (newLine)
      {
      pinLine=(c=='A');
      newLine=false;
      if (pinLine) 
        {
        pinParamEnd=false;
        pinValIndex=0;
        pinStr[0]=0;
        }
        
      }
    else
     newLine=(c=='\n');
    
  }

  // if there's no net connection, but there was one last time
  // through the loop, then stop the client:
  if (!client.connected() && lastConnected) {
//    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    AfterHTTPRequest();
  }

  // if you're not connected, and ten seconds have passed since
  // your last connection, then connect again and send data:
  if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
    httpRequest();
  }
  // store the state of the connection for next time through
  // the loop:
  lastConnected = client.connected();
}

// this method makes a HTTP connection to the server:
void httpRequest() {
  // if there's a successful connection:
  if (client.connect(server, 80)) {
    Serial.println("connecting...");
    // send the HTTP PUT request:
    client.println("GET /cfg?cmd=7370 HTTP/1.1");
//    client.println("Host: www.arduino.cc");
//    client.println("User-Agent: arduino-ethernet");
    client.println("Connection: close");
    client.println();

    // note the time that the connection was made:
    lastConnectionTime = millis();
  } 
  else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
    Serial.println("disconnecting.");
    client.stop();
  }
}


void AfterHTTPRequest()
{
Serial.println("Yeeeeah ... We have data from MyPower MicroLog :D");

Serial.print("Pin10 Average Value: ");
Serial.println(extPinData[10].pinAVG);

Serial.print("Pin10 RMS Value: ");
Serial.println(extPinData[10].pinRMS);

Serial.print("Pin6 Current Value: ");
Serial.println(extPinData[6].pinVALUE);

Serial.print("Pin12 Maximum Value: ");
Serial.println(extPinData[12].pinMAX);

Serial.print("Pin11 Minimum Value: ");
Serial.println(extPinData[11].pinMIN);

}


Výstup z konzole:

Kód: Vybrat vše

My IP address: 192.168.1.63
connecting...
disconnecting.
Yeeeeah ... We have data from MyPower MicroLog :D
Pin10 Average Value: 35
Pin10 RMS Value: 56
Pin6 Current Value: 10
Pin12 Maximum Value: 132
Pin11 Minimum Value: 0
connecting...
disconnecting.
Yeeeeah ... We have data from MyPower MicroLog :D
Pin10 Average Value: 33
Pin10 RMS Value: 52
Pin6 Current Value: 8
Pin12 Maximum Value: 174
Pin11 Minimum Value: 0
connecting...
disconnecting.
Yeeeeah ... We have data from MyPower MicroLog :D
Pin10 Average Value: 31
Pin10 RMS Value: 50
Pin6 Current Value: 12
Pin12 Maximum Value: 162
Pin11 Minimum Value: 0
connecting...
disconnecting.
Yeeeeah ... We have data from MyPower MicroLog :D
Pin10 Average Value: 35
Pin10 RMS Value: 56
Pin6 Current Value: 8
Pin12 Maximum Value: 131
Pin11 Minimum Value: 0
connecting...
disconnecting.
Yeeeeah ... We have data from MyPower MicroLog :D
Pin10 Average Value: 33
Pin10 RMS Value: 52
Pin6 Current Value: 14
Pin12 Maximum Value: 168
Pin11 Minimum Value: 0
connecting...
Funkce ktera vypisuje do konzole se jmenuje AfterHTTPRequest() a je volana po kazdem nacteni dat z MicroLogu.

Mame pristup uplne ke vsem hodnotam, tedy vsech 16 pinu (0-15), a muzeme si tady libovolne delat co chceme s

pinVALUE - okamzitou hodnotou (64tý sampl ze 128mi)
pinRMS - efektivni hodnotou vypoctenou ze 128mi samplů
pinAVG - prumernou hodnotou vypoctenou ze 128mi samplů
pinMAX - maximalni hodnotou ze 128mi samplu
pinMIN - minimalni hodnotou ze 128mi samplu

treba je zobrazit na display, nebo treba klidne vytůtat morseovkou na maly piezoelektricky speaker.

:))

PS: jsem borec .. stihnul jsem to jeste dnes :D je 23:44 :D

PS2: testovano na Arduinu UNO a vycitano z micrologu samozrejme jak jinak nez na Arduinu MEGA.

PS3: hodnoty jsou takove jako jdou z prevodniku, tedy 0-1023. Odpovidajicim prepoctem dostaneme hodnoty v rozsahu, v jakem potrebujeme.
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am
Reputace: 521

Re: Arduino a Microlog2 - externí display

Příspěvek od mypower.cz »

PS: jelo mi to celou noc az doted do rana, kdy to stale vycita :) . Tzn povazoval bych to i za stabilni.
TyTycko
Příspěvky: 110
Registrován: pon zář 03, 2012 8:47 pm
Reputace: 1

Re: Arduino a Microlog2 - externí display

Příspěvek od TyTycko »

No,vypadá to dost slušně.Tohle bych dal možná tak za dva měsíce.To byl teda fofr.
Móooc děkuji.....o víkendu to testnu a hodím sem result i s nějakým foto.
no jo někdo na to má holt hlavu :-)
Polánka 2790W (24v),8 x MoserBaer 195w Jih,6 x 205W Sever :-( ,Midnite 150 Lite,NiCd 4x160Ah(life blackout)+18650 2,5kW+LiFePo 160Ah Winston+LiFePo 2x 120Ah by Mivvy, PowerJack LF 6kW by Matěj +5kW záložní by Matěj, HomeAssistant s komunikací BT BMS
TyTycko
Příspěvky: 110
Registrován: pon zář 03, 2012 8:47 pm
Reputace: 1

Re: Arduino a Microlog2 - externí display

Příspěvek od TyTycko »

Ahoj,
tak po prvních testech to vypadá že mi to není schopná přenést OpenVPN síť která má latenci cca 200ms a při téhle komunikaci vzroste na 3000-4000 a téměř nic nedostávám.Až tam dam LTE modem,snad to půjde.
P.S- nedalo by se to vyčítat jen ze stránky micrologu,tedy bez příkazu "/cfg?cmd=7370" ??? tam ty data máme taky,né ?
Polánka 2790W (24v),8 x MoserBaer 195w Jih,6 x 205W Sever :-( ,Midnite 150 Lite,NiCd 4x160Ah(life blackout)+18650 2,5kW+LiFePo 160Ah Winston+LiFePo 2x 120Ah by Mivvy, PowerJack LF 6kW by Matěj +5kW záložní by Matěj, HomeAssistant s komunikací BT BMS
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am
Reputace: 521

Re: Arduino a Microlog2 - externí display

Příspěvek od mypower.cz »

jj, no jiste ze slo :) to pujde snadno upravit, budu-li mit chvilku, udelam rychlejsi verzi :D

ty data jsou dokonce v datech ze sampleru i vyse pred daty ze sampleru (samply)(S4:S=29,A=17,M=0,X=86,C=128:..data.ze.sampleru...)

premyslel jsem, jestli tu http komunikaci nekilluje samotny webserver ulogu, ale asi nee .. ja tam totiz mam pocit kdysi zamyslel timeout, aby melo cas mereni a nebylo to dlouho sekle na HTTP komunikaci, protoze v ulogu funguje neco blizkeho "kooperativnimu multitaskingu", ale v kodu to ted nemuzu najit, takze mozna jsem to nakonec neresil timeoutem a ukoncenim HTTP komunikce, nebo jsem ted slepy a v kodu funkce WebServer() to nevidim, nebo jsem ten timeout nakonec dal jinam .. :)

Je na OpenVPN nastavena komprese dat? To by mohlo taky znacne pomoci, protoze data ze sampleru jsou v hexa a to pujde zkomprimovat urcite dosti dobre ... By se mozna snizila i latence .. a nebo pak si pohrat s timeouty VPNky a poradne je prodlouzit, pokud tu komunikaci nejak zabije sama OpenVPN, ale to by IMHO nemela. Pouzivam OpenVPN na vykryti obcas dosti vypadavajicich wifin (za neprizniveho pocasi) a sice ping vzroste az na 40s klidne, ale VPNka stale drzi spojeni (ktere nejsou killnuta na strane prijmu nebo odesilani) a pakety chodi ve spravnem poradi... Leckdy po davkach.

Pokud by s tim bylo mozno zaexperimetovat, postnout sem konfiguraci openvpn na strane serveru i klienta, muzu to srovnat se svym nastavenim a treba na neco prijdem, kazdopadne jak bude cas, pokud me nejaky zdejsi schopny cckar nepredbehne, udelam verzi pro nacitani z hlavni stranky ulogu... to je jasne, ze to bude lepsi :D Ze me to hned nenapadlo, nicmene nechal jsem se unest vyzvou v podobe komplikovanejsiho parseru dat ze sampleru :D
TyTycko
Příspěvky: 110
Registrován: pon zář 03, 2012 8:47 pm
Reputace: 1

Re: Arduino a Microlog2 - externí display

Příspěvek od TyTycko »

Zasílám konfigurák VPNky pro srovnání.
Zkoušel jsem to dát i s kompresí dat ,nicméně moc to nepomohlo,ale trošičku se to zlepšilo.Všiml jsem si také pomalejší komunikace na straně micrologu že pokud koukám na jeho webové rozhraní ,tak pokud dám záložku displej - zkrátka se to občas nenačte(připomímám že tam mám gprs modem a jede to přes openvpn).Pokud se načte stránka displeje a zobrazí se mi aktuální data z displeje které s bez problémů aktualizují tak se mi stejně nenačte plná konfigurace pro displej,tudíž když bych chtěl něco upravit přes VPNku tak pokud dam "uložit" většinou to skončí hláškou "chyba v řádku...blabla" ...páč se to celé nenačetlo,a pokud se to uloží tak zase chyběj řádky v konfiguraci displeje.
Jinak TIMEOUT při HTTP komunikaci jsem tam nikde nenašel,ale docela často(asi tak 3x za ty 3měsíce co mi tam microlog běží) se mi stává že se uprostřed komunikace přeruší spojení a microlog furt někam odesílá data.Za ty dva dny co to bylo kouslý se tam nějak přeneslo skoro 880MB :-( .Na to že tam mam limit 4GB je to dost.
Jinak mi přijde komunikace micrologu dost náročná pokud je pomalé připojení(a to já mám :-)) na to že tam běhá "pár" dat tak latence VPNky jde o dost nahoru.Když vyčítám z tristara přes webové rozhraní tak to tak strašné s latencí není jako u micrologu.Je to taky možná tím že by to chtělo rychlejší Atmel.No to jen informačně.
Přílohy
VPN_CONF.txt
(763 bajtů) Staženo 101 x
Polánka 2790W (24v),8 x MoserBaer 195w Jih,6 x 205W Sever :-( ,Midnite 150 Lite,NiCd 4x160Ah(life blackout)+18650 2,5kW+LiFePo 160Ah Winston+LiFePo 2x 120Ah by Mivvy, PowerJack LF 6kW by Matěj +5kW záložní by Matěj, HomeAssistant s komunikací BT BMS

Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek