• 1
  • 7
  • 8
  • 9
  • 10
  • 11
От мобилни телефони до цифрови камери
brum - майстор
съб фев 19, 2022 7:40 pmVirtex написа:
ср яну 05, 2022 1:46 pmbrum написа:
Сега минах на Ubiquiti и цялата им инфраструктура за менажиране на устройствата и се видях бял човек :) .
Не съм ги ползвал, но влезнаха в новините напоследък със Security Проблеми, вероятно си взел мерки :)
Аз съм параноик и където може да не се качвам по облаците си седя у дома. В конкретната ситуация нямам ни една парола при тях. Network controller-а който ползвам е пуснат локално.

Иначе ползвам различни, дълги и произволни пароли. Един вид не ми дреме къде какво ще изтече, защото съм подходил превантивно към течове :) .
brum - майстор
Написах един код, ама после съобразих, че най-вероятно проблема ти е със захранването. Това, че си премерил 3.3V на края на жицата не го гледай. Сложи по-малък pull up резистор. Примерно 2 или 3.3 kOhm. Или ако въобще нямаш pull up резистор пробвай с 4.7kOhm-а първо.

Каблеа също има значение какъв е. Но щом работи от време на време не очаквам той да е проблема.

И последно за кабелите - виж тук. Човека се е видял в чудо заради дъглите кабели и е тунинговал леко OneWire библиотеката. Пробвай и този подход.

Я снимай и какво ти е ESP-то. И обърни внимание на кода върху стабилизатора за 3.3V. Че имам едни подозрения и може да се наложи да извадиш външен стабилизатор. Китайците слагат едни техни си измислени чипове дето като се опиташ да дръпнеш още 10mA и дават фира. А захранващото напрежение кляка на моменти като има комуникация през WiFi-я.

Иначе това по-долу е идеята която имах преди да се замисля за захранване. При първо пускане ще видиш адресите на сензорите и ще ги запишеш в sensor_HPlow/sensor_HPhigh/sensor_hol/sensor_outside. Ако засече грешка при прочитането на сензор ще направи 5 опита като изчака между 0.2 и 1 секунда между опитите.

Не съм го пускал! Написах го на бързо и не гарантирам, че ще сработи. Пази си старият код за всеки случай.

Код: Избери всички

#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>

String apiKey = "тайна"; // Enter your Write API key from ThingSpeak

const char* ssid = "тайна"; // Replace with your wifi ssid and WPA2 key
const char* pass = "голяма тайна";
const char* server = "api.thingspeak.com";

#define ONE_WIRE_BUS 4 // Data wire is connected to GPIO 4 i.e. D2 pin of nodemcu

OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices

DallasTemperature sensors(&oneWire); // Pass our oneWire reference to Dallas Temperature sensor

WiFiClient client;

uint8_t sensor_HPlow[8]   = { 0x28, 0xEE, 0xD5, 0x64, 0x1A, 0x16, 0x02, 0xEC };
uint8_t sensor_HPhigh[8]  = { 0x28, 0xEE, 0xD5, 0x64, 0x1A, 0x16, 0x02, 0xEC };
uint8_t sensor_hol[8]     = { 0x28, 0xEE, 0xD5, 0x64, 0x1A, 0x16, 0x02, 0xEC };
uint8_t sensor_outside[8] = { 0x28, 0xEE, 0xD5, 0x64, 0x1A, 0x16, 0x02, 0xEC };

void setup()
{
    Serial.begin(9600);
    delay(10);

    Serial.println("Connecting to ");
    Serial.println(ssid);
    WiFi.begin(ssid, pass);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("\nWiFi connected");

    // Start up the library
    sensors.begin();

    // locate devices on the bus
    Serial.printf("Found %d devices.\n\n", sensors.getDeviceCount());

    DeviceAddress addr;
    for (int i = 0; i < sensors.getDeviceCount(); i++) {
        Serial.printf("Sensor %d address is { ", i);
        sensors.getAddress(addr, i);
        for (uint8_t i = 0; i < 8; i++) {
            Serial.print(addr[i], HEX);
            if (i < 7) {
                Serial.print(", ");
            }
        }
        Serial.println(" }");
    }
}

float getSensor(const uint8_t* addr, const char* name) {
    for (int i = 1; i < 6; i++) {
        float temp = sensors.getTempC(addr);
        if (temp > -125) {
            return temp;
        }
        delay(200 * i);
        sensors.requestTemperatures();
    }

    Serial.printf("Failed to read sensor %s.\n", name);
    return -127.00;
}

void loop() {
    unsigned long start = millis();

    if (WiFi.status() != WL_CONNECTED) {
        Serial.printf("WiFi connection failed, current status is %d.\n", WiFi.status());
        delay(100);
        ESP.restart();
    }

    sensors.requestTemperatures();

    float tempC_HPlow = getSensor(sensor_HPlow, "HPlow");
    float tempC_hol = getSensor(sensor_hol, "hol");
    float tempC_HPhigh = getSensor(sensor_HPhigh, "HPhigh");
    float tempC_outside = getSensor(sensor_outside, "outside");

    int timeout = 5000;
    if (client.connect(server, 80)) { //184.106.153.149 or api.thingspeak.com
        String postStr = apiKey;
        postStr += "&field1=";
        postStr += String(tempC_HPlow);
        // postStr += "&field2=";
        // postStr += String(tempF);
        postStr += "&field2=";
        postStr += String(tempC_hol);
        postStr += "&field3=";
        postStr += String(tempC_HPhigh);
        postStr += "&field4=";
        postStr += String(tempC_outside);
        postStr += "\r\n\r\n";

        client.print("POST /update HTTP/1.1\n");
        client.print("Host: api.thingspeak.com\n");
        client.print("Connection: close\n");
        client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
        client.print("Content-Type: application/x-www-form-urlencoded\n");
        client.print("Content-Length: ");
        client.print(postStr.length());
        client.print("\n\n");
        client.print(postStr);
        Serial.println("Sent data to Thingspeak");

        // Изчаква до 5 секунди за отговор от сървъра и извежда изважда отговора в терминала.
        while (timeout > 0 && !client.available()) {
            timeout -= 100;
            delay(100);
        }

        if (!client.available()) {
            Serial.println("Server did not respond");
        } else {
            delay(1000);
            Serial.println("Server responded:");
            Serial.println(client.readString());
        }
    } else {
        Serial.println("Connection to thingspeak failed.");
    }
    client.stop();
    Serial.println("Delay of 30 Sec");
    // thingspeak needs minimum 30 sec delay between updates
    delay(30000 - millis() - start);
}
radius - майстор
Бреййй, чак сега видях този ценен пост.
4,7кОм съм сложил.
Ще пробвам първо с по-малък резистор (просто ще сложа още 1 бр. 4,7 в паралел), после новия код, и накрая по захранването ще копая.
Ето го есп-то, наистина е ключово че със същия код и 3 датчика, си работеше правилно на тестовата установка доста време
Прикачен файл:
есп.jpg
brum - майстор
Стабилизатора го изключи като проблем. Този е читав и няма драма да му сложиш и 50мА товар отгоре.
radius - майстор
С още един 4,7к в паралел не се получи, пробвах го като най-бързо.
radius - майстор
Още не съм намерил време да пробвам новия код на brum, но днес стана чудо, моята програма проработи, както си работеше на опитната установка, може би не е бъгава по рождение.
Прикачен файл:
еспОК.jpg
еспОК.jpg (97.18 KиБ) Видяна 695 пъти
Какво се случи в 11 часа сутринта, ще разберете утре, който познае - една кофа боб. По-важното е как ще елиминирам проблема.
brum - майстор
Отворил си капака и си охладил контролера? Или премести сигналният кабел настрани от захранващ блок или кабел? Или спря нещо със силно електромагнитно поле в близост до кабела?
radius - майстор
Баси, ще пращам боба май. :supz: Утре ще обясня от компа.
brum - майстор
Ако е "май", то с една снимка на инсталацията на 95% щях да видя потенциалният проблем :) .

Същата работа като при мен - седя, разправям за тоя гараж дето ще му правя настилка, но без снимка не успявам да обясня какво точно правя :) .
radius - майстор
Какво да снимам като всичко съм набутал с кански мъки в гофри с други кабели - няма какво да се види на снимка.

Общо взето след като спрях захранването на ТП от предпазителя в таблото и всичко проработи без смущения и аномалии, дори с моя код.
Подозирах сензора за стайна температура, защото си дели 1 кабел (алармаджийски неусукан с 6 многожични жила) с дисплея на ТП, но не е от него, разкачих и двата кабела на дисплея откъм контролера на ТП и нямаше ефект.
Други 2 сензора минават в гофра с други слаботокови кабели - термистор на бойлера, но има и един по който върви нула към контактора на бойлера. Да кажем, че не са подозрителни и те.
Остава външния датчик, който дели кабел с един МУК от алармата (също малко вероятно за смущение), но кабела им минава през стената с кабела между външното тяло на ТП и контролера - хем 230в, хем комуникация по четвъртото жило. Това е най-подозрително за смущението.
Лошото е, че всичко съм набутал в гофрите, свързал съм и не ми се дупчи за друга линия навън, но ще трябва да поразкача датчици един по един, да хвана откъде е смущението.
Дали няма някакъв софтуерен чалъм за по-търпеливо и нечувствително на смущения събиране на данни от сензорите, че хардуерно се изчерпих откъм елегантен монтаж?
brum, пуснах твоята програма и сякаш не създава аномалии (всички данни са добре и на място), обаче след старт праща 1 път всичко успешно и после не праща, дали може да помислиш какво я успива или трябва лога от серийния монитор?
  • 1
  • 7
  • 8
  • 9
  • 10
  • 11

Тема "Онлайн температурен мониторинг" | Включи се в дискусията:


Сподели форума:

Бъди информиран. Следвай "Направи сам" във Facebook:

Намери изпълнител и вдъхновения за дома. Следвай MaistorPlus във Facebook: