DWD Unwetterwarnung (WFE, Mail und html)

allo Raketenschnecke,

das Unwetterscript ist klasse und läuft bestens.
Da ich entweder am PC sitze oder mein iPhone dabei habe, ist auch für mich die Prowl-Unterstützung sehr interessant.

Die Anbindung dürfte sehr einfach sein.
Hier mal ein code-Schnipsel

	include('ProwlPHP.php');
	$prowl = new Prowl('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); // hier dein Magic-Key rein
	$prowl->push(array(
	 'application'=>'IP-Symcon',
	 'event'=>'Meldung',
	 'description'=>utf8_encode($meldung),
	 'priority'=>$priority
	));

$meldung = Warntext
$priority = Priorität -2, -1, 0, 1, 2

Ich hoffe, es hilft.

gruß, Peter

Hi Peter,

das sieht wirklich simpel aus. Ein paar Fragen hab ich dazu:

$meldung = Warntext

=> ist das Plain-Text oder html-formatiert? sollte da nur eine kurze Meldung rein(ähnlich dem „Betreff“ in der Mail)? Hast du einen Screenshot, wo man sich eine solche Meldung mal anschauen kann?

$priority = Priorität -2, -1, 0, 1, 2

ich vermute, das ist eine Priorität innerhalb von Prowl (das kann man nicht mit den Warnlevels in verbindung bringen)?

Ich könnte mir vorstellen, die Prowl-Meldungen analog (parallel) mit den Mails verschicken zu lassen. In den Konfig-Breich käme der Magic-Key ans String-Var.

Hallo Raketenschnecke,

Soweit ich das erkenne ist das Plain-Text. Screenshot habe ich derzeit nicht. Eventuell heute abend.

Die Priorität könnte man schon mit den Warnlevels in Verbindung bringen.
Dabei würde -2 gleich DEFCON6 sein und 2 gleich höchster DEFCON-Stufe.
Innerhalb von PROWL kann man dann unterschiedliche Benachrichtigungsmelodien einrichten(sehr bedingt, aber es geht) Bei Priorität 2 ist bei mir ein durchgängiger Dauerton eingerichtet. Daher würde mir die Einrichtung einer Wahlmöglichkeit, ob bei der höchsten Warnstufe auch alle 15 Minuten eine Prowl-Nachricht gesendet wir helfen.

Daran hatte ich auch zuerst gedacht. Vielleicht in einer seperaten If-Abfrage unterhalb des Mailversand? Wäre vielleicht besser pflegbar.

Gruß!

Grisu

Hallo Raketenschnecke,

die Warnmeldung habe ich als einfache String-Variable als Text-Box formatiert. Sie sollte den kompletten Warntext enthalten (das was in deiner HTML-Ausgabe unter den Grafiken steht).

$warnung = strip_tags($warnung);

Über die Priorität kann man den Sound beim Empfang steuern. Außerdem kann man steuern, dass man in der definierten Prowl-Ruhezeit (z.B. nachts) trotzdem Nachrichten mit Priorität „2“ erhält.
Eine direkte Verbindung mit Warnlevel ist m.M. sehr individuell. Mir würde reichen, den Level im Definitionsbereich zu bestimmen oder Standard „0“ zu vergeben. Ich könnte mir auch vorstellen den Level je Warnstufe vorzugeben (aber das ist „nice to have“).

Die Prowl-Meldung sollte analog zu den Mails rausgehen. Allerdings müsste Prowl und Mailversand einzeln auswählbar sein (Mail ist ja bereits realisiert).

Gruß, Peter

upps: sehe geerade, dass ich zu lange geschrieben habe. Grisu hat schon geantwortet.

ok, ich fasse mal das Bisherige zusammen:

[ul][li]die Message ist Plain-Text und soll den kompletten Warntext des DWD enthalten (seid Ihr Euch wirklich sicher??)[]ich würde eine weitere Int-Variable (Name: „Prowlversand“) in den Objektbaum schmeissen: Werte 0-6 geben an, bis zu welchem DEFCON-Level Prowl-Messages versandt werden, -1 kein Versand(damit könnte man sogar einen abwesenheitsgesteuerten Versand realisieren, wie bei Mails auch)[]die Prowl-Schnittstelle ist „ProwlPHP.php“ per include (und heisst auch in jeder IPS-Installation so?)
[/li][li]die Prowl-Prios würde ich analog zur Mail Prio setzen: DEFCON 0-1 => höchste Prio (wäre in Prowl analog 2), Rest => normal (Prowl => 0)l
[/li][/ul]

Hallo Raketenschnecke,

Sollte wir erst einmal mit dem kompletten Warntext versuchen. Ich kenne die Feldefinition nicht genau. Ansonsten können wir dann vielleicht eine sinnvolle Abkürzung machen a la 'Warnung vor sehr leichtem Sonnenschein":smiley: (davor muss man ja bald bei dem Sommerwetter warnen)

Finde ich gut. Den Prowlversand würde ich eher so einstellen, ab welchem Defcon-Level versendet würde(incl. dem in der Variable angegebenen). Ist aber individuelle Geschmackssache. Mir hilft es eher dass ich weiß, das demnächst die Welt untergeht als umgekehrt.

-1 als Wert für überhaupt keinen Versand ist auch gut. Eventuell eine Variable, die als Schalter im WFE angezeigt wird(Prowlversand ja/nein eventuell auch für den Mailversand?) Kann man aber auch selbst einbauen wenn man es braucht.

Der Name der PHP sollte eigentlich immer so sein.

So wäre das doch echt eine feine Sache!

Super Zusammenfassung!

Gruß!

Grisu

Hallo Raketenschnecke,

Zusammenfassung soweit ok, ausser

die Prowl-Prios würde ich analog zur Mail Prio setzen: DEFCON 0-1 => höchste Prio (wäre in Prowl analog 2), Rest => normal (Prowl => 0)l

Da bekomme ich ständig Alarm-Meldungen (auch nachts, ggf alle 15 Min.) und kann sie nicht abstellen! Prio 2 ist nur für den absoluten Notfall (Einbruch, Wassermelder usw.) Prio 1 wäre ok.

Gruß, Peter

nur nochmal um sicher zu gehen, ein Beisliel des kompletten Warntextes (ich kann mir nicht vorstellen, dass das gemeint ist :D):

Ich denke hier ehe an einen Text analog zum aktuelle Mailsubject. Aber das müsst Ihr entscheiden :smiley:

Finde ich gut. Den Prowlversand würde ich eher so einstellen, ab welchem Defcon-Level versendet würde(incl. dem in der Variable angegebenen). Ist aber individuelle Geschmackssache. Mir hilft es eher dass ich weiß, das demnächst die Welt untergeht als umgekehrt.

Wir meinen das Selbe (hoffe ich): bei „2“ würden alle Warnungen von DEFCON 0 - DEFCON2 via Prowl versendet, alles was drüber liegt, wird ignoriert

die Prio hat nix mit dem Versand zu tun. Der wird mit der oben beschriebenen Variable („Prowlversand“) geregelt.

das habe ich verstanden.

Ich möchte schon bei Defcon 0-6 eine Prowl-Meldung bekommen, aber nicht mit Priority = 2.

Den vollständigen Text der Warnmeldung sende ich mir heute schon zu (z.Zt. aus anderem Unwetter-Script)

Gruß, Peter

Warum triggert Ihr nicht eure vorhandenen Prowlskripte auf die bestehenden Variablen vom Unwetter-Skript.

Es wird doch sicherlich jeder von Euch schon ein vorhandenes Kommunikationsskript für Prowl haben. Ich nutze Prowl zwar schon lange nicht mehr, hätte es aber genau so gemacht.

Somit habe ICH es im Griff was mir Prowl mit welcher Prio sendet.

Ja, wir meinen dasselbe. Hatte verkehrt herum gedacht.

IPS Warnstatus: DEFCON 3 (Wetterwarnungen), Änderung

O.a. Betreff war heute eine gesendete Email. Wenn statt ‚Änderung‘ dann der Bezug zum Wettereignis gemeldet würde wäre das für mich vollkommen ausreichend.(starker Regen, Schnefall etc.)

Gruß!

Grisu

@wgreipl
Sehe ich genauso.

Das werd ich doch gleich mal heute abend ausprobieren!

Gruß!

Grisu

ich hab das Thema heute mal in mein Grübel-Modul geschoben. Erste Zwischensummen lassen mich eher zu Werners Ansatz tendieren. Das wird m.E. für alle Beteiligten flexibler und ist auch „architektonisch“ sinnvoller: quasi ein „Prowl-Modul“, was an die Unwetterwarnung angeflanscht werden kann - wenn der User es möchte.
Was mir Bauschmerzen bereitet, ist eine „Unmenge“ weiterer Konfigurationsparameter (die nicht jeder braucht).

Eigentlich liegen alle benötigten Daten in den Variablen im Objektbaum und müssen nur abgeholt werden. Was ich mir ad hoc vorstellen könnte: das Mailsubject (was per Mail rausgeht, Beispiel: IPS Warnstatus: DEFCON 6 (keine Warnungen), Änderung Warnlevel (von DEFCON 3 auf DEFCON 6)) noch in eine (zusätzliche) String-Var zu schieben.

Ich denke, wir warten erstmal ab, was Grisu bastelt.

Guten Abend zusammen,

so, ich habe da etwas fertiggestellt und in den Test lief es auch ganz gut. Ist aber noch in der Testphase und wird in den nächsten Tagen noch auf Herz und Nieren geprüft.

Genau Doku incl. Bilder kommt morgen abend. Ich stelle das Skript erst mal in der Version 0.8 hier ein. Die Variablenbezüge stelle ich auch morgen ein!

Vielleicht kann ich dann auch noch die eine oder andere Anregung einbauen.

Getriggert wird das Skript über die Änderung der Variable DWD Defcon Status von Raketenschnecke. (@Raketenschnecke: Ich hab mir mal einige Sachen angeschaut)

Ist wohl an einigen Stellen noch zu verbessern, aber ich bin noch nicht so der PHP-Spezialist. Für Anregungen konstruktiver Art bin ich jederzeit offen.

Grisu


//Includes
include('ProwlPHP.php');

//Konfigurationsbeginn
//$prowl = new Prowl('457895874587'); // hier dein Magic-Key rein

$DEFCON_this_LastValue = 28128 /*[Wetterwarnungen\DWD Unwetterwarnungen\DWD_send_Prowl\DWD_Prowl_Unwetterstatus]*/; 
$DEFCON_Status_ID = 43323 /*[Wetterwarnungen\DWD Unwetterwarnungen\DWD DEFCON Status]*/;
$DEFCON_Prowlstatus_ID = 45512 /*[Wetterwarnungen\DWD Unwetterwarnungen\DWD_send_Prowl\DWD: Prowl: Meldung ab Stufe]*/;
$DEFCON_Warn_Type = 14482 /*[Wetterwarnungen\DWD Unwetterwarnungen\DWD Warntyp WFE]*/;
$DEFCON_to_Prowl = 18869 /*[Wetterwarnungen\DWD Unwetterwarnungen\DWD_send_Prowl\Unwetterwarnung an Prowl senden]*/;
//Konfigurationsende

//IPS Werte auslesen
$DEFCON_LastValue                   = getValueInteger($DEFCON_this_LastValue);
$DEFCON_NewValue                      = getValueInteger($DEFCON_Status_ID);
$prowlsendprio                   = getValueInteger($DEFCON_Prowlstatus_ID);
$event                           = getValueString($DEFCON_Warn_Type);
$sent_to_prowl                   = getValueBoolean($DEFCON_to_Prowl);
//Hauptteil

//dem neuen, evtl zu meldendem DEFCON-Stati den Prowl-Stati zuordnen - kann nach Nutzerbelieben geändert werden
switch ($DEFCON_NewValue) {
    case 0: //DEFCON 0
        $prowlprio = 2;
    case 1:
        $prowlprio = 1;
    case 2:
        $prowlprio = 0;
    case 3:
        $prowlprio = 0;
    case 4:
        $prowlprio = 1;
    case 5:
        $prowlprio = -2;
    case 6: //DEFCON 6
        $prowlprio = -2;
          }
          
//Auswertung, ob gemeldet werden soll
if ($sent_to_prowl == true) //soll überhaupt versendet werden
{

 if ($event <> 'Warnlagebericht') //nichts beim Warnlagebericht verschicken
 {
  if ($DEFCON_LastValue <> $DEFCON_NewValue) //nur bei Statusänderung eine Meldung abgeben
  {
    if($DEFCON_NewValue <= $prowlsendprio) //liegt DEFCON über der Meldeschwelle?
    {
     $prowl->push(array(
     'application'=>'IPS-Unwetterwarn.',
     'event'=> 'DEFCON '.$DEFCON_NewValue,
     'description'=>utf8_encode($event),
     'priority'=>$prowlprio));
    }
    else
    {
     $prowl->push(array(
     'application'=>'IPS-Unwetterwarn.',
     'event'=> 'DEFCON '.$DEFCON_NewValue,
     'description'=>utf8_encode('Reduzierung der Warnstufe'),
     'priority'=>$prowlprio));
     }

  }
 }
}
//Ende Hauptteil

//Abschlussarbeiten
$DEFCON_LastValue                   = setValueInteger($DEFCON_this_LastValue,$DEFCON_NewValue);

Guten Morgen!

Nachdem es heute bei uns im Kreis ein wenig Wind und später auch Gewitter geben soll ist mir folgendes aufgefallen:

Die Textvariable: DWD Warntyp WFE wird wohl nach DWD Defcon Status aktualisiert. Ich bekomme über Prowl jetzt immer den Status der vorherigen Meldung mitgeteilt.

@Raketenschnecke: Ist das relativ problemlos umdrehbar? Ich habe bis jetzt das noch nicht in dem Coding nachgeschaut.

Gruß!

Grisu

versuchs mal andersherum:

  1. Variante: Du baust vor dem Laden des Warntyps eine Verzögerung (IPS_SLEEP) ein
  2. Du lässt das Script durch den Warntyp triggert

Ich werde heute abend dann die 1. Variante einbauen. Irgendwie gefällt mir das Triggern auf den DEFCON-Status besser.

Hallo zusammen,

habe mal etwas entwickelt.

@raketenschnecke: Habe mich für die automatische Anlage von Variablen etc. in deinem Script informiert und einige Sachen übernommen. Vielen Dank für den guten Unterricht!

Das Script sollte in ein neu anzulegendes Script kopiert werden und die nowendigen Anpassungen laut Doku im Script durchgeführt werden. Günstigerweise in der gleichen Kategorie, in der auch das DWD-Module von Raketenschnecke angelegt wurde(dieses muß bereits vorhanden sein!).

Prowlscript einmalig ausführen und die Variablen werden angelegt. Danach nochmals per Ausführen das Script starten um den Sync-Vorgang mit den Variablen vom DWD-Modul abzuschließen.Hierbei wird auch bereits eine PUSH-Meldung abgesetzt. Trigger etc werden selbstständig mit angelegt.

Die Variable ‚Unwetterwarnung an Prowl senden‘ kann man für einen Schalter im WFE einsetzen. Dann muss diese noch mit einem Schalterskript in den Einstellungen versehen werden.(Ich hab sie dann mit einem Link in das Webfront eingebaut)

Die Variable ‚DWD: Prowl: Meldung ab Stufe‘ gibt an, ab welcher Stufe Meldungen gesendet werden. Diese kann im Objetbaum individuell angepasst werden.

Die Warnlevel der Prowlmeldung können individuell im Coding ab Zeile 88 angepasst werden.

Schauen wir mal, wie es bei euch funtkioniert.

Screenshot und Codedatei wurden im nächsten Threade nachgereicht.

Und natürlich: Alles auf eigene Gefahr! :smiley:

<?
########################################################################################################
/* Prowlerweiterung für das Modul DWD Unwetterwarnung von Raketenschneck
	Erstellt durch Grisu am 19.07.2012 in Teilen an das Script von Raketenschnekce angelehnt
   Quelle/Doku http://www.ip-symcon.de/forum/f53/dwd-unwetterwarnung-wfe-mail-html-18782/#post166583 (DWD Unwetterwarnung Raketenschneckelf)

	Vorraussetzung: - Das Module von Raketenschneck muss bereits installiert sein.
						 - eigener MagicKey für Prowl muss im Konfigurationsteil angegeben sein
						 - $DWD_Unwetter_ID(ID des Moduls DWD Unwetterwarnung von Raketenschnecke) muss manuell vor dem ersten Start
						   eingetragen werden


	Scipt läuft anschließend eigenständig auf Trigger DWD DEFCON Status aus dem Module DWD Wetterwarnungen von Raketenschnecke.
	

	
*/
########################################################################################################
//Includes
include('ProwlPHP.php');

//Konfigurationsbeginnn
$prowl = new Prowl('3452727634654'); // hier dein Magic-Key rein
$DWD_Unwetter_ID = 23455 /*[Wetterwarnungen\DWD Unwetterwarnungen]*/; //ID des Moduls DWD Unwetterwarnung von Raketenschnecke
//Konfigurationsende


//Selbstinstallationen angelehnt an Raketenschneckes Skript
// Variablen-Definitionen
	$VarNames[0]         					= array('name'=>'DWD: Prowl: Meldung ab Stufe', 'type'=>1, 'hidden'=>true, 'profil'=>'DWD.Unwetter.Warnstatus', 'position'=> -100, 'default_value'=>3,);
   $VarNames[1]         					= array('name'=>'DWD_letzter_Unwetterstatus', 'type'=>1, 'hidden'=>true, 'profil'=>'DWD.Unwetter.Warnstatus', 'position'=> -50, 'default_value'=>6,);
   $VarNames[2]         					= array('name'=>'Unwetterwarnung an Prowl senden', 'type'=>0, 'hidden'=>true, 'profil'=>'~Switch', 'position'=> 0, 'default_value'=>1,);

// übergeordnete Instanz identifizieren
	$Parent           						= IPS_GetParent($_IPS['SELF']);
	$ParentModul								= IPS_GetObject($Parent);

// Auto-Update (überprüft, ob alle Objekte im Baum vorhanden sind
	for($i=0;$i<count($VarNames);$i++)
	{
	   if(@IPS_GetObjectIDByName($VarNames[$i]['name'], IPS_GetParent($_IPS['SELF'])) == false)
		{
			$Update 								= true;     // Update-Status auf true setzen
			$DEFCON_Status_ID = IPS_GetObjectIDByName('DWD DEFCON Status', $DWD_Unwetter_ID);  //aus DWD-Module
//			$i 									= 9999;     // Abbruch der Schleife bei fehlendem Objekt

		}
		else
		{
			$Update 								= false;     // alle Objekte vorhanden -> Update-Status auf false setzen
		}

	}



//Hauptteil
if(($ParentModul['ObjectType'] == 1) && ($ParentModul['ObjectName'] == 'DWD Prowlversand') && ($Update == false))
{

//Variablen identifizieren
$DEFCON_this_LastValue = IPS_GetObjectIDByName($VarNames[1]['name'], IPS_GetParent($_IPS['SELF']));
$DEFCON_Status_ID = IPS_GetObjectIDByName('DWD DEFCON Status', $DWD_Unwetter_ID);  //aus DWD-Module
$DEFCON_Prowlstatus_ID = IPS_GetObjectIDByName($VarNames[0]['name'], IPS_GetParent($_IPS['SELF']));
$DEFCON_Warn_Type = IPS_GetObjectIDByName('DWD Warntyp WFE', $DWD_Unwetter_ID);  //aus DWD-Module
$DEFCON_to_Prowl = IPS_GetObjectIDByName($VarNames[2]['name'], IPS_GetParent($_IPS['SELF']));


//Variablen auslesen
IPS_SLEEP(600);
$DEFCON_LastValue       			= getValueInteger($DEFCON_this_LastValue);
$DEFCON_NewValue       		   	= getValueInteger($DEFCON_Status_ID);
$prowlsendprio                   = getValueInteger($DEFCON_Prowlstatus_ID);
$event                           = getValueString($DEFCON_Warn_Type);
$sent_to_prowl                   = getValueBoolean($DEFCON_to_Prowl);


//dem neuen, evtl zu meldendem DEFCON-Stati den Prowl-Stati zuordnen - kann nach Nutzerbelieben geändert werden
switch ($DEFCON_NewValue) {
    case 0: //DEFCON 0
        $prowlprio = 2;
    case 1:
        $prowlprio = 1;
    case 2:
        $prowlprio = 0;
    case 3:
        $prowlprio = 0;
    case 4:
        $prowlprio = 1;
    case 5:
        $prowlprio = -2;
    case 6: //DEFCON 6
        $prowlprio = -2;
		  }


//Auswertung, ob gemeldet werden soll
if ($sent_to_prowl == true) //soll überhaupt versendet werden
{

 if ($event <> 'Warnlagebericht') //nichts verschicken
 {
  if ($DEFCON_LastValue <> $DEFCON_NewValue) //nur bei Statusänderung eine Meldung abgeben
  {
    if($DEFCON_NewValue <= $prowlsendprio) //liegt DEFCON über der Meldeschwelle?
    {
     $prowl->push(array(
     'application'=>'IPS-Unwetterwarn.',
     'event'=> 'DEFCON '.$DEFCON_NewValue,
     'description'=>utf8_encode($event),
     'priority'=>$prowlprio));
    }
    else
    {
     $prowl->push(array(
     'application'=>'IPS-Unwetterwarn.',
     'event'=> 'DEFCON '.$DEFCON_NewValue,
     'description'=>utf8_encode('Reduzierung der Warnstufe'),
     'priority'=>$prowlprio));
	 }

  }
 }
}
//Ende Hauptteil

//Abschlussarbeiten
$DEFCON_LastValue       			= setValueInteger($DEFCON_this_LastValue,$DEFCON_NewValue);





}
// Install-Routinen
elseif($_IPS['SENDER'] == 'Execute')
{
if((($ParentModul['ObjectType'] != 1) && ($ParentModul['ObjectName'] != 'DWD Prowlversand')) || ($Update == true))
	{
	   if(($ParentModul['ObjectType'] != 1) && ($ParentModul['ObjectName'] != 'DWD Prowlversand'))
	   {
		   // Dummy-Instanz anlegen und Script drunterhängen
	      $ModulID				= IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
	      IPS_SetName($ModulID, 'DWD Prowlversand');
	      IPS_SetParent($ModulID, $Parent);
	      IPS_SetParent($_IPS['SELF'], $ModulID);
	      IPS_SetHidden($_IPS['SELF'], true);
	      IPS_ApplyChanges($ModulID);
      }
      // Variablen anlegen - wenn nicht vorhanden
      // 1. vorhandene Vars auslesen
      $ModulID					= IPS_GetParent($_IPS['SELF']);
      for($i=0;$i<count($VarNames);$i++)
		{
		   if(@IPS_GetObjectIDByName($VarNames[$i]['name'], IPS_GetParent($_IPS['SELF'])) == false)
		   {
		   $VarID				= IPS_CreateVariable($VarNames[$i]['type']);
		   IPS_SetName($VarID, $VarNames[$i]['name']);
		   IPS_SetHidden($VarID, $VarNames[$i]['hidden']);
		   IPS_SetPosition($VarID, $VarNames[$i]['position']);
		   IPS_SetParent($VarID, $ModulID);
		   SetValue($VarID, $VarNames[$i]['default_value']);
			}
			// Profile zuweisen
			$VarID				= IPS_GetObjectIDByName($VarNames[$i]['name'], IPS_GetParent($_IPS['SELF']));
			IPS_SetVariableCustomProfile($VarID, $VarNames[$i]['profil']);
		}
		
		//Trigger anlegen
      $eid = IPS_CreateEvent(0);        //Ausgelöstes Ereignis
      IPS_SetEventTrigger($eid, 1, $DEFCON_Status_ID); //Bei Änderung von Variable mit ID 15754
      IPS_SetParent($eid, $_IPS['SELF']); //Ereignis zuordnen
      IPS_SetEventActive($eid, true);    //Ereignis aktivieren

	}

	 echo "#9999 IPS Unwetterwarnung Prowl: Install ready (neue Objekte angelegt)
";


}
else
{
	echo "Script #".$_IPS['SELF']." DWD Prowlversand: ohne Ergebnis gelaufen (keine Objekte gefunden/Objekte fehlerhaft
";

}

?>