Seite 1 von 1

[V4.1] Custom Logik zur Steuerung sonnenstandsabhängig boolean

Verfasst: Di Nov 12, 2024 1:41 pm
von jensgulow
Anbei mal eine Custom-Logik welche folgende Anforderungen erfüllen sollte:

Einschalten von Verbrauchern (boolean) in Abhängigkeit vom Sonnenstand (hier speziell Sonnenuntergang)

Beliebige Zeiträume vor/nach Sonnenuntergang auswählbar

Aktueller code erlaubt 5 verschiedene Zeitkorrekturen


Hier der code dazu:

Code: Alles auswählen

/**
 * Schaltzeiten boolean in Abhängigkeit vom Sonnenstand
 * Hier: Abends zum Sonnenuntergang (aus Astrobaustein)
 * Korrekturwerte (plus/minus) in Sekunden
 */

{
  "Level": [
    ["$Input","int",0],
    ["$Result1","bool",false],
    ["$Result2","bool",false],
    ["$Result3","bool",false],
    ["$Result4","bool",false],
    ["$Result5","bool",false],
    ["$Out1","int",0],
    ["$Out2","int",0],
    ["$Out3","int",0],
    ["$Out4","int",0],
    ["$Out5","int",0],
    ["$Korrektur1","int",0],
    ["$Korrektur2","int",0],
    ["$Korrektur3","int",0],
    ["$Korrektur4","int",0],
    ["$Korrektur5","int",0],
    ["$Formula","string","X1+X2"],
    ["$VAR<Inhibit?>","bool",false]
  ],
  "Module": [
    ["Break",["$VAR<Inhibit?>"]],
    
    ["CalcFormula",["$Input","$Korrektur1"], "$Out1", "$Formula"],
    ["Wakeup","$Out1","$Result1"],
    ["SendExplicit","$Result1","$Result1",1],
    
    ["CalcFormula",["$Input","$Korrektur2"], "$Out2", "$Formula"],
    ["Wakeup","$Out2","$Result2"],
    ["SendExplicit","$Result2","$Result2",1],
    
    ["CalcFormula",["$Input","$Korrektur3"], "$Out3", "$Formula"],
    ["Wakeup","$Out3","$Result3"],
    ["SendExplicit","$Result3","$Result3",1],

    ["CalcFormula",["$Input","$Korrektur4"], "$Out4", "$Formula"],
    ["Wakeup","$Out4","$Result4"],
    ["SendExplicit","$Result4","$Result4",1],

    ["CalcFormula",["$Input","$Korrektur5"], "$Out5", "$Formula"],
    ["Wakeup","$Out5","$Result5"],
    ["SendExplicit","$Result5","$Result5",1]
  ],
  "Input": [
    ["Korrektur1","Zeit in sec (positiv oder negativ)","$Korrektur1","u"],
    ["Korrektur2","Zeit in sec (positiv oder negativ)","$Korrektur2","u"],
    ["Korrektur3","Zeit in sec (positiv oder negativ)","$Korrektur3","u"],
    ["Korrektur4","Zeit in sec (positiv oder negativ)","$Korrektur4","u"],
    ["Korrektur5","Zeit in sec (positiv oder negativ)","$Korrektur5","u"],
    ["Sonnenuntergang","Unixtime aus Astrobaustein","$Input","ci"],    
    ["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
  ],
  "Output": [
    ["SCHALTEN1 EIN","Schaltzeit 1","$Result1","x"],
    ["SCHALTEN2 EIN","Schaltzeit 2","$Result2","x"],
    ["SCHALTEN3 EIN","Schaltzeit 3","$Result3","x"],
    ["SCHALTEN4 EIN","Schaltzeit 4","$Result4","x"],
    ["SCHALTEN5 EIN","Schaltzeit 5","$Result5","x"]
  ]
}
Der Eingang wird durch den Astrobaustein (hier Sonnenuntergang) als unix-timestamp befüllt.
Der Eingang steht auf "ci", das heisst die Logik wird nur dann ausgeführt, wenn eine gültige Eingabe vorhanden ist. Durch das "c" wird die Logik bezüglich dieses Einganges nur 1x täglich "angestossen", da sich ja der Zeitpunkt des Sonnenunterganges nur mit Wechsel des Datums ändert.

Die Korrekturzeiten sind in Sekunden angegeben.

Beim Erreichen des ersten Zeitpunktes wird $Result1 true. Durch das nachfolgende sendexplicit wird nur das true an den Ausgang gesandt durch eine positive flanke von $Result1.

Wird der zweite Zeitpunkt erreicht wird $Result2 true. Hier selbes Verhalten wie oben beschrieben.
Allerdings wird auch das erste wakeup wieder ausgeführt (Problem siehe hier: viewtopic.php?f=103&t=4529#p58915).
Ist aber nicht von Belang, da $Result1 ja schon true war. Dadurch zieht das nachfolgende sendexplizit nicht -> kein Erneutes Aussenden an den Ausgang.

Selbiges passiert zu den übrigen Schaltpunkten. Schließlich sind alle $Result (1-5) true.

Mit Anbruch eines neuen Tages ändert sich $Input (die Zeit des Sonnenunterganges) -> die Logik wird neu gestartet und $Result1-5 werden wieder false.
Logik Schalten Sonnenstand.jpg
Ich hoffe ich habe das verständlich erklärt.

Demnächst möchte ich ähnliches für das Ausschalten am morgen sowie auch für Verbraucher zusammenbauen, welche Prozentangaben erwarten (Jalousien).

Letztendlich eine Art abgespeckte Zeitschaltuhr für immer zur selben Zeit wiederkehrende Ereignisse.

Re: [V4.1] Custom Logik zur Steuerung sonnenstandsabhängig boolean

Verfasst: Di Nov 12, 2024 3:47 pm
von blaubaerli
Hallo Jens,

wie gesagt, ich bin nach wie vor der Meinung, dass wir das schon mal hatten, das "nur" ein wakeup pro Logik sinnvoll ist. Habe es aber immer noch nicht gefunden... :confusion-scratchheadyellow:

Daher würde ich die Offsets in der initialen Logik ermitteln, an 5 Ausgängen weiterreichen und dann mit 5 parallelen "sekundären" Logiken mit jeweils einem dort lokal erzeugten Wakeup weiterarbeiten.

Das sollte das gefahrfrei und ohne ungewünschte Nebeneffekte ermöglichen. :whistle:

Beste Grüße
Jens

Re: [V4.1] Custom Logik zur Steuerung sonnenstandsabhängig boolean

Verfasst: Di Nov 12, 2024 6:50 pm
von Robert_Mini
Hallo zusammen!

Viele Wege führen nach Rom, insofern finde ich die Lösung mit 5x wake-up und sendexplicit auf steigende Flanke durchaus sehr gut.
Bin selbst auch kein Freund von 7 Einzellogiken für eigentlich eine Anwendung. Ich hab so schon 300 Logiken, das wären sonst >1000.
Einziger Nachteil: das sendexplizit ist nicht im DokMode sichtbar, da muss man ein wenig aufpassen…
Lg
Robert

Re: [V4.1] Custom Logik zur Steuerung sonnenstandsabhängig boolean

Verfasst: Di Nov 12, 2024 10:14 pm
von jensgulow
Genau, deshalb hatte ich das mit Dummy mqtt topics als Ziel überprüft.