HM-Script für virtuelle Wetterstation

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Der-Kieler
Beiträge: 38
Registriert: 23.04.2020, 22:42
System: Alternative CCU (auf Basis OCCU)
Wohnort: Flintbek
Hat sich bedankt: 7 Mal
Danksagung erhalten: 1 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Der-Kieler » 10.06.2020, 16:57

MichaelN hat geschrieben:
10.06.2020, 08:50

Code: Alles auswählen

var owSonnenstunden;
owSonnenstunden = (owWolken/100)*((system.SunsetTime().ToInteger()-system.SunriseTime().ToInteger())/3600.0);
ungetestet
Vielen Dank erst einmal. Ich habe jetzt 3 Stunden rumprobiert, aber ich bekomme es nicht zum Rennen. Es wird immer 0,00 angezeigt in der Variablen.
- Variable "Sonnenstunden ist gesetzt (Zahl).
- Variable "owWolken" ist gesetzt (% mit festem Wert 50 - zum Testen).
- Wenn ich das Programm mit obigem Code ausführe passiert leider nichts in der Variablen: Bleibt bei Null.
- Habe auch einfach mal aus Verzweiflung das probiert, kommt aber auch kein Wert: owSonnenstunden = system.SunsetTime().ToInteger()

Variablen und Programmcode per copy&paste eingefügt, so dass ich Schreibfehler ausschließe.
Was mache ich falsch? :roll:
Zuletzt geändert von Der-Kieler am 10.06.2020, 17:35, insgesamt 1-mal geändert.
Raspberrymatic auf Pi4 mit 40 Geräten, 15 Programmen und 33 Variablen.

ecky78
Beiträge: 164
Registriert: 03.06.2016, 21:55
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 51 Mal
Danksagung erhalten: 8 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von ecky78 » 10.06.2020, 17:13

Schuß aus der Hüfte: Nimm doch mal testweise das /100 raus. Deine Prozentvariable kommt nämlich im Skript u.U. als 0.5 an, durch 100 könnte Null ergeben. Und damit ist alles Weitere auch Null.
Grüße,
Ecky

Der-Kieler
Beiträge: 38
Registriert: 23.04.2020, 22:42
System: Alternative CCU (auf Basis OCCU)
Wohnort: Flintbek
Hat sich bedankt: 7 Mal
Danksagung erhalten: 1 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Der-Kieler » 10.06.2020, 17:43

ecky78 hat geschrieben:
10.06.2020, 17:13
Schuß aus der Hüfte: Nimm doch mal testweise das /100 raus. Deine Prozentvariable kommt nämlich im Skript u.U. als 0.5 an, durch 100 könnte Null ergeben. Und damit ist alles Weitere auch Null.
Habe ich gleich ausprobiert, bleibt aber Null. Ich habe auch die Berücksichtigung der Wolken aus der Formel genommen, so dass nur noch Sonnenuntergang und -aufgang voneinander abgezogen werden. Trotzdem immer Null. :-/. Zum Verrückt werden.
Raspberrymatic auf Pi4 mit 40 Geräten, 15 Programmen und 33 Variablen.

Benutzeravatar
Baxxy
Beiträge: 10782
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2205 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Baxxy » 10.06.2020, 18:08

Der-Kieler hat geschrieben:
10.06.2020, 17:43
Zum Verrückt werden
Mir ist immer noch nicht ganz klar wie man anhand des Bewölkungsgrades in % (welcher alle X-Stunden oder Minuten bei Scriptausführung aktualisiert wird) und der Tageszeit (Zeit in Stunden zwischen Sonnenauf / Untergang) eine einigermaßen vernünftige Sonnenscheindauer berechnen will.
Das ist doch für die Katz! :shock:

Desweiteren bin ich kein Freund von
MichaelN hat geschrieben:
10.06.2020, 08:50
ungetestet
...en Scriptbeispielen die Nutzern mit wenig(er) Kenntnissen möglicherweise zum Verzweifeln bringen. :roll:

Wenn ich es richtig verstanden habe möchtest du die Prozentuale Bewölkung einfach von der theoretischen Sonnenscheindauer (Sonnenauf - Sonnenuntergang) abziehen.

Als Beispiel Berlin.
Theoretische Sonnenscheindauer: 17h
Aktueller Bewölkungsgrad: 99%

Ergibt eine errechnete Sonnenscheindauer von 0,17h

Also totaler Müll. :!:

Sript dazu... getestet:

Code: Alles auswählen

real owWolken = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("ow Bewölkung").Value();
var sunset = system.SunsetTime().ToInteger();
var sunrise = system.SunriseTime().ToInteger();
!- Differenz zwischen Sonnenauf- und -untergang ermitteln
var suntime = sunset - sunrise;
WriteLine("Differenz Sonnenauf / Untergang: " # suntime # " Stunden");
WriteLine("Bewölkungsgrad: " # owWolken.ToString(0) # "%");
!- Berechnung Sonnenstunden
real owSonnenstunden = (((100.0 - owWolken)/100.0)*suntime);
WriteLine("Berechnete Sonnenstunden: " # owSonnenstunden.ToString(2) # " h");
Ergebnis:

Code: Alles auswählen

------------------------------- Scriptausgabe -------------------------------
Differenz Sonnenauf / Untergang: 17 Stunden
Bewölkungsgrad: 99%
Berechnete Sonnenstunden: 0.17 h
Grüße
Baxxy

MichaelN
Beiträge: 9655
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von MichaelN » 10.06.2020, 18:25

Ging nicht in einem Schritt, weil Integer im Term sind und dadurch zwischendurch die Kommastellen abgeschnitten werden. :(
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Der-Kieler
Beiträge: 38
Registriert: 23.04.2020, 22:42
System: Alternative CCU (auf Basis OCCU)
Wohnort: Flintbek
Hat sich bedankt: 7 Mal
Danksagung erhalten: 1 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Der-Kieler » 10.06.2020, 18:38

Baxxy hat geschrieben:
10.06.2020, 18:08
Ergebnis:

Code: Alles auswählen

------------------------------- Scriptausgabe -------------------------------
Differenz Sonnenauf / Untergang: 17 Stunden
Bewölkungsgrad: 99%
Berechnete Sonnenstunden: 0.17 h
Grüße
Baxxy
Vielen lieben Dank Baxi!
Ich hatte wirklich gedacht, dass das ein Dreizeiler ist. Dass das dann so aufwändig wurde! Wow!
Dafür ein extra großes Dankeschön von mir!!!

Ich habe es gleich ausprobiert und folgende Variablen angelegt (bzw. waren schon durch die Wetterstation vorhanden):
ow Bewölkung (steht bei mir auf 40%)
owWolken (Zahl)
sunrise (Zahl)
sunset (Zahl)
suntime (Zahl)
owSonnenstunden (Zahl)

In der ersten Zeile wird doch die Variable "ow Bewölkung" in die Variable owWolken geschrieben. Da kommt bei mir aber nichts an?!
Auch die Variablen sunrise und sunset bleiben bei mir leer?! Und die Variable owSonnenstunden gibt damit natürlich 0,00 aus.

Habe ich die Variablen im falschen Format angelegt oder wo liegt der Fehler?
Raspberrymatic auf Pi4 mit 40 Geräten, 15 Programmen und 33 Variablen.

Benutzeravatar
Baxxy
Beiträge: 10782
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2205 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Baxxy » 10.06.2020, 19:24

Der-Kieler hat geschrieben:
10.06.2020, 18:38
Ich hatte wirklich gedacht, dass das ein Dreizeiler ist. Dass das dann so aufwändig wurde! Wow!
Das sieht nur aufwendig aus weil ich (fast) jeden Schritt separat ausführe. Das macht es für mich (und Mitleser) einfacher die Schritte nachzuvollziehen.
Man kann das auch zu einem Zweizeiler kürzen der den errechneten Wert auch gleich in eine vorher Anzulegende! SysVar Typ Zahl schreibt. :wink:

Code: Alles auswählen

real owWolken = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("ow Bewölkung").Value();
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("ow Sonnenscheindauer").State(((((100.0 - owWolken)/100.0)*(system.SunsetTime().ToInteger() - system.SunriseTime().ToInteger()))));
An meiner Meinung zu dieser Art der Ermittlung der Sonnenstunden ändert sich aber nichts.

Grüße
Baxxy

Benutzeravatar
Baxxy
Beiträge: 10782
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2205 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Baxxy » 10.06.2020, 19:35

Der-Kieler hat geschrieben:
10.06.2020, 18:38
wo liegt der Fehler
Für den Zweizeiler müssen 2 SysVar's Typ Zahl vorhanden sein. Die erste solltest du schon haben, die kommt ja mit dem Wetter-Abfragescript und muss genau so auch in der ersten Scriptzeile bei

Code: Alles auswählen

("ow Bewölkung")
namentlich eingesetzt werden. Die zweite musst du neu anlegen und den Namen dann in der zweiten Scriptzeile bei

Code: Alles auswählen

("ow Sonnenscheindauer")
namentlich einsetzen.

Info:
Die erste Scriptzeile liest die SysVar aus, die zweite Scriptzeile schreibt den errechneten Wert in die SysVar.

Mehr ist nicht nötig.

Grüße
Baxxy

Der-Kieler
Beiträge: 38
Registriert: 23.04.2020, 22:42
System: Alternative CCU (auf Basis OCCU)
Wohnort: Flintbek
Hat sich bedankt: 7 Mal
Danksagung erhalten: 1 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Der-Kieler » 10.06.2020, 20:17

Vielen Dank Baxi für Deine Erklärungen. Vielleicht bekomme ich dann ja doch mal selbst ein Programm hin. :oops:

Da ich die Angabe für Pocke Control in Minuten brauche habe ich das Ergebnis noch mit 60 multipliziert:

Code: Alles auswählen

real owWolken = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("ow Bewölkung").Value();
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("ow Sonnenscheindauer").State(((((100.0 - owWolken)/100.0)*(system.SunsetTime().ToInteger() - system.SunriseTime().ToInteger()))*60));
So funktioniert es jetzt. Ich werde mal beobachten, ob der Wert sehr unsinnig ist. Auf jeden Fall habe ich wieder etwas mehr verstanden und ich habe jetzt einen Wert in Pocket Control, der zumindest näherungsweise die Sonnenstunden ausgibt. Ich freue mich; Danke noch einmal. :-)
Zuletzt geändert von Der-Kieler am 11.06.2020, 08:44, insgesamt 1-mal geändert.
Raspberrymatic auf Pi4 mit 40 Geräten, 15 Programmen und 33 Variablen.

thfrank
Beiträge: 248
Registriert: 16.05.2020, 12:54
System: CCU
Hat sich bedankt: 48 Mal
Danksagung erhalten: 1 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von thfrank » 11.06.2020, 08:33

ich wollte das Skript gestern abend neu aufsetzen, weil es bei mir nicht mehr funktioniert hat. Habe dazu auch alle Systemvariablen gelöscht :-(

jetzt habe ich alles neu installiert (Cux-Geräte, Programm), aber die SV werden nicht mehr angelegt.

Was tun?

PS: noch eine Verständnisfrage: im Skript werden zwei Cux-Geräte angesprochen. Das zweite dient zum Schreiben der Werte in das virtuelle Gerät (9002001). Welche Adresse ist die richtige für das erste Gerät (habe hier den Standard 2801001:1 übernommen) und was macht das?

Vielen Dank!

Antworten

Zurück zu „Projektvorstellungen“