Profruit banner

Умен звънец в openHAB

16 декември 2023

Телефонът е винаги с мен и сега, където и да се намирам получавам известие от openHAB, че някой е позвънил и чака пред вратата. А ако ме няма вкъщи става ясно часа и датата на последното позвъняване.

Tasmota Multipress

30 септември 2023

Идеята е Sonoff Touch T1 US 2 в салона, да управлява освен своето осветление и това в кухнята, а още вентилатора.

DIY 12V 1A WiFi Router UPS

22 април 2023

При поредно прекъсване на захранването вкъщи, батерията на нoтбука и двата UPS автоматично превключват на аварийно захранване и едновременно полита съобщение за конфуза

Zigbee2MQTT клониране

21 януари 2023

... как да клонираме съществуваща настройка на Zigbee2MQTT без да се налага последвало интервю на zigbee-устройствата.

LD2410 - бюджетен датчик присъствие в openHAB

11 февруари 2023

Цената на HLK-LD2410 зададе име на поредната тема в моя блог. С негова помощ се постига "народен" датчик присъствие в домашната автоматизация. . ...

Показват се публикациите с етикет Linux. Показване на всички публикации
Показват се публикациите с етикет Linux. Показване на всички публикации
A long period of time led to the accumulation of 106 packages and 60 critical updates. If it works properly - don't touch it! Adding another ESP-microcontroller, via SSH reminded me of accumulated updates and I decided to "drop the tires".

Who is Who on the UBUNTU SERVER?

sudo nano /etc/os-release : Ubuntu 16.04.7 LTS
whoami : openhab

SSH Connection

ssh openhab@192.168.1.149 -p 8822
ssh 192.168.1.149 -l openhab -p 8822


SSH Welcome window

BACKUP - COPY BACKUP

// Server terminal
cd /var/lib/openhab2/backups/

tree
// rm -rv openhab2-backup*

sudo openhab-cli backup
// Success! Backup made in /var/lib/openhab2/backups/openhab2-backup-21_02_08-08_38_51.zip

........................... COPY BACKUP ..................................

// Server terminal
cp /var/lib/openhab2/backups/openhab2-backup-* ~/backups/

// Desktop terminal
scp -r -P8822 openhab@192.168.1.149:/var/lib/openhab2/backups/openhab2-backup-* ~/Desktop/IoT/OpenHAb/Backup/'Backup Store'

UPDATE SERVER SOFTWARE

// Update
sudo aptitude update

// Stop openHAB 2
sudo /bin/systemctl stop openhab2.service

// Stop Mosquitto 2
// sudo /etc/init.d/mosquitto stop
sudo /bin/systemctl stop mosquitto

// Stop zigbee2mqtt
sudo /bin/systemctl stop zigbee2mqtt

// Upgrade Ubuntu Server
apt list --upgradable
sudo aptitude safe-upgrade

KERNELS and CLEANING UP

The update installs a new kernel. The old one got orphaned.

linux kernels

// Aviable
uname -r

// Count
sudo dpkg --list | egrep -i --color 'linux-image|linux-headers' | wc -l

// All installed kernels
sudo dpkg --list | egrep -i --color 'linux-image|linux-headers'

// All installed kernels
dpkg -l | grep linux-image | awk '{print$2}'

Cleaning with the familiar script ~/scripts/ubuntucleaner.sh
#!/bin/bash
OLDCONF=$(dpkg -l|grep "^rc"|awk '{print $2}')
CURKERNEL=$(uname -r|sed 's/-*[a-z]//g'|sed 's/-386//g')
LINUXPKG="linux-(image|headers|ubuntu-modules|restricted-modules)"
METALINUXPKG="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"
OLDKERNELS=$(dpkg -l|awk '{print $2}'|grep -E $LINUXPKG |grep -vE $METALINUXPKG|grep -v $CURKERNEL)
YELLOW="\033[1;33m"
RED="\033[0;31m"
ENDCOLOR="\033[0m"
if [ $USER != root ]; then
echo -e $RED"Error: must be root"
echo -e $YELLOW"Exiting..."$ENDCOLOR
exit 0
fi
echo -e $YELLOW"Cleaning apt cache..."$ENDCOLOR
aptitude clean
echo -e $YELLOW"Removing old config files..."$ENDCOLOR
sudo aptitude purge $OLDCONF
echo -e $YELLOW"Removing old kernels..."$ENDCOLOR
sudo aptitude purge $OLDKERNELS
echo -e $YELLOW"Script Finished!"$ENDCOLOR
// Execution
sudo sh ~/scripts/ubuntucleaner.sh

OPENHAB 2 START

// Start openHAB 2
sudo /bin/systemctl start openhab2.service
sudo /bin/systemctl start mosquitto
sudo /bin/systemctl start zigbee2mqtt
sudo reboot
exit

systemctl status openhab2.service
systemctl status mosquitto.service
systemctl status zigbee2mqtt.service





до нови срещи   ^.^
08 февруари 2021 profruit 

BACKUP

cd /var/lib/openhab2/backups/
sudo openhab-cli backup

пример на backup файл
openhab2-backup-20_05_04-20_51_25.zip
BACKUP

RESTORE

sudo /bin/systemctl stop openhab2.service
cd /var/lib/openhab2/backups/
sudo openhab-cli restore
openhab2-backup-20_05_04-20_51_25.zip

sudo /bin/systemctl start openhab2.service
//sudo openhab-cli start
"Please stand by while UIs are being installed. This can take several minutes."

sudo systemctl status openhab2.service

backup файл от Ubuntu Server 16.04 възстанови openHAB2.5.5 в Ubuntu Server 20.04 на 100%. BasicUI и PaperUI бяха огледални копия в двете системи. MySQL и MQTT Mosquitto са извън обсега на backup файла, което налага инсталацията им от начало в Ubuntu Server 20.04.

RESTORE

UPGRADE

Текуща версия 2.5.5. update предлага обновяване на 2.5.6
apt list --upgradable
Listing... Done
 openhab2/stable,stable 2.5.6-1 all [upgradable from: 2.5.5-1]
 openhab2-addons/stable,stable 2.5.6-1 all [upgradable from: 2.5.5-1]
sudo /bin/systemctl stop openhab2.service
sudo apt-get upgrade

The following packages will be upgraded:
  openhab2 openhab2-addons
  2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
 Need to get 279 MB of archives.
 After this operation, 577 kB of additional disk space will be used.
 ....
 [openHAB] openHAB was not running so will not start after upgrade.
 [openHAB] Please use the command:
      sudo /bin/systemctl start openhab2.service
sudo /bin/systemctl start openhab2.service
"Please stand by while UIs are being installed. This can take several minutes."

sudo reboot

UPGRADE

ROLLBACK

OH2.5.6 се оказа катастрофа. Не призна иконите в items-файлове. Отказа трансформации от JavaScript. Логично решение откат назад към OH2.5.5.

apt-cache showpkg openhab2 // варианти версии

sudo /bin/systemctl stop openhab2.service
sudo apt-get -y --allow-downgrades -y install openhab2=
2.5.5-1

sudo openhab-cli info

sudo openhab-cli clean-cache
echo "{}" > /var/lib/openhab2/jsondb/org.eclipse.smarthome.config.discovery.DiscoveryResult.json

sudo /bin/systemctl start openhab2.service
"Please stand by while UIs are being installed. This can take several minutes."

// изключване на хранилището #
cd /etc/apt/sources.list.d
sudo nano openhab2.list.save
sudo nano openhab2.list


sudo reboot

ROLLBACK

openHAB 2.5.5 възстановен.





до нови срещи   ^.^
22 юни 2020 profruit 

Цел на темата е Wi Fi съединение към интернет в Ubuntu Server 20.04 инсталиран
на лаптоп. Екзотично, специфично, но възможно.

Това е конспект на частен случай за инсталиране на Ubuntu Server 20.04 на
ноутбук Dell Studio 1555 в случай на преинсталиране кое как се прави.

Цели:
Приветствен екран при SSH съединение.

Ubuntu Server 20.04

Носител на операционна система е 120GB SSD на SanDisk. За основа се ползва
ubuntu-20.04-live-server-amd64.iso.

Инсталацията предлага псевдографичен интерфейс и отне около 3 минути. Дискът бе разделен на 1GB swap, а останалото форматирано под ext4 за /.

От допълнителните възможности избрах само опция SSH.

screenfetch

Инсталацията протече без съединение по LAN порт или Wi FI. До този момент имах
опит само с Ubuntu Server 16.04, но се оказва, че след версия 17.10 Canonical променя изцяло конфигурацията на мрежата. Въведен е нов инструмент за целта наречен Netplan и бившия конфигурационен файл на мрежата /etc/network/interfaces е изоставен.

Добрата новина е, че инсталатора вижда мрежовата карта и създава чрез нея YAML-файл за съединение. Съединих ноутбука по кабел към рутера и инсталирах следните команди:
sudo apt-get install aptitude hddtemp tree wireless-tools rfkill
Търсене на вградена Wi FI карта получих очакван резултат.
sudo lshw | grep 802
  product: BCM4312 802.11b/g LP-PHY
Системата виждаше картата на Broadcom, но не изписваше инсталиран двайвер.
sudo apt-get update
sudo apt-get install firmware-b43-installer

The following additional packages will be installed:
 b43-fwcutter
 b43-fwcutter firmware-b43-installer

After this operation, 131 kB of additional disk space will be used.
Резултат.
# iwconfig
ls -1 /sys/class/net


enp8s0 - логическото име на lan-картата,
wlan0 - логическото име на wifi-картата.

Последното логическо име е на USB WiFi мрежова карта TP-LINK TL-WN722N заела тестово участие.

Постигане на Wi Fi съединение към интернет

Конфигурацията се свежда до преход и редакция на генерирания файл. Името му не е константа. Файлово разширение yaml.
cd /etc/netplan
sudo nano 00-installer-config.yaml
Дописване на съответни редове с логическо име на wifi картата, име на мрежата
и парола за нея.

Резултат.
# This is the network config written by 'subiquity'
network:
  ethernets:
    enp8s0:
      dhcp4: true
  version: 2
  wifis:
     wlan0:
         optional: true
         access-points:
             "SSID_name":
                password: "PASSWORD"
         dhcp4: true
Съхраняваме и постигаме.
sudo netplan apply

Автоматично превключване от LAN на WiFi

При старт на машината - съединение,чрез LAN-картата е с приоритет за Ubuntu Server 20.04 . Ако такова не се постигне се прави опит за ново. Това води до забавяне на зареждането и отнема около 2 минути. Не е присъщо съединение през Wi Fi и ви се напомня в конзолата с следния изход:

A start job is running for wait for network to be configured.

Първи ход.
systemctl disable systemd-networkd-wait-online.service
Забранява чакането и превключва на следваща настройка в мрежовия конфигурационен файл.
systemctl mask systemd-networkd-wait-online.service
Командите изискват двойно въвеждане на вашата парола.

Authentication

Премахване на първи bug

Опитите ми да подкарам wifi-съединение в Ubuntu Server 20.04 доведоха до съобщение в екрана на SSH.

Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings

което се премахва с изпразване:
sudo truncate -s 0 /var/lib/ubuntu-release-upgrader/release-upgrade-available

Постигане на псевдо-screensaver

Ubuntu Server 16.04, при неактивност с клавиатурата, гаси екрана след зададено време. Чакане над половин час в Ubuntu Server 20.04 не води до същото действие. Зададох време 1 минута. Ако в течение на една минута няма натиснат клавиш на клавиатурата, екранът на ноутбука се изключва.
Редакция в grub.
## screensaver ##
sudo nano /etc/default/grub
Заместване на един израз ...
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity debian-installer/language=en keyboard-configuration/layoutcode?=us"
... с друг. consoleblank=60 - задава 60 секунди.
GRUB_CMDLINE_LINUX_DEFAULT="quiet consoleblank=60"

sudo update-grub
Съхраняване. Рестарт.

Работа с затворен капак

Затварянето на капака на екрана се следи от датчик на Хол. В зависимост от настройките следва действие. Липса на GUI, DE, Server-X води до изключване на машината в Ubuntu Server 20.04. Това може да се избегне чрез редакция на файл:
sudo nano /etc/systemd/logind.conf
замяна
#HandleLidSwitch=suspend
на
HandleLidSwitch=ignore
и установяване на новия ред
sudo systemctl restart systemd-logind
Измененията влизат в сила моментално. Сега може да затворите капака. Вашият сървър ще продължи нормално работа. Добрата новина е, че можете да рестартирате при затворен капак. Изключите ли машината капака трябва да се отвори докато зареди, а после отново може да се спусне.

Синхронизация на часовия пояс

Инсталацията на Ubuntu Server 20.04 извърших по подразбиране на английски (US). В края проверих часовия пояс ...
date
date "+%H:%M:%S   %d/%m/%y"
... и той не бе коректен спрямо моята часова зона.

Списък на достъпни пояси:
timedatectl list-timezones
Преглед надолу става с помощта на клавиш space, а нагоре - с B.

Пример:
sudo timedatectl set-timezone Europa/Sofia
Тест:
timedatectl
Следва едно от двете, за да влязат измененията в сила.
sudo reboot || service cron restart

Епилог

По договор интернет връзката ми е 100Mbps, но подобна скорост рядко развивам. Тестове чрез Speedtest и Speedtest-CLI постигат около 70Mbps по кабел. Нa 2м от рутера по Wifi, чрез TP-LINK TL-WN722N пада на 55Mbps. Вградената Broadcom-карта на Dell Studio 1555 достига 5Mbps. Печално.

Заредена батерия и изключен Dell Studio 1555 отчита консумация на адаптера му 0.3W.
Заредена батерия и стартирал Ubuntu Server 20.04 на Dell Studio 1555 при затворен капак отчита консумация на адаптера му 9.8W.
Заредена батерия и инсталиран openHAB 2 в Ubuntu Server 20.04 на Dell Studio 1555 при затворен капак отчита консумация на адаптера му 12W.

Това е генералната цел. Минимум загуби на електроенергия и тотална победа над Raspberry Pi4 при избора на hardware за център на моя умен.

ресурси:
linuxconfig.org
askubuntu.com
askubuntu.com
www.dell.com
www.8host.com





до нови срещи   ^.^
14 юни 2020 profruit 

| |

Jacek Ziółkowski e автор на програма Tasmotizer. Проектa е изложил на GitHub. Предлага се вариант на Windows, но поставена цел е Ubuntu.

Описанието на инсталацията е толкова сумбурно и замъглено, че нямам думи. Ни ред за версия на операционна система, ни изисквания, нищо. И се започна ходене по мъките. Стигна се до две преинсталации на Ubuntu 14.04 и Ubuntu 16.04, и проба-грешка на тестова машина с Ubuntu 18.04, а после на Ubuntu 20.04.

Инсталация на Tasmotizer в Ubuntu 20.04 Gnome

В един от коментарите прочетох, че Tasmotizer изисква Python => 3.8. Ubuntu 20.04 идва с Python v3.8.2. и това ме подтикна, да се изкача до тази версия. Но, това не е вярно. Както и да е нека завършим с 20.04 и се върнем отново на Installation and how to run.

Option 2 ви кара да инсталирате tasmotizer и после просто да го стартирате. Не, мълчание на агнетата! Добре, Option 3 ви кара да инсталирате пакет PyQt5 и питон драйвер за usb-uart. Без всякакво ръководство или насока - тъпчете и се радвайте. Проблемът лъсва, ако внимателно проследите рапортите на инсталацията, нещо което не направих и съсипах две инсталации, похарчих маса време и нерви.

Инсталирате от името на локалния потребител, а инсталацията мята глобално tasmotizer в: /usr/local/lib/python3.8/dist-packages,

а python-файловете крие в вашата домашна папка:
~/.local/lib/python3.8/site-packages.

В резултат яж куме пий, ама булката я няма.

Рецептата:
# инсталация на pip3
sudo apt install python3-pip

# инсталация на tasmotizer
sudo pip3 install tasmotizer

# инсталация на PyQt5 и pyserial
sudo pip3 install PyQt5 pyserial

# експорт на променлива
export QT_DEBUG_PLUGINS=1

# преинсталция на пакет libxcb-xinerama0
sudo apt-get install --reinstall libxcb-xinerama0

# преход
cd /usr/local/lib/python3.8/dist-packages

# старт на tasmotizer
python3 tasmotizer.py & exit

Резултат
:

Tasmotizer

Този прозорец е изборът на ESP. Спестява време и мозъчни клетки. Край на командите в терминала и прехода в Windows, където ме чакаше комбайн от програми за манипулиране на ESP.

Инсталация на Tasmotizer в Ubuntu 16.04.5 Unity

На борда Python 3.5.2. Разликата с 20.04 е, че tasmotizer не се инсталира, даже под sudo. Нещата се решават с изтегляне на tasmotizer в домашната папка.

Рецептата:
sudo apt install python3-pip

sudo pip3 install PyQt5 pyserial

export QT_DEBUG_PLUGINS=1
sudo apt-get install --reinstall libxcb-xinerama0

sudo apt install git
git clone https://github.com/tasmota/tasmotizer.git

cd ~/tasmotizer
python3 tasmotizer.py & exit

Резултат
:

Tasmotizer






до нови срещи   ^.^
11 юни 2020 profruit 


openHAB 2 идва с вграден binding NTP Binding. С негова помощ се визуализира текущи: час, ден и дата от календара. По подразбиране името на деня е на английски. Идеята е да се преведе на български.

Календар, ден и час в  openHAB 2

Инсталация на NTP Binding в Paper UI на openHAB 2.

Инсталация на NTP Binding

Настройка на NTP Thing.

Настройка на NTP Thing

Настройката задава зона, часови пояс, време на опресняване и конкретен адрес на NTP сървър (pool).

Превода се базира на карта и трансформация. Последната се постига, чрез инсталиране на Map Transformation.

Инсталация на Map Transformation

Създадената карта за превод на дните на български качете в $OPENHAB_CONF/transform.

weekday.map
Sunday=Неделя
Monday=Понеделник
Tuesday=Вторник
Wednesday=Сряда
Thursday=Четвъртък
Friday=Петък
Saturday=Събота

Самия превод е правило зададено в раздел $OPENHAB_CONF/rules, като се спазва синтаксиса на JAVA.

weekday.rules
/*
* BG превод именa на дните в openHAB
* 2020 (C) Profruit blog
*/
rule "translate_day_of_the_week_in_BG"
 when
  Item Day_ENG changed
 then
  Day_BG.postUpdate(transform("MAP","weekday.map",now.toString("EEEE")))
  //var vDay = transform("MAP","weekday.map",now.toString("EEEE"))
  //logInfo("Day","Day is: {}",vDay)
 end

Коментираната променлива vDay е активна само по време на настройка. Веднъж постигнато, я изключваме, за да не пълне логовете излишно.

Финал. Традиционните три файла.

weekday.sitemap
sitemap weekday label="Profruit_Home"
{
 Frame label=""
  {
   Text item=Time
   Text item=Day_BG
   Text item=Date
  }
}

weekday.items
// time
DateTime Time "Час [%1$tH:%1$tM]" <time> { channel="ntp:ntp:local:dateTime" }

// translation day in BG
DateTime Day_ENG  "[%1$tA]" {channel="ntp:ntp:local:dateTime"}
String   Day_BG   "Ден [%s]"  <day7>    

// date
DateTime Date "Календар [%1$td.%1$tm.%1$tY ]" <calendar> { channel="ntp:ntp:local:dateTime" }

weekday.things
// NTP Binding add as Thingh ( NTP Server )
ntp:ntp:local  [ hostname="nl.pool.ntp.org", refreshInterval=60, refreshNtp=30, locale="Europe/Sofia" timeZone="Europe/Sofia" ]

Поглед в weekday.things показва, че настройка на NTP Server може да се задава в този файл, освен в Paper UI.

Update 06.06.2020

Колкото и странно да звучи забравете превода с правило и карта. Нека остане като пример. Нещата са по-прости и само липсата на документация стимулира горния начин. Пример на руснак споделил своите конфигурационни файлове ме озадачи. Никакви трансформации и функции, а деня изписан на руски. Отново прерових форума на openHAB и попаднах на куриози на норвежец, настояващ дните му, да се изписват на английски, а не на родния му език. И така по следата и поредна порция загубено време ето как.

Задаваме език, страна и часова зона в PaperUI на български.

local в PaperUI

Рестарт на сървъра. Резултатът е с изход 50/50. Честито, ако деня в вашия openHAB се изпише на български. В моя случай не излезе.

Търсим файл /etc/default/openhab2 . Той е с права 644. Спускаме по средата на файла и търсим израз EXTRA_JAVA_OPTS="".

Между кавичките добавяме израз -Duser.country=BG -Duser.language=bg.

EXTRA_JAVA_OPTS

Проба-грешка от моя страна и заработи. Съхраняваме измененията и рестарт на сървъра. Кеш на браузъра също.

мобилна версия

Така изглежда в мобилната адаптация на openHAB.

Час, ден на български, ден-месец-година. Денят сложих в средата, че от толкова цифри мозъкът се взривява. Можете да ги подредите по ваш вкус и дори съкратите.

Краен резултат на традиционните три файла.

weekday.sitemap
Text item=dateTimeNTP

weekday.items
DateTime dateTimeNTP "Време [%1$tR %1$tA %1$td.%1$tm.%1$tYг]" <time> { channel="ntp:ntp:pool:dateTime" }

weekday.things
ntp:ntp:pool  [ hostname="nl.pool.ntp.org", refreshInterval=60, refreshNtp=30 ]

weekday.rules и weekday.map в кошчето.





до нови срещи   ^.^
16.05.2020 profruit 

Software:
  • Ubuntu Server 16.04.6 LTS
  • openHAB 2.5.4 Release Build
HardWare:
  • MSI P6NG Neo-Digital
  • Pentium(R) Dual-Core E5200 @ 2.50GHz
  • 2 x 512MiB DDR2 Kingston
  • WDC WD800BEVS-60LAT0 80GB
Визуализиране на системната информация в openHAB 2.

System Info в openHAB 2

В същия момент. Показания в терминала, чрез SSH достъп.

Показания в терминала

Показания в терминала

Разликите идват от промеждутъка на снимане и опресняване на стойностите. В крайна сметка извеждане на същите значения в обособена страница на openHAB 2 спестяват време и телодвижения.

Движение напред. Инсталиране на System Info Binding.

Инсталиране на System Info Binding

Следваме официалната документация, за придобиване на представа:
  1. Systeminfo Binding
  2. Systeminfo Binding
На практика документацията е доста сумбурна и неактуална. В резултат не засече датчика на обороти на вентилатора и датчика за температура на твърдия диск. Изведе свободното дисково пространство на твърдия диск в MB. Това важи и за RAM паметта.

Към текуща дата openHAB 2 не умее да превежда MB в GB. Трансформацията може да се постигне, чрез правило написано на език JAVA или чрез функция написана на език JavaScript. Избор е втория вариант.

Движение напред. Инсталиране на Javascript Transformation.

Инсталиране на Javascript Transformation

MBtoGB.js
// javascript transform (MBtoGB.js) -> transform
(function(i){
return (i / 1024).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' GB';
})(input)

Функцията се добавя в $OPENHAB_CONF/transform.

Следваща стъпка е засичане датчика на вентилатора.
Утилита sensors на помощ:
sudo apt install lm-sensors
sensors


which sensors
-> /usr/bin/sensors

Отново логовете подсказват за липсваща инсталация.

Движение напред. Инсталиране на Exec Binding.

Инсталиране на Exec Binding

Exec Binding е интерфейс за взаимодействие между BASH и openHAB 2. Накратко, openHAB 2 изпълнява linux-команди. А тя е:
/usr/bin/sensors | grep fan1 | awk '{print $2}'

Отново липсваща инсталация. grep fan1 е регулярен израз, който ще бъде отсичан в втори "джоб".

Движение напред. Инсталиране на RegEx Transformation.

Инсталиране на RegEx Transformation

и добавяме linux-командата в файл: $OPENHAB_CONF/misc/exec.whitelist

Последна стъпка е засичане датчика за температура на твърдия диск.
Утилита hddtemp на помощ:
sudo apt-get install hddtemp
sudo hddtemp /dev/sda
which hddtemp
-> /usr/sbin/hddtemp

Но, ново 20. Показание на температурата на твърдия диск изисква sudo привилегии!

Поредицата от команди долу премахват това препятствие:
sudo visudo -f /etc/sudoers.d/hddtemp
openhab proserver = (root) NOPASSWD: /usr/sbin/hddtemp

sudo adduser openhab sudo
su openhab
cat /etc/passwd | grep openhab
-> openhab:x:1000:1000:openhab,,,:/home/openhab:/bin/bash

Добавяме командата в "белия лист" до предходната на нов ред.
sudo /usr/sbin/hddtemp /dev/sda | awk '{print $4}'



Финал. Традиционните три файла:

system.sitemap
sitemap system label="openHAB" {
 Frame label="System Info" {
  Group item=gSystem label="System Info" icon="infosys" {
   Frame label="RAM" {
    Text item=memTotal
    Text  item=memUsed       
    Text  item=memAvailablePercent
   }

   Frame label="CPU" {
    Text  item=Sensor_CPUTemp
   }

   Frame label="Вентилатор" {
    Text item=Sensor_FanSpeed
   }

   Frame label="HDD" {
    Text  item=HDD_Free
    Text  item=HDD_Temp
   }

   Frame label="WiFi" {
    Text  item=Network_IP
    Text  item=Network_Mac
   }
  }
 }
}

system.things
Thing systeminfo:computer:server  "openhab Server" @ "Servers" [interval_high=60, interval_medium=60]

// speedFAN -> /etc/openhab2/misc/exec.whitelist
Thing exec:command:apc "openhab Server" @ "Servers" [command="/usr/bin/sensors | grep fan1 | awk '{print $2}'", interval=15, timeout=5, autorun=false]

// HDD_Temp -> /etc/openhab2/misc/exec.whitelist
Thing exec:command:openhab "openhab Server" @ "Servers" [command="sudo /usr/sbin/hddtemp  /dev/sda | awk '{print $4}'", interval=15, timeout=5, autorun=false]

system.items
// System Information
Group gSystem

/* Memory information*/
Number memTotal            "Инсталирана [%d MB]" <ram> (gSystem) { channel="systeminfo:computer:server:memory#total" }
Number memUsed             "Заета [%d MB]"       <ram> (gSystem) { channel="systeminfo:computer:server:memory#used" }
Number memAvailablePercent "Свободна [%.1f %%]"  <ram> (gSystem) { channel="systeminfo:computer:server:memory#availablePercent" }

//Number HDD_Free      "Свободно място [%.1f MB]"   <hdd> (gSystem) { channel="systeminfo:computer:server:storage#available" }
Number HDD_Free      "Свободно място [JS(MBtoGB.js):%s]"  <hdd> (gSystem) { channel="systeminfo:computer:server:storage#available" }
String HDD_Temp      "Температура [%s]"                <hdd> (gSystem) { channel="exec:command:openhab:output" }

/* Sensors information*/
Number Sensor_CPUTemp       "Температура [%.1f °C]" <cpu>  (gSystem) { channel="systeminfo:computer:server:sensors#cpuTemp" }
//Number Sensor_FanSpeed      "Обороти [%d RPM]"    <fan>   (gSystem) { channel="systeminfo:computer:server:sensors#fanSpeed" }
String Sensor_FanSpeed      "Обороти [%s RPM]"      <fan>   (gSystem) { channel="exec:command:apc:output" }

/* Network information*/
String Network_IP     "IP адрес  [%s]"  <network>  (gSystem)  { channel="systeminfo:computer:server:network#ip" }
String Network_Mac    "MAC адрес [%s]"  <network>  (gSystem)  { channel="systeminfo:computer:server:network#mac" }






до нови срещи   ^.^
10.05.2020 profruit 


/////////////// ИНСТАЛАЦИЯ ///////////////

Разрешаване на зависимостите.
sudo apt install gnupg2
sudo apt install software-properties-common
sudo apt install apt-transport-https

Добавяне на Zulu-ключ и Zulu-хранилище.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0x219BD9C9
sudo apt-add-repository 'deb http://repos.azulsystems.com/ubuntu stable main'

Добавяне на openHAB-ключ и openHAB-хранилище.
wget -qO - 'https://bintray.com/user/downloadSubjectPublicKey?username=openhab' | sudo apt-key add -
echo 'deb https://dl.bintray.com/openhab/apt-repo2 stable main' | sudo tee /etc/apt/sources.list.d/openhab2.list
sudo apt update
sudo apt upgrade

Инсталация на Java Zulu.
sudo apt install zulu-8
// Need to get 108 MB of archives.

Инсталация на openHAB2 stable.
sudo apt install openhab2
// Need to get 83.3 MB of archives.

Инсталация на openHAB допълнения.
sudo apt-get install openhab2-addons
// Need to get 194 MB of archives.

Старт на сервиза и автозапуск.
sudo systemctl start openhab2.service
sudo systemctl status openhab2.service
sudo systemctl daemon-reload
sudo systemctl enable openhab2.service

Инсталация на openHAB2

terminal

Добавяне на нови псевдоними
nano ~/.bashrc

/*.................... A L I A S ....................*/
alias openhab='cd /etc/openhab2'
alias sitemaps='cd $OPENHAB_CONF/sitemaps'
alias items='cd $OPENHAB_CONF/items'
alias things='cd $OPENHAB_CONF/things'
alias icons='cd $OPENHAB_CONF/icons/classic'
alias rules='cd $OPENHAB_CONF/rules'
alias scripts='cd $OPENHAB_CONF/scripts'
alias persistence='cd $OPENHAB_CONF/persistence'
alias icons='cd $OPENHAB_CONF/icons/classic'
alias transform='cd $OPENHAB_CONF/transform'
alias services='cd $OPENHAB_CONF/services'
alias whitelist='nano $OPENHAB_CONF/misc/exec.whitelist'
alias backup='sudo openhab-cli backup'
/*.................... OTHERS ....................*/
alias grub='sudo nano /boot/grub/grub.cfg'
alias update='sudo apt update'
alias upgrade='sudo apt upgrade'
alias poweroff='sudo poweroff'
alias reboot='sudo reboot'
alias speedtest='/home/openhab/ookla/speedtest'
alias ip='sh /home/openhab/scripts/ip.sh'
alias hddtemp='sudo hddtemp /dev/sda'

source ~/.bashrc

Достъп до логове
tail -f /var/log/openhab2/openhab.log -f /var/log/openhab2/events.log

///////////////// КЕШ /////////////////

При неадекватно поведение на openHAB2 - изпразване на кеша и на JSON-обекта.
sudo /bin/systemctl stop openhab2.service
sudo openhab-cli clean-cache
echo "{}" > /var/lib/openhab2/jsondb/org.eclipse.smarthome.config.discovery.DiscoveryResult.json

/////////////// ИЗТРИВАНЕ ///////////////

Ако install --reinstall не помага - тотално нулиране и отначало.
sudo apt-get remove --auto-remove openhab2
sudo apt-get purge openhab2

sudo apt-get remove --auto-remove openhab2-addons
sudo apt-get purge openhab2-addons

sudo apt-get remove --auto-remove zulu-8
sudo apt-get purge zulu-8






до нови срещи   ^.^
03.05.2020 profruit 


Инсталация на Razer MAMBA TOURNAMENT EDITION в Ubuntu десктоп.

sudo add-apt-repository ppa:openrazer/stable
sudo add-apt-repository ppa:polychromatic/stable
sudo apt update
sudo apt install openrazer-meta
sudo gpasswd -a $USER plugdev
sudo apt install polychromatic
sudo reboot

След рестарта търсим приложението.

Razer

Аплетът отива в трея с падащо меню, а контролера повтаря менюто в отделен прозорец.

Razer интерфейс






до нови срещи   ^.^
25.04.2020 profruit 

| |
Редактор nano в Ubuntu Server 16.04 подчертава синтаксиса при редакция на файлове за съответните езици. Веднага след инсталацията на сървъра са налични следните:

syntax highlighting in nano

Съответно, за да се избегне монотонния цвят, обществото на openHAB предлага решение:

openHAB -> Editors -> Nano
https://www.openhab.org/docs/configuration/editors.html#nano


следваме openhabnano
https://github.com/airix1/openhabnano


Изтегляме архива с README.md и openhab.nanorc. Четем ръководството, действаме според инструкциите.

Качваме файл openhab.nanorc на Ubuntu Server 16.04.

# файл-трансфер от десктоп на сървър
scp -P8822 ~/Desktop/openhab.nanorc openhab@192.168.1.149:/home/openhab/


# инсталиране на openhab.nanorc
sudo mv /home/openhab/openhab.nanorc /usr/share/nano/


Нюанс:



# замяна собственост и достъп
cd /usr/share/nano
sudo chown root:root openhab.nanorc

sudo chmod 644 openhab.nanorc


# тест
cd /etc/openhab2/sitemaps
nano demo.sitemaps


Резултат.
Изглед Ubuntu Desktop 16.04 - Unity

Ubuntu Desktop 16.04 - Unity

Изглед putty Windows 10

putty Windows 10






до нови срещи   ^.^
28.03.2020 profruit 

| |

Появилите се през 2014г модули на база чип ESP8266 привлякоха особено внимание, преди всичко с цената. Прозводител към този момент бе неизвестна шанхайска компания "Espressif Systems". Засиления интерес на пазара, накара редица фирми да пуснат аналогични устройства. Ярък пример е ITEAD Studio и нейното WiFi реле нацелено към IoT (интернет на нещата) - Sonoff Basic R2.
Sonoff Basic R2 държи своята популярност изключително на цената си. За 4.7 американски долара (3.99 на промоция) получавате завършен продукт. Кутия, захранване, WiFi модул, процесор с рам памет и силово реле. Остава да инсталирате апликацията eWeLink и от прозволна точка на света през интернет, да управлявате Sonoff Basic R2.

Това е героя на обзора, но защо е показан два пъти?

Sonoff Basic R2

Днес Sonoff Basic R2 тихо затихва изместван от наследника R3. За времето на своето съществуване R2 претърпя няколко модификации за които реших да споделя и спестя бъдещи ваши терзания. Измененията лежат под капака и е въпрос на лотария, какво ще ви изпрати китайския продавач.

Вляво изпълнение под процесор ESP8266EX, а вдясно под ESP8285. Схемотехниката на двата брата силно се отличава, макар по замисъл на ITEAD Studio вършат една и съща работа.

Sonoff basic_8266_8285

Внимателен оглед на двете платки относно импулсното захранване определя модела с ESP8285 за победител. Добавен е филтров мрежов X-кондензатор и Y-кондензатор между страните на трансформатора. Физически предпазител на входа на импулсното захранване. ШИМ контролерът е различен.

Не разбирам, защо в версията c ESP8266 вместо обикновен предпазител са сложили резистор 10R:1W:D4L12V. При скок на напрежението варисторът изменя своето поведение. Той дава на късо входа. Силата на тока рязко тръгва нагоре и предпазителят сработва. Импулсното захранване се обезточва и прекратява работа вследствие на анормално входно напрежение. Тази идея е върната при модела с ESP8285.

Sonoff basic ESP8266

Sonoff Basic R2 под процесор ESP8266EX претърпя две ревизии. В началото се използваше флаш памет W25Q80BV дело на Windbond. Тази памет с лекота се префлашва с разработки от трети лица. На свой ред ITEAD Studio направи завой и замени любимата Windbond на капризната P25Q80H продукт на Puya Semiconductor.

Пинове. Кой каква роля играе. Гребенче няма и при нужда вие го запоявяте.

Sonoff basic_ESP8266_pinout

Добрата новина е че можете да разкарате паметта на Puya и да върнете W25Q80BV или може да минете от 1MB на 4MB. Изборът е ваш.

Лошата новина идва с поредната новост в лицето на ESP8285. Китайците решават да сложат процесора и флаш паметта в един чип и сбогом Гринго на мечтите. Флаш памета е закотвена на 1MB и никакви ugrade-и.

Малката лоша новина е че са затрили пин GPIO14 нужен за закачане на датчици: влажност, осветеност, температура и т.н. Възможен хак е чрез импровизация, да се запои директно на крачето на чипа, а без микроскоп влизате в приключение.

Пинове. Кой каква роля играе.

Sonoff basic_ESP8285_pinout

Нисковолтовата част на импулсния токоизправител се състои от две вериги.

Първата е стабилизирана, чрез ценеров диод на +5V, нужна за управление на релето, което комутира силовата верига от ~230V / 10A. Съответно захранва веригата на +3.3V.

Процесорът и прилежащата му периферия работи под напрежение 3.3V. Долен праг 2.7V и максимум 3.6V. При нива над това напрежение дефектира безвъзвратно. Що се касае ток - пикът достига до 340mA, поради което реших да направя специално за целта стабилизиран токоизправител на база AMS1117, гарантиращ 850mA сила на тока.

Мерки за безопасност
Изключваме Sonoff Basic R2 от градската мрежа при манипулации като: четене, записване, обновяване на съдържанието на флаша му. При традиционен вариант на токоизправител, чрез трансформатор, е гарантиран разрива на галваническата връзка с градската мрежа .

Външният токоизточник трябва да е стабилен, а това не е валидно за китайските USB-UART адаптери. Отделно, защо да тормозим USB-порта на компютъра с неговия лимит от 500mA за версия 2. За фаворит избрах PL2003, не че CG340G по нещо отстъпва.

На практика повтарям самото захранване реализирано в Sonoff Basic R2. Там стои AMS1117, обезпечаващ работно напрежение от +3.3V.

AMS1117 или нейните аналози използвани в компютърната схемотехника ви гарантират 1% толеранс, а това е повече от идеално, затова не бързайте да утилизирате старите дънни платки, видеокарти, твърди дискове.

Положителният стабилизатор на напрежение набавих от донор. В моя случай платка от твърд диск Samsung 80GB.

платка от твърд диск Samsung 80GB

Схема на стабилизирания токоизправител
Трансформаторът дойде от изоставен адаптер на притежаван diskman Sony. Традиционен токоизправител на 6V. Плюс няколко кондензатора, светодиод за индикация, ключ, поялник и вложено лично време.

Схема на стабилизирания токоизправител

Съединението между адаптера и интерфейса на Sonoff Basic R2 се осъществява на кръст.
  1. общ <---> общ
  2. RX <---> TX
  3. TX <---> RX
Бъдете внимателни с +3.3V от външния токоизправител. При обърнати полюси модулът дефектира.

Момент на съединение между поредния Sonoff Basic R2 и работния ми компютър.

USB-UART

И след като хардуера е наличен и свързан следва внимание върху софтуера. Нещата протичат под OS-ма Ubuntu 16.04 и утилита esptool.py.

Инсталация:
sudo apt install python-pip
pip install esptool
pip install --upgrade pip
Проблемът е, че ITEAD Studio прави firmware-a уникален за всеки свой модул. Да речем, че решите да флашнете Sonoff с друга разработка, а след време отново да се върнете към eWeLink. Ако не е оргиналния backup, то не очаквайте добре дошли отново.

Команда:
sudo esptool.py chip_id
информира за много неща, но най-вече за ID и MAC адреса. Предполагам, те са уникалния ключ на всеки модул.

Процедура
Нещо като ритуал е изпълнението на всяка команда. Изключвате захранването. Натискате и задържате бутон GPIO. Включвате захранването. Отпускате бутон GPIO. Светодиодът не свети е знак, че модула е преведен в режим работа с флаш паметта. Стартитате командата. Следва изпълнение и край на сеанса. За поредна команда всичко отначало.

Проба с ESP8266 и CG340G.

CG340G-8266_chip_id

Проба с ESP8266 и PL2003.

PL2003-8266_chip_id

Информацията се повтаря. Разлика е само в номера на виртуалния сериен порт. /dev/ttuUSB4 e превключен на /dev/ttuUSB2.

Как стоят нещата около ESP8285.
Проба с ESP8285 и CG340G.

CG340G-8285_chip_id

Проба с ESP8285 и PL2003.

PL2003-8285_chip_id

Команда:
sudo esptool.py flash_id
информира за размера на флаш паметта. Картината се повтаря и при двата модула - скромно 1MB.

flash_id

Команда за Firmware Backup:
sudo esptool.py read_flash 0x00000 0x100000 ./sonoff/8266_image.bin
8266 firmware backup
sudo esptool.py read_flash 0x00000 0x100000 ./sonoff/8285_image.bin
8285 firmware backup

Имената и пътищата са индивидуални, което обяснява отличията между приведените команди и съдържанието на снимките.

Firmware Backup

Важно е да се зададе границата на сегмента откъде до къде да чете (0x00000 0x100000), а това зависи единствено от размера на флаш паметта.

сегмени на backup

Linux нюанси
От приведените снимки горе прави впечатление, че работата с esptool.py изисква администраторски привилегии. Инсталацията на esptool.py създава в системата нова група dialout без членове. Това може да се упрости при желание.

Проверка за наличие на група dialout в системата.

Команда:
compgen -g | grep dialout
getent group | cut -d: -f1 | grep dialout
В коя група е добавен потребителя - $USER.

Команда:
id $USER
Добавяне на потребителя в група dialout и проверка.

Команда:
sudo adduser profruit dialout
getent group dialout
Потребител profruit e добавен в група dialout и не се нуждае повече от root-права по време на своя сеанс. Командата стана по-лаконична и по-лесно възпринимаема.

без root-права

Допълнения

Според рутера на моя мрежа IP-адресите и MAC-адресите на клиенти Sonoff Basic R2 се четат така. Името след дефиса се формира от последните три разряда на MAC-адреса към константа ESP.

клиенти Sonoff Basic R2

Снифер към модула, чрез nmap.

nmap

Проби за връзка извън рамките на eWeLink

Обръщение, чрез браузър към устройството - нищо.
Обръщение, чрез ftp към устройството - нищо.
Обръщение, чрез telnet към устройството - нищо.
Обръщение, чрез SSH към устройството - нищо.
Обръщение, чрез Arduino към устройството - нищо.

Става ясно, че оригиналния firmware е повече от спартански. Без HTTP, без АТ-интерпретатор, без LUA-интерпретатор, без MQTT-сървър и т.н. От проведените проби утилита nc отвърна с "ръкостискане".

blackice icecap е огнена стена създадена от www.iss.net, а порт 8081 се ползва от ice-cap.

Финални думи

При старт Sonoff Basic R2 консумира около 1.3W от градската мрежа.
При включено реле Sonoff Basic R2 консумира около 1W от градската мрежа.
При изключено реле Sonoff Basic R2 консумира около 0.4W от градската мрежа.

Регистрацията на eWeLink извършвайте единствено през акаунт на Yahoo. Чрез номера на телефона е мазохизъм.

10А комутация е китайски мит. Съпротивлението на силовите писти умножено на тока на квадрат (10А) указва, че самите писти ще разсейват до 10W мощност. Не залагайте повече от 500W на консуматор. При налични +5V добавяте твърдотелно реле и успешно командвате киловати консумация.





до нови срещи   ^.^
01.09.2019 profruit 

Този блог е реинкарнация на първите ми опити за споделяне в нета. На времето започнах с къси разкази на преживяното. После се обезсмисли и превърнах блога си в системно радио. Пиша единствено неща, които карат душата ми да живее: openHAB, Ubuntu, Споделено и т.н. Това е моето системно радио, разбирате ли? Моята вълна и вие сте на нея сега.

Архив на блога