popełniłem ostatnio taki mały skrypt który aktualizuje virtualny kanał z supla-virtual-device o najbliższą datę wywozu śmieci.
W aplikacji wygląda to następująco:
Repozytorium
https://github.com/arekrgw/supla-rubbish
Do działania, od wersji skryptu 3.0.0, można uruchomić generatory plików konfiguracyjnych komendami:
Kod: Zaznacz cały
npm run gen:supla
npm run gen:icons
npm run gen:notif // opcjonalne
Od wersji 2.0.0 zmienił się plik konfiguracyjny supla.config.json, od teraz można dodać kilka regionów do jednego skryptu i nie trzeba robić kilku skryptów żeby obsłużyć wiele regionów.
Od wersji 3.0.0 również zmieniły się lekko pliki konfiguracyjne ale nie tak drastycznie, natomiast zmieniły swoją lokalizację na "config/", powstał opcjonalny plik konfiguracyjny do powiadomień push o których więcej niżej.
Opis: supla.config.json
Kod: Zaznacz cały
{
"kiedySmieciURL": "https://kiedysmieciv2.herokuapp.com",
"regions": [
{
"bearer": "MzNkNjRiYTc1ZGUxYzgwZThiYmE0OGIzNTViNzQ2ZTBkZjJiMWQxYmE3NzQ0MzU2ZTExMDFjMzAyNTg3NzVhYQ.aHR0cHM6Ly9zdnIxNi5zdXBsYS5vcmc=",
"suplaBaseServerURL": "https://svr16.supla.org/api/v2.3.0",
"region": "5f245dd64d732d001768a9c5",
"channel": "32568",
"prefix": "Rogów",
"printTypes": true,
"notifications": {
"devices": [
{
"name": "Arek",
"when": "18:00",
"days": 1
},
{
"name": "Arek",
"when": "06:00",
"days": 0
}
]
}
}
]
}
- bearer - bierzemy z chmury z zakładki integracje i osobiste tokeny dostępowe (koniecznie musi być zaznaczona możliwość modyfikacji kanałów)
- kiedySmieciURL - tego nie ruszamy jest to mój serwer który podaje daty wywozów śmieci
Kod: Zaznacz cały
[CHANNEL_12]
function=WINDOWSENSOR
file=/home/pi/virtual/smieci/default
- suplaBaseServerURL - tu tylko zmieniamy liczbę przy "svrXX"
- region - id regionu z serwera KiedySmieci o tym później dalej...
- channel - id kanału który będzie nam służył jako informacja o wywozie, patrz zrzut ekranu...
- prefix - przed datą można dodać sobie jakiś napis np. nazwę regionu
- printTypes - przyjmuje true lub false, wypisuje za datą jakie typy śmieci będą wywożone
- notifications - opcjonalne - konfiguracja powiadomień dla danego regionu, podajemy nazwę urządzenia z notification.config.json, o której godzinie mają być wysłane, oraz ile dni przed wywozem (0 oznacza tego dnia co wywóz)
Kod: Zaznacz cały
[
{
"icon": 884,
"types": ["tworzywa sztuczne"]
},
{
"icon": 883,
"types": ["szkło"]
},
{
"icon": 882,
"types": ["zmieszane"]
},
{
"icon": 881,
"types": ["bio", "tworzywa sztuczne"]
},
{
"icon": 880,
"types": ["bio", "papier"]
}
]
- icon - id ikony która ma być ustawiona, aby uzyskać to id to patrz zrzut ekranu... Jeżeli ktoś zna łatwiejszy sposób to proszę o podzielenie się nim
- types - lista typów śmieci które są wywożone danego dnia też jest to ściśle powiązane z serwerem KiedyŚmieci
Kod: Zaznacz cały
{
"Arek": {
"provider": "Expo",
"tokenExpo": "ExponentPushToken[q...gObO0EeE]"
},
"Arek2": {
"provider": "Pushover",
"tokenPushover": "xxxxx",
"user": "xxxxx",
"device": "xxxxx"
}
}
reszta to dane do powiadomień
Utworzyłem prostą aplikację KiedyŚmieciApp do powiadomień push która jest do pobrania tu: https://drive.google.com/drive/folders/ ... sp=sharing, z której bierzemy tokenExpo dla providera "Expo".
Dodatkowo aby wasza malinka bądź inny sprzęt wysyłał powiadomienia potrzebujecie zainstalowane 2 rzeczy: "at", "curl". Możecie je zainstalować tymi komendami:
Kod: Zaznacz cały
sudo apt install at
sudo apt install curl
https://drive.google.com/drive/folders/ ... sp=sharing
Aby skrypt np. uruchamiał się codziennie, należy ustawić zadanie w Cronie np
Kod: Zaznacz cały
1 0 * * * /usr/local/bin/node /home/pi/supla-rubbish/index.js
Teraz trochę o serwerze KiedyŚmieci
Niestety aby wasze daty się tam znalazły musicie mi przygotować plik z takimi datami i ja je samodzielnie dodam
Jak powinien ten plik wyglądać...
Kod: Zaznacz cały
{
"city": {
"cityName": "Rogów",
"province": "łódzkie"
},
"region": {
"regionName": "Rogów",
"postalCode": "95-063",
"hours": "6-15"
},
"dates": [
{
"date": "2020-08-03",
"type": "bio"
},
{
"date": "2020-08-03",
"type": "papier"
},
{
"date": "2020-08-03",
"type": "zmieszane"
},
{
"date": "2020-08-17",
"type": "bio"
}
]
}
Jeżeli ktoś chce sprawdzić czy może jego region już jest to zapraszam pod link: https://kiedysmieciv2.herokuapp.com/regions. Użyjcie sobie jakiegoś formattera JSONa np. https://jsonformatter.curiousconcept.com/
WAŻNA INFORMAJCA: od wersji 3.0.0 potrzeba node.js w wersji przynajmniej 12
gdyby na waszą maszynę nie było oficjalnego buildu node.js to można sciągnąć nieoficjalną stądhttps://unofficial-builds.nodejs.org/download/release/. Sam na raspberry pi zero zainstalowałem wersję 14 i wszystko ładnie działa.
Bugfixy:
- po zmianie lokalizacji kanału po aktualizacji kanału przez skrypt wracał do poprzedniej pierwotnej
- gdy prefix był wyłączony to pozostawał ":" przed datą w aplikacji
EDIT #2: Update do wersji 3.0.0