Nächsten Zeitpunkt "Ist es Tag" auslesen

Moin,
in einem Modul würde ich gerne auslesen, wann die Variable „Ist es Tag“ das nächste Mal gesetzt wird.

Dazu müsste ich doch nur in der Kern-Instanz Location auslesen, welcher Wert für „Tagesanfang“ gesetzt ist und dann den nächsten Zeitpunkt über die „* Dämmerung“ auslesen.

Nur, wie komme ich an die Werte heran?

Über

IPS_GetProperty($locationID,'IsDayStart')

erhalte ich einen Hinweis auf den eingestellen Wert

  • 1: nautische Dämmerung
  • 2: zivile Dämmerung

nur wie lese ich den jeweiligen Dämmerungsbegin oder das Dämmerungsende aus ?

Oder gibt es einen einfacheren Weg?

Grüße Detlev

Eventuell über die Timerinformation? Da sehe ich den Eintrag „Location“. Wenn man die Nächste Laufzeit abfragen könnte, hast du die Zeit für das nächste Update.

Hi,

wie kommen ich an die Timerinformationen heran? Stehe momentan etwas auf dem Schlauch.
Grüße Detlev

Damit
IPS_GetTimer(7);

array(8) {
  ["TimerID"]=>
  int(7)
  ["InstanceID"]=>
  int(46071)
  ["Name"]=>
  string(10) "UpdateTime"
  ["Interval"]=>
  int(51810000)
  ["LastRun"]=>
  int(1628913032)
  ["NextRun"]=>
  int(1628964842)
  ["Running"]=>
  bool(false)
  ["RunOnce"]=>
  bool(false)
}

Liefert ein array mit allen Informationen. 7 ist in meinem Fall die TimerID. Wobei ich aber fast vermute, dass sich diese ID ändern könnte und nach einem Neustart anders ist.
Es gibt dann noch IPS_GetTimerList() die dir eine Liste der Timer liefert.

array(52) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
  [5]=>
  int(6)
  [6]=>
  int(7)
  [7]=>
  int(8)
  [8]=>
  int(9)
  [9]=>
  int(10)
  [10]=>
  int(11)
  [11]=>
  int(12)
  [12]=>
  int(13)
  [13]=>
  int(14)
  [14]=>
  int(16)
  [15]=>
  int(17)
  [16]=>
  int(18)
  [17]=>
  int(19)
  [18]=>
  int(20)
  [19]=>
  int(21)
  [20]=>
  int(23)
  [21]=>
  int(24)
  [22]=>
  int(25)
  [23]=>
  int(26)
  [24]=>
  int(27)
  [25]=>
  int(28)
  [26]=>
  int(29)
  [27]=>
  int(30)
  [28]=>
  int(31)
  [29]=>
  int(32)
  [30]=>
  int(33)
  [31]=>
  int(34)
  [32]=>
  int(35)
  [33]=>
  int(36)
  [34]=>
  int(37)
  [35]=>
  int(38)
  [36]=>
  int(39)
  [37]=>
  int(40)
  [38]=>
  int(41)
  [39]=>
  int(43)
  [40]=>
  int(44)
  [41]=>
  int(45)
  [42]=>
  int(46)
  [43]=>
  int(47)
  [44]=>
  int(48)
  [45]=>
  int(49)
  [46]=>
  int(50)
  [47]=>
  int(51)
  [48]=>
  int(52)
  [49]=>
  int(53)
  [50]=>
  int(54)
  [51]=>
  int(55)
}

Damit könnte man in Konbination mit IPS_GetTimer($TimerID) den Timer der gwünschten Instanz heraussuchen.

Hi ,

mit den Timern bin ich auch nicht richtig weitergekommen, aber ein bissle Reverse-Engineering führte zu den Idents IsDayStart und AstronomicTwilightStart, NauticTwilightStart,CivilTwilightStart und Sunrise.

Damit konnte ich nun , ausgehend von der Object-ID der Variable „Ist es Tag“, auf den Zeitpunkt zurückschließen.

Falls jemand eine ähnliche Anforderung hat - so habe ich es realisiert:
in $DayIndicatorId steht die ID der Variable „Ist es Tag“

$DayIndicatorId=12345;
echo "is day id: $DayIndicatorId\n";

if (IPS_ObjectExists($DayIndicatorId)) {
  $DayIndicatorParent=IPS_GetParent($DayIndicatorId);
  if ($DayIndicatorParent>0) {
    echo "Parent $DayIndicatorParent\n";
    $twilightDefinition = array ( "0" => "AstronomicTwilightStart",  "1" => "NauticTwilightStart", "2" => "CivilTwilightStart", "3" => "Sunrise");
    $DayStart = IPS_GetProperty($DayIndicatorParent,'IsDayStart');
    echo "DayStart $DayStart\n";
    echo "DayStart $twilightDefinition[$DayStart]\n";
    if ($DayStartValueId=@IPS_GetObjectIDByIdent($twilightDefinition[$DayStart], $DayIndicatorParent)) {
      echo "DayStartValueId: $DayStartValueId\n";
      }
    else {
      echo "$twilightDefinition[$DayStart] not found\n";
      exit;
      }

    $DayStartTime = GetValueInteger($DayStartValueId);
    echo "DayStartTime: $DayStartTime\n";
    echo date('Y-m-d H:i:s',$DayStartTime) . "\n";
    }
  }


Vielleicht geht es auch eleganter, dann her mit den Tipps, aber so geht es auf jeden Fall.

Danke für die Unterstützung.

Detlev.