Projekt IoT

From JoBaPedia
Revision as of 15:25, 18 August 2018 by Joachim (talk | contribs) (→‎RF-Link)
Jump to navigation Jump to search

IoT - Internet of Things

some project ideas and notes regarding Arduino, ESP8266, ESP32 and other micro controllers

  • Arduino Nano with 433 MHz data transfer
  • ESP-01 for shutter control
  • ESP-12 for LED switch
  • ESP-12 for laundry room air control
  • SonOff with own firmware and tasmota devices
 https://github.com/arendst/Sonoff-Tasmota/wiki

Arduino IDE Inofficial Boards

look here for an overview:

ATTiny

Most ATTinys: https://github.com/SpenceKonde/ATTinyCore

Wiring

https://startingelectronics.org/tutorials/AVR-8-microcontrollers/ATtiny2313-tutorial/P8-TC0-polled-timer/ATTINY2313-TC0-polled.png

  • Vcc can also be 3.3V
  • C1 can have bigger capacity for unstable voltage
  • R1 can be higher values

Programmer

I have an USBasp. Program with avrdude. Works integrated in Arduino IDE. Ignore warning "avrdude: warning: cannot set sck period. please check for usbasp firmware update.".

Numbering of Connector is

1 3 5 7 9
2 4 6 8 10

Need to connect Vcc, Gnd, Miso(1), Mosi, Reset and Sck

New chip needed 0.5MHz for correct timing with delay()

Needed to add this udev rule

echo 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", GROUP="dialout", MODE="0660"' | sudo sh -c 'cat >/etc/udev/rules.d/50-USBasp.rules'

ESP8266

https://github.com/esp8266/Arduino

Domoticz

This is a home automation system that is natively supported by tasmota devices via mqtt

Installation

Old Repo
sudo /usr/sbin/useradd -U -g domoticz -m -r domoticz
  • Edit section Service in /usr/lib/systemd/system/domoticz.service (ports, logging, db)
[Service]
ExecStart=/opt/domoticz/domoticz -notimestamps -syslog -www 8888 -sslwww 4343 -dbase domoticz.db
WorkingDirectory=/home/domoticz
User=domoticz
Group=domoticz
Restart=always
  • Activate new service file, start domoticz and check status
sudo systemctl daemon-reload
sudo systemctl enable domoticz
sudo systemctl start domoticz
sudo systemctl status domoticz
Self Compiled

domoticz.service

[Unit]
Description=Domoticz 4 (JoBa Edition)
Wants=nss-lookup.target
After=network.target

[Service]
PIDFile=/run/domoticz/domoticz.pid
#ExecStart=/opt/domoticz/domoticz -daemon -syslog -log /var/log/domoticz.log -www 8080 -sslwww 8443
ExecStart=/opt/domoticz/domoticz -daemon -syslog -log /var/log/domoticz.log -pidfile /run/domoticz/domoticz.pid -www 8888 -sslwww 8443
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -KILL $MAINPID
User=domoticz
Group=domoticz

[Install]
WantedBy=multi-user.target

In domoticz.spec adapt APPVERSION, APPHASH and Version prefix

#
# spec file for package domoticz
#
# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
# Copyright (c) 2014-2016 Guillaume GARDET <guillaume@opensuse.org>
# Copyright (c) 2018 Joachim Banzhaf <joachim.banzhaf@gmail.com>
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#

#
# Hash can be found on Github, select tag, look for "Last commit xxxx" under the Clone/Download button
#

%define APPVERSION 9700
%define APPHASH 2772d9f

Name: domoticz
Summary: Domoticz is a very light weight Home Automation System
Version: 4.%{APPVERSION}
Release: 0
License: GPL-3.0+
Group: Productivity/Other
Url: http://www.domoticz.com/
Source0: %{name}-%{version}.tar.gz
Source1: domoticz.service
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: cmake
BuildRequires: gcc-c++
BuildRequires: pkgconfig
BuildRequires: fdupes
BuildRequires: openssl-devel
BuildRequires: python3-devel
BuildRequires: boost-devel >= 1.55
BuildRequires: curl-devel
BuildRequires: libusb-devel
BuildRequires: openzwave
BuildRequires: libopenzwave-devel
BuildRequires: libudev-devel
BuildRequires: git
BuildRequires: sqlite
BuildRequires: sqlite-devel
BuildRequires: python3-devel
Requires: sqlite
Requires: python3-devel
BuildRequires: systemd-rpm-macros
%{?systemd_requires}

%description
Domoticz is a very light weight Home Automation System that lets you monitor and
configure various devices like: Lights, Switches, various sensors/meters like
Temperature, Rain, Wind, UV, Electra, Gas, Water and much more.
Notifications/Alerts can be sent to any mobile device. Supported platforms:
Package for openSUSE 42.2 by Joachim.Banzhaf@gmail.com

Unix/Linux, (openSUSE, Raspberry Pi/Cubieboard recommended) Windows 


%prep
%setup -q

%build
cat > appversion.default << EOL
#define APPVERSION %{APPVERSION}
#define APPHASH "%{APPHASH}"
#define APPDATE `date +%s`
EOL
#
mkdir build/
pushd build/
cmake .. \
    -DCMAKE_BUILD_TYPE=Release \
    -DUSE_STATIC_BOOST=OFF \
    -DUSE_STATIC_OPENZWAVE=OFF
make
popd

%install
pushd build/
%make_install
popd
install -m 0644 -D %{SOURCE1} %{buildroot}/%{_unitdir}/%{name}.service
#
# Cleanup
#
rm -f %{buildroot}/opt/domoticz/scripts/dzVents/runtime/tests/scandir/.f3.lua.swp
#
%fdupes -s %{buildroot}/opt
#
# Setup system
#
mkdir -p %{buildroot}/run/domoticz
mkdir -p %{buildroot}/var/log
touch %{buildroot}/var/log/domoticz.log

# install /usr/lib/tmpfiles.d/domoticz.conf
mkdir -p %{buildroot}%{_tmpfilesdir}
cat > %{buildroot}%{_tmpfilesdir}/domoticz.conf <<EOF
# domoticz needs existing /run/domoticz/ to create domoticz.pid there
# See tmpfiles.d(5) for details

d /run/domoticz 0755 domoticz domoticz -
EOF

%pre
getent group domoticz >/dev/null || groupadd -r domoticz
getent passwd domoticz >/dev/null || \
useradd -r -g domoticz -d %{_sharedstatedir}/domoticz -s /sbin/nologin \
        -c "domoticz daemon account" domoticz
%if 0%{?_unitdir:1}
    %service_add_pre domoticz.service
%endif

%post
%if 0%{?_unitdir:1}
    %service_add_post domoticz.service
%endif

%preun
%if 0%{?_unitdir:1}
        %service_del_preun domoticz.service
%endif

%postun
%if 0%{?_unitdir:1}
    %service_del_postun domoticz.service
%endif

%files
%defattr(-,root,root)
%dir %attr(0755,domoticz,domoticz) /opt/domoticz/
%dir %attr(0755,domoticz,domoticz) /run/domoticz/
%attr(-,domoticz,domoticz) /opt/domoticz/*
%{_tmpfilesdir}/domoticz.conf
%{_unitdir}/%{name}.service
%attr(0644,domoticz,domoticz) /var/log/domoticz.log

%changelog

Add to /usr/share/cmake/Modules/FindOpenSSL.cmake after failing find_library() calls

set(OPENSSL_SSL_LIBRARY "/usr/lib64/libssl.so")
set(OPENSSL_CRYPTO_LIBRARY "/usr/lib64/libcrypto.so")

Commands to download, build, update and install

v=4.9700
zypper in libopenzwave-devel libopenssl-devel libcrypto41
mkdir -p /home/joachim/rpmbuild/SPECS /home/joachim/rpmbuild/SOURCES
wget -O domoticz.zip https://github.com/domoticz/domoticz/archive/${v}.zip
unzip domoticz.zip
tar czf /home/joachim/rpmbuild/SOURCES/domoticz-$v.tar.gz domoticz-${v}/
rpmbuild -ba /home/joachim/rpmbuild/SPECS/domoticz.spec
sudo rpm -Uhv /home/joachim/rpmbuild/RPMS/x86_64/domoticz-${v}-0.x86_64.rpm
sudo systemctl start domoticz.service

Backup

Backups of domoticz database in /opt/domoticz/backups, or copy /opt/domoticz/domoticz.db yourself.

Configuration

https://github.com/arendst/Sonoff-Tasmota/wiki/Domoticz

  • On setup/hardware page create mqtt connection (host job4, port 1883, option flat/out) and one Dummy device for virtual switches
  • For each tasmota device function (switch, temp/hum, ...) click on "virtual sensor" (on hardware page at dummy device entry)
  • On setup/devices page look at idx values for the virtual sensor devices and configure tasmota device with them.

Cura Build

Prerequisites

git clone https://github.com/Ultimaker/Cura.git
git clone https://github.com/Ultimaker/cura-build

Follow instructions for CentOS in cura-build/README.md and try to adapt for opensuse 42.2

sudo zypper in gcc-fortran python3 python3-pyserial python3-numpy python3-opengl python3-setuptools libstdc++-devel openssl openblas-devel gtk3-devel webkit2gtk3-devel gstreamer-devel python-wxWidgets-3_0 python-wxWidgets-3_0-devel
# pip3 install F2PY

F2PY not found -> build may fail

Installation

cmake fails because it needs python 3.5 while opensuse 42.2 only has 3.4 - end of story for now :(

Use app container for now (but how to use core functions directly?)

Feinstaubsensor

https://luftdaten.info/feinstaubsensor-bauen/

  • NodeMCU
  • SDS011
  • optional: BME280 (probably needs code change since they use DHT22)
  • USB powersupply
  • USB cable
  • 2 x Marley HT DN75, 87°
  • Gaze als Insektenschutz
  • 3 x Kabelbinder lang (für Gaze an Marley, Fixierung an Pfosten o.ä.) und kurz (Kabel/NodeMCU/SDS011/BME280) fixieren
  • ~20cm Plastikröhrchen Innendurchmesser 6mm (dunkel)

Cost ~25€

RFID Demo

https://github.com/miguelbalboa/rfid/blob/master/examples/AccessControl/AccessControl.ino

What is needed for an access control demo (might send mqtt status):

  • ESP8266 as central unit
  • RFID reader/writer
  • 1 RFID Card (Master)
  • n RFID Tags (ID "Cards")
  • USB Cable MicroUSB
  • LED for access granted or added: green
  • LED for access denied or removed or error: red (red+green: master mode)
  • Dupont cabling for reader (~10 f-f)
  • Breadboard

Cost ~5€

RF-Link

RF-Link is a gateway transceiver for many 433MHz (and other frequencies) controlled devices, like weather stations and remote controlled plugs.

You need an Atmega 2560, an RF receiver and sender of the desired frequency (e.g. an RXB6 and an FS-1000a) and wire it as described here: http://www.rflink.nl/blog2/wiring (should be below 15€).

  • Download RF-Link Firmware from here: http://www.rflink.nl/blog2/download
  • Unzip it to an empty folder and cd to the directory containing RFLink.cpp.hex
  • Upload with Arduino IDE supplied avrdude (or find it elsewhere...). Adjust serial port as needed
~/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino9/bin/avrdude -C/home/joachim/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino9/etc/avrdude.conf -patmega2560 -cstk500v2 -P/dev/ttyUSB1 -b115200 -D -Uflash:w:RFLink.cpp.hex:i

Now connect the Atmega usb serial with a pc, start a terminal program with that port at 57600 baud and read what is in the air. Some commands to try are here: http://www.rflink.nl/blog2/protref

Domoticz home automation can integrate an RF-Link via serial and via ethernet (not tested, sernet? ehternet shield?). It autodetects available devices (enable for 5min in settings) and can control switches after "learning" them. Basically all devices I already owned did work, good coverage. Currently I have one issue with this: domoticz can only use the device if I open it before with a terminal program - no idea why...

Antennas for 433MHz can be thick single wire of 16.8cm length. It should point in a direction 90 degrees from the direction to the device most problematic to communicate with. I could communicate with devices outside the house, ~5m away and also inside but one floor down or up, ~12m away.