1

Téma: SDS - thingspeak

Dobrý den,

bylo by možné nějak posílat data z SDS desky přímo na thingspeak.com ? z lan controleru to funguje skvěle, ale ten má malé možnosti co se týká periferií, mne by se líbilo posílat data z S0 a to jak aktuální počet kw tak i výkon kw/h apod, super by bylo moct posílat i stav relé zap/vyp a AD vstupy

z lan controleru se to posílá jestli to dobře chápu pomocí html get
GET /update?key=xxxxxxxxxx&field1=#13&field2=#13&field3=#13&field4=#14&field5=#14

na adresu: api.thingspeak.com - port 80

Díky za rady

2

Re: SDS - thingspeak

Co myslíte tím lan controlerem? Data z SDS můžete posílat kamkoliv na web, kde bude k dispozici nějaký skript, který příchozí požadavek převezme a něco s ním udělá - uloží do databáze, do souboru, provede nějakou akci atd.

Informace o http_get() najdete zde http://wiki.merenienergie.cz/index.php/Sdsc_sysf  je tam i krátký program na vyzkoušení.

3 Naposledy upravil: technomagg (2015-05-23 23:37:23)

Re: SDS - thingspeak

takže - povedlo se mi sestavit program na odesílání dat, zdá se že vše funguje až na pár drobností:

1. neumím poslat číslo s desetinnou čárkou
2. zlobí mi elektromer2 - výpočet výkonu - nesedí to s html rozhraním sds desky, zajímavé je že ostatní sedí

POSÍLÁM hotový program s těmito dvěma muškami - stačí si upravit api key v programu a proměnné podle potřeby a funguje to, byl bych ale vděčný za radu s těmi posledními dvěma problémy.

odesli_data
{
var elektromer1_odecet;
var elektromer2_odecet;
var elektromer3_odecet;
var elektromer1_vykon;
var elektromer2_vykon;
var elektromer3_vykon;

   elektromer1_odecet = sys[493]; 
   ram[1] = elektromer1_odecet / 1000;  

   elektromer2_odecet = sys[494]; 
   ram[2] = elektromer2_odecet / 800; 

   elektromer3_odecet = sys[495]; 
   ram[3] = elektromer3_odecet / 1000; 

   elektromer1_vykon = 3600000 / sys[592]; 
   ram[4] = elektromer1_vykon; 

   elektromer2_vykon = 2880000 / sys[593];  
   ram[5] = elektromer2_vykon;

   elektromer3_vykon = 3600000 / sys[594]; 
   ram[6] = elektromer3_vykon;

   ram[7] = ((ram[3] - ram[1]) * 3700) / 1000;  //celkem vyrobena energie za kè
 //provedeme DNS pøeklad
 dns_resolv('api.thingspeak.com');
 
 //pockam az probehne funkce do konce
label cekam_na_dns:
 if (sys[65] == 0) goto cekam_na_dns; 
   echo('cenam na dns preklad....',sys[65]);
 //otestujeme úspìch DNS pøekladu
 if (sys[65] == 512) goto mam_dns_preklad;
 
 //neuspech
 return;

label mam_dns_preklad: 
   echo('mam dns preklad');

  echo('zacinam odesilat');
 http_get(sys[66],sys[67],sys[68],sys[69], 'api.thingspeak.com''/update?key=ZDE VLOZTE VLASTNI API WRITE KEY&field1=',ram[1], '&field2=', ram[2], '&field3=', ram[3], '&field4=', ram[4], '&field5=', ram[5], '&field6=', ram[6], '&field7=', ram[7]);
   echo('odeslano');
 //pockam az probehne funkce do konce
label cekam_na_http:
 if (sys[65] == 0) goto cekam_na_http; 
    echo('cekam na http');
 
 //pokud server má problém:
 if ((sys[65] != 1024)||(sys[75] != 200)) goto chyba_www_serveru;
 
 //neni problem, takze ok - napiseme na konzoli
 echo('OK.');
 
 //vse hotovo
 return;  
 
label preskocit_protoze_chyba_DNS:
 
 echo('DNS err ', sys[65]);
 
 return;  
 
label chyba_www_serveru:
 //obsluha chyby - www server
 
 echo('http err ', sys[75]);
 
  
}  

main
{
  echo('start');

label opakovat:  
  echo('opakuji');

 odesli_data();

//pockame 20 sekund (lze zde upravit)
sys[64] = 20;
label cekej:
if (sys[64] != 0) goto cekej;

//znovu
goto opakovat;

}

}

4

Re: SDS - thingspeak

ten problematický elektroměr je 3F - 800 pulzů na Kwh - nevím proč to neměří přesně, ty s 1000 pulzy na Kwh měří naprosto perfektně

jinak zde je přístup k datům na thingspeak, ještě si s tím budu hrát a budu to exportovat na své stránky, ale tohle jsou jen surová data.

https://thingspeak.com/channels/38887

5

Re: SDS - thingspeak

0.
Byl bych rád, pokud by jste na ThingSpeak napsal (asi tady: http://community.thingspeak.com/forum/) a dal tam návod jak připojit SDS (poslal program a popis), ať to můžou ze svého webu (integrate) nabídnout i ostatním uživatelům, ktěrí by to určitě ocenili.

1.
Já vidím chybu tady:

http_get(sys[66],sys[67],sys[68],sys[69], 'api.thingspeak.com''/update?key=ZDE VLOZTE VLASTNI API WRITE KEY&field1=',ram[1], '&field2=', ram[2], '&field3=', ram[3], '&field4=', ram[4], '&field5=', ram[5], '&field6=', ram[6], '&field7=', ram[7]);

přesněji tady:

... , 'api.thingspeak.com''/update?key=ZDE VLOZTE VLASTNI API WRITE KEY&field1=', ...

Protože mezi 'api.thingspeak.com' a '/update?key=ZDE VLOZTE VLASTNI API WRITE KEY&field1=' chybí čárka.

Takže správně by to mělo být:

http_get(sys[66], sys[67], sys[68], sys[69], 'api.thingspeak.com', '/update?key=ZDE VLOZTE VLASTNI API WRITE KEY&field1=', ram[1], '&field2=', ram[2], '&field3=', ram[3], '&field4=', ram[4], '&field5=', ram[5], '&field6=', ram[6], '&field7=', ram[7]);

2.
Tohle je celočíselné dělení, tzn. ztratí přesnost :

ram[2] = elektromer2_odecet / 800; 

Tento kód je potřeba zapsat jinak, např.

ram[2] = (elektromer2_odecet*10) / 8; 

což dodá tři ztracené desetinné místa (všiměte si úpravy, přesunu nul), ale přenese se to do ThingSpeak jako celé číslo (ne jako desetinné číslo).
Pak už je otázka, jestli ThingSpeak umožňuje úpravu na své straně (provést jednoduché dělení 1000 pro každou příchozí hodnotu).

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

6

Re: SDS - thingspeak

k bodu 0 - bohužel neumím natolik anglicky abych psal něco na cizojazyčná fóra, mám co dělat když potřebuji něco přelouskat, ale klidně to tam pošlete, mě to určitě vadit nebude.

k bodu 1 - tam chyba není - správný příkaz pro thingspeak vypadá takto:

https://api.thingspeak.com/update?key=tohlejeapikey&field1=0

jak vidíte čárka tam není.


k bodu 2 - celkově thingspeak neumožnuje úpravy vstupních dat dodatečně, takže je třeba mu poslat číslo klidne i s desetinnou čárkou - s tím si poradí, takže pokud dostane hodnotu např 400 nebo 400.345 poradí si s obojím, ale pokud mu přijde 400345 tak už na straně thigspeak s tím nic neuděláte a pořád tam budete mít 400345 i kdyby jste se stavěl na hlavu, jediné kde se s tím dá něco dělat je plugin, ale to není úplně ideální.
Vámi zaslaná úprava bohužel problém neřeší - SDS rozhraní ukazuje 1500W a v tu chvíli přijde do thingspeak 953W např. takže očividně je někde ve výpočtu chyba jen ji nejsem schopen nalézt.
jde mi hlavně o měření aktuálního výkonu a ne celkových kw - tam je mi jedno jestli mi to zobrazuje pouze celé kw.

7 Naposledy upravil: technomagg (2015-05-24 18:41:48)

Re: SDS - thingspeak

Takže problém s desetinným místem vyřešen, ještě jsem si pohrál s měřením, program dávám volně k dispozici - poslední problém mám s aktuální spotřebou u elektroměru číslo dva - 800 půlzů na KW - nevím jestli mám správně vzorec na výpočet - ale prostě spotřeba proti SDS www rozhraní naprosto nesedí, jinak vše funguje k mé spokojenosti:

BUDU VDĚČNÝ POKUD NĚKDO VYŘEŠÍ TEN PROBLÉM S PŘESNOSTÍ MĚŘENÍ U AKTUÁLNÍHO VÝKONU elektromer2_vykon

odesli_data
{
var elektromer1_odecet;
var elektromer2_odecet;
var elektromer3_odecet;
var elektromer1_vykon;
var elektromer2_vykon;
var elektromer3_vykon;

   elektromer1_odecet = sys[493];
   ram[1] = elektromer1_odecet / 1000; //pred desetinou carkou
   ram[11] = elektromer1_odecet % 1000; //za desetinou carkou

   elektromer2_odecet = sys[494]; 
   ram[2] = elektromer2_odecet / 800; //pred desetinou carkou
   ram[12] = elektromer2_odecet % 1000; //za desetinou carkou

   elektromer3_odecet = sys[495]; 
   ram[3] = elektromer3_odecet / 1000; //pred desetinou carkou
   ram[13] = elektromer3_odecet % 1000; //za desetinou carkou

   elektromer1_vykon = 3600000 / sys[592]; 
   ram[4] = elektromer1_vykon; 

   elektromer2_vykon = 2880000 / sys[593];
   ram[5] = elektromer2_vykon;
   

   elektromer3_vykon = 3600000 / sys[594]; 
   ram[6] = elektromer3_vykon;

   ram[7] = ((ram[3] - ram[1]) * 3700) / 1000;  //celkem vyrobena energie za kč
   
   // ram[20] az ram[24] je vypocet ceny za spotrebovanou energii
   // vypocet ceny za spotrebu po odectu - cenu dopiste do ram[22] vynasobenou 100x
   // ram[20] je stav elektromeru minus pocet pulsu po poslednim odectu
   // ram[21] za deleno je pocet pulsu na KW
   
   ram[20] = elektromer2_odecet - 4405899;
   echo(ram[20]);
   ram[21] = ram[20] / 8; // pocet pulzu deleno 100
   echo(ram[21]);
   ram[22] = ram[21] * 302; // 3.02 kc za / kwh - cena X 100
   echo(ram[22]);
   ram[23] = ram[22] / 10000; // vydelime 10000
   echo(ram[23]);
   ram[24] = ram[22] % 10000; //za desetinou carkou
   echo(ram[24]);



dns_resolv('api.thingspeak.com');
 
 //pockam az probehne funkce do konce
label cekam_na_dns:
 if (sys[65] == 0) goto cekam_na_dns; 
   echo('cenam na dns preklad....',sys[65]);
 //otestujeme úspěch DNS překladu
 if (sys[65] == 512) goto mam_dns_preklad;
 
 //neuspech
 return;

label mam_dns_preklad: 
   echo('mam dns preklad');

  echo('zacinam odesilat');
  
  // TADY upravit za /update?key= vas api key
 http_get(sys[66],sys[67],sys[68],sys[69], 'api.thingspeak.com''/update?key=semvloztewriteapikey&field1=',ram[1]'.'ram[11], '&field2=', ram[2]'.'ram[12], '&field3=', ram[3]'.'ram[13], '&field4=', ram[4], '&field5=', ram[5], '&field6=', ram[6], '&field7=', ram[7], '&field8=', ram[23]'.'ram[24]);
   echo('odeslano');
 //pockam az probehne funkce do konce
label cekam_na_http:
 if (sys[65] == 0) goto cekam_na_http; 
    echo('cekam na http');
 
 //pokud server má problém:
 if ((sys[65] != 1024)||(sys[75] != 200)) goto chyba_www_serveru;
 
 //neni problem, takze ok - napiseme na konzoli
 echo('OK.');
 
 //vse hotovo
 return;  
 
label preskocit_protoze_chyba_DNS:
 
 echo('DNS err ', sys[65]);
 
 return;  
 
label chyba_www_serveru:
 //obsluha chyby - www server
 
 echo('http err ', sys[75]);
 
  
}  

main
{
  echo('start');

label opakovat:  
  echo('opakuji');

 odesli_data();

//pockame 10 sekund (lze zde upravit)
sys[64] = 10;
label cekej:
if (sys[64] != 0) goto cekej;

//znovu
goto opakovat;

}

}

8

Re: SDS - thingspeak

Viz http://wiki.merenienergie.cz/index.php/Sdsc_sysf

Přesný výčet parametrů:

http_get( IP , IP , IP , IP , HOST , ... get-string ... );

Mezi HOST a zbytkem (get-string) musí být čárka - SDS si to složí, ale potřebuje od uživatele tyto dva parametry rozdělené. To proto aby se správně sestavila HTTP 1.1 hlavička odeslaného dotazu !

Pokud tam ta čárka není, bude v parametru HOST vloženo jak  'api.thingspeak.com' tak '/update?key=semvloztewriteapikey&field1=' což určitě není dobře (z nějakého důvodu to projde, ale . . .).

To že to zrovna funguje neznamená že se to za chvíli nerozbije ! Je to potřeba udělat správně:

 http_get(sys[66], sys[67], sys[68], sys[69], 'api.thingspeak.com', '/update?key=semvloztewriteapikey&field1=' . . .);
Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

9

Re: SDS - thingspeak

ok nebudu se hádat, víte o tom určitě víc, ale v tuto chvíli mne trápí ten problém s nepřesností měření, máte k tomu nějaký návrh řešení ?

10

Re: SDS - thingspeak

JJ v poho, doufám že jsem nevyzněl nějak nepěkně - chci především pomoct.

Nepřesnost - zatím neporadím, musím se k tomu teprve dostat. Pokud někdo nebude rychlejší, samozřejmě . . .

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

11

Re: SDS - thingspeak

tak jsem byl rychlejší sám, chyba byla samozřejmě ve výpočtu 60 sekund x 60 minut x 800 pulzů je samozřejmě špatně - jen čirou náhodou to funguje pro elektroměr s 1000 pulzy protože správně to je takto
60 sekund x 60 minut x 1000 milisekund = 3600000 ms za hodinu
následně počet ms za hodinu vydělíme 800 pulzy na jednu KW což je 4500 - tím bychom dostali výkon v kwH, ale potřebujeme watt hodiny - takže to celé vynásobíme x1000 výsledné číslo 4500000 dosadíme do programu takže konkrétní řádka bude vypadat takto:

elektromer2_vykon = 4500000 / sys[593];
   ram[5] = elektromer2_vykon;

snad jsem to napsal dobře, každopádně v tuto chvíli je přesnost výpočtu v pořádku.
na výsledek se můžete kouknout zde - tyto data přes thingspeak používám na webu pro dohled nad systémem

http://belnet.cz/?page_id=2051

a ještě zde:

http://belnet.cz/?page_id=2577