Do pobierania aktualnych stanów z liczników rzeczywistych, będziemy potrzebować "Osobisty token dostępowy".
Wygenerować możemy go po zalogowaniu do cloud: konto -> bezpieczeństwo -> Osobiste tokeny dostępowe -> Generuj token.
Tu wybieramy tylko Kanał -> odczyt. Nadajemy nazwę i generujemy, zapisujemy token.
W kolejnym krokiem jest przygotowanie maliny (u mnie Rapberry Pi Zero W), nie będę opisywać jak przygotować kartę z systemem.
Aktualizujemy pikiety systemu:
Code: Select all
sudo apt update
sudo apt upgrade -y
Code: Select all
sudo apt install git mc -y
Code: Select all
sudo apt install git libssl-dev build-essential libyaml-cpp-dev cmake -y
Code: Select all
sudo apt install curl
Code: Select all
sudo apt install jq -y
Code: Select all
git clone https://github.com/SUPLA/supla-device.git
Code: Select all
export SUPLA_DEVICE_PATH=~/supla-device
cd supla-device/extras/examples/linux
mkdir build
cd build
cmake ..
make
Code: Select all
[100%] Linking CXX executable supla-device-linux
[100%] Built target supla-device-linux
Code: Select all
./supla-device-linux -v
Code: Select all
./supla-device-linux version: 23.11.02
Code: Select all
cd ~
NASZ_SERWER -> numer naszego serwera
NASZ_EMAIL -> adres email do cloud
NASZ_TOKEN -> wygenerowany wcześniej token
ID_1 -> ID kanału głównego licznika wody - pierwszy licznik
ID_2 -> ID kanału licznika wody ogrodowe - drugi licznik
LOGIN_PI -> login jakim logujemy się Raspberry
Tworzymy nowy folder:
Code: Select all
mkdir Meter
Code: Select all
cd Meter
Code: Select all
nano meter.sh
Code: Select all
#!/bin/bash
id1=$(curl -X 'GET' \
'https://NASZ_SERWER.supla.org/api/v3/channels/]ID_1]?include=state' \
-H 'accept: application/json' \
-H 'Authorization: Bearer NASZ_TOKEN' \
)
id1_meter=$(echo "$id1" | jq -r '.state .counter')
id2=$(curl -X 'GET' \
'https://NASZ_SERWER.supla.org/api/v3/channels/ID_2?include=state' \
-H 'accept: application/json' \
-H 'Authorization: Bearer NASZ_TOKEN' \
)
id2_meter=$(echo "$id2" | jq -r '.state .counter')
let result=(id1_meter-id2_meter)
echo "$result" > /home/LOGIN_PI/Meter/meter.txt
Code: Select all
#!/bin/bash
id1=$(curl -X 'GET' \
'https://NASZ_SERWER.supla.org/api/v3/channels/ID_1?include=state' \
-H 'accept: application/json' \
-H 'Authorization: Bearer NASZ_TOKEN' \
)
id1_meter=$(echo "$id1" | jq -r '.state .counter')
id2=$(curl -X 'GET' \
'https://NASZ_SERWER.supla.org/api/v3/channels/]ID_2?include=state' \
-H 'accept: application/json' \
-H 'Authorization: Bearer NASZ_TOKEN' \
)
id2_meter=$(echo "$id2" | jq -r '.state .counter')
let result=(id1_meter+id2_meter)
echo "$result" > /home/LOGIN_PI/Meter/meter.txt
Code: Select all
id1=$(curl -X 'GET' \
'https://NASZ_SERWER.supla.org/api/v3/channels/ID_1?include=state' \
-H 'accept: application/json' \
-H 'Authorization: Bearer NASZ_TOKEN' \
)
id1_meter=$(echo "$id1" | jq -r '.state .counter')
Code: Select all
let result=(id1_meter+id2_meter+id3_meter)
Code: Select all
chmod +x meter.sh
Code: Select all
crontab -e
Code: Select all
* * * * * /home/LOGIN_PI/Meter/meter.sh
Dodajemy kanał wirtualnego licznika:
Code: Select all
sudo nano /etc/supla-device.yaml
Code: Select all
name: Raspberry Pi Zero W
log_level: debug
state_files_path: "/home/LOGIN_PI"
security_level: 2
supla:
server: NASZ_SERWER.supla.org
mail: NASZ_EMAIL
channels:
- type: ImpulseCounterParsed
name: i1
source:
type: File
file: "/home/LOGIN_PI/Meter/meter.txt"
parser:
type: Simple
refresh_time_ms: 1000
counter: 0
Przygotowujemy serwis dla Supla Device:
Code: Select all
sudo nano /etc/systemd/system/supla-device.service
Code: Select all
[Unit]
Description=Supla Device
After=network-online.target
[Service]
User=LOGIN_PI
ExecStart=/home/LOGIN_PI/supla-device/extras/examples/linux/build/supla-device-linux -s
[Install]
WantedBy=multi-user.target
Code: Select all
sudo systemctl enable supla-device.service
sudo systemctl start supla-device.service
Mam nadzieje ze komuś się przyda ten opis
Należy pamiętać o podmianie danych gdzie wklejamy zawartość plików.
Może da się to inaczej zrobić, ale u mnie to działa :p