Messagesink und Sunset / sunrise

Hi,

in meinem Modul möchte ich gerne auf Sonnenaufgang und Sonnenuntergang reagieren.
Dazu habe ich die Variable „Sonnenaufgang“ der Location-Instanz registriert

2020-05-24_18-00-10.png

		public function ApplyChanges()
		{
			//Never delete this line!
			parent::ApplyChanges();

			$this->EnableAction("State");
            $valuesId = $this->GetIDForIdent("State");

			if($this->ReadPropertyInteger("PropertyVariableSunrise") > 0) { // 40320
				$this->RegisterMessage($this->ReadPropertyInteger("PropertyVariableSunrise"), VM_UPDATE);
				IPS_LogMessage("RegisterMessage",$this->ReadPropertyInteger("PropertyVariableSunrise") );
			}
		}

und die Funktion MessageSink eingebaut:

	public function MessageSink($TimeStamp, $SenderID, $Message, $Data)
		{
			
			IPS_LogMessage("MessageSink", "New message!!!$TimeStamp, $SenderID, $Message, $Data");
		
		}

Grundsätzlich funktioniert es, ich bekomme aber nun neben dem Sonnenaufgang auch Sonnenuntergang sowie die zivilen und nautischen Dämmerungen (Anfang und Ende) mitgeteilt. Kann mir jemand auf die Sprünge helfen wie ich den Sonnenaufgang herausfiltere?


23.05.2020 21:29:08 | 00000 | CUSTOM  | MessageSink          | New message!!!91632263, 40320, 10603, Array // Sonnenuntergang
23.05.2020 21:53:23 | 00000 | CUSTOM  | MessageSink          | New message!!!91698640, 40320, 10603, Array // ?
23.05.2020 22:13:22 | 00000 | CUSTOM  | MessageSink          | New message!!!91752943, 40320, 10603, Array // Z Dämmer Ende
23.05.2020 23:16:59 | 00000 | CUSTOM  | MessageSink          | New message!!!91927024, 40320, 10603, Array // N Dämmer Ende
24.05.2020 03:34:27 | 00000 | CUSTOM  | MessageSink          | New message!!!92624502, 40320, 10603, Array // N Dämmer Begin
24.05.2020 04:38:47 | 00000 | CUSTOM  | MessageSink          | New message!!!92797570, 40320, 10603, Array // Z Dämmer Begin
24.05.2020 05:23:15 | 00000 | CUSTOM  | MessageSink          | New message!!!92916762, 40320, 10603, Array //Sonnenaufgang

Grüße Detlev.

Data gibt dir als Array verschiedene Werte.
Ob die Variable Aktualisiert oder geändert wurde, den neuen und den alten Wert.
Dokumentiert ist Data nicht. Somit einfach mit print_r selber nachschauen.
Michael

Du willst dir Data ansehen und das „HasDiff“ Flag auswerten. Es gibt nur ein Feld welches 0/1 ist. Die restlichen Messages sind nur die Updates der Variable. Dich interessiert aber nur. der Änderungszeitpunkt :slight_smile:

paresy

Moin,

danke für die Info: Diese Werte stehen im Array $Data beim Sonnenaufgang ( Variable 40320 )


(
    [0] => 1590635936
    [1] => 1
    [2] => 1590549596
    [3] => 1590549601
    [4] => 1590546887
    [5] => 1590463263
)

Somit kann ich mit

if ($Data[1]===1){
...

erkennen wann der Sonnenaufgang stattgefunden hat.

Ich komme aber mit den restlichen Werten im Array nicht ganz klar,
habe mal eine bool’sche Variable mit MessageSink gemonitored:

27.05.2020 06:35:07 true gesetzt
    [0] => 1
    [1] => 
    [2] => 1
    [3] => 1590554107
    [4] => 1590519667
    [5] => 1590519667

27.05.2020 06:35:45 false gesetzt
    [0] =>  
    [1] => 1
    [2] => 1
    [3] => 1590554145
    [4] => 1590554107
    [5] => 1590519667

27.05.2020 06:37:13 false gesetzt
    [0] =>  false gesetzt
    [1] => 
    [2] => 
    [3] => 1590554232
    [4] => 1590554145
    [5] => 1590554145

27.05.2020 06:54:05 true gesetzt
    [0] => 1
    [1] => 1
    [2] => 
    [3] => 1590555245
    [4] => 1590554232
    [5] => 1590554145

Ich denke in [0] steht der aktuelle Zustand, in [2] der vorherige Zustand, [3] - [5] sind Zeitstempel, (aktueller Zeitpunkt, vorheriger Zeitpunkt und ?).
Aber hier ist [1] nur true wenn die Variable auch auf true gesetzt wurde.
Habt ihr noch etwas Doku für mich?

Grüße und schönen Tag.
Detlev

1 ist definitiv wenn sich der Wert geändert hat und nicht nur aktualisiert wurde.
3-5 müsste sein:
Zeitpunkt dieses Wertes, vorheriger Zeitpunkt der Aktualisierung und Zeitpunkt vorherige Änderung.
Jeder geänderter Wert ist aber auch immer eine Aktualisierung.
Michael