Seite 2 von 4

Re: Sonnen Azimuth zum schalten benutzen, aber wie ???

Verfasst: 18. Feb 2021 16:59
von franky199
Hallo UDO

Code: Alles auswählen

rule "azimuth Sonnenstand West"
    when
      Item PositionAzimuth changed 
    then
       if (((PositionAzimuth.state as Number).floatValue > 241) && ((PositionAzimuth.state as Number).floatValue < 242 ))
      {
          EgBeschattungWest.sendCommand(ON)
          logInfo("Azimuth","Rollo Runter  ", PositionAzimuth.state as Number)
      }
   
      else {
          EgBeschattungWest.sendCommand(OFF)
          logInfo("Azimuth","Rollo Auf", PositionAzimuth.state as Number)
      }
end
So schaut der code aus. nun möchte ich wie gesagt, via RadiationDirect als zusätliches element mit einbauen so das die rolläden oben bleiben wenn die sonne nicht scheint.

quasi sonnstand und strahlung

Re: Sonnen Azimuth zum schalten benutzen, aber wie ???

Verfasst: 18. Feb 2021 18:08
von PeterA
Hi franky,

bei mir werte ich nicht die Strahlung sondern die Wolkenmenge als zusätzliche Bedingung aus.

Gruß Peter

Re: Sonnen Azimuth zum schalten benutzen, aber wie ???

Verfasst: 18. Feb 2021 20:18
von franky199
Auch guter Ansatz wenn du da was hast. Ich bastel ja gerne..

Re: Sonnen Azimuth zum schalten benutzen, aber wie ???

Verfasst: 18. Feb 2021 21:47
von udo1toni
Ah, Du nutzt bestimmte Sonnenstände für die Beschattung :) Also brauchst Du nur eine zusätzliche Bedingung, die Du einfach mit einbaust. Meine Empfehlung ist aber, die Rule leicht anders zu gestalten:

Code: Alles auswählen

rule "azimuth Sonnenstand West"
 when
    Item PositionAzimuth changed
 then
    val nPos = (PositionAzimuth.state as Number).floatValue  // Azimuth
    val nWolken = Bewoelkung.state as Number                 // Bewölkungsgrad

    var iSoll = OFF                                          // Default Befehl

    if(nPos > 241 && nPos < 242 && nWolken < 40)
        iSoll = ON

    if(EgBeschattungWest.state != iSoll) {
        EgBeschattungWest.sendCommand(iSoll.toString)
        logInfo("Azimuth","Rollo {} (Azimuth {}°, Wolken {}%)",(if(iSoll == ON) "zu" else "auf"), nPos, nWolken)
    }
end
Die Nutzung von lokalen Konstanten macht hier die Rule zum einen leichter lesbar, zum zweiten wird der Status nur einmal ausgelesen, was Taktzyklen spart. Die Bewölkung habe ich pro forma mal mit rein geschrieben.
Der größte Unterschied zu Deiner Rule ist aber, dass der Steuerbefehl nur dann gesendet wird, wenn dies auch wirklich notwendig ist. Bei Deiner version wird alle 10 Minuten (wenn das der Refresh Intervall für Astro ist) ein Befehl OFF gesendet, außer wenn die Sonne passend steht, dann wird alt immer ON gesendet.
Das logInfo() verwendet zusätzlich einen ternären Operator um die Meldung entsprechend auszugeben.

Re: Sonnen Azimuth zum schalten benutzen, aber wie ???

Verfasst: 19. Feb 2021 05:29
von franky199
Udo vielen Dank, das werde ich heut Nachmittag gleich testen, bei Dir sieht das immer so einfach aus..
Ja so richtig war ich mit der Abfrage auch nicht zu frieden, da ja der Rollladen dann immer alle 10 min angesprochen wird.
Log info ist ein nettes gimnick, was jetzt nicht zwingend notwendig ist.
So kann ich es zwar lesen aber der log gibt es ja sowieso aus. Ich selber habe den mdt JAL Aktor 8fach dieser hat zwar die Option Absolute Positon aber nicht anfährt.( Openhab schmeisst zwar den befehl z.b. (30) der aktor setzt es aber nicht um.
Das bin ich dann umgangen in dem Ich im ets eine extra GA angelegt habe um eben diese eine Position anfahren zu können.
Allerdings geht das nur über funktion Schalter. Kleine Frage, die Abfrage für die Bewölkung bekomme ich dann auch aus der Openweather App? Da mit das im VS Code nicht so schön angezeigt wird.

Re: Sonnen Azimuth zum schalten benutzen, aber wie ???

Verfasst: 19. Feb 2021 19:53
von WolfgangE
Ich hab das letztes Jahr mal auf die schnelle so gelöst mit Temperatur und Solarstrahlung von der Wetterstation

Code: Alles auswählen


rule "Markise ausfahren"
		when
				Item Solarstrahlung changed
		then
		    var solar40 = Solarstrahlung.averageSince(now.minusMinutes(40),"influxdb")
			var temp40 = Aussentemperatur.averageSince(now.minusMinutes(40),"influxdb")
		    var solar20 = Solarstrahlung.averageSince(now.minusMinutes(20),"influxdb")
			var temp = Aussentemperatur.state
			
			
			var MarkiseState = Markise_BlindsControl.state
			if (Blattfeuchte.state == 0 && Solarstrahlung.averageSince(now.minusMinutes(40),"influxdb") > 700 && Aussentemperatur.averageSince(now.minusMinutes(40),"influxdb") > 27 && Markise_BlindsControl.state <= 80 ) {
				if (Markise_BlindsControl.state != 80) { Markise_BlindsControl.sendCommand(80)
	            logInfo("FILE", "Markise ausfahren auf 80%")
	            sendTelegram("HOMEbot","Markise wird auf 80% ausgefahren s40:" + solar40 +" t40 " + temp40 + " M: " + MarkiseState + " s20: " + solar20 + " t: " + temp ) } }
			else if (Blattfeuchte.state == 0 && Solarstrahlung.averageSince(now.minusMinutes(20),"influxdb") > 500 && Aussentemperatur.state > 18 ){
			    if (Markise_BlindsControl.state != 40) { Markise_BlindsControl.sendCommand(40)
	            logInfo("FILE", "Markise ausfahren auf 40%") 
	            sendTelegram("HOMEbot","Markise wird auf 40% ausgefahren s40:" + solar40 +" t40 " + temp40 + " M: " + MarkiseState + " s20: " + solar20 + " t: " + temp ) } }
			else if ((Solarstrahlung.averageSince(now.minusMinutes(20),"influxdb") < 350 && Markise_BlindsControl.state > 0) || (Aussentemperatur.state < 15 && Markise_BlindsControl.state > 0 ) )
			{
				Markise_BlindsControl.sendCommand(0)
	            logInfo("FILE", "Markise wieder einfahren")
	            sendTelegram("HOMEbot","Markise wird eingefahren ")
			}
			
end

Re: Sonnen Azimuth zum schalten benutzen, aber wie ???

Verfasst: 20. Feb 2021 12:11
von franky199
udo1toni hat geschrieben: 18. Feb 2021 21:47 Ah, Du nutzt bestimmte Sonnenstände für die Beschattung :) Also brauchst Du nur eine zusätzliche Bedingung, die Du einfach mit einbaust. Meine Empfehlung ist aber, die Rule leicht anders zu gestalten:

Code: Alles auswählen

rule "azimuth Sonnenstand West"
 when
    Item PositionAzimuth changed
 then
    val nPos = (PositionAzimuth.state as Number).floatValue  // Azimuth
    val nWolken = Bewoelkung.state as Number                 // Bewölkungsgrad

    var iSoll = OFF                                          // Default Befehl

    if(nPos > 241 && nPos < 242 && nWolken < 40)
        iSoll = ON

    if(EgBeschattungWest.state != iSoll) {
        EgBeschattungWest.sendCommand(iSoll.toString)
        logInfo("Azimuth","Rollo {} (Azimuth {}°, Wolken {}%)",(if(iSoll == ON) "zu" else "auf"), nPos, nWolken)
    }
end
Die Nutzung von lokalen Konstanten macht hier die Rule zum einen leichter lesbar, zum zweiten wird der Status nur einmal ausgelesen, was Taktzyklen spart. Die Bewölkung habe ich pro forma mal mit rein geschrieben.
Der größte Unterschied zu Deiner Rule ist aber, dass der Steuerbefehl nur dann gesendet wird, wenn dies auch wirklich notwendig ist. Bei Deiner version wird alle 10 Minuten (wenn das der Refresh Intervall für Astro ist) ein Befehl OFF gesendet, außer wenn die Sonne passend steht, dann wird alt immer ON gesendet.
Das logInfo() verwendet zusätzlich einen ternären Operator um die Meldung entsprechend auszugeben.

Hallo Udo, So deine Rule Funktioniert tadellos,
ich habe jetzt ein wenig gebastelt und es geschafft die absolute Position im Aktor anzusprechen.
Dies habe ich geschafft in dem ich in der things einen neuen Dimmer angelegt und jedoch nur die Gruppen Adresse der absoluten Position und Position des Aktors eingetragen habe. natürlich dazu eine entsprechende item.
Dieses habe ich zusammengefasst in eine gruppe und testweise mit einer time cron rule versucht auf direkte Position zu fahren. Funktioniert. Kannst du mir noch einmal behilflich sein, Deine Rule anzupassen so das ich bei anzimuth XXX und bei Wolken XX eine bestimmte Position anfahren kann und danach wieder zurück auf null?
Achso, vielleicht könnte man in die Regel mit aufnehmen.
Wenn das rollo eine tiefere Position hat als sie Beschattung, brauch er nix tun.
Sorry für die Arbeit, ich tue mich selber sehr schwer um diese Regeln umzusetzen.

Re: Sonnen Azimuth zum schalten benutzen, aber wie ???

Verfasst: 21. Feb 2021 00:16
von udo1toni
Warum nimmst Du denn einen Dimmer Channel für ein Rollo? Oder habe ich Dich da falsch verstanden?

Re: Sonnen Azimuth zum schalten benutzen, aber wie ???

Verfasst: 21. Feb 2021 04:17
von franky199

Code: Alles auswählen

Rollershutter   HausItemsEgKochenRollo1           "Rollo küche spüle [%s %%]"                   (eg_wohnbereich, Rollo_Morgens, test_rollo)        {channel="knx:device:bridge:generic:eg_kochen_rollo_1"}
Dimmer EgRolloSpuele                              "Eg rollo spuele"                                                          (test_rollo)                       {channel="knx:device:bridge:generic:eg_rollo_spuele"}

Code: Alles auswählen

Type rollershutter    : eg_kochen_rollo_1      "Rollo Küche Spüle"             [ upDown="1/0/4", stopMove="1/0/5", position="1/0/10+<1/0/6",autoupdate="false"  ]
 Type dimmer           : eg_rollo_spuele         ""                             [ switch=  "", position="1/0/10+<1/0/6",  increaseDecrease= "" ]
Wenn ich nur den Rollershutter verwende, fährt er nicht die absolute Position an. Ich weiss nicht warum, aber so klappt es.

Re: Sonnen Azimuth zum schalten benutzen, aber wie ???

Verfasst: 21. Feb 2021 11:41
von franky199
Problem gefunden und Dimmer wieder entfernt. Manchmal sieht man den Wald vor lauter bäumen nicht.

Code: Alles auswählen

[ upDown="1/0/4", stopMove="1/0/5", position="5.001:1/0/6+<1/0/10",autoupdate="false"  ]
Jetzt würde ich eben gern noch die rule so ändern das Rollladen bei Sonnenstand und Wolken Position x anfahren, aber sind diese schon weiter unten soll eben nix passieren.