1

Téma: SDS Micro Lite2 UDP write

Ahoj,
Pouzivam SDS pro rizeni serva na tricestnem ventilu a nevim si rady jak spravne zmenit hodnotu PWM pomeru pres SNMP.

Vse funguje dle predstav s mym jednoduchym prevodnikem.

iso.3.6.1.4.1.33283.1.2.4.2.0 = Gauge32: 63

Zatim to resim v php takto pres curl, ovsem to se mi moc nelibi:

exec("curl -m1 -s 'http://192.168.2.133/cgi_login?passw=trgyui#%'");
exec("curl -m1 -s 'http://192.168.2.133/cgi_tpwmc?pwmf=100&pwmd=$SETsnmpPercentset'");
exec("curl -m1 -s 'http://192.168.2.133/cgi_logout'");

Jak spravne zapsat PWM pomer pres snmpset?

snmpset-v1 -c sdsxpublic 192.168.2.133 iso.3.6.1.4.1.33283.1.2.4.2.0 ????? (type and value)

v manualu je uvedena tato hodnota jako RW.


Jaky zadat typ aby to sezralo?

Diky a pekny den,

Petr

2

Re: SDS Micro Lite2 UDP write

Jenom se hloupe zeptam, proč ridite servo pres SNMP a ještě k tomu počítačem ? Není lepší naprogramovat logiku primo do sdska a z počítače nastavovat pouze požadované teploty ?

3 Naposledy upravil: hruzipet (2014-11-26 13:15:28)

Re: SDS Micro Lite2 UDP write

Dle mne neni lepsi, mam komplexni system, ne jen rizeni teploty. Spousta vstupnich velicin z ruznych zdroju je vyhodnocena v domacim HP mini serveru.

Ridim kotelnu na pelety s akumulacema, ohrev bojleru 3 zdroji, ekvitermni regulaci pro patra v dome, alarm, motion detection kamerami, branu, saunu, studnu, bazen, jezirkovou filtraci a mnoho dalsich veci.

Take si moc nedovedu predstavit jak tyto systemy skloubit na web - myslim na web v sdsku.

4 Naposledy upravil: vkalina (2014-11-28 23:17:29)

Re: SDS Micro Lite2 UDP write

Mám ten samý systém jako Vy. Pod linuxem řídím centrálně všechny zdroje (Dřevoplyn akumulaci, solár, boiler, tepelné čerpadlo, alarm, záplavy, požár a další drobnosti, ale každé zařízení má svůj vlastní SDS program. Centrálně přes server řídím pouze které zařízení má být právě aktivní. Ve výsledku to vypadá takto

http://ksystems.cz/Kotelna//
http://ksystems.cz/Teplomer/tcklima.php

Všechny závislosti jsou plně automatické
Změny v jednotlivých sds dělám přes http get
Program pro ovládání kotle s akumulací a boilerem vypadá pak takto

#define ODPOCET_SEKUND sys[64]
#define VENKU sys[310]
#define DOMA sys[311]
#define KOTEL sys[312]
#define STOUPACKA sys[313]
#define BOILER sys[314]
#define AKUM1 sys[315]
#define AKUM2 sys[316]
#define AKUM3 sys[317]
#define AKUM4 sys[318]
#define ZPATECKA sys[319]
#define WEB_TERMOSTAT sys[140]
#define SERVO sys[141]
#define HYSTEREZE sys[142]
#define POKOJ_TERMOSTAT sys[153]
#define PWM_CYKLE sys[192]
#define CERPADLO_1 sys[231]
#define CERPADLO_2 sys[232]

var pwm, old_pwm;

probeh_pri_odstavce //protoci cerpadla a servo mimo topnou sezonu
{
 echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''probeh cerpadel a serva pri odstavce');
 PWM_CYKLE = 1100;
 CERPADLO_1 = 1;
 wait(80000);
 CERPADLO_2 = 1;
 wait(80000);
 CERPADLO_1 = 0;
 CERPADLO_2 = 0;
 PWM_CYKLE = 7000;
 echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''konec probehu');
}
zapni_cerpadlo_1 //cerpadlo primarniho okruhu zapnuto
{
 CERPADLO_1 = 1;
 echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''cerpadlo 1 zapnuto');
}

vypni_cerpadlo_1 //cerpadlo primarniho okruhu vypnuto
{
 CERPADLO_1 = 0;
 echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''cerpadlo 1 vypnuto');
}

zapni_cerpadlo_2 //cerpadlo topneho okruhu zapnuto
{
 CERPADLO_2 = 1;
 echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''cerpadlo 2 zapnuto');
 pwm = 7000;
 pwmregulace:
 if (POKOJ_TERMOSTAT != 0 && CERPADLO_2 != 0) return; // vyp. cerp. topneho okruhu, pokud vypne pokoj. termostat
 if (WEB_TERMOSTAT + HYSTEREZE < DOMA && CERPADLO_2 != 0) return; // vyp. cerp. topneho okruhu, pokud vypne web. termostat
 if (KOTEL < 7000 && AKUM1 < 4000 && CERPADLO_2 != 0) return; // vyp. cerp. topneho okruhu, pokud nehori kotel a jsou vybite nadrze
 if (KOTEL >= 9800) return; //prehrati kotle
 if (KOTEL > 8000 && CERPADLO_1 == 0) return; //zacal topit kotel - navrat do main, aby seplo primarni cerpadlo - prepinam z aku na kotel
 if (STOUPACKA < SERVO && pwm > 1100) { pwm--; };  //pokud je chladnejsi, otvirame
 if (STOUPACKA > SERVO && pwm < 7000) { pwm++; };  //pokud je teplejsi, zavirame
 if (pwm != old_pwm) { PWM_CYKLE = pwm; }; //pri rozdilu nastavit novou hodnotu
 if (pwm == 1101) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''servo 100%'); };
 if (pwm == 1690) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''servo 90%'); };
 if (pwm == 2280) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''servo 80%'); };
 if (pwm == 2870) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''servo 70%'); };
 if (pwm == 3640) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''servo 60%'); };
 if (pwm == 4050) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''servo 50%'); };
 if (pwm == 4640) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''servo 40%'); };
 if (pwm == 5230) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''servo 30%'); };
 if (pwm == 5820) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''servo 20%'); };
 if (pwm == 6410) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''servo 10%'); };
 if (pwm == 6999) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''servo 0%'); };
 wait(100); //pockame 100 msec, protoze teplota se meni jen pomalu, tak at se projevi vliv zmeny pwm
 goto pwmregulace;
}

vypni_cerpadlo_2 //cerpadlo topneho okruhu vypnuto
{
//  ODPOCET_SEKUND = 5;
 PWM_CYKLE = 7000;
 echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''servo 0%');
//  label dobeh_cerpadla:
// if (KOTEL >= 9600) goto koncim_funkci_vypni_cerpadlo;
// if (ZPATECKA > 3000) goto dobeh_cerpadla;
 CERPADLO_2 = 0;
 echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''cerpadlo 2 vypnuto');
}

vysoka_teplota // zapne cerpadla pokud se prehreje kotel
{
// label koncim_funkci_vypni_cerpadlo:
  CERPADLO_1 = 1;
  CERPADLO_2 = 1;
  PWM_CYKLE = 1100;
  if (KOTEL == 16777216) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''porucha teplotniho cidla kotel'); };
  echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''vysoka teplota kotle');
  echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''zapinam cerpadlo 1');
  echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''zapinam cerpadlo 2');
  echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''servo 100%');
  label cekam_na_dochlazeni_kotle:
  if (KOTEL >= 9600) goto cekam_na_dochlazeni_kotle;
  echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''teplota kotle je jiz v norme');
}

init
{
//inicializace - co je zde je provedeno jen jednou po resetu
  wait(10000);
  echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''start systemu');
  HYSTEREZE = 50;
  WEB_TERMOSTAT = 2200;
  SERVO = 5000;
  sys[191] = 7000; //frekvence PWM
  PWM_CYKLE = 7000; //PWM-duty-cycle 0%
  echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''probíhá kalibrace serva');
  PWM_CYKLE = 6410; //PWM-duty-cycle 10%
  wait(15000);
  PWM_CYKLE = 5820; //PWM-duty-cycle 20%
  wait(15000);
  PWM_CYKLE = 5230; //PWM-duty-cycle 30%
  wait(15000);
  PWM_CYKLE = 4640; //PWM-duty-cycle 40%
  wait(15000);
  PWM_CYKLE = 4050; //PWM-duty-cycle 50%
  wait(15000);
  PWM_CYKLE = 3640; //PWM-duty-cycle 60%
  wait(15000);
  PWM_CYKLE = 2870; //PWM-duty-cycle 70%
  wait(15000);
  PWM_CYKLE = 2280; //PWM-duty-cycle 80%
  wait(15000);
  PWM_CYKLE = 1690; //PWM-duty-cycle 90%
  wait(15000);
  PWM_CYKLE = 1100; //PWM-duty-cycle 100%
  wait(30000);
  pwm = 7000;
  old_pwm = 7000;
  echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''test cerpadla primarniho okruhu');
  sys[231] = 1;
  wait(5000);
  sys[231] = 0;
  wait(5000);
  echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''test cerpadla sekunderniho okruhu');
  sys[232] = 1;
  wait(5000);
  sys[232] = 0;
  wait(5000);
  echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''test cerpadla okruhu boileru');
  sys[231] = 1;
  sys[232] = 1;
  wait(5000);
  sys[231] = 0;
  sys[232] = 0;
  PWM_CYKLE = 1100; //PWM-duty-cycle 100%
  wait(15000);
  PWM_CYKLE = 1690; //PWM-duty-cycle 90%
  wait(15000);
  PWM_CYKLE = 2280; //PWM-duty-cycle 80%
  wait(15000);
  PWM_CYKLE = 2870; //PWM-duty-cycle 70%
  wait(15000);
  PWM_CYKLE = 3640; //PWM-duty-cycle 60%
  wait(15000);
  PWM_CYKLE = 4050; //PWM-duty-cycle 50%
  wait(15000);
  PWM_CYKLE = 4640; //PWM-duty-cycle 40%
  wait(15000);
  PWM_CYKLE = 5230; //PWM-duty-cycle 30%
  wait(15000);
  PWM_CYKLE = 5820; //PWM-duty-cycle 20%
  wait(15000);
  PWM_CYKLE = 6410; //PWM-duty-cycle 10%
  wait(15000);
  PWM_CYKLE = 7000; //PWM-duty-cycle 0%
  echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''system je nastartovan');
}

main
{
 if (VENKU == 16777216) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''porucha teplotniho cidla venku'); };
 if (DOMA == 16777216) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''porucha teplotniho cidla doma'); };
 if (KOTEL == 16777216) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''porucha teplotniho cidla kotel'); };
 if (STOUPACKA == 16777216) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''porucha teplotniho cidla stoupacka'); };
 if (BOILER == 16777216) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''porucha teplotniho cidla boiler'); };
 if (AKUM1 == 16777216) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''porucha teplotniho cidla akum1'); };
 if (AKUM2 == 16777216) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''porucha teplotniho cidla akum2'); };
 if (AKUM3 == 16777216) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''porucha teplotniho cidla akum3'); };
 if (AKUM4 == 16777216) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''porucha teplotniho cidla akum4'); };
 if (KOTEL < 7000 && AKUM1 < 4000 && sys[8] == 1 && sys[9] == 0) probeh_pri_odstavce(); // protoci cerpadla a servo pri odstavce
 if (ZPATECKA == 16777216) { echo(sys[5]'-'sys[6]'-'sys[7]' 'sys[8]':'sys[9]':'sys[10]' ''porucha teplotniho cidla zpatecka'); };
 if (KOTEL >= 7000 && CERPADLO_1 == 0) zapni_cerpadlo_1(); //zapina cerpadlo primarniho okruhu
 if (KOTEL < 7000 && CERPADLO_1 != 0) vypni_cerpadlo_1();  //vypina cerpadlo primarniho okruhu
 if (POKOJ_TERMOSTAT == 0 && CERPADLO_2 == 0 && WEB_TERMOSTAT - HYSTEREZE > DOMA && KOTEL > 7000) zapni_cerpadlo_2(); // zap. cerp. top. okruhu pokud sepne termostat, je v provozu kotel a klesne teplota doma
 if (POKOJ_TERMOSTAT == 0 && CERPADLO_2 == 0 && WEB_TERMOSTAT - HYSTEREZE > DOMA && AKUM1 > 4000) zapni_cerpadlo_2(); // zap. cerp. top. okruhu pokud sepne termostat, nabyta nadrz a klesne teplota doma
 if (POKOJ_TERMOSTAT != 0 && CERPADLO_2 != 0) vypni_cerpadlo_2(); // vyp. cerp. topneho okruhu, pokud vypne pokoj. termostat
 if (WEB_TERMOSTAT + HYSTEREZE < DOMA && CERPADLO_2 != 0) vypni_cerpadlo_2(); // vyp. cerp. topneho okruhu, pokud vypne web. termostat
 if (KOTEL < 7000 && AKUM1 < 4000 && CERPADLO_2 != 0) vypni_cerpadlo_2(); // vyp. cerp. topneho okruhu, pokud nehori kotel a jsou vybite nadrze
 if (KOTEL >= 9800 && CERPADLO_2 == 0) vysoka_teplota(); //prehrati kotle
}

5

Re: SDS Micro Lite2 UDP write

K tématu:
Je potřeba mít SNMP WRITE povoleno (to předpoklám že je). Pozor taky na správno write-community (je stejná jako read-community).

příklad WRITE OID pro RELÉ-1: .1.3.6.1.4.1.33283.1.2.3.1
příklad WRITE OID pro PWM-W: .1.3.6.1.4.1.33283.1.2.4.2

Možnost zápisu je vždy (zápis u všech OID) buď INTEGER nebo COUNTER32,
i pro zmíněné PWM (kde to je pro čtení jako GAUGE).

Možná se v novém BETA firmware doplní do zmíněné dvojice int/cnt32 i ten gauge, uvidíme.

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