Licznik błyskawic w Domoticz. Wpis nieaktualny - serwis nie działa.
Dzień dobry!
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.
Edytowane: niestety strona www.onweerdetectie.com nie udostępnia informacji o błyskawicach. Zostawiam jednak wpis, może komuś się przyda do nauki Pythona.
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
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.
Edytowane: niestety strona www.onweerdetectie.com nie udostępnia informacji o błyskawicach. Zostawiam jednak wpis, może komuś się przyda do nauki Pythona.
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
Działa, cieszy.
Niestety serwer http://www.onweerdetectie.com/domoticz_bo.json już nie działa... skrypt też nie.
OdpowiedzUsuńTak, zgadza się. Nawet sprawdzałem to jakieś dwa tygodnie temu, bo miałem cały czas czerwony kafelek w Domoticz. Tak to jest, gdy korzysta się z zewnętrznych serwisów. Nawet Weather Underground z końcem roku kończy wsparcie dla API i trzeba będzie przerabiać wiele skryptów.
UsuńDziękuję za przypomnienie, zaktualizuję wpis.