Pushsafer Skript

Das Pushsafer Modul für IPS hat den Nachteil, dass man das Profil der Push-Nachrichten nur durch Einträge in die Konfiguration ändern kann. Will man Push-Nachrichten alternative mit einer anderen Ikone oder z.B. einem anderen Sound versenden, muss man sich ein weiteres Profil erstellen und das dann mit der neuen Objekt-ID aufrufen.

Ich habe mir deshalb entsprechend den Hinweisen der Nachrichten API von Pushsafer ein Skript geschrieben, mit dem ich beim Aufruf die alternativen Parameter ändern kann. Verwendet wird also das bewährte IPS-Skript IPS_RunScriptEx:

boolean IPS_RunScriptEx ( integer $SkriptID, array $Parameter )

Damit man beim Aufsetzen des Parameter-Array nicht nur auf die kryptischen Kürzel wie ‚t‘ für „title“, ‚m‘ für „Message“, ‚s‘ für „sound“, ‚v‘ für „Vibration“, ‚i‘ für „Icon“ usw. angewiesen ist, werden im Skript frei programmierbare alternative Feld-Namen umgesetzt. Implementiert sind ‚Titel‘, ‚Msg‘, ‚Ton‘, ‚Vibrator‘, ‚Icon‘; können aber im Skript beliebig verändert und erweitert werden.

Weil das Aufsetzen eines Array für jeden Aufruf recht aufwendig in der Programmierung ist, rufe ich das Pushsafer-Skript über eine Function auf, die einen String erhält

[ul]
[li]der durch einen senkrechten Strich (|) abgeteilte Felder enthält
[/li][li]deren Stellung in der Reihenfolge das Feld bestimmt
[/li][li]deren Abwesenheit den im Skript eingestellten default-Wert zuläßt
[/li][/ul]
und damit das Parameter-Array aufsetzt und das Pushsafer-Skript aufruft.

Verstanden? Hier einige Beispiels-Aufrufe:


// Aufrufe in der Reihenfolge 'Icon', 'Msg', 'Ton', 'Titel', 'ToL', 'Grp'

// Beispiel 1
Msg ('|Push-Nachricht|');           // Sende Push-Nachricht mit dem Inhalt "Push-Nachricht" mit Standard-Icon und Sound

// Beispiel 2
$Text = "Garage geschlossen";
Msg ("90|$Text|");         // 90 = Türverschluß

// Beispiel 3
$Text = "Garage steht seit 20min offen";
Msg ("91|$Text|20");         // 91 Tür Achtung, 20 = Hupen 

// Beispiel 4
$PushToL = 60 * 2;      // Time to Live für Pushnachrichten in Min.
$Sts = 5;            //  >4 = '5 frischer Wind (29 km/h)'
Msg ("25|Windstärke $Sts|13||$PushToL");         // 25 = Megaphon, 13 = Knarrende Tür (Alarm9)

// Beispiel 5
$Sts = 'Es regnet';
$Text = '[b]' . $Sts . '[/b]';
Msg ("69|$Text|2|Wetterbericht|$PushToL");         // 69 = Regen, 2 = Applaus (Mail)

Das ist die Msg-Function (ObjektID des Pushsafer-Skriptes muß eingetragen werden)


// Msg ('|Text|') Sende Push-Nachricht
function Msg ($StringPar) {
    $Einzel = explode ('|', $StringPar);
// in dieser Reihenfolge müssen die Felder abgeteilt durch '|' angeliefert werden    
    $API = array ('Icon', 'Msg', 'Ton', 'Titel', 'ToL', 'Grp');
    $Par = array ();
    foreach ($Einzel as $key => $value) {
        if ( ! empty ($value))
            $Par[$API[$key]] = $value;
    }
    IPS_RunScriptEx (##ObjektIDPushsafer-Skript##, $Par);    // Pushsafer-Aufruf
}


Und hier das Pushsafer-Skript (der eigene private Schlüssel muß eingetragen werden):

<?php
/*
 * @file          Pushsafer_ACT.ips.php
 * @author        Harald Hertlein
 * @version       05.03.17 18:17
 * Ident:         'Push/ACT'
 * Version <br/>
 *
 *
 */


// Default API-Werte
$url = 'https://www.pushsafer.com/api';
$data = array (
//  't' => 'IPS', // "title": default ohne Titel (gibt mehr Platz in der Darstellung)
    'm' => 'Ohne Text',
    's' => 0, // "sound": 0= lautlos
    'v' => 3, // "vibration"
    'i' => 3, // "icon": 3= Fragezeichen
    'd' => 'a', // "device": d = Gerät, einzelne Geräte ID oder Gerätegruppen ID oder alle Geräte; d=a = an alle Geräte
//  'u' => urldecode ("https://www.pushsafer.com"), // "url"
//  'ut' => urldecode(''),              // "urltitle"
//  'p' => $picture,
    'l' => 60 * 24 * 2, // = Time to Live Ganzzahl 0-43200: Zeit in Minuten, nach der die Nachricht automatisch gelöscht wird. 0 oder leer = nicht automatisch löschen
    'k' => '##privater Schlüssel##', // privater Schlüssel
);

/*
 Ton
Werte in Klammern gelten für Windows 10 (UWP)
leer = Gerätestandard
0 = lautlos                             1 = Ahem (IM)               2 = Applaus (Mail)
3 = Pfeil (Reminder)                    4 = Baby (SMS)              5 = Glocke (Alarm)
6 = Fahrradklingel (Alarm2)             7 = Boing (Alarm3)          8 = Buzzer (Alarm4)
9 = Kamera (Alarm5)                     10 = Auto Hupe (Alarm6)     11 = Registrierkasse (Alarm7)
12 = Glockenspiel (Alarm8)              13 = Knarrende Tür (Alarm9) 14 = Kuckucksuhr (Alarm10)
15 = Verbindung trennen (Call)          16 = Hund (Call2)           17 = Türklingel (Call3)
18 = Fanfare (Call4)                    19 = Pistole (Call5)        20 = Hupen (Call6)
21 = Maultrommel (Call7)                22 = Morsen (Call8)         23 = Elektrizität (Call9)
24 = Radio Tuner (Call10)               25 = Sirene                 26 = Militär Trompeten
27 = Ufo                                28 = Whah Whah Whah

 Icon
1 = Glocke 2 = 3 = 4 = 5 = 6 = 7 = Wecker  8 = 9 = 
10 = Pfeil nach innen  11 = Pfeil nach außen 12 = Schlüssel  13 = 14 = 15 = gekreuzte Schraubenschlüssel 16 = 17 = 18 = 19 = 
20 = 21 = 22 = 23 = 24 = 25 = Megaphon 26 = 27 = 28 = 29 = 
30 = Kuvert  31 = 32 = 33 = 34 = 35 = 36 = 37 = 38 = 39 = 
40 = 41 = 42 = 43 = 44 = Anruf  45 = 46 = 47 = 48 = 49 = 
50 = 51 = 52 = 53 = 54 = 55 = 56 = 57 = 58 = 59 = 
60 = 61 = 62 = 63 = 64 = 65 = 66 = 67 = 68 = 69 = Regen  
70 = 71 = 72 = 73 = 74 = 75 = 76 = 77 = 78 = 79 = 
80 = 81 = 82 = 83 = 84 = 85 = 86 = 87 = 88 = Türöffnung  89 = Türsperrung
90 = Türverschluß  91 Tür Achtung = 92 = Tür in Aktion 93 = 94 = 95 = 96 = 97 = 98

*/

// Defaulte und Alternative Parameter-Namen
$Add = array (
    't'        => 't',
    'Titel'    => 't',
    'm'        => 'm',
    'Msg'      => 'm',
    's'        => 's',
    'Ton'      => 's',
    'v'        => 'v',
    'Vibrator' => 'v',
    'i'        => 'i',
    'Icon'     => 'i',
    'd'        => 'd',
    'Grp'      => 'd', // Gruppe
    'u'        => "u", // "url"
    'ut'       => 'ut', // "urltitle"
    'l'        => 'l',
    'ToL'      => 'l', // = Time to Live
    'p'        => 'p',
);

// werden zusammengesetzt
foreach ($Add as $key => $value) {
    if (isset ($_IPS[$key]))
        $data = array_merge ($data, array ($value => $_IPS[$key]));
}

$options = array (
    'http' => array (
        'header'  => "Content-type: application/x-www-form-urlencoded
",
        'method'  => 'POST',
        'content' => http_build_query ($data)
    )
);
$context = stream_context_create ($options);
@$result = file_get_contents ($url, false, $context);

$result = json_decode ($result, true);

if ( ! ($result['status'])) {
    if (empty ($result['error']))   // dann ist $result wahrscheinlich NULL
        $result['error'] = 'Keine IP-Verbindung';
    IPS_LogMessage ('Pushsafer', "Fehler-Diagnose: " . $result['error']);
}

?>

Viel Spaß
Harald

Ich nehme nicht den „Umweg“ über das Modul sondern nutze direkt die PHP API
https://www.pushsafer.com/de/pushapi
Somit bin ich sehr flexibel.

Jürgen

Wer lesen kann ist klar im Vorteil:rolleyes: