Licznik błyskawic w Domoticz

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.

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&param=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.

3 komentarze do “Licznik błyskawic w Domoticz”

  1. 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.

    Dziękuję za przypomnienie, zaktualizuję wpis.

    Odpowiedz
  2. 40 years old Software Consultant Margit Terbeck, hailing from Keswick enjoys watching movies like Radio Free Albemuth and Scouting. Took a trip to Durham Castle and Cathedral and drives a Mirage. kliknij na ta strone

    Odpowiedz

Dodaj komentarz