Wecker

Hi,

mal eine Frage zu der neuen Wecker Funktion im WF.
Ich habe jetzt schon länger gesucht, aber ich finde einfach nicht wo man so einen Wecker einrichtet. Könnte mir da jemand einen Tip geben wie die Einrichtung funktioniert oder wo ich das nachlesen kann?

Gruß
Schorsch

Erstell einfach ein Skript, und dazu ein zyklisches Ereignis (Datumsformat = Täglich/Wöchentlich, Zeitformat = Einmalig).

Das erscheint dann im WebFront :slight_smile:

paresy

Besten Dank. Funktioniert prima.

Der Wecker ist echt praktich,

kann ich den auch aus dem dashboard bedienen?

:rolleyes:

wurde gerade hier auch gefragt

Selbst ist der Dashboard-Benutzer. Die passenden PHP-Befehle stehen in der Doku (Ereignisverwaltung: IP-Symcon :: Automatisierungssoftware).

Danke Horst,

aber ich mach es auch bisher so. Allerdings habe ich einen Timer für jede Steckdose. Das ist so sehr aufwendig.
Es wäre halt ein bischen einfacher :wink:

Nur kurz die Frage, ist das auch für das neue iFront geplant oder nicht? sonst mach ich den selber oder warte bis zu der Erweiterung…

Hi,

ja, ich würde es auch sehr gut finden wenn ich mit dem iOS App die Weckerzeiten einstellen könnte.
Ich schließe mich der frage von swissboy an - wann ist es dort verfügbar?

Gruß
Schorsch

Geplant ja. Wird aber nicht in den nächsten Wochen passieren.

paresy

Hi,

dann warte ich gerne noch auf das nächste App Update.

Habe noch eine andere Frage.,
Ich habe nach einer Art Übersicht der eingestellten Wecker gesucht, da ich gerne alle Ereignisse für ein Script auf einen Blick habe.
Die Übersicht war recht schnell erstellt, aber wie bekomme ich heraus dass ein Ereignis von dem Wecker verändert wurde.
Ich habe keine Möglichkeit gefunden ein Script zu triggern wenn sich etwas mit den Ereignissen ändert. Im Moment müsste ich das Script zum erstellen der Übersicht von Hand oder zyklisch triggern - was ich nicht machen möchte. Ein Ereignis kann ich nicht auswählen für ein ‚auslösendes Ereignis‘.

Vielleicht hat ja noch jemand eine Idee?

Gruß
Schorsch

Wie hast Du die Timer Liste erstellt?

Loerdy

Hi loerdy,

hier mal das Script von gestern Abend. Ist aber noch nicht komplett fertig. Werde daraus noch eine Funktion basteln, die universell für mehrere Wecker genommen werden kann.
Nur das triggern ist mir noch ein Rätsel…

Also hier schon einmal vorab das Script:

<?

$arr = IPS_GetChildrenIDs(44336 /*[Gewächshaus\Bewässerung2_CTRL_TIMER_und_EIN]*/);
$wochentage = array( "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
$htmltext = "";

$htmltext .= '<table border="0" width="100%">'; // Farbe anpassen oder style entfernen

foreach ($arr as $arr2) {
	$value = (IPS_GetEvent($arr2));
		if ($value["EventActive"] == "1"){
			$htmltext .= '<tr><td align="left">';
			$htmltext .= IPS_GetName($arr2);
			$htmltext .= '</td>';
			$htmltext .= '<td align="center">';
			$htmltext .= date("H:i", $value["CyclicTimeFrom"]+5) . "<br>";  // 5 Sekunden Zeit Korrektur. Sonst hat es 20:59 statt 21:00 gegeben
			$htmltext .= '</td>';
			  $tage = array_reverse((str_split(str_pad(decbin($value["CyclicDateDay"]), 7, '0', STR_PAD_LEFT))));
						if (($value["CyclicDateDay"]) == 0 ){
						$htmltext .= '<td bgcolor="#33CC33" align="center">';
                  $htmltext .= "Einmalig am ". date("d.m:Y", $value["CyclicTimeFrom"]);
						}
						else {
							for($i=0; $i <= 6; $i++) {
                  		if ($tage[$i] == 1){
                  		$htmltext .= '<td bgcolor="#33CC33" align="center">';
                  		$htmltext .= ($wochentage[$i]);
                  		}
                  		else {
                  		$htmltext .= '<td  align="center">';
                  		$htmltext .= ($wochentage[$i]);
                  		}
							}
						}
			$htmltext .= '</tr>';
      }
	}


SetValueString(29827 /*[Gewächshaus\Bewässerung2_Timer_liste]*/, $htmltext);
?>

Danke,
Die Gemahlin hat Spätschicht, das heisst ich kann heut abend ausprobieren :slight_smile:

Loerdy

Hallo Paresy,

Ist eine schöne Funktion den „Wecker“ über WF zu konfigurieren.
Was mir fehlt ist die Auswahl eines Datums bei „einmalig“.

Ist das nicht vorgesehen oder mache ich was falsch ??

LG

Jürgen

wecker1.PNG

wecker2.PNG

Nicht vorgesehen.

paresy

Hi,
Noch eine Frage die nicht direkt mit dem Wecker, aber mit den Ereignissen zusammenhängt.
Ist es irgend wie möglich eine Änderung von einem Ereignis automatisch zu detektieren und dadurch ein script auszuführen, genau wie bei einer Variablen Änderung ?
Gruss
schorsch

Hi paresy,

die letzte Anfrage ist zwar schon ein wenig her, aber gibt es eine Möglichkeit irgendwie auf die Änderung (wie z.B. Änderung durch die Wecker Funktion im WF) zu triggern und ein Script auszuführen?
Danke
Schorsch

Nein, das ist nicht möglich.

paresy

Hallo,
dank der schönen Vorarbeit konnte ich mir aus den Skripten schnell eine Funktion basteln. :slight_smile:

Eigentlich ist das nun wirklich kein Hexenwerk, aber vielleicht hilft mein Ergebnis dem ein oder anderen PHP unerfahrenen User doch.

<?
br_timer_genhtmlbox(36548 /*[Allgemein\Status\Schlafen]*/,40157 /*[Allgemein\Status\Schlafen]*/);
br_timer_genhtmlbox(50623 /*[Allgemein\Status\Wach]*/,29660 /*[Allgemein\Status\Wachzeiten]*/);

function br_timer_genhtmlbox($skriptid,$htmlid){
/*
 based on the great code loerdy and schorsch posted in the ips forum:
 http://www.ip-symcon.de/forum/f56/wecker-14368/index2.html#post123344
 */
$arr = IPS_GetChildrenIDs($skriptid);
$wochentage = array( "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
$htmltext = "";

$htmltext .= '<table border="0" width="100%">'; // Farbe anpassen oder style entfernen

foreach ($arr as $arr2) {
    $value = (IPS_GetEvent($arr2));
        if ($value["EventActive"] == "1"){
            $htmltext .= '<tr><td align="left">';
            $htmltext .= IPS_GetName($arr2);
            $htmltext .= '</td>';
            $htmltext .= '<td align="center">';
            $htmltext .= date("H:i", $value["CyclicTimeFrom"]+5) . "<br>";  // 5 Sekunden Zeit Korrektur. Sonst hat es 20:59 statt 21:00 gegeben
            $htmltext .= '</td>';
              $tage = array_reverse((str_split(str_pad(decbin($value["CyclicDateDay"]), 7, '0', STR_PAD_LEFT))));
                        if (($value["CyclicDateDay"]) == 0 ){
                        $htmltext .= '<td bgcolor="#33CC33" align="center">';
                  $htmltext .= "Einmalig am ". date("d.m:Y", $value["CyclicTimeFrom"]);
                        }
                        else {
                            for($i=0; $i <= 6; $i++) {
                          if ($tage[$i] == 1){
                          $htmltext .= '<td bgcolor="#33CC33" align="center">';
                          $htmltext .= ($wochentage[$i]);
                          }
                          else {
                          $htmltext .= '<td  align="center">';
                          $htmltext .= ($wochentage[$i]);
                          }
                            }
                        }
            $htmltext .= '</tr>';
      }
    }
SetValueString($htmlid, $htmltext);
}
?>

Das schaut dann so aus:

Im Kategoriebaum sieht es so aus (nur HTMLBoxen anlegen und einsortieren):

Das o.g. Skript führe ich aktuell (Ereignis/ Timer) einfach alle 2 Stunden aus um die o.g. HTMLübersichten zu erzeugen.

Viele Grüße, Benjamin

br_timer_genhtmlbox.png

Hi,

habe dann ganz vergessen meine Lösung noch zu posten.
Ich finde es aber immer noch schade, dass ich keine wirklich tolle Lösung für das Update des HTML Textes habe. Sicher, alle 2 Stunden oder 5 Minuten könnte ich ein Timer aktivieren, aber das finde ich nicht so richtig elegant.
Kann ich da in der IPS Version 2.5 auf was hoffen? :smiley:

Ich habe mir erst einmal so geholfen, dass ich ein mini Script ‚-Zeiten Update-‘ hinzu gefügt habe und dann halt manuell update.

<?

include("IPS_Timer_List.ips.php");

?>

Außerden befindet sich die gleiche Codezeile immer in dem Script welches durch den Timer ausgeführt wird. Also in meinem Fall in dem Script ‚Bewässerung2_CTRL_TIMER_und_EIN‘.

Zu meinem Aufbau des Scrips:
Den code zum erstellen des HTML stings habe ich in die Datei ‚IPS_Timer_List.ips.php‘ gepackt und unter dem scripts Ordner von IPS abgelegt.
Jetzt habe für das Webfront nur das Script ‚Bewässerung2_CTRL_TIMER_und_EIN‘ verlinkt.
Im Browser (Webfront) sehe ich dann das eigentliche Script (mit dem Wecker-Symbol und dem Ausführ-Symbol), das ‚-Zeiten Update-‘ Script (nur mit dem dem Ausführ-Symbol) und natürlich die HTML Box.
Dabei ist es wichtig, das die Scripte und Variblen immer wie im Bild angeordnet sind und auch immer die gleichen Namen haben.

Alle meine Wecker sind genau so aufgebaut bzw gegliedert. So wird immer das gleiche Script ausgeführt aber nur die zum Wecker passende String variable mit den Zeiten aktualisiert.
Außerdem brauche ich keine ID’s usw übergeben. Sollte möglichst universell sein.

<?

	      
define ("ChildrenID", $IPS_SELF);


$senderobjecttype = (IPS_GetObject(ChildrenID));
   if ($senderobjecttype["ObjectName"] == "- Zeiten Update -"){
		$idhtml = IPS_GetParent(ChildrenID);
		$idmaster = IPS_GetParent($idhtml);
		}
	else {
	   $idmaster = ChildrenID;
	   }


$arr = IPS_GetChildrenIDs($idmaster);
$wochentage = array( "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
$htmltext = "";

$htmltext .= '<table border="0" width="100%">'; // Farbe anpassen oder style entfernen

foreach ($arr as $arr2) {
	$objecttype = (IPS_GetObject($arr2));
	if ($objecttype["ObjectType"] == "4"){
		$value = (IPS_GetEvent($arr2));
			if ($value["EventActive"] == "1"){
				$htmltext .= '<tr><td align="left">';
				$htmltext .= IPS_GetName($arr2);
				$htmltext .= '</td>';
				$htmltext .= '<td align="center">';
				$htmltext .= date("H:i", $value["CyclicTimeFrom"]+5) . "<br>";  // 5 Sekunden Zeit Korrektur. Sonst hat es 20:59 statt 21:00 gegeben
				$htmltext .= '</td>';
				  $tage = array_reverse((str_split(str_pad(decbin($value["CyclicDateDay"]), 7, '0', STR_PAD_LEFT))));
							if (($value["CyclicDateDay"]) == 0 ){
							$htmltext .= '<td bgcolor="#33CC33" align="center">';
              	    $htmltext .= "Einmalig am ". date("d.m:Y", $value["CyclicTimeFrom"]);
							}
							else {
								for($i=0; $i <= 6; $i++) {
                  			if ($tage[$i] == 1){
                  			$htmltext .= '<td bgcolor="#33CC33" align="center">';
                  			$htmltext .= ($wochentage[$i]);
                  			}
                  			else {
                  			$htmltext .= '<td  align="center">';
                  			$htmltext .= ($wochentage[$i]);
                  			}
								}
							}
				$htmltext .= '</tr>';
					
     	 }
     	 }
		}
						
$timer_listid = @(IPS_GetVariableIDByName('Zeiten', $idmaster));
SetValueString($timer_listid, $htmltext);


?>

Ich hoffe, ich habe nix vergessen. Ansonsten bitte melden.
Gruß
Schorsch