Rule ausführen während Tageslicht

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Berengar13
Beiträge: 11
Registriert: 12. Okt 2019 19:43
Answers: 0

Rule ausführen während Tageslicht

Beitrag von Berengar13 »

Wie schon angedroht melde ich mich nochmal zurück mit der Steuerung meiner Solarpanelnachführung.
Natürlich soll das Panel nur während des Tageslichtes nachgeführt werden und bei Dunkelheit die kumulierte Anzahl an Schritten des Steppermotors
zurückbewegt werden zum Ausgangspunkt.
Problem: Ich bekomme die Tageslicht Zeitpunkte (Anfang und Ende) nicht übergeben. Fehlermeldung in Visual Studio : The value of the local variable SoAufj is not used

Der Teil mit Now.is after stammt noch aus dem ersten Versuch und kann hier wahrscheinlich ignoriert werden.
Irgendwie steh ich auf dem Schlauch :?

Code: Alles auswählen

//Test 
var Timer tmoscha = null //timer für den Motorschalter
var String SoAufg 
var String SoUntg
//var Number SoAufj = null //Sonnenaufgang in Jodatime
val DateTime SoUntj //Sonnenuntergang in Jodatime
var Number startAZ = 50 //Startazimut
var Number LastAZ = null //Letzter Azimutwert
var Number AZvar = null //Aktueller Azimutwert
var Number Steps = null //Schritte des Steppers
var Number StepsKum = null //Aufaddierte Schritte
var String httpcom = "" // Zu sendender String für HTTPRequest
var String httpSteps ="" // Steps als String
rule "Tageslaenge" // Sonnenaufgang und Untergang holen
  when 
    Time cron "0 /2 5-23 * * ? *"
  //  Time is midnight
    then 
        AstronomischeSonnendaten_Daylight_StartTime.getState
    AstronomischeSonnendaten_Daylight_EndTime.getState
   //SoAufg = AstronomischeSonnendaten_Daylight_StartTime.state.toString 
   //SoUntg = AstronomischeSonnendaten_Daylight_EndTime.state.toString
var SoAufj = new DateTime((AstronomischeSonnendaten_Daylight_StartTime.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli)

//logInfo("Tag", "Tagesbeginn = " +SoAufg)
//logInfo("Tag", "Tagesende = " +SoUntg)
//logInfo("Tag", "Tagesdauer = " +DaylightDuration.state)
    end 

rule "Panel drehen" //Während Tag Azimuth holen und Differenz zu letztem Azimut berechnen und Schritte für Stepper kalkulieren
  when
   
   Time cron "0 /30 5-23 * * ? *"
  then 
   if (now.isAfter(Sonnenuntergang_Zeit) && now.isBefore(SoUnt )) {   
      LocalSun_Position_Azimuth.getState
  
  AZvar = LocalSun_Position_Azimuth.state as Number

  AZvar = Math::round(AZvar.floatValue())
  
  Steps = (AZvar - LastAZ) / 1.8
  Steps = Math::round(Steps.floatValue())
  logInfo("Pumpe", "Letzte = " +LastAZ)
  LastAZ = AZvar
  StepsKum = StepsKum + Steps
  logInfo("Pumpe", "aktuelle = " +AZvar)
  logInfo("Pumpe", "Schritte = " +Steps  )  
  logInfo("Pumpe", "Kumulierte Schritte = " +StepsKum  )

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Rule ausführen während Tageslicht

Beitrag von udo1toni »

Schau Dir bitte mal an, was Du da gepostet hast. Der Code ist nicht nur unvollständig, er ist auch mit Sicherheit nicht lauffähig.

Sonnenaufgang und Sonnenuntergang kannst Du leicht über das Astro Binding erfahren. Die einfachste Variante wäre also, ein Switch Item IsNight zu definieren, welches durch das Astro Binding und die beiden Trigger sunset#event und sunrise#event hin und her geschaltet wird. Anschließend kannst Du dieses Item in Deinen Rules verwenden, um zu entscheiden, ob die Sonne oberhalb oder unterhalb des Horizonts steht.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

EmptySoft
Beiträge: 247
Registriert: 7. Jan 2020 14:45
Answers: 2
Kontaktdaten:

Re: Rule ausführen während Tageslicht

Beitrag von EmptySoft »

Du könntest das Panel auch jeden Tag um 22 Uhr zurück fahren, da ist es sicher jeden Tag nach Sonnenuntergang (in unseren Breiten)
BYe
Harald

Berengar13
Beiträge: 11
Registriert: 12. Okt 2019 19:43
Answers: 0

Re: Rule ausführen während Tageslicht

Beitrag von Berengar13 »

In jedem Fall erstmal Danke für die Antwort.
udo1toni hat geschrieben: 25. Jun 2020 23:28 Schau Dir bitte mal an, was Du da gepostet hast. Der Code ist nicht nur unvollständig, er ist auch mit Sicherheit nicht lauffähig.

Sonnenaufgang und Sonnenuntergang kannst Du leicht über das Astro Binding erfahren. Die einfachste Variante wäre also, ein Switch Item IsNight zu definieren, welches durch das Astro Binding und die beiden Trigger sunset#event und sunrise#event hin und her geschaltet wird. Anschließend kannst Du dieses Item in Deinen Rules verwenden, um zu entscheiden, ob die Sonne oberhalb oder unterhalb des Horizonts steht.
Der Code ist definitiv unvollständig und läuft wenn vollständig genau so wie er soll..... bis ich dann versucht habe die Geschichte durch die Tageszeit zu steuern.
Darf ich noch die doofe Frage stellen, die möglicherweise zeigt, dass ich das ganze Konzept Item noch nicht verstanden habe, lege ich einfach an:

Code: Alles auswählen

switch isNight  "Nacht"  und dann?

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Rule ausführen während Tageslicht

Beitrag von sihui »

Berengar13 hat geschrieben: 26. Jun 2020 19:19 und dann?
https://community.openhab.org/t/design- ... -day/15407
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

Berengar13
Beiträge: 11
Registriert: 12. Okt 2019 19:43
Answers: 0

Re: Rule ausführen während Tageslicht

Beitrag von Berengar13 »

Danke für den Hinweis
[/quote]

https://community.openhab.org/t/design- ... -day/15407
[/quote]

Nach dieser Anleitung war ich zuerst vorgegangen allerdings hat die Umwandlung in JodaTime nicht geklappt, weiss nicht mehr warum,
und hatte dann auf der Suche nach einfacheren Varianten die geposteten Ein- und Ausfälle

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Rule ausführen während Tageslicht

Beitrag von udo1toni »

Na, Time of Day ist von der Idee eine nette Sache, aber gerade hier eher oversized.
Erst mal geht es damit los, dass ein Item so angelegt wird:

Code: Alles auswählen

Switch IsNight “Nacht [%s]“
Auf Groß/Kleinschreibung achten!
Dann brauchst Du das Astro Binding. Hast Du in Paper UI Deinen Standort eingetragen, werden nach der Installation des Astro Bindings automatisch in der Inbox zwei Things auftauchen, Sun:local und Moon:local (oder so ähnlich - ich sitze gerade nicht davor)
Nun brauchst Du noch zwei Rules, die das Item umschalten:

Code: Alles auswählen

 rule “Sonnenaufgang“
when
    Channel “astro:sund:local:sunrise#event“ triggered START
then
    IsNight.postUpdate(OFF)
end

rule “Sonnenuntergang“
when
    Channel “astro:sund:local:sunset#event“ triggered END
then
    IsNight.postUpdate(ON)
end
START und END sind die Zeitpunkte, zu denen das Ereignis beginnt bzw. endet. Beginn des Sonnenaufgangs ist, wenn der erste Zipfel der Sonne am Horizont auftaucht, Ende des Sonnenaufgangs ist, wenn die Sonne sich vom Horizont löst.
Beim Sonnenuntergang läuft es andersrum, Beginn des Sonnenuntergangs ist, wenn die Sonne den Horizont berührt, Ende ist, wenn der letzte Zipfel am Horizont verschwindet.

EDIT: Ich arbeite hier gerade mit einem iPad, wie verhindere ich, dass es aus dem Zollzeichen semantische Anführungszeichen macht?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

desidia
Beiträge: 22
Registriert: 20. Okt 2017 23:15
Answers: 0

Re: Rule ausführen während Tageslicht

Beitrag von desidia »

womit führst du den dein solarpanel nach? finde nichts in deinen alten posts... vielleicht geht es ja viel einfacher :)

Berengar13
Beiträge: 11
Registriert: 12. Okt 2019 19:43
Answers: 0

Re: Rule ausführen während Tageslicht

Beitrag von Berengar13 »

@Udo1Toni:
Vielen Dank, sieht aus als hätte ich viel zu kompliziert gedacht, so ähnlich hatte ich mal angefangen aber mit der Inbrunst des Unwissenden gedacht:Das kann so nicht funktionieren!!! So denke ich wirds laufen.
@desidia:
Ich hatte das vorher nie erläutert weil es noch eine ziemlich unausgegorene Idee war. Ursprünglich wollte ich mit einem WEMOS einen Servo ansteuern. Das geht so schön einfach mit Angabe einer Gradzahl ;) Es stellte sich aber heraus, dass das ganze ein bischen schwachbrüstig und besser geeignete Servos mir ein wenig zu teuer waren. Dann waren da noch einige NEMA17 Stepper....
Also das ganze liest JETZT während des Tages den gelieferten Azimut alle halbe Stunde ein. Ausgehend von einer geg. Nullrichtung werden dann die Schritte für den Stepper berechnet die notwendig sind um auf die neue Position auszurichten und sendet den passenden Befehl an den WEMOS der den Stepper steuert. Über Tag werden die Schritte aufaddiert und bei Einbruch der Dunkelheit an den WEMOS für die Rückkehr an die Ausgangsposition gesendet. Die Elevation habe ich mir für lange Winterabende aufgehoben wenn mir dazu eine Geeignete Konstruktion einfällt. :geek:

desidia
Beiträge: 22
Registriert: 20. Okt 2017 23:15
Answers: 0

Re: Rule ausführen während Tageslicht

Beitrag von desidia »

Ich hatte es nämlich auch vor mir einen sonnennachlauf Smart zu machen, kam aber dann davon ab und habe mir einen fertigen gekauft und triggere somit nur die sonnenenergie die das Modul "geerntet hat"...

Im groben und ganzen würde ich keinen sonnennachlauf empfehlen. Das bisschen Strom was an den randzeiten mehr produziert wird steht meiner Meinung nach in keinem Verhältnis zum Einsatz.
Ich weiß natürlich nicht was es nun beim Eigenbau kostet, aber im Nachhinein hätte ich es lassen können.... :(

Antworten