Compare commits
6 commits
f9a6658fea
...
0750d118b5
Author | SHA256 | Date | |
---|---|---|---|
0750d118b5 | |||
5db8566946 | |||
3ed09f2f88 | |||
9a8f73cf88 | |||
85180617ee | |||
de19786bd1 |
12 changed files with 528 additions and 0 deletions
2
10-local_i2c_group.rules
Normal file
2
10-local_i2c_group.rules
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# Make /dev/i2c-[0-9]* accessible to users from group "sasha" without sudo
|
||||||
|
KERNEL=="i2c-[0-9]*", GROUP="sasha"
|
98
Zhu Yuan.md
Normal file
98
Zhu Yuan.md
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
# Zhu Yuan SETUP
|
||||||
|
|
||||||
|
## 1. OSInstall
|
||||||
|
|
||||||
|
Debian
|
||||||
|
Mount points - Data1
|
||||||
|
User setup - sasha (with sudo)
|
||||||
|
Software selection - Basic utilities + SSH server
|
||||||
|
|
||||||
|
## 2. Access
|
||||||
|
|
||||||
|
- SSH is already enabled, now install NetworkManager and remove all interfaces except `lo` from `/etc/network/interfaces` and reboot.
|
||||||
|
- [Disable password login!](https://www.cyberciti.biz/faq/how-to-disable-ssh-password-login-on-linux/)
|
||||||
|
|
||||||
|
Network
|
||||||
|
Method - Manual
|
||||||
|
LAN IP - 192.168.10.42/24
|
||||||
|
Gateway - 192.168.10.254
|
||||||
|
DNS - 192.168.10.254
|
||||||
|
|
||||||
|
## 3. Wireguard
|
||||||
|
- Install `wireguard-tools` with apt and run
|
||||||
|
|
||||||
|
```
|
||||||
|
wget https://git.io/wireguard -O wireguard-install.sh && sudo bash wireguard-install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 4. Utilities
|
||||||
|
|
||||||
|
install packages: htop smartmontools lm-sensors unzip wireguard-tools
|
||||||
|
|
||||||
|
## 5. Zram
|
||||||
|
|
||||||
|
```
|
||||||
|
echo "zram" > /etc/modules-load.d/zram.conf
|
||||||
|
echo "options zram num_devices=1" > /etc/modprobe.d/zram.conf
|
||||||
|
echo 'KERNEL=="zram0", ATTR{disksize}="4G",TAG+="systemd"' > /etc/udev/rules.d/99-zram.rules
|
||||||
|
```
|
||||||
|
|
||||||
|
Create `/etc/systemd/system/zram.service` containing this:
|
||||||
|
|
||||||
|
```
|
||||||
|
[Unit]
|
||||||
|
Description=Swap with zram
|
||||||
|
After=multi-user.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=true
|
||||||
|
ExecStartPre=/sbin/mkswap /dev/zram0
|
||||||
|
ExecStart=/sbin/swapon /dev/zram0
|
||||||
|
ExecStop=/sbin/swapoff /dev/zram0
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
Let Zram start on next boot:
|
||||||
|
|
||||||
|
sudo systemctl enable zram
|
||||||
|
|
||||||
|
And reboot the machine.
|
||||||
|
|
||||||
|
## 6. BOINC
|
||||||
|
|
||||||
|
install via apt
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo apt install boinc-client
|
||||||
|
sudo systemctl enable --now boinc-client
|
||||||
|
```
|
||||||
|
|
||||||
|
## 7. CernVM-FS
|
||||||
|
|
||||||
|
install from CERN repos
|
||||||
|
|
||||||
|
```
|
||||||
|
wget https://ecsft.cern.ch/dist/cvmfs/cvmfs-release/cvmfs-release-latest_all.deb
|
||||||
|
sudo dpkg -i cvmfs-release-latest_all.deb
|
||||||
|
rm -f cvmfs-release-latest_all.deb
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install cvmfs
|
||||||
|
sudo cvmfs_config setup
|
||||||
|
```
|
||||||
|
|
||||||
|
Put these in `/etc/cvmfs/default.local`, since we don't have a proxy
|
||||||
|
|
||||||
|
```
|
||||||
|
CVMFS_REPOSITORIES=atlas.cern.ch,atlas-condb.cern.ch,grid.cern.ch
|
||||||
|
CVMFS_CLIENT_PROFILE=single
|
||||||
|
```
|
||||||
|
|
||||||
|
Test with
|
||||||
|
|
||||||
|
```
|
||||||
|
cvmfs_config probe
|
||||||
|
```
|
13
boinc/app_config_template.xml
Executable file
13
boinc/app_config_template.xml
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
<app_config>
|
||||||
|
<app>
|
||||||
|
<name>myapp</name>
|
||||||
|
<gpu_versions>
|
||||||
|
<cpu_usage>1.0</cpu_usage>
|
||||||
|
<gpu_usage>0.5</gpu_usage>
|
||||||
|
</gpu_versions>
|
||||||
|
</app>
|
||||||
|
</app_config>
|
||||||
|
|
||||||
|
<app_config>
|
||||||
|
<project_max_concurrent>1</project_max_concurrent>
|
||||||
|
</app_config>
|
42
boinc/boinc-client-amd-opencl.service
Executable file
42
boinc/boinc-client-amd-opencl.service
Executable file
|
@ -0,0 +1,42 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Berkeley Open Infrastructure Network Computing Client
|
||||||
|
Documentation=man:boinc(1)
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Environment=GPU_SINGLE_ALLOC_PERCENT=100
|
||||||
|
Environment=GPU_MAX_HEAP_SIZE=100
|
||||||
|
Environment=GPU_FORCE_64BIT_PTR=1
|
||||||
|
Environment=GPU_USE_SYNC_OBJECTS=1
|
||||||
|
Environment=GPU_MAX_ALLOC_PERCENT=100
|
||||||
|
Type=simple
|
||||||
|
ProtectHome=true
|
||||||
|
PrivateTmp=true
|
||||||
|
#ProtectSystem=strict
|
||||||
|
#ProtectControlGroups=true
|
||||||
|
ReadWritePaths=-/var/lib/boinc -/etc/boinc-client
|
||||||
|
Nice=10
|
||||||
|
User=boinc
|
||||||
|
WorkingDirectory=/var/lib/boinc
|
||||||
|
ExecStart=/usr/bin/boinc
|
||||||
|
ExecStop=/usr/bin/boinccmd --quit
|
||||||
|
ExecReload=/usr/bin/boinccmd --read_cc_config
|
||||||
|
ExecStopPost=/bin/rm -f lockfile
|
||||||
|
IOSchedulingClass=idle
|
||||||
|
# The following options prevent setuid root as they imply NoNewPrivileges=true
|
||||||
|
# Since Atlas requires setuid root, they break Atlas
|
||||||
|
# In order to improve security, if you're not using Atlas,
|
||||||
|
# Add these options to the [Service] section of an override file using
|
||||||
|
# sudo systemctl edit boinc-client.service
|
||||||
|
#NoNewPrivileges=true
|
||||||
|
#ProtectKernelModules=true
|
||||||
|
#ProtectKernelTunables=true
|
||||||
|
#RestrictRealtime=true
|
||||||
|
#RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
|
||||||
|
#RestrictNamespaces=true
|
||||||
|
#PrivateUsers=true
|
||||||
|
#CapabilityBoundingSet=
|
||||||
|
#MemoryDenyWriteExecute=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
11
boinc/cc_config_template.xml
Normal file
11
boinc/cc_config_template.xml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<cc_config>
|
||||||
|
<log_flags>
|
||||||
|
<task>1</task>
|
||||||
|
<file_xfer>1</file_xfer>
|
||||||
|
<sched_ops>1</sched_ops>
|
||||||
|
</log_flags>
|
||||||
|
<options>
|
||||||
|
<allow_remote_gui_rpc>1</allow_remote_gui_rpc>
|
||||||
|
</options>
|
||||||
|
</cc_config>
|
||||||
|
|
10
boinc/screenlock.sh
Executable file
10
boinc/screenlock.sh
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# If screen is locked (GNOME Screensaver true), enable GPU computing. Otherwise disable GPU computing.
|
||||||
|
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
|
||||||
|
while read x; do
|
||||||
|
case "$x" in
|
||||||
|
*"boolean true"*) boinccmd --set_gpu_mode always && echo "GPU Computing Enabled";;
|
||||||
|
*"boolean false"*) boinccmd --set_gpu_mode never && echo "GPU Computing Disabled";;
|
||||||
|
esac
|
||||||
|
done
|
296
pg-serverroom-monitor/configuration.yaml
Normal file
296
pg-serverroom-monitor/configuration.yaml
Normal file
|
@ -0,0 +1,296 @@
|
||||||
|
# Loads default set of integrations. Do not remove.
|
||||||
|
default_config:
|
||||||
|
|
||||||
|
# Load frontend themes from the themes folder
|
||||||
|
frontend:
|
||||||
|
themes: !include_dir_merge_named themes
|
||||||
|
|
||||||
|
automation: !include automations.yaml
|
||||||
|
script: !include scripts.yaml
|
||||||
|
scene: !include scenes.yaml
|
||||||
|
|
||||||
|
sensor:
|
||||||
|
- platform: serial
|
||||||
|
serial_port: /dev/ttyUSB_CH340
|
||||||
|
baudrate: 9600
|
||||||
|
|
||||||
|
template:
|
||||||
|
sensor:
|
||||||
|
- name: Temperature
|
||||||
|
unit_of_measurement: "°C"
|
||||||
|
state: "{{ states('sensor.serial_sensor').split()[2] | float(default=0) }}"
|
||||||
|
unique_id: temperature_sensor
|
||||||
|
- name: Humidity
|
||||||
|
unit_of_measurement: "%"
|
||||||
|
state: "{{ states('sensor.serial_sensor').split()[1] | float(default=0) }}"
|
||||||
|
unique_id: humidity_sensor
|
||||||
|
|
||||||
|
modbus:
|
||||||
|
- name: "SDM230 Smart Meter"
|
||||||
|
type: serial
|
||||||
|
baudrate: 9600
|
||||||
|
bytesize: 8
|
||||||
|
method: rtu
|
||||||
|
parity: N
|
||||||
|
port: /dev/ttyUSB_FT232
|
||||||
|
stopbits: 1
|
||||||
|
sensors:
|
||||||
|
- name: Voltage
|
||||||
|
unit_of_measurement: Volts
|
||||||
|
slave: 2
|
||||||
|
address: 0
|
||||||
|
input_type: input
|
||||||
|
data_type: float32
|
||||||
|
precision: 2
|
||||||
|
unique_id: "SDM230_Voltage"
|
||||||
|
- name: Current
|
||||||
|
unit_of_measurement: Amps
|
||||||
|
slave: 2
|
||||||
|
address: 6
|
||||||
|
input_type: input
|
||||||
|
data_type: float32
|
||||||
|
precision: 2
|
||||||
|
unique_id: "SDM230_Current"
|
||||||
|
- name: Active_Power
|
||||||
|
unit_of_measurement: Watts
|
||||||
|
slave: 2
|
||||||
|
address: 12
|
||||||
|
input_type: input
|
||||||
|
data_type: float32
|
||||||
|
precision: 2
|
||||||
|
unique_id: "SDM230_ActivePower"
|
||||||
|
- name: Apparent_Power
|
||||||
|
unit_of_measurement: Watts
|
||||||
|
slave: 2
|
||||||
|
address: 18
|
||||||
|
input_type: input
|
||||||
|
data_type: float32
|
||||||
|
precision: 2
|
||||||
|
unique_id: "SDM230_ApparentPower"
|
||||||
|
- name: Reactive_Power
|
||||||
|
unit_of_measurement: Watts
|
||||||
|
slave: 2
|
||||||
|
address: 24
|
||||||
|
input_type: input
|
||||||
|
data_type: float32
|
||||||
|
precision: 2
|
||||||
|
unique_id: "SDM230_ReactivePower"
|
||||||
|
- name: Power_Factor
|
||||||
|
slave: 2
|
||||||
|
address: 30
|
||||||
|
input_type: input
|
||||||
|
data_type: float32
|
||||||
|
precision: 2
|
||||||
|
unique_id: "SDM230_PowerFactor"
|
||||||
|
- name: Frequency
|
||||||
|
unit_of_measurement: Hz
|
||||||
|
slave: 2
|
||||||
|
address: 70
|
||||||
|
input_type: input
|
||||||
|
data_type: float32
|
||||||
|
precision: 2
|
||||||
|
unique_id: "SDM230_Frequency"
|
||||||
|
- name: Import_Active_Energy
|
||||||
|
unit_of_measurement: kWh
|
||||||
|
slave: 2
|
||||||
|
address: 72
|
||||||
|
input_type: input
|
||||||
|
data_type: float32
|
||||||
|
precision: 2
|
||||||
|
unique_id: "SDM230_ImportActiveEnergy"
|
||||||
|
- name: Export_Active_Energy
|
||||||
|
unit_of_measurement: kWh
|
||||||
|
slave: 2
|
||||||
|
address: 74
|
||||||
|
input_type: input
|
||||||
|
data_type: float32
|
||||||
|
precision: 2
|
||||||
|
unique_id: "SDM230_ExportActiveEnergy"
|
||||||
|
- name: Import_Reactive_Energy
|
||||||
|
unit_of_measurement: kVARh
|
||||||
|
slave: 2
|
||||||
|
address: 76
|
||||||
|
input_type: input
|
||||||
|
data_type: float32
|
||||||
|
precision: 2
|
||||||
|
unique_id: "SDM230_ImportReactiveEnergy"
|
||||||
|
- name: Export_Reactive_Energy
|
||||||
|
unit_of_measurement: kVARh
|
||||||
|
slave: 2
|
||||||
|
address: 78
|
||||||
|
input_type: input
|
||||||
|
data_type: float32
|
||||||
|
precision: 2
|
||||||
|
unique_id: "SDM230_ExportReactiveEnergy"
|
||||||
|
- name: Total_Active_Energy
|
||||||
|
unit_of_measurement: kWh
|
||||||
|
slave: 2
|
||||||
|
address: 342
|
||||||
|
input_type: input
|
||||||
|
data_type: float32
|
||||||
|
precision: 2
|
||||||
|
state_class: total_increasing
|
||||||
|
unique_id: "SDM230_TotalActiveEnergy"
|
||||||
|
- name: Total_Reactive_Energy
|
||||||
|
unit_of_measurement: kVARh
|
||||||
|
slave: 2
|
||||||
|
address: 344
|
||||||
|
input_type: input
|
||||||
|
data_type: float32
|
||||||
|
precision: 2
|
||||||
|
unique_id: "SDM230_TotalReactiveEnergy"
|
||||||
|
|
||||||
|
http:
|
||||||
|
# For extra security set this to only accept connections on localhost if NGINX is on the same machine
|
||||||
|
# Uncommenting this will mean that you can only reach Home Assistant using the proxy, not directly via IP from other clients.
|
||||||
|
# server_host: 127.0.0.1
|
||||||
|
use_x_forwarded_for: true
|
||||||
|
# You must set the trusted proxy IP address so that Home Assistant will properly accept connections
|
||||||
|
# Set this to your NGINX machine IP, or localhost if hosted on the same machine.
|
||||||
|
trusted_proxies: 192.168.10.41
|
||||||
|
|
||||||
|
# Modpoll for CJ meter
|
||||||
|
|
||||||
|
#./modpoll/x86_64-linux-gnu/modpoll -h
|
||||||
|
#modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator
|
||||||
|
#Copyright (c) 2002-2021 proconX Pty Ltd
|
||||||
|
#Visit https://www.modbusdriver.com for Modbus libraries and tools.
|
||||||
|
#
|
||||||
|
#Usage: modpoll [OPTIONS] SERIALPORT|HOST [WRITEVALUES...]
|
||||||
|
#Arguments:
|
||||||
|
#SERIALPORT Serial port when using Modbus ASCII or Modbus RTU protocol
|
||||||
|
# COM1, COM2 ... on Windows
|
||||||
|
# /dev/ttyS0, /dev/ttyS1 ... on Linux
|
||||||
|
#HOST Host name or dotted IP address when using MDBUS/TCP protocol
|
||||||
|
#WRITEVALUES List of values to be written. If none specified (default) modpoll reads data.
|
||||||
|
#General options:
|
||||||
|
#-m ascii Modbus ASCII protocol
|
||||||
|
#-m rtu Modbus RTU protocol (default if SERIALPORT contains a /)
|
||||||
|
#-m tcp MODBUS/TCP protocol (default otherwise)
|
||||||
|
#-m udp MODBUS UDP
|
||||||
|
#-m enc Encapsulated Modbus RTU over TCP
|
||||||
|
#-a # Slave address (1-247 for serial, 0-255 for TCP, 1 is default)
|
||||||
|
#-r # Start reference (1-65536, 100 is default)
|
||||||
|
#-c # Number of values to read (1-125, 1 is default), optional for writing (use -c 1 to force FC5 or FC6)
|
||||||
|
#-t 0 Discrete output (coil) data type
|
||||||
|
#-t 1 Discrete input data type
|
||||||
|
#-t 3 16-bit input register data type
|
||||||
|
#-t 3:hex 16-bit input register data type with hex display
|
||||||
|
#-t 3:int 32-bit integer data type in input register table
|
||||||
|
#-t 3:mod 32-bit module 10000 data type in input register table
|
||||||
|
#-t 3:float 32-bit float data type in input register table
|
||||||
|
#-t 4 16-bit output (holding) register data type (default)
|
||||||
|
#-t 4:hex 16-bit output (holding) register data type with hex display
|
||||||
|
#-t 4:int 32-bit integer data type in output (holding) register table
|
||||||
|
#-t 4:mod 32-bit module 10000 type in output (holding) register table
|
||||||
|
#-t 4:float 32-bit float data type in output (holding) register table
|
||||||
|
#-i Slave operates on big-endian 32-bit integers
|
||||||
|
#-f Slave operates on big-endian 32-bit floats
|
||||||
|
#-e Use Daniel/Enron single register 32-bit mode (implies -i and -f)
|
||||||
|
#-0 First reference is 0 (PDU addressing) instead 1
|
||||||
|
#-1 Poll only once only, otherwise every poll rate interval
|
||||||
|
#-l # Poll rate in ms, (1000 is default)
|
||||||
|
#-o # Time-out in seconds (0.01 - 10.0, 1.0 s is default)
|
||||||
|
#Options for MODBUS/TCP, UDP and RTU over TCP:
|
||||||
|
#-p # IP protocol port number (502 is default)
|
||||||
|
#Options for Modbus ASCII and Modbus RTU:
|
||||||
|
#-b # Baudrate (e.g. 9600, 19200, ...) (19200 is default)
|
||||||
|
#-d # Databits (7 or 8 for ASCII protocol, 8 for RTU)
|
||||||
|
#-s # Stopbits (1 or 2, 1 is default)
|
||||||
|
#-p none No parity
|
||||||
|
#-p even Even parity (default)
|
||||||
|
#-p odd Odd parity
|
||||||
|
#-4 # RS-485 mode, RTS on while transmitting and another # ms after
|
||||||
|
|
||||||
|
# ./modpoll -c 80 -b 9600 -a 1 -1 -p none -t 3 /dev/ttyUSB0
|
||||||
|
# modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator
|
||||||
|
# Copyright (c) 2002-2021 proconX Pty Ltd
|
||||||
|
# Visit https://www.modbusdriver.com for Modbus libraries and tools.
|
||||||
|
#
|
||||||
|
#Protocol configuration: Modbus RTU, FC4
|
||||||
|
#Slave configuration...: address = 1, start reference = 1, count = 80
|
||||||
|
#Communication.........: /dev/ttyUSB0, 9600, 8, 1, none, t/o 1.00 s, poll rate 1000 ms
|
||||||
|
#Data type.............: 16-bit register, input register table
|
||||||
|
|
||||||
|
#-- Polling slave...
|
||||||
|
#[1]: 8888
|
||||||
|
#[2]: 256
|
||||||
|
#[3]: 0
|
||||||
|
#[4]: 1
|
||||||
|
#[5]: 16
|
||||||
|
#[6]: -30846
|
||||||
|
#[7]: 5000
|
||||||
|
#[8]: 3000
|
||||||
|
#[9]: -31868
|
||||||
|
#[10]: 3000
|
||||||
|
#[11]: 6000
|
||||||
|
#[12]: 257
|
||||||
|
#[13]: 257
|
||||||
|
#[14]: 257
|
||||||
|
#[15]: 0
|
||||||
|
#[16]: 0
|
||||||
|
#[17]: 0
|
||||||
|
#[18]: 0
|
||||||
|
#[19]: 0
|
||||||
|
#[20]: 0
|
||||||
|
#[21]: 500
|
||||||
|
#[22]: 30
|
||||||
|
#[23]: -30844
|
||||||
|
#[24]: 6000
|
||||||
|
#[25]: 6000
|
||||||
|
#[26]: 257
|
||||||
|
#[27]: 0
|
||||||
|
#[28]: 0
|
||||||
|
#[29]: 0
|
||||||
|
#[30]: 0
|
||||||
|
#[31]: 0
|
||||||
|
#[32]: 0
|
||||||
|
#[33]: 0
|
||||||
|
#[34]: 0
|
||||||
|
#[35]: 0
|
||||||
|
#[36]: 769
|
||||||
|
#[37]: 1135
|
||||||
|
#[38]: 2288
|
||||||
|
#[39]: 0
|
||||||
|
#[40]: 0
|
||||||
|
#[41]: 2288
|
||||||
|
#[42]: 0
|
||||||
|
#[43]: 2288
|
||||||
|
#[44]: 5216
|
||||||
|
#[45]: 0
|
||||||
|
#[46]: 0
|
||||||
|
#[47]: 865
|
||||||
|
#[48]: 0
|
||||||
|
#[49]: 0
|
||||||
|
#[50]: 865
|
||||||
|
#[51]: 587
|
||||||
|
#[52]: 0
|
||||||
|
#[53]: 0
|
||||||
|
#[54]: 587
|
||||||
|
#[55]: 827
|
||||||
|
#[56]: 999
|
||||||
|
#[57]: 999
|
||||||
|
#[58]: 827
|
||||||
|
#[59]: 1046
|
||||||
|
#[60]: 0
|
||||||
|
#[61]: 0
|
||||||
|
#[62]: 1046
|
||||||
|
#[63]: 4995
|
||||||
|
#[64]: 14
|
||||||
|
#[65]: -25104
|
||||||
|
#[66]: 0
|
||||||
|
#[67]: 0
|
||||||
|
#[68]: 9
|
||||||
|
#[69]: -13187
|
||||||
|
#[70]: 0
|
||||||
|
#[71]: 0
|
||||||
|
#[72]: 19305
|
||||||
|
#[73]: -4744
|
||||||
|
#[74]: 0
|
||||||
|
#[75]: 0
|
||||||
|
#[76]: 19228
|
||||||
|
#[77]: -11734
|
||||||
|
#[78]: 0
|
||||||
|
#[79]: 0
|
||||||
|
#[80]: 0
|
||||||
|
|
23
pg-serverroom-monitor/dht/dht.ino
Normal file
23
pg-serverroom-monitor/dht/dht.ino
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#include "DHT.h"
|
||||||
|
|
||||||
|
DHT dht;
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
Serial.begin(9600);
|
||||||
|
dht.setup(3); // data pin 3
|
||||||
|
float humidity = dht.getHumidity();
|
||||||
|
float temperature = dht.getTemperature();
|
||||||
|
Serial.print(dht.getStatusString());
|
||||||
|
Serial.print("\t");
|
||||||
|
Serial.print(humidity, 1);
|
||||||
|
Serial.print("\t");
|
||||||
|
Serial.print(temperature, 1);
|
||||||
|
Serial.print("\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
9
reconnect-vpn.service
Normal file
9
reconnect-vpn.service
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Reconnect VPN
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=nmcli con up vpn-name
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
8
reconnect-vpn.timer
Normal file
8
reconnect-vpn.timer
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Reconnect VPN every 15 minutes
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnCalendar=*:0/15
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
4
vncstart.sh
Executable file
4
vncstart.sh
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Start an x11vnc server on display :0 at port 5183, with password auth and continue running after client disconnects
|
||||||
|
x11vnc -display :0 -forever -loop -noxdamage -repeat -rfbauth ~/.vnc/passwd -rfbport 5183 -shared
|
12
x11vnc.service
Executable file
12
x11vnc.service
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
[Unit]
|
||||||
|
Description=run x11vnc as a service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=sasha
|
||||||
|
WorkingDirectory=/home/sasha
|
||||||
|
ExecStart=sh /home/sasha/vncstart.sh
|
||||||
|
ExecStop=killall x11vnc
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=graphical.target
|
Loading…
Reference in a new issue