Термометр для Забикс
- Войдите на сайт для отправки комментариев
Вс, 16/01/2022 - 19:29
Здравствуйте.
https://habr.com/ru/post/405077/ сделал по этой статье. вроде все работает
но если зайти телнетом то ардуино виснет.
Здравствуйте.
https://habr.com/ru/post/405077/ сделал по этой статье. вроде все работает
но если зайти телнетом то ардуино виснет.
#include <OneWire.h> #include <UIPEthernet.h> byte mac[] = { 0xDE, 0x05, 0xB6, 0x27, 0x39, 0x19 }; // random MAC byte ip[] = { 192, 168, 4, 5 }; // IP address in local network String readString = String(20); byte addr[8]; OneWire ds(4); // DS18B20 at pin 4 EthernetServer server(10050); // Zabbix port void setup() { Ethernet.begin(mac, ip); server.begin(); ds.search(addr); } void loop() { byte data[2]; float celsius; readString = ""; if (EthernetClient client = server.available()) { while (client.connected()) { if (client.available()) { char c = client.read(); if (c == '\n') // end of query from zabbix server { client.print("ZBXD\x01"); // response header if (readString == "agent.ping") { byte responseBytes [] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, '1'}; client.write(responseBytes, 9); } else if (readString == "env.temp") { ds.reset(); ds.select(addr); ds.write(0x44); // start conversion with regular (non-parasite!) power delay(1000); 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; byte responseBytes [] = {(byte) String(celsius).length(), 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; client.write(responseBytes, 8); client.print(celsius); } else { byte responseBytes [] = {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; client.write(responseBytes, 8); client.print("ZBX_NOTSUPPORTED"); } break; } else if (readString.length() < 20) { readString = readString + c; } } } delay(10); client.stop(); } }А что она должна делать, когда заходишь телнетом?
убрал строку 66 и 67 работает и через телнет
"ZBX_NOTSUPPORTED"
А что она должна делать, когда заходишь телнетом?
"ZBX_NOTSUPPORTED" должна ввыводить. и выводит после того как убрал строки
Подозреваю, что вскоре начнет вешаться при работе без .stop()
Подозреваю, что вскоре начнет вешаться при работе без .stop()
подскажите как решить задачу. если телнетом оправлять на 10050 порт мусор что он его фильтровал а не вешался
Проще взять готовое: https://github.com/zbx-sadman/zabbuino
Ставить в продакшн устройство на ENC28J60, да ещё вдобавок использующее String смысла не вижу.