Μεταπηδήστε στο περιεχόμενο

Δεδομένα καιρού SmartHome

  • από
Χρόνος ανάγνωσης 9 λεπτά

Ενημέρωση - Ιανουάριος 20, 2023

Η καταγραφή δεδομένων καιρού με το SmartHome και η απεικόνισή τους στο κινητό σας τηλέφωνο ή στο tablet σας μέσω του AIO Creator δεν είναι γενικά απαραίτητη, αλλά είναι καλό να την έχετε.

Η διαδικτυακή υπηρεσία καιρού weatherstack.com προσφέρει έως και 250 ερωτήματα ανά μήνα - δωρεάν σε περιορισμένο βαθμό. Εάν θέλετε πραγματικά ενημερωμένα δεδομένα καιρού, θα πρέπει να επιλέξετε το τυπικό πακέτο. 50.000 ερωτήματα ενεργοποιούν τα διαστήματα των λεπτών.

Τα άλλα διαθέσιμα πακέτα διαφέρουν κυρίως ως προς τον αριθμό των ερωτήσεων και την πρόγνωση καιρού 7 ή 14 ημερών.

Τα ακόλουθα δεδομένα περιλαμβάνονται σε όλα τα πακέτα:

  • Γεωγραφικό γεωγραφικό μήκος και πλάτος
  • Τόπος
  • Περιοχή
  • Χώρα
  • Ζώνη ώρας
  • Τοπική ώρα και ημερομηνία
  • Μετατόπιση UTC
  • Τρέχουσα ώρα συλλογής δεδομένων
  • Θερμοκρασία αέρα
  • Περιγραφή καιρού
  • Ταχύτητα ανέμου
  • Κατεύθυνση ανέμου αριθμητική/γεωγραφική
  • Πίεση αέρα
  • Βροχόπτωση
  • Υγρασία
  • Πυκνότητα σύννεφων
  • Θερμοκρασία ψύξης
  • Δείκτης UV
  • Προβολή

Η εγγραφή, ανεξάρτητα από το πακέτο, απαιτεί τις συνήθεις πληροφορίες και λεπτομέρειες πληρωμής. Μια ετήσια συνδρομή, σε αντίθεση με μια μηνιαία συνδρομή, έχει έκπτωση με το 20%.

Μόλις ολοκληρωθεί επιτυχώς αυτή η διαδικασία, λαμβάνετε έναν λεγόμενο κωδικό API (Application Programming Interface), τον οποίο αντιγράφετε στο url του ερωτήματος. Η απάντηση είναι μια έξοδος XML που περιέχει τις προαναφερθείσες κατηγορίες δεδομένων και τιμές. Τα δεδομένα εξάγονται με τη χρήση κατάλληλων σεναρίων και αποθηκεύονται σε μεταβλητές. Αυτές μπορούν στη συνέχεια να χρησιμοποιηθούν για οπτικοποίηση στο AIO Creator.

Λεπτομερής περιγραφή όλων των πιθανών παραμέτρων στην έξοδο XML, καθώς και των προαιρετικών επιλογών αναζήτησης που περιλαμβάνονται στα πακέτα υψηλότερης τιμής, συμπεριλαμβανομένων διαφόρων παραδειγμάτων κώδικα, εδώ προβάλλεται.

Πρόγραμμα

Το πρόγραμμα είναι αρκετά εκτεταμένο λόγω του μεγάλου όγκου δεδομένων. Ως εκ τούτου, τα επιμέρους τμήματα παρατίθενται διαδοχικά εδώ. Όλα τα αποσπάσματα κώδικα μπορούν τελικά να συνδυαστούν σε ένα ενιαίο πρόγραμμα.

Εκτός από τα προαναφερθέντα δεδομένα, το πρόγραμμα υπολογίζει επιπλέον δεδομένα και τα οποία διατίθενται για οπτικοποίηση:

  • Ανύψωση και αζιμούθιο του ήλιου
  • Σύσταση συντελεστή προστασίας από το φως
Πρόγραμμα - W_Data - Ερώτηση δεδομένων καιρού

Επικεφαλίδα προγράμματος

Η επικεφαλίδα περιέχει μόνο τη διεύθυνση URL, η οποία πρέπει να συμπληρώνεται από το κλειδί API, που εδώ εμφανίζεται ως xxx, και την τοποθεσία (σε απλό κείμενο ή, χωρισμένα με κόμμα, ως γεωγραφικό μήκος και πλάτος, με την ένδειξη yyy):

var url = "http://api.weatherstack.com/current?access_key=xxx&query=yyy",

Μετατροπή GR σε DE μορφή ώρας

Καθώς δεν υπάρχει επιλογή της γλώσσας απεικόνισης στο ελεύθερο και στο κανονικό τιμολόγιο και, επομένως, είναι διαθέσιμη μόνο η μορφή ώρας AM / PM, αυτή μετατρέπεται σε μορφή 24 ωρών.

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_LDU του τύπου string

Κωδ:

! Μετατροπή AM/PM - Αποθήκευση σε W_LDU

var posValueStart,
var posValueEnd,
var posStart,
var posEnd; string stderr; string stdout,
system.Exec("wget -q -O - '"#url#"'", &stdout, &stderr),
WriteLine(stdout),
string wetter_xml = stdout,

string word = 'observation_time':"',
integer word_length = word.Length(),
integer word_position = wetter_xml.Find(word),
string data = wetter_xml.Substr((word_position + word_laenge), 5),
integer word_position = data.Find(word),
data = data.Substr(0, (word_position -2)),

string word = 'observation_time':"',
integer word_length = word.Length(),
integer word_position = wetter_xml.Find(word),
string PM = wetter_xml.Substr((word_position + word_laenge +6), 2),
integer word_position = PM.Find(word),
PM = PM.Substr(0, (word_position -2)),
WriteLine("AM/PM");WriteLine(PM),

string word = 'observation_time':"',
integer word_length = word.Length(),
integer word_position = wetter_xml.Find(word),
string HH = wetter_xml.Substr((word_position + word_laenge) + 1, 1),
integer word_position = HH.Find(word),
HH = HH.Substr(0, (word_position -2)),
WriteLine("HH");WriteLine(HH),

string word = 'observation_time':"',
integer word_length = word.Length(),
integer word_position = wetter_xml.Find(word),
string MM = wetter_xml.Substr((word_position + word_laenge) +3, 2),
integer word_position = MM.Find(word),
MM = MM.Substr(0, (word_position -2)),
WriteLine("MM");WriteLine(MM),

if (PM == "PM")
{
ακέραιος Diff = 12,
WriteLine("Diff");WriteLine(Diff),
var HH_i = HH.ToInteger(),
ακέραιος H = (HH_i + Diff),
WriteLine("HHi + Diff is = H)");WriteLine(H),
string HHMM = H #":",
WriteLine("H_+ : ");WriteLine(HHMM),
string HM = HHMM # MM,
WriteLine("HH_+12+MM");WriteLine(HM),
dom.GetObject("W_LDU").State(HM),
}
else
{
WriteLine("LDU_daten");WriteLine(daten),
dom.GetObject("W_LDU").State(data),
}


Χώρα - Κωδικός χώρας

Ο κωδικός χώρας εξάγεται επίσης στα αγγλικά και μετατρέπεται σε διεθνή κωδικό εδώ. Εάν απαιτείται, μπορούν να προστεθούν και άλλες χώρες σύμφωνα με αυτό το μοτίβο. Η τρέχουσα χώρα καθορίζεται αυτόματα από την πόλη που έχει επιλεγεί από το Weatherstack.

Μεταβλητή που πρέπει να δημιουργηθεί:

W_country_code του τύπου string

Κωδ:

! Country_code

pos = 0,
posStart = 'country":"',
posEnd = '", "region",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
string country_code = stdout.Substr(posValueStart, posValueEnd),

if (country_code == "Germany")
{
string country_code = "DE",
}
if (country_code == "Σουηδία")
{
string country_code = "SE",
}

WriteLine("country_code");WriteLine(country_code),
dom.GetObject("W_country_code").State(country_code),


Περιοχή

Η περιοχή αναφέρεται, για παράδειγμα, στην "Κάτω Σαξονία" στη Γερμανία και καθορίζεται επίσης αυτόματα από το Weatherstack.

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_region του τύπου string

Κωδ:

! Περιοχή

pos = 0,
posStart = 'region":"',
posEnd = '", "lat",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
string region = stdout.Substr(posValueStart, posValueEnd),
WriteLine("region");WriteLine(region),
dom.GetObject("W_region").State(region),


Πόλη

Κατά την εισαγωγή της πόλης, το Weatherstack καθορίζει αυτόματα τα αντίστοιχα δεδομένα γεωγραφικού μήκους και πλάτους, ενώ η πόλη καθορίζεται από τα γεωγραφικά δεδομένα που εισάγονται.

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_city_name του τύπου string

Κωδ:

! Όνομα_πόλης

pos = 0,
posStart = 'name':"',
posEnd = '", "country",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
string city_name = stdout.Substr(posValueStart, posValueEnd),
WriteLine("όνομα πόλης");WriteLine(όνομα πόλης),
dom.GetObject("W_city_name").State(city_name),


Γεωγραφικό πλάτος - geogr. Γεωγραφικό πλάτος

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_Lat του τύπου string

Κωδ:

! Lat

pos = 0,
posStart = "query": "Lat",
posEnd = 'and Lon',
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
string Lat = stdout.Substr(posValueStart, posValueEnd),
WriteLine("Lat");WriteLine(Lat),
dom.GetObject("W_Lat").State(Lat),


Γεωγραφικό μήκος - γεωγραφικό μήκος

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_Lon του τύπου string

Κωδ:

! Lon

pos = 0,
posStart = 'και Lon',
posEnd = '", "language",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
string Lon = stdout.Substr(posValueStart, posValueEnd),
WriteLine("Lon");WriteLine(Lon),
dom.GetObject("W_Lon").State(Lon),


Προβολή - ορατότητα

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_vis του τύπου string

Κωδ:

! Ορατότητα

pos = 0,
posStart = 'visibility':',
posEnd = ', "is_day",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
string vis_daten = stdout.Substr(posValueStart, posValueEnd),
WriteLine("vis_data");WriteLine(vis_data),
dom.GetObject("W_vis").State(vis_data),


Πίεση αέρα και τάση

Εκτός από την παρεχόμενη πίεση αέρα, η τάση της πίεσης αέρα προσδιορίζεται σε αυτό το σενάριο αποθηκεύοντας μια μετρούμενη τιμή ως "τρέχουσα" και μια προηγούμενη τιμή ως "παλιά". Και οι δύο συγκρίνονται μεταξύ τους, με αποτέλεσμα την τάση.

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_air_pressure_act του τύπου string
  • W_air_pressure_old του τύπου string
  • W_Τάση πίεσης αέρα του τύπου string

Κωδ:

! Εκτύπωση

var W_mb_alt,
var W_mb_akt,
pos = 0,
posStart = 'pressure':',
posEnd = ', "precip",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
data = stdout.Substr(posValueStart, posValueEnd);WriteLine(data),
real W_mb_akt = daten.ToInteger();WriteLine("W_mb_akt");WriteLine(W_mb_akt),
dom.GetObject("W_air_pressure_act").State(W_mb_act),
W_mb_alt = dom.GetObject("W_Luftdruck_alt").Value();WriteLine(W_mb_alt),

if (W_mb_akt > W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt),
dom.GetObject("W_Air pressure trend").State("S"),
}

if (W_mb_akt < W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt),
dom.GetObject("W_Air pressure trend").State("F"),
}

if (W_mb_akt == W_mb_alt)
{
dom.GetObject("W_air_pressure_old").State(W_mb_akt),
dom.GetObject("W_Air pressure trend").State("N"),
}


Θερμοκρασία ψύξης

Το ψύχος του ανέμου εξαρτάται από την ταχύτητα του ανέμου και τη θερμοκρασία. Στα θαλάσσια αθλήματα, η επίδραση της ψύξης λόγω εξάτμισης λόγω ψεκασμού είναι επίσης ένας πρόσθετος παράγοντας (ο οποίος δεν λαμβάνεται υπόψη εδώ). Η ψύχρα αναφέρεται στην αντιληπτή θερμοκρασία, η οποία σε πολύ ψυχρά περιβάλλοντα μπορεί να είναι έως και μιάμιση φορά αρνητική σε σχέση με την πραγματική θερμοκρασία και μπορεί να οδηγήσει σε γρήγορα κρυοπαγήματα.

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_chill του τύπου string

Κωδ:

! Chill

pos = 0,
posStart = 'feelslike":',
posEnd = ', "uv_index",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
string app_temp_daten = stdout.Substr(posValueStart, posValueEnd),
WriteLine("app_temp_data");WriteLine(app_temp_data),
dom.GetObject("W_chill").State(app_temp_daten),


Σύσταση προστασίας από UV και φως

Η έκθεση στην υπεριώδη ακτινοβολία που προσδιορίζεται με βάση τον δείκτη υπεριώδους ακτινοβολίας οδηγεί σε σύσταση για τυχόν αναγκαία χρήση μέτρων προστασίας από το φως.

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_UV του τύπου string
  • W_LSF του τύπου string

Κωδ:

! UV

pos = 0,
posStart = 'uv_index":',
posEnd = ', "visibility",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
var uv_daten = stdout.Substr(posValueStart, posValueEnd),
dom.GetObject("W_UV").State(uv_daten),
data = uv_data.Substr(0, (word_position -2)),
real number = data.ToInteger(),
WriteLine("UV number");WriteLine(number),

string LSF = "",
if (number = "3") && (number = "6") && (number = "8") && (number = "10") {LSF = "ΠΡΕΠΕΙ" ;}
dom.GetObject("W_LSF").State(LSF);WriteLine("LSF");WriteLine(LSF),


Ταχύτητα ανέμου

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_WdSpd του τύπου πληρώστε

Κωδ:

! Ταχύτητα ανέμου

pos = 0,
posStart = 'wind_speed':',
posEnd = ', "wind_degree",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
var wind_spd_daten = stdout.Substr(posValueStart, posValueEnd),
real x = wind_spd_daten.ToFloat(),
dom.GetObject("W_WdSpd").State(x),


Ταχύτητα ανέμου - Μετατροπές

Καθώς υπάρχουν διαφορετικές προτιμώμενες μετρήσεις της ταχύτητας του ανέμου σε διάφορες περιοχές, χώρες και εφαρμογές, ακολουθεί η μετατροπή από m/s σε km/h, κόμβους και Beaufort.

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_Wind_kmh του τύπου πληρώστε
  • W_Wind_knh του τύπου πληρώστε
  • W_Wind_Bft του τύπου πληρώστε

Κωδ:

real W_Wind_kmh = (wind_spd_daten.ToFloat() * 3.6);WriteLine("W_Wind_kmh");WriteLine(W_Wind_kmh),
dom.GetObject("W_Wind_kmh").State(W_Wind_kmh),


real W_Wind_knh = (W_Wind_kmh / 1.852);WriteLine("W_Wind_knh");WriteLine(W_Wind_knh),
dom.GetObject("W_Wind_knh").State(W_Wind_knh),

εάν (x < 0,30)
{
dom.GetObject("W_Wind_Bft").State(0),
}
if ((0.29 < x) && (x < 1.51))
{
dom.GetObject("W_Wind_Bft").State(1),
}
if ((1.59 < x) && ( x < 3.31))
{
dom.GetObject("W_Wind_Bft").State(2),
}
if ((3.39 < x) && ( x < 5.41))
{
dom.GetObject("W_Wind_Bft").State(3),
}
if ((5.49 < x) && ( x < 7.91))
{
dom.GetObject("W_Wind_Bft").State(4),
}
if ((7.99 < x) && (x < 10.71))
{
dom.GetObject("W_Wind_Bft").State(5),
}
if ((10.79 < x) && (x < 13.81))
{
dom.GetObject("W_Wind_Bft").State(6),
}
if ((12.89 < x) && (x < 17.11))
{
dom.GetObject("W_Wind_Bft").State(7),
}
if ((17.19 < x) && (x < 20.71))
{
dom.GetObject("W_Wind_Bft").State(8),
}
if ((20.79 < x) && (x < 24.41))
{
dom.GetObject("W_Wind_Bft").State(9),
}
if ((24.49 < x) && (x < 28.41))
{
dom.GetObject("W_Wind_Bft").State(10),
}
if ((28.49 < x) && (x < 32.61))
{
dom.GetObject("W_Wind_Bft").State(11),
}
εάν (x > 32,6)
{
dom.GetObject("W_Wind_Bft").State(12),
}

Ταχύτητα ανέμου - κίνδυνος κρυοπαγήματος

Όποιος ταξιδεύει σε πολύ ψυχρές ζώνες θα λάβει προειδοποίηση με αυτό το σενάριο, εάν υπάρχει κίνδυνος κρυοπαγήματος λόγω της ταχύτητας του ανέμου και της αντιλαμβανόμενης εξωτερικής θερμοκρασίας, εκτός εάν χρησιμοποιείται ο κατάλληλος προστατευτικός ρουχισμός.

Ο υπολογισμός βασίζεται στην παραδοχή ότι μπορεί να θεωρηθεί πτώση της θερμοκρασίας του δέρματος στους -4,8 °C για έκθεση του δέρματος για 30 λεπτά ή λιγότερο, πράγμα που σημαίνει ότι κρυοπαγήματα συμβαίνουν σε 5% των ανθρώπων.

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_Wind_danger του τύπου boolean

Κωδ:

if (((app_temp_data == -27.2) && (8 > W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh W_Wind_kmh <60.1))))
{
dom.GetObject("W_Wind_Danger").State(true),
}
else
{
dom.GetObject("W_Wind_Danger").State(false),
}


Κατεύθυνση ανέμου (γεωγραφική)

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_wind_dir του τύπου string

Κωδ:

! Γεωγραφική κατεύθυνση του ανέμου

pos = 0,
posStart = 'wind_dir":"',
posEnd = '", "pressure",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
string wind_dir_daten = stdout.Substr(posValueStart, posValueEnd),
WriteLine("W_wind_dir");WriteLine(wind_dir_data),
dom.GetObject("W_wind_dir").State(wind_dir_daten),


Κατεύθυνση ανέμου (αριθμητική)

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_Wind_rchtg του τύπου string

Κωδ:

! Κατεύθυνση ανέμου αριθμητική

pos = 0,
posStart = 'wind_degree':',
posEnd = ', "wind_dir",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
string W_wind_rchtg = stdout.Substr(posValueStart, posValueEnd),
WriteLine("W_wind_rchtg");WriteLine(W_wind_rchtg),
dom.GetObject("W_wind_rchtg").State(W_wind_rchtg),


Νεφοκάλυψη

Η νεφοκάλυψη είναι επίσης γραμμένη στα αγγλικά από την Weatherstack, γι' αυτό και η μετάφραση στα γερμανικά παρέχεται εδώ.

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_description του τύπου string

Κωδ:

! Περιγραφή νεφοκάλυψης

pos = 0,
posStart = 'weather_descriptions':["',
posEnd = '"], "wind_speed",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
string clouds_description = stdout.Substr(posValueStart, posValueEnd),
WriteLine("clouds_description_EN");WriteLine(clouds_description),

if (clouds_description == "Cloudy")
{
string clouds_description_DE = "Συννεφιά",
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE),
dom.GetObject("W_description").State(clouds_description_DE),
}
if (clouds_description == "Ελαφρά βροχή")
{
string clouds_description_EN = "Ελαφρά βροχή",
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE),
dom.GetObject("W_description").State(clouds_description_DE),
}
if (clouds_description == "Ελαφριά βροχή")
{
string clouds_description_EN = "Ελαφριά βροχή",
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE),
dom.GetObject("W_description").State(clouds_description_DE),
}
if (clouds_description == "Light drizzle")
{
string clouds_description_DE = "Ψιχάλα",
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE),
dom.GetObject("W_description").State(clouds_description_DE),
}
if (clouds_description == "Mis")
{
string clouds_description_DE = "ομίχλη",
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE),
dom.GetObject("W_description").State(clouds_description_DE),
}
if (clouds_description == "Ελαφρές χιονοπτώσεις")
{
string clouds_description_EN = "Ελαφρές χιονοπτώσεις",
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE),
dom.GetObject("W_description").State(clouds_description_DE),
}
if (clouds_description == "Sunny")
{
string clouds_description_DE = "Χαρούμενα",
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE),
dom.GetObject("W_description").State(clouds_description_DE),
}
if (clouds_description == "Overcast")
{
string clouds_description_DE = "Συννεφιά",
WriteLine("clouds_description");WriteLine(clouds_description_EN),
dom.GetObject("W_description").State(clouds_description_DE),
}
if (clouds_description == "Μερικώς συννεφιασμένο")
{
string clouds_description_DE = "Μερικώς συννεφιασμένο",
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE),
dom.GetObject("W_description").State(clouds_description_DE),
}
if (clouds_description == "Clear")
{
string clouds_description_DE = "Clear",
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE),
dom.GetObject("W_description").State(clouds_description_DE),
}
if (clouds_description == "Ομίχλη")
{
string clouds_description_DE = "Ομίχλη",
WriteLine("clouds_description_DE");WriteLine(clouds_description_DE),
dom.GetObject("W_description").State(clouds_description_DE),
}
if (clouds_description == "Πιθανή πρόσκαιρη βροχή")
{
string clouds_description_EN = "Πιθανή ελαφριά βροχή",
WriteLine("clouds_description");WriteLine(clouds_description_EN),
dom.GetObject("W_description").State(clouds_description_DE),
}
if (clouds_description == "Μέτρια βροχή")
{
string clouds_description_DE = "Μέτρια βροχόπτωση",
WriteLine("clouds_description");WriteLine(clouds_description_EN),
dom.GetObject("W_description").State(clouds_description_DE),
}


Νεφοκάλυψη

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_clouds του τύπου string

Κωδ:

! Νεφοκάλυψη

pos = 0,
posStart = 'cloudcover":',
posEnd = ', "feelslike",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
string clouds_data = stdout.Substr(posValueStart, posValueEnd),
WriteLine("clouds_data");WriteLine(clouds_data),
dom.GetObject("W_clouds").State(clouds_data),


Πρόγνωση βροχής

Μεταβλητή που πρέπει να δημιουργηθεί:

  • W_Precipitation του τύπου string

Κωδ:

! Πρόβλεψη βροχής

var x,
pos = 0,
posStart = 'precip":',
posEnd = ', "humidity",
posValueStart = stdout.Find(posStart) + posStart.Length(),
posValueEnd = stdout.Find(posEnd)-posValueStart,
string precip = stdout.Substr(posValueStart, posValueEnd),
WriteLine("Βροχόπτωση");WriteLine(precip),
dom.GetObject("W_Precipitation").State(precip),


Ανύψωση - Αζιμούθιο

Το σενάριο γράφτηκε από τον ραδιοφάρος και υποβάλλεται στο Homematic Forum στη σελίδα 10 του σχετικού νήματος.

Πρέπει να δημιουργηθούν δύο μεταβλητές συστήματος:

  • sun_elevation του τύπου Αριθμός
  • sun_azimuth του τύπου Αριθμός

Γιατί 4 λεπτά; Επειδή η γη ολοκληρώνει τον κύκλο των 360° γύρω από τον ήλιο μία φορά κάθε 24 ώρες. 360° / 24 ώρες = 15° ανά ώρα, που αντιστοιχεί σε 60 λεπτά / 15° = 4 λεπτά.

Η δέσμη ενεργειών πρέπει να χρησιμοποιείται ανεξάρτητα από τις παραπάνω δέσμες ενεργειών ή το σχετικό πρόγραμμα, εάν το διάστημα ενημέρωσης είναι διαφορετικό από 4 λεπτά.

Πρόγραμμα:

Πρόγραμμα - Προσδιορισμός ύψους/αζιμούθιου

Μεταβλητές που πρέπει να δημιουργηθούν:

  • sun_azimuth του τύπου πληρώστε
  • sun_elevation του τύπου πληρώστε

Κωδ:

! Πάρτε το γεωγραφικό πλάτος
real phi = system.Latitude(),
phi = 0,017453292 * phi,


! Μετατροπή σε ακτίνια
! υπολογισμός sin_phi και cos_phi με σειρά Taylor
real temp = phi * phi,
real sin_phi =phi * ((temp * temp * temp * 0,0083334) +1,0 - (temp * 0,1666667)),


! ημιτονοειδής προσέγγιση
real cos_phi = (temp *temp *0,0416667) + 1,0 - (temp * 0,5),


! προσέγγιση συνημιτόνου
! Υπολογισμός της ηλιακής ώρας, όλοι οι χρόνοι σε λεπτά
integer time_min = system.Date("%M").ToInteger() + 60system.Date("%H").ToInteger(); integer tagesbeginn_min = system.SunriseTime("%M").ToInteger() + 60system.SunriseTime("%H").ToInteger(),
integer tagesende_min = system.SunsetTime("%M").ToInteger() + 60* system.SunsetTime("%H").ToInteger(),
integer sonnenzeit =time_min + 720 - 0,5 *(tagesbeginn_min +tagesende_min),
if (suntime > 1440) {suntime = suntime -1440;}
if (suntime 720) {suntime =suntime - 720; afternoon = true; }
else {sonnenzeit =720 -sonnenzeit;}


! Υπολογισμός sin_tau και cos_tau
real tau = 0.00436332313 * ηλιακός χρόνος; ! 15/60 * pi /180 * ηλιακή ώρα [0 < tau < pi ] if (tau < 1.570796327) {temp = tau * tau; real sin_tau =tau * ((temp * temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); tau= 1.570796327 - tau; temp = tau * tau; real cos_tau =tau * ((temp * temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)))} else {real tau1 =3.141592654 - tau; temp = tau1 * tau1- real sin_tau =tau1 * ((temp * temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); tau = tau - 1.570796327- temp = tau * tau- real cos_tau = (tau) (-1.0) ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667));}

! Υπολογισμός δέλτα
integer tageszahl = system.Date("%j").ToInteger(); tageszahl = tageszahl +10; if (tageszahl > 365) {tageszahl = tageszahl - 365;}
if (tageszahl 91) && (tageszahl 183) && (αριθμός ημερών 274) && (tageszahl < 366)) {tageszahl = 365 - tageszahl- real tag = 0,0172142 *tageszahl- temp = tag * tag- real delta = (-0,410152) *((temp *temp *0,041666) + 1,0 - (temp * 0,5));}

! υπολογισμός sin_delta, cos_delta
temp = delta * delta; real sin_delta =delta * ((temp * temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); !ημιτονοειδής προσέγγιση real cos_delta = (temp *temp *0.0416667) + 1.0 - (temp * 0.5),

! προσέγγιση συνημιτόνου
! Υπολογισμός tan_delta με τμηματική γραμμικοποίηση του tan
boolean vsign = true; if (delta=0.2618) {tan_delta = (1.1822*delta) - 0.0416;}
if (vsign == false) {tan_delta = (-1.0) * tan_delta;}


! Υπολογισμός του sin_elevation και του tan_azimuth
real sin_elevation = (sin_phi * sin_delta) +( cos_phi * cos_delta * cos_tau),
temp = sin_elevation * sin_elevation,
real sun_elevation = sin_elevation * (1,0 + (0,1666667 * temp) + (0,075 * temp * temp)),
sun_elevation = 57.29577951 * sun_elevation,
πραγματικός παρονομαστής = (sin_phi*cos_tau) - (cos_phi * tan_delta),
if (παρονομαστής < 0.0) {boolean plus180 = true;} real tan_azimut = sin_tau / παρονομαστής,


! Υπολογισμός του ηλιακού αζιμούθιου με γραμμικοποίηση του arctan κατά τεμάχια
boolean sign = true; if (tan_azimut =0.2679)&&(tan_azimut = 0.5774)&&(tan_azimut = 1.0)&&(tan_azimuth = 1.3032)&&(tan_azimuth = 1.7321)&&(tan_azimut = 2.4142)&&(tan_azimut = 2.9459)&&(tan_azimuth = 3.7321)&&(tan_azimuth = 5.0)&&(tan_azimuth = 7.0)&&(tan_azimuth = 12.0)&&(tan_azimuth = 20.0)&&(tan_azimuth = 50.0) {sonne_azimuth = (0.000099983* tan_azimuth) + 1.54579974;}
if (sun_azimuth> 1.5707963278) {sun_azimuth = 1.5707963278;}
if (sign == false) {sun_azimuth = (-1.0) * sun_azimuth;}
sun_azimuth = 57.29577951 * sun_azimuth,
if (plus180 == true) {sonne_azimut = sonne_azimut + 180.0;}


! Αποθήκευση της διόρθωσης της ώρας της ημέρας και των τιμών στις μεταβλητές του συστήματος
if (afternoon == false)
{sonne_azimut = 180.0 - sonne_azimut; sonnenzeit = 720 - sonnenzeit;}
else
{sun_azimuth = sun_azimuth + 180.0;sun_time = 720 + sun_time;}
sun_azimuth = 0.1 ((sun_azimut10.0) .ToInteger()),
sun_elevation = 0.1 ((sun_elevation10.0) .ToInteger()),
dom.GetObject("sonne_elevation").State(sonne_elevation),
dom.GetObject("sonne_azimut").State(sonne_azimut),

Αφήστε μια απάντηση

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *

elGreek