16.02.2024: С пятницей

С добрым утром! Как дела? Какие планы на сегодня?

У меня, к сожалению, нет никаких планов. Ну, кроме работы, конечно. Ведь будний день налагает ряд задач. Но в остальном…

Хотя, есть кое-что. Я хочу принять ванну. Но это не план, а просто небольшая бытовая мелочь.

И еще, было бы неплохо добавить корпус для WatchDog (с контролем охлаждения процессора). И проверить скрипт прошивки, чтобы убедиться, что он не включает кулер постоянно.

Скрипт проверил, подумал-подумал и решил добавить еще одно состояние, кроме «0» и «1». Итак!

  • 0 — посылается в порт, когда процессор остыл достаточно, чтобы выключить кулер.
  • 1 — посылается в порт, когда процессор нагрелся и нужно включить кулер.
  • 2 — посылается в порт раз в минуту и восстанавливает начальное значение на таймере (который отсчитывает время до перезагрузки), не влияя на включение кулера.

Правда, уже на HASS, я хоть и настроил пинг раз в минуту, но забыл вызвать включение отправки цифры 2 в порт. В результате, «волшебная коробочка» начала перезагружаться раз в 5 минут. Хорошо, что там есть возможность принудительного отключения ресета. Предусмотрел как раз на подобный случай.

Плюсом добавил включение встроенного светодиода, когда работает кулер.

// Пин кулера
#define CULLER_PIN 3
// Пин реле ресета
#define RESET_RELAY 4
// Пин светодиода перезагрузки
#define RESET_LED_PIN 5
// Индикация включённой отмены ресета
#define CANCEL_LED_PIN 2
// Переключатель отмены ресета
#define CANCEL_PIN 10
// Ожидание по умолчанию
#define COUNTER_START 300000
// Задержка по умолчанию
#define DELAY 20
// Встроенный светодиод
#define ONBOARD_LED_PIN 13

void setup() {
  pinMode(CULLER_PIN, OUTPUT); //Пин кулера
  pinMode(RESET_RELAY, OUTPUT); //Пин реле ресета
  pinMode(RESET_LED_PIN, OUTPUT); //Пин светодиода перезагрузки
  pinMode(CANCEL_PIN, INPUT_PULLUP); //Переключатель отмены ресета
  pinMode(CANCEL_LED_PIN, OUTPUT); //Переключатель отмены ресета
  pinMode(ONBOARD_LED_PIN, OUTPUT); //Встроенный светодиод
  Serial.begin(9600); 
  digitalWrite(CULLER_PIN, HIGH); //Включаю кулер
  digitalWrite(ONBOARD_LED_PIN, HIGH);
  digitalWrite(RESET_RELAY, LOW); //Включаю реле
  Serial.println("Setup complete");
}

void loop() {
  long counter = COUNTER_START; //Счётчик миллисекунд до перезагрузки
  char coller = '0';
  Serial.println("Starting loop");
  
  while (counter >= 0) {
    cancel_led_status();
    if (Serial.available() > 0) { //Если порт доступен
      coller = (char)Serial.read();
      
      if (coller == '2') {
          counter = COUNTER_START;
          Serial.println("Coller -");
      }
      
      if (coller == '1') {
          digitalWrite(CULLER_PIN, HIGH); //Включаю кулер
          digitalWrite(ONBOARD_LED_PIN, HIGH);
          counter = COUNTER_START;
          Serial.println("Coller ON");
      }
      if (coller == '0') {
          digitalWrite(CULLER_PIN, LOW); //Выключаю кулер
          digitalWrite(ONBOARD_LED_PIN, LOW);
          counter = COUNTER_START;
          Serial.println("Coller OFF");
      }
      
    }
    delay(DELAY); //Делаю задержку
    counter = counter - DELAY; //Вычитаю из счётчика время задержки
  }

  Serial.println("Reset Situation");

  if (!digitalRead(CANCEL_PIN)) {
    Serial.println("Reset activated");
    //Если мы выпали из цикла, значит сервер висит и нужно сделать ресет
    digitalWrite(RESET_RELAY, HIGH); //Размыкаю реле
    digitalWrite(RESET_LED_PIN, HIGH); //Включаю индикацию перезагрузки
    delay(15000); //Жду 15 секунд
    digitalWrite(RESET_RELAY, LOW); //Замыкаю реле
    delay(60000); //Жду минуту
    digitalWrite(RESET_LED_PIN, LOW); //Выключаю индикацию перезагрузки
  }else{
    Serial.println("Reset canceled");  
  }

}

void cancel_led_status(){
    if (!digitalRead(CANCEL_PIN)) {
      digitalWrite(CANCEL_LED_PIN, LOW);
    }else{
      digitalWrite(CANCEL_LED_PIN, HIGH);
    }
}

Я взял пустой корпус от старого роутера (как знал, что пригодится) и просто закрепил платы на термоклее. Кабели выходят через отверстие для RJ45. Переключатель отмены перезагрузки и вход по питанию удачно вписались в место под штатное отверстие для питания и антенны.

Корпус, конечно, крупноват. Но зато на нём хорошо помещается коробочка с HASS. Так она будет охлаждаться ещё лучше.

Плохо то, что светодиоды не видно. Однако с другой стороны, характер освещения изменяется во время перезагрузки или если включить её отмену, а этого вполне достаточно для комфортного использования.

Всё. Остаётся ещё какое-то время понаблюдать за работой, и проект можно считать реализованным.

[ht]

Странно. Кулер всё работает и работает. Хотя на тесте, через монитор порта, он выполнял действия по команде как цирковая собачка: чётко и без промедлений.

Полез разбираться и нарыл, что есть какая-то проблема с передачей символа из командной строки. Судя по миганиям светодиода, там вместо цифры 1 или 0 приходит целая пачка чисел. Стал пробовать разные варианты инициализации порта, но лишь научился ими намертво вешать машину.

А разрулил так. Вот свитчи, которые создал для удобства пользования.

command_line:
  # Кулер на HASS
  - switch:
      name: 'Кулер на HASS'
      icon: 'mdi:fan'
      command_on: 'echo "1"> /dev/ttyUSB0'
      command_off: 'echo "0"> /dev/ttyUSB0'
      unique_id: 'fan_on_hass'
  # Кулер на HASS
  - switch:
      name: 'Ping кулера на HASS'
      icon: 'mdi:fan'
      command_on: 'echo "2"> /dev/ttyUSB0'
      command_off: 'echo "2"> /dev/ttyUSB0'
      unique_id: 'ping_fan_on_hass'
  # USB init
  - switch:
      name: 'USB-port init'
      icon: 'mdi:fan'
      command_on: 'stty -F /dev/ttyUSB0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts -hupcl'
      command_off: 'stty -F /dev/ttyUSB0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts -hupcl'
      unique_id: 'usb0_init'
  • Первый свитч, подаёт команду на включение или выключение кулера. Даже вынес его на панель обзора, чтобы можно выло вручную прокликивать.
  • Второй свитч (по сути кнопка), посылает в порт цифру ‘2’ и клацается автоматизацией раз в минуту.
  • Третий (тоже считай кнопка) — инициализирует порт. Запускается той автоматизацией, которая вызывается сразу после старта Home Assistant. Т.е. один раз. С ней порт принимает символы корректно. Похожей строчкой я и вешал компик, после нескольких повторений данной команды.

В общем, продолжаю тестировать.

Яндекс нехорошая контора разочаровал. Несколько лет назад он предоставлял замечательную почту для доменов. Это как обычная яндекс почта, но на собственных доменах. Было здорово и удобно.

А теперь он хочет за это деньги. Обозвал каким-то «Яндексом 360 для бизнеса» и, видимо, думает, что теперь все, кто им пользовался, редко стали бизнесменами: в малиновых пиджаках, с толстой золотой цепью, перстнями и крирпичеобразной мобилой.

Почту можно только читать. Отправлять с этих ящиков «никак низззззя». Но можно заплатить.

Вымогательство какое-то. Не ожидал подобного поворота от Яндекса, но… «И ты, Яндекс?».

Придётся теперь почту переносить на хостинг здорового человека. Там за это там дополнительных денег не берут. Однако, есть ограничение на занимаемое почтой дисковое пространство. Для моей простенькой учётки предоставляют 60 Гб.

Так этого должно хватить за глаза и за уши. Ну… Если конечно время от времени удалять ненужные письма и спам. А ведь это дело можно пересылать на Яндекс почту. Ну или(и) настроить почтовый клиент так, чтобы не хранил письма на сервере.

В общем, поковырялся и перенастроил ящики. Теперь буду снова получать спам, как в старые добрые.

Home Assistant перезагружается три раза в час. Это странно. А впрочем, понаблюдаем ещё. Возможно, проблема не в инициализации порта, ав чём-нибудь другом. Главное, что теперь коробочка перезагружается без лишних телодвижений с моей стороны.

После шести вечера — отпустило. Уже три часа ни одной перезагрузки и всё работает.

И я принял ванну, как и планировал. Вот прямо так и залёг туда с книгой. И отогрелся, и почитал немного. Благодать!

За ужином речь зашла про 1С и язык, который там используется. Слово за слово, и я припомнил как в детстве нашёл на помойке книгу «Минск 2 и Минск 22». Там, насколько помню, был похожий язык. Жаль книга не сохранилась до наших дней.

Воспоминания — вещь ненадёжная, а потому пошёл разыскивать эту книгу в оригинале. И ведь нашёл на одной из площадок! Отдают не дорого. В общем, заказал. Если приедет, можно будет сравнить.

Ночью, но не в полночь, коробочка TV Box H96 Max на процессоре Rockchip RK3318 окирпичилась. Т.е. перестала подавать какие-либо признаки жизни. Только красный светодиод на плате горит, и всё.

Запустить так и не вышло. Подключение к монитору по HDMI показало чёрный экран, но процессор греется.

Напишите комментарий

Введите имя

Введите адрес электронной почты

Введите адрес вашего сайта

Нажмите эту кнопку, чтобы отправить комментарий.

Введите текст комментария