MiniDevicesInfo ИТ блоги 2018-11-16 2018-11-16 Отображаются все разделы
12345

root
1

Linux Arch
Windows 7
Windows 10
Tweaks


Без комментариев
Если ОС долго загружается

Долгое время ломал голову над интересным фактом:

Имеется вполне современный даже по сегодняшним меркам компьютер: 2-ядерный Core i3, 16 Gb DDR4, NVME-накопитель со скоростью чтения 2.4 Гб\с.

Но парадокс, система грузится долго. И Linux и Windows 7. С очень и очень странными симптомами: долгой начальной инициализацией.


Методом проб, ошибок, подстановок, нашел корень проблемы: UEFI. Точнее режим совместимости с Legacy и разметка NVMe-накопителя в MBR, а не GPT. Видимо системе требуется огромное время на переходы с одного режима в другой, а потом обратно + ядро системы пытается определить список оборудования самостоятельно вместо того чтобы просто получить его с EFI\ACPI.


Итак, если у вас вроде как современный компьютер, и вы чувствуете что ОС может загружаться быстрее, чем загружается - отключите в CMOS (Setup) все совместимости со старым режимом (Legacy, CSM и тд), оставив лишь UEFI, и будьте готовы полностью переразметить ваш NVMe (а может и SATA SSD) из старого режима MBR в новый GPT. Разумеется все системы придется переустановить заново, в режиме UEFI.


У меня это дало прирост загрузки с 20-30 сек с момента нажатия кнопки, до 3-5 секунд до появления рабочего стола. Новое оборудование должно работать в новом режиме. 


root
0

Linux CentOS
Linux Debian
Сетевое железо
Mikrotik
Домашний хостинг


Без комментариев
Почему сетевой кабель имеет значение

Относительно долгое время мой домашний сервер мучала одна интересная проблема. Периодически уходил в оффлайн. Подключиться невозможно.

Долгое время грешил на терморежим. Поставил вентилятор (там было пассивное охлаждение). Проблема не решилась. Поставил другие системы (метался между Дебианом, Убунтой и Центосью) - то же самое.

Решил обвинить материнскую плату и железо.

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


Стал грешить на сетевую подсистему. И правда. В логах нашел такое:


[  304.008655] r8169 0000:02:00.0 enp2s0: link down
[  307.056987] r8169 0000:02:00.0 enp2s0: link up
[  318.711223] r8169 0000:02:00.0 enp2s0: link down
[  321.433996] r8169 0000:02:00.0 enp2s0: link up
[  330.291883] r8169 0000:02:00.0 enp2s0: link down
[  333.198115] r8169 0000:02:00.0 enp2s0: link up
[  334.441311] r8169 0000:02:00.0 enp2s0: link down
[  337.207600] r8169 0000:02:00.0 enp2s0: link up
[  338.095204] r8169 0000:02:00.0 enp2s0: link down
[  341.248507] r8169 0000:02:00.0 enp2s0: link up
[  356.632769] r8169 0000:02:00.0 enp2s0: link down
[  359.651745] r8169 0000:02:00.0 enp2s0: link up
[  687.127200] r8169 0000:02:00.0 enp2s0: link down
[  690.253646] r8169 0000:02:00.0 enp2s0: link up
[  694.503367] r8169 0000:02:00.0 enp2s0: link down
[  697.181026] r8169 0000:02:00.0 enp2s0: link up
[  703.279311] r8169 0000:02:00.0 enp2s0: link down
Каждые несколько секунд сеть отключалась и подключалась. Само собой перво-наперво я подумал на роутер. Хоть и Mikrotik, но тем не менее достаточно старенький.

Конечно это было бы странно, учитывая что другие устройства прекрасно с ним работали, но тем не менее роутер я поменял на вкусненький, гигабитненький, с 5-тигигагерцовым WiFi.

Проблема осталась.

Пришла очередь сетевой карты. Ее конечно я менять не стал (да и не смог бы, у меня все на MiniITX), однако на плате их две, и я попробовал другую с предсказуемым результатом: не поменялось ровным счетом НИЧЕГО. Вдобавок обнаружил интересную особенность: если достать-вставить кабель - сеть появляется, т.е. сервер перезагружать уже не нужно. Ну думаю, ладно, придется брать в руки паяльник и паять костыль на Arduine который будет перетыкивать этот сетевой кабель.


И тут меня дернул черт попробовать другой кабель.

Все заработало. Сбоев нет. Интерфейс работает. Ничего не переподключается.


И я реально НЕ ПОНИМАЮ в чем проблема. Этот "нерабочий" патчкорд отлично прозванивается тестером. Работает на других системах. Он не работает только на этом сервере. Чудеса.


Мораль сего поста такова: если у вас стало слишком часто пропадать соединение - не спешите покупать новый роутер или переустанавливать систему. Просто попробуйте другой сетевой кабель.


P.S. этот сайт хостится именно на этом сервере.


root
0

Умный дом
Сделай сам
InternetOfThings
ESP8266


Без комментариев
Сенсорный WiFi выключатель на ESP8266

Решил сделать себе сенсорный выключатель на кухню.


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



Вот список того что я запланировал получить в итоге:


1. При включении (точнее первом подаче электричества вообще) выключатель должен подключаться к WiFi, а потом слать на домашний сервер свой IP и набор поддерживаемых фич. Хочу так сделать, чтобы унифицировать управление устройствами из одного центрального узла. Грубо говоря, выключатель сам добавляет себя в базу данных как выключатель, а потом центральная программа видит новое устройство "выключатель" и начинает с ним работать исходя из параметров которые этот выключатель прислал;


2. Выключатель должен уметь выключать и включать свет в автономном режиме, без наличия или отсутствия WiFi;


3. Выключатель так же должен уметь включать и выключать свет по сети, при чем без использования хитрожопых протоколов;


4. Соответственно выключатель должен уметь запоминать свое состояние и возвращать его по запросу из сети;


5. У выключателя должна быть подсветка в режиме ночника, на одном светодиоде;


6. Эта подсветка так же должна уметь включаться и выключаться по сети;


7. Разумеется это все должно иметь возможность быть запихнутым в бокс.


Самое проблемное и казалось сперва, и оказалось в итоге - это питание.

Все дело в том, что ESP8266 - питается от 3.3в, и ладно бы этим все ограничилось, но нет, кроме ESP-шки там должно принимать участие как минимум два модуля, приемный и исполнительный, которые непонятно как себя поведут с 3.3в.


В качестве сенсоров у меня был выбор, выбрать подешевле и поменьше, или подороже и побольше. Оба были у меня куплены для других проектов.


Разумеется выбрал я красненький, из-за двух факторов: меньшего размера, и отсутствия на стороне сенсора шероховатостей в виде деталей и разъемов. Честно говоря, производитель правого сенсора головой видимо не думал. Ну да ладно.


Исполнительным механизмом я вначале хотел выбрать классическое реле, но потом отказался из-за щелчка, и из-за надежды на то, что не придется ставить дополнительные транзисторы, чтобы подружить ESP-шные 3.3 вольта с релюшными пятью. В итоге выбрал твердотельный Omron с питанием в 5в. Как оказалось дальше, не зря.


В качестве элемента питания использовал обычную пятивольтовую зарядку от мобильника, куда навесом напаял LM1117 (стабилизатор на 3.3в).



Родные кишки от выключателя за 30 гривен, я вытащил (видно на первой фотке), вместо этого приклеил сенсор силиконом на внутреннюю сторону того элемента, на который обычно нажимают.




В общем вся готовая конструкция на кухне выглядела вот так...



На удивление, и сенсор, и твердотельное реле - отлично работают от 3.3В.


Что касается программной части, то для нее я использовал Arduino IDE (в Арче лежит в стандартных репах) + плагин к ней. Язык отдаленно напоминает C++, а то и PHP. Специально перепрошивать ESP8266 ни под что не нужно, все шьется на лету, с закороченным GPIO0 (об этом лучше почитать в интернете, цель статьи - не научить вас шить ESP8266).


За прошивку я взял скетч веб-сервера из примеров, добавив туда необходимые фичи.

С гордостью представляю его вам..


#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "u39_2.4G";
const char* password = "";
String ID="0001";
int status=0;
ESP8266WebServer server(80);

int n=0;

void handleNotFound(){
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
}

void setup(void){
  Serial.begin(115200);
  Serial.println("Starting Jarvis module: switcher...");
  // На пин 13 у нас подключен сенсор
  pinMode(13, INPUT);
  // На пин 13 у нас подключено реле
  pinMode(5, OUTPUT);
  // На пин 4 у нас подключена подсветка
  pinMode(4, OUTPUT);
  digitalWrite(5, 0);
  digitalWrite(4, 1);
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi: ");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    n++;
    // Если за 60 сек (0.5 * 120) нет wifi-подключения, ребутаем девайс. Потенциальный баг, в случае отсутствия WiFi девайс упадет в бесконечный ребут, пофиксю в след ревизии
    if (n==120) {Serial.println("[ FAIL ]");Serial.println("1 minute is gone, no connection, restarting...");ESP.reset();}
    
  }
  Serial.println(" [OK] ");
  HTTPClient http;
  String IP=WiFi.localIP().toString().c_str();
  // Посылаем на сервер умного дома GET запрос с нашим IP и списком поддерживаемых фич
  // lightswitch означает что к этой IP можно будет обращаться http://192.168.1.X/lightswitch=1 или http://192.168.1.X/lightswitch=0 и это будет включать и выключать свет
  // backlight по сути означает то же самое, но для низкожрущей подсветки
  // remote означает то, что этим устройством можно управлять снаружи
  // alert - означает то, что это устройство поддерживает индикацию. Это можно использовать например для бесшумной индикации звонка в дверной звонок
  http.begin("http://192.168.1.2/init.php?ip="+IP+"&device=switcher&features=lightswitch,backlight,remote,alert&id="+ID);
  int httpCode = http.GET();
  http.end();
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }

  // http://192.168.1.X/status вернет нам 0 или 1 в зависимости от того включен свет или нет
  server.on("/status", [](){
  String st=String(status);
  server.send(200, "text/plain", st);
  });

 // http://192.168.1.X/backlight=1 включит подсветку
 server.on("/backlight=1", [](){
    digitalWrite(4, 1);
    server.send(200, "text/plain", "OK");
  });


 // http://192.168.1.X/backlight=1 выключит подсветку
 server.on("/backlight=0", [](){
    digitalWrite(4, 0);
    server.send(200, "text/plain", "OK");
  });



 // http://192.168.1.X/lightswitch=1 включит свет
 server.on("/lightswitch=1", [](){
    digitalWrite(5, 1);
    status=1;
    server.send(200, "text/plain", "OK");
  });

// http://192.168.1.X/lightswitch=0 выключит свет
 server.on("/lightswitch=0", [](){
    digitalWrite(5, 0);
    status=0;
    server.send(200, "text/plain", "OK");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void){
  server.handleClient();
  int value=digitalRead(13);
  
  // Если нажат сенсор, и свет выключен, то...
  
  if ((value==1)and(status==0)) {
  // Включаем свет
  digitalWrite(5, 1);
  // Меняем статус
  status=1;
  // Сбрасываем значение переменной сенсора. Если этого не сделать, то проверка ниже снова выключит свет
  value=0;
  delay(1000);
  }

  // Если нажат сенсор, и свет включен, то...
  
  if ((value==1)and(status==1)) {
  // Выключаем свет
  digitalWrite(5, 0);
  // Меняем статус
  status=0;
  // Сбрасываем значение переменной сенсора. Если этого не сделать, то проверка выше снова включит свет
  value=0;
  delay(1000);
  
  }

  delay(100);
}
Единственное что, светодиод подсветки я пока не припаял, выключатель работает в пилотном режиме, в связи с чем предоставляю вам видео, благодарю за чтение статьи, и готов ответить на вопросы, если такие появятся.




root
0

Умный дом
Старое железо
Tweaks
Сделай сам
Домашний хостинг


2 комментариев
Vastking M910A firmware

Привет, друзья!


Есть у меня планшет, Vastking M910A. 9-ти дюймовый, с гигом ОЗУ, на двухъядерном Allwinner A20. В общем отличное железо за свои деньги.

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



Как-то раз заглючило. Слетела прошивка. Пришлось переустанавливать, но прежде чем переустановил - сутки лазил искал по интернету, поскольку родной сайт vastking.com.ua - уже давно лежит.


Поэтому, рассказываю как вкратце прошить этот планшет, а так же саму прошивку без мокрых писечек.


Итак, Allwinner хоть и мудаки в своем роде, но загрузку ОС в своих процессорах организовали грамотно. Их устройства невозможно окирпичить, благодаря следующим нюансам:

1. Процессор ищет загрузчик последовательно на USB-флешке, затем на MicroSD-карте, и уже затем на внутренней памяти. Посему даже если у вас заглючила прошивка, или вообще стерлась, или вообще деградировала внутренняя память - всегда сможете загрузиться с внешнего устройства.

2. Процессор поддерживает так называемый FEL-режим. Режим прошивки, если по нашему. При чем сей режим может активироваться как аппаратно (включение планшета с зажатой кнопкой громкости +), так и программно. Подсунув устройству MicroSD-карту, хитрым образом отформатированную - мы переключаем наше устройство на Allwinner в режим прошивки безо всяких комбинаций клавиш.


Итак, чтобы перевести планшет в режим прошивки, нам понадобится MicroSD-карта любого размера, и файл, который можно скачать здесь: https://github.com/linux-sunxi/sunxi-tools/raw/master/bin/fel-sdboot.sunxi

Этот файл нам нужно будет записать на нашу флешку. В Linux это будет выглядеть так: dd if=fel-sdboot.sunxi of=/dev/sdX bs=1024 seek=8

Где /dev/sdX - ваша MicroSD. Как это будет выглядеть в Windows, я честно говоря не знаю, но скорее всего там можно использовать DiskImage или что-то в этом роде.

Далее вставляем нашу карточку в планшет, и подключаем кабель. Все. Планшет в режиме прошивки.


Сама прошивка находится здесь: https://minidevices.info/download/vastking_m910.img.zip



root
1

Информационная безопасность
PHP
Tweaks


1 комментариев
Переход на HTTPS

Не люблю я https. Нет, он нужен. Особенно когда вам нужно защитить свои персональные данные, передаваемые пароли к клиент-банкам, порно-видео и все такое.

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

Первое время браузеры прозрачно намекали, что мол, сайт не использует https. Затем акцентирование внимания на "небезопасности" сайта становилось все наглее и наглее, и как себя поведут заговорщики дальше - одному Богу известно. И да, я считаю повсеместный переход на https скорее сговором регистраторов сертификатов, нежели борьбой за безопасность пользователей интернета.


Несмотря на то, что Minidevices.info не хранит никакой персональной информации, кроме ника и пароля (и хранить не будет), не показывает рекламы мокрых писечек, и не сливает ваши данные ФСБ - я принял решение перевести этот сайт на протокол HTTPS. Пусть подавятся


Версия вебсайта с HTTPS уже активна и уже работает, версия с HTTP будет продолжать работать до первого марта 2018 года, после чего останется лишь HTTPS-версия.


Извините за доставленные неудобства, и спасибо что иногда меня читаете.

Посмотрите так же: Сенсорный WiFi выключатель на ESP8266 _ и Почему сетевой кабель имеет значение _


Вы должны войти в систему, чтобы создавать блоги

1-4 / 1-4