14.02.2024: День влюблённых
Я уже говорил, что влюблённость — это болезнь. Много раз говорил. Любовь — это хорошо и здорово. Влюблённость — это зло, боль, страдания и почти психическое расстройство. Потенциально опасное для человека и окружающих, между прочим.
Так почему «день влюблённых» объявлен как праздник? Ответ очевиден.
Во-первых, продаванам нужно зарабатывать, а февраль в этом плане довольно провальный месяц. Вот декабрь, когда народ закупается к встрече нового года — месяц просто шикарный.
Когда работал в продажах, это была основная выручка года в моей отрасли. Сметалось даже залежавшееся.
Конец августа — первая половина сентября, тоже хороший период для продаж. Ещё неплох май и самое начало июня. Январь, конец февраля, март, немножко апрель — тоже туда-сюда. Но вот конец января и почти весь февраль — мёртвый сезон. Вот продаваны и пролоббировали праздник. Да такой, чтобы было стыдно не тратиться. Впрочем, об этом дальше.
Во-вторых, хочется иметь повод оказать какой-нибудь растратный знак внимания своей второй половинке.
Вообще, для такого поводов и не надо. Однако, с поводом даже забавнее. Повод дисциплинирует. Повод — напоминает.
Хочется повод? Получи и распишись! Ну или так, без росписи… Так что праздник прижился.
А давайте запилим «День сифилиса», «День гриппа» или вот например «День травматологии». Почему нет? Можно по быстрому сгенерировать традиции, антураж, мероприятия и т.д. Попросить какую-нибудь нейросеть и вперёд.
Ну а что? Важность травматологии трудно переоценить. Особенно сейчас. Да и продаваны от магазинов медтехники и аптек — наверняка оценят и поддержат.
Сюда можно даже спорт подтянуть, и устроить неделю мероприятий, типа бега на костылях, гонок на каталках и инвалидных колясках, скоростная десмургия, наложение жгута вслепую, конкурс дизайнерских гипсовых повязок. Ну и т.д.
А какие ивенты в связи с этим праздником можно проводить в школах и даже в ВУЗ’ах! Это же просто песня! Это же… целевое расходование средств, для прокачки общественно полезных навыков первой помощи. Да ещё и с элементами соревнования и даже призами!
Это! А не эти ваши дни влюблённых. Тьфу!
А поздравлять любимых можно хоть ежедневно, хоть раз в год. Это уже личное дело и, возможно, семейные традиции. Даёшь «День травматологии» в массы!
Впрочем, всё вышесказанное — это моё мнение и вообще утренний бред.
А потому, что не надо меня будить будильником по утрам. Некоторым людям лучше спать до обеда. От этого и мне хорошо, и обществу польза. Ну или нет. Но честно сказать, я бы поспал ещё пару часиков. Потом позавтракал, сходил на прогулку в лес, посмотреть на снежок, вдохнуть запах морозной хвои, как следует нагрузить ноги, прокачать кровь по сердечно-сосудистой. На обратном пути я бы заскочил в магазинчик и прикупил чего-нибудь вкусненького. И придя домой. мы с Эль устроили бы чаепитие. Эх…
Ладно. Мечты — это хорошо. Мечты — лучше фантазий. Полезнее, продуктивнее и всё-такое.
Ну а в реальности я стартую новый рабочий день. Нужно автоматизировать ещё пару тесткейсов. Лучше четыре.
Перерыв! Подправил вчерашний скетч.
// Пин кулера #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 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); //Переключатель отмены ресета Serial.begin(9600); digitalWrite(CULLER_PIN, HIGH); //Включаю кулер digitalWrite(RESET_RELAY, HIGH); //Включаю реле Serial.println("Setup complete"); } void loop() { long counter = COUNTER_START; //Счётчик миллисекунд до перезагрузки char coller = '0'; Serial.println("Starting loop"); Serial.println(COUNTER_START); Serial.println(counter); while (counter >= 0) { cancel_led_status(); if (Serial.available() > 0) { //Если порт доступен coller = (char)Serial.read(); if (coller == '1') { digitalWrite(CULLER_PIN, HIGH); //Включаю кулер counter = COUNTER_START; Serial.println("Coller ON"); } if (coller == '0') { digitalWrite(CULLER_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); } }
Теперь он нормально работает.
Забавно, но почему-то в моей плате переменная типа int отказывалась принимать значение 300 000 и уходила в минуса. Пришлось сделать тип long. Это помогло. Ну и разное по мелочи поправил, добавив вывод в порт отладочной информации.
При подключении, плата нагрелась так, что я чуть не обжог пальцы.
Радует то, что USB порт не сгорел. Вовремя я запах пластика унюхал.
Оказалось, чуть-чуть припоя (это было даже не заметно) попало между пинами. Ну и замкнуло, судя по всему. После прочистки скальпелем, плата нормально прошилась, светодиоды мигают именно так, как и ожидалось. Осталось испытать силовую часть.
Но сначала. нужно написать автоматизацию, которая будет пихать в порт ноль или единицу раз в 30 секунд.
Иначе коробочка с HASS начнёт перезагружается каждые 5 минут.
А вот так выглядит кусок конфига для HASS, куда я засунул включение/выключения кулера.
command_line: # Кулер на HASS - switch: name: 'Кулер на HASS' icon: 'mdi:mdi:fan' command_on: 'echo "1" > /dev/ttyUSB0' command_off: 'echo "0" > /dev/ttyUSB0' unique_id: 'fan_on_hass'
Пока тут нет условий. Просто «переключатель».
И он работает. Кулер включается и выключается, в зависимости от того, куда я его переключил.
Теперь нужна автоматизация. Она должна анализировать значение температуры процессора (такой сенсор у меня уже есть) и если температура выше 50°C, то включать кулер. Если ниже — выключать.
# Температура процессора сервера HA - sensor: name: 'Температура процессора (HA)' command: 'cat /sys/class/thermal/thermal_zone0/temp' unique_id: 'ha_cpu_temperature' unit_of_measurement: '°C' value_template: '{{ value | multiply(0.001) | round(1) }}' scan_interval: 90
Вот кусок кода сенсора температуры процессора в той же секции command_line.
Автоматизация простая. Их, собственно, две. Тригерятся по расписанию раз в минуту (/1).
Второе условие — температура.
- В первой автоматизации она выше 50 и тогда кулер включается.
- Во второй — ниже 50.
Лучше было бы сделать чтобы выключался кулер при температуре ниже 45, а включался при выше 55, но тогда в интервале между этими автоматизациями в порт не уходило-бы значение 0 или 1, и тогда устройство решило бы, что нужно произвести перезагрузку.
Кстати, перезагрузка не работает. Твердотельное реле почему-то отказалось прокидывать напряжение на питающий кабель. Видимо нужно будет переделать под механическое реле.
Вот поэтому я и не стал делать корпус сразу. Сначала нужно убедиться, что не придётся переделывать.
Спойлер! Придётся.
За этими заботами закончился перерыв. Делаю бэкап HASS и иду работать дальше.
Вечер. Бегу за цветами и шоколадом. Ужинаем и… иду писать код на джаве.
А всё потому, что хочу сделать крутые отчёты в Аллюре без всяких там костылей.
Напишите комментарий