Заголовок темы должен отражать суть. Переформулируй или тема будет удалена
есть ардуино уно и езернет шилд w5100 и датчик температуры ds18b20. Нужно сделать чтоб датчик температуры передавал данные по SNMP. скетч работает но ответа по SNMP нет. перепробовал много разных скетчей. баловался и с oid и с айпишниками ниче не помогает. на шилде горит link и fullo
#include <OneWire.h>
#include <UIPEthernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // random MAC
byte ip[]= {192,168,11,249};
String readString = String(64);
byte addr[8]; // DS18B20 1-wire address
OneWire ds(4); // DS18B20 at pin 4
EthernetServer server(10050); // Zabbix port
// Zabbix protocol description:
// https://www.zabbix.com/documentation/1.8/protocols
// https://www.zabbix.com/documentation/1.8/protocols/agent
void setup() {
ds.search(addr);
// время для инициализации Ethernet
delay(500);
// массив смещений чтобы пропустить код датчика и пропустить мак
mac[1] = addr[3];
mac[2] = addr[4];
mac[3] = addr[5];
mac[4] = addr[6];
mac[5] = addr[7];
// запуск ethernet подключения
Ethernet.begin(mac);
server.begin();
// Resolution (9..12 bit)
//
// This is done ONCE in setup()
//
// bits
// of
// precision
// 0 - 9
// 1 - 10
// 2 - 11
// 3 - 12
int t_precision = 1; // adjust loop() delay!
ds.select(addr);
ds.write(0x4E);
// write zero into the alarm registers
ds.write(0);
ds.write(0);
// and write t_precision into the configuration register
// to select the precision of the temperature
ds.write(t_precision << 5);
// Write them to the EEPROM
ds.write(0x48);
// Serial.begin( 38400 ); // uncomment for debug output
/*
byte i;
Serial.print( " Ethernet MAC =" );
for( i = 0; i < 6; i++ )
{
Serial.write( ' ' );
Serial.print( mac, HEX );
}
Serial.println();
*/
}
void loop() {
byte data[2];
byte l;
float celsius;
readString = "";
l = 0;
if (EthernetClient client = server.available())
{
while (client.connected()) {
if (client.available()) {
if (l < 63) {
char c = client.read();
readString.concat(c);
l = readString.length();
}
if ((l > 5) & (l == (byte)readString[5] + 13)) // end of query from zabbix server
{
String request = readString.substring(13);
if (request.endsWith("\n")) {
request.remove(request.length() - 1);
}
if (request.equals("agent.ping")) {
client.print("ZBXD\x01"); // reply header
byte replyBytes [] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, '1'}; //4 bytes - length, 4 - reserved, 1 - data
client.write(replyBytes, 9);
}
else
if (request.equals("env.temp")) {
ds.reset();
ds.select(addr);
ds.write(0x44); // start conversion, with regular (non-parasite!) power
delay(250); // min {750, 375, 188, 94}ms for a {12,11,10,9}-bit conversion, respectively
ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
data[0] = ds.read();
data[1] = ds.read();
int16_t raw = (data[1] << 8) | data[0];
celsius = (float)raw / 16.0;
client.print("ZBXD\x01"); // reply header
byte replyBytes [] = {(byte) String(celsius).length(), 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; //4 bytes - length, 4 - reserved
client.write(replyBytes, 8);
client.print(celsius);
}
else {
client.print("ZBXD\x01"); // reply header
byte replyBytes [] = {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; //4 bytes - length, 4 - reserved
client.write(replyBytes, 8);
client.print("ZBX_NOTSUPPORTED");
}
break;
}
}
}
delay(10);
client.stop();
}
}
#include <OneWire.h>
#include <UIPEthernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // random MAC
byte ip[]= {192,168,11,249};
String readString = String(64);
byte addr[8]; // DS18B20 1-wire address
OneWire ds(4); // DS18B20 at pin 4
EthernetServer server(10050); // Zabbix port
// Zabbix protocol description:
// https://www.zabbix.com/documentation/1.8/protocols
// https://www.zabbix.com/documentation/1.8/protocols/agent
void setup() {
ds.search(addr);
// время для инициализации Ethernet
delay(500);
// массив смещений чтобы пропустить код датчика и пропустить мак
mac[1] = addr[3];
mac[2] = addr[4];
mac[3] = addr[5];
mac[4] = addr[6];
mac[5] = addr[7];
// запуск ethernet подключения
Ethernet.begin(mac);
server.begin();
// Resolution (9..12 bit)
//
// This is done ONCE in setup()
//
// bits
// of
// precision
// 0 - 9
// 1 - 10
// 2 - 11
// 3 - 12
int t_precision = 1; // adjust loop() delay!
ds.select(addr);
ds.write(0x4E);
// write zero into the alarm registers
ds.write(0);
ds.write(0);
// and write t_precision into the configuration register
// to select the precision of the temperature
ds.write(t_precision << 5);
// Write them to the EEPROM
ds.write(0x48);
// Serial.begin( 38400 ); // uncomment for debug output
/*
byte i;
Serial.print( " Ethernet MAC =" );
for( i = 0; i < 6; i++ )
{
Serial.write( ' ' );
Serial.print( mac, HEX );
}
Serial.println();
*/
}
void loop() {
byte data[2];
byte l;
float celsius;
readString = "";
l = 0;
if (EthernetClient client = server.available())
{
while (client.connected()) {
if (client.available()) {
if (l < 63) {
char c = client.read();
readString.concat(c);
l = readString.length();
}
if ((l > 5) & (l == (byte)readString[5] + 13)) // end of query from zabbix server
{
String request = readString.substring(13);
if (request.endsWith("\n")) {
request.remove(request.length() - 1);
}
if (request.equals("agent.ping")) {
client.print("ZBXD\x01"); // reply header
byte replyBytes [] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, '1'}; //4 bytes - length, 4 - reserved, 1 - data
client.write(replyBytes, 9);
}
else
if (request.equals("env.temp")) {
ds.reset();
ds.select(addr);
ds.write(0x44); // start conversion, with regular (non-parasite!) power
delay(250); // min {750, 375, 188, 94}ms for a {12,11,10,9}-bit conversion, respectively
ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
data[0] = ds.read();
data[1] = ds.read();
int16_t raw = (data[1] << 8) | data[0];
celsius = (float)raw / 16.0;
client.print("ZBXD\x01"); // reply header
byte replyBytes [] = {(byte) String(celsius).length(), 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; //4 bytes - length, 4 - reserved
client.write(replyBytes, 8);
client.print(celsius);
}
else {
client.print("ZBXD\x01"); // reply header
byte replyBytes [] = {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; //4 bytes - length, 4 - reserved
client.write(replyBytes, 8);
client.print("ZBX_NOTSUPPORTED");
}
break;
}
}
}
delay(10);
client.stop();
}
}