Πίνακας περιεχομένων
Ενημέρωση - Ιανουάριος 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, καθώς και των προαιρετικών επιλογών αναζήτησης που περιλαμβάνονται στα πακέτα υψηλότερης τιμής, συμπεριλαμβανομένων διαφόρων παραδειγμάτων κώδικα, εδώ προβάλλεται.
Πρόγραμμα
Το πρόγραμμα είναι αρκετά εκτεταμένο λόγω του μεγάλου όγκου δεδομένων. Ως εκ τούτου, τα επιμέρους τμήματα παρατίθενται διαδοχικά εδώ. Όλα τα αποσπάσματα κώδικα μπορούν τελικά να συνδυαστούν σε ένα ενιαίο πρόγραμμα.
Εκτός από τα προαναφερθέντα δεδομένα, το πρόγραμμα υπολογίζει επιπλέον δεδομένα και τα οποία διατίθενται για οπτικοποίηση:
- Ανύψωση και αζιμούθιο του ήλιου
- Σύσταση συντελεστή προστασίας από το φως

Επικεφαλίδα προγράμματος
Η επικεφαλίδα περιέχει μόνο τη διεύθυνση 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
του τύπου stringW_air_pressure_old
του τύπου stringW_Τάση πίεσης αέρα
του τύπου 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
του τύπου stringW_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 με σειρά Taylorreal 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_taureal 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 με τμηματική γραμμικοποίηση του tanboolean 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_azimuthreal 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),