Dzisiaj kolejny skrypt w stylu 'nie jest mi to do niczego potrzebne, ale skoro można, to czemu nie’…
Ponownie, korzystając z uprzejmości użytkowników forum Domoticz, skonfigurowałem i uruchomiłem program, który odczytuje ze strony ilość wyładowań atmosferycznych w zadanym dystansie.
Instalacja i konfiguracja jest prosta i szybka. W sumie jedyne co musimy zrobić, to założyć wirtualny czujnik (czyli najpierw zakładka hardware, później Create Virtual Sensors).
Ważne jest, aby skonfigurować zmienne server, port, deviceIdx, distanceRange. Jeżeli w Domoticz macie skonfigurowane koordynaty GPS, skrypt je stamtąd pobierze. Jeśli nie – trzeba je podać ręcznie. Moim zdaniem jednak i tak są potrzebne, aby mieć informację o wschodach/zachodach słońca.
Poniżej skrypt do wklejenia i zmiany:
# Following libraries in python are needed : json, yaml,math,time,requests
# This script will load an external json file that contact for europe the lightning information and will send it to Domoticz when it’s
# inside the distance range
import math
import requests
import json
import os
from datetime import datetime
# Domoticz server settings
server = „http://192.168.1.200”
port = 80
deviceIdx = 154
# Location to import the lightning info
jsonUrl = „http://www.onweerdetectie.com/domoticz_bo.json”
# GPS location and distance to calculate
#latHome = xx.xxxxxx
#lngHome = xx.xxxxxx
distanceRange = 10 # Distance in km
# Try to get GPS location from domoticz
try:
data = json.loads(
requests.get(
„%s:%d/json.htm?type=settings” %
(server, port)).content)
latHome = float(data[’Location’][’Latitude’])
lngHome = float(data[’Location’][’Longitude’])
except:
pass
# Location distance calculation
def distance(lat1, lng1, lat2, lng2):
radius = 6371
dLat = (lat2 – lat1) * math.pi / 180
dLng = (lng2 – lng1) * math.pi / 180
lat1 = lat1 * math.pi / 180
lat2 = lat2 * math.pi / 180
val = math.sin(dLat / 2) * math.sin(dLat / 2) + math.sin(dLng / 2) *
math.sin(dLng / 2) * math.cos(lat1) * math.cos(lat2)
ang = 2 * math.atan2(math.sqrt(val), math.sqrt(1 – val))
return radius * ang
last = 0
if os.path.exists(„/tmp/last_lightning.txt”):
f = open(„/tmp/last_lightning.txt”)
last = int(f.read())
f.close()
z = requests.get(jsonUrl)
data = json.loads(z.content)
value = 0
ignored = 0
for pos in data:
time_, lat, lng = pos
distanceBetween = distance(latHome, lngHome, lat, lng)
if (distanceBetween <= distanceRange):
if (time_ > last):
value += 1
else:
ignored += 1
f = open(„/tmp/last_lightning.txt”, „w”)
f.write(str(time_))
f.close()
print („Found %d matches — %s” %
(value, datetime.strftime(datetime.now(), „%c”)))
print („%d old matches were ignored — %s” %
(ignored, datetime.strftime(datetime.now(), „%c”)))
requests.get(„%s:%d/json.htm?type=command¶m=udevice&idx=%s&svalue=%d” % (server, port, deviceIdx, value))
Ja zapisałem go w /home/pi/domoticz/scripts/python/lightning.py
Później wpis do cron, wygodniej było mi go uruchamiać co 15 minut.
crontab -e
*/15 * * * * sudo python /home/pi/domoticz/scripts/python/lightning.py