Feuersoftware API Integration

Hallo zusammen,
ich bin in der freiwilligen Feuerwehr aktiv.
Wir verwenden eine Software mit App für Alarmierung, Termine und Verfügbarkeit von Fahrzeugen und Einsatzkräften. Auch die Rückmeldung ob man zum Einsatz kommt läuft in das Portal.
Nun möchte die API (Swagger UI) in :loveips: integrieren.
Die Hilfeseite von Feuersoftware hilft mir nur bedingt weiter. Connect Benutzer API - Feuer Software GmbH

Hätten jemand eine Vorgehensweise für mich ?
Was muss ich in IPS tun um an die Daten zu kommen ?

Viele Grüße aus dem Taunus
Mario

Moin,

wenn Du ein API_KEY hast, kannst Du doch einfach mit CURL die Infos abrufen - ist doch gut dokumentiert!

Gruß Heiko

Hallo Heiko,
ich habe damit gar keine Erfahrung.
Die Dokumentation kann ich lesen. Meist ist diese halt von jemand verfasst der das kann. Ich zweifle dann schon nach 2 Sätzen.
Habe mit Hilfe des Forum und anderer Quellen schon einiges lösen können. Mir fehlt halt noch etwas Wissen um zu sagen so oder so gehe ich da ran.
API Key habe ich.
Viele Grüße
Mario

Welche Daten willste denn haben?

diese beide
/interfaces/public/user/useravailability]
/interfaces/public/vehicle/{radioId}/status]
beispielsweise.
Wobei ich nicht weis ob ich auf die Daten außerhalb von User zugreifen kann.
erweitern bekomme ich dann hin…
DANKE

Hier mal auf die schnelle ohne Garantie zusammengekloppt …

<?php

$API_KEY = '<here api key>';

$BASE_URL = 'https://connectapi.feuersoftware.com';

// Funktionsaufruf
userAvailability($BASE_URL, $API_KEY,'available', 7) {

/*
 * userAvailability
 *
 * @param string $base Basis URL
 * @param string $token Dies ist der Hex-String zur Authentifizierung welchen Sie zuvor im Connect Portal erzeugt haben.
 * @param string $status Hier wird ein String erwartet mit einem der folgenden Werten ('available'/'limitedAvailable'/'notAvailable')
 * @param int $lifetime Gibt an für wie viele Tage die Verfügbarkeit gesetzt wird. Nach Ablauf der Zeit wird die Verfügbarkeit automatisch zurück gesetzt.
 */
function userAvailability($base, $token, $status, $lifetime) {
    // Build url
    $url = $base . '/interfaces/public/user/useravailability';
    $url .= '?token=' . $token;
    $url .= '&status=' . $status;
    $url .= '&lifeTimeDays=' . $lifetime;
    $response = doRequest($url, null);
    if($response !== false) {
        echo 'ERFOLGREICH' . PHP_EOL;
    }
    else {
        echo 'NICHT ERFOLGREICH' . PHP_EOL;
    }
}

/*
 * doRequest - Sends the API call
 *
 * If $request not null, we will send a POST request, else a GET request.
 * Over the $method parameter can we force a POST or GET request!
 */
function doRequest($url, $request, $method = 'GET') 
{
    // Return
    $ret = false;
    // CURL
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT);
    if($request != null) {
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
    }
    else {
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
    }
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($curl);
    curl_close($curl);
    //var_dump($response);
    if($response != null) {
        return $response;
    }
    return $ret;
}

WOW !!! DANKE. Ich versuche jetzt mal mein Glück.
Es kommen bestimmt noch Fragen auf :blush:

Viele Grüße

Es wirft einen Fehler.
Parse error: syntax error, unexpected ‚userAvailability‘ (T_STRING), expecting ‚(‘ in C:\ProgramData\Symcon\scripts\18742.ips.php on line 18
Was hat es mit dem token auf sich ? Für was ist der ?

Du hast Doch gesagt Du hast den API-Key = Token

<?php

$API_KEY = '<here api key>';

$BASE_URL = 'https://connectapi.feuersoftware.com';

// Funktionsaufruf
userAavailability($BASE_URL, $API_KEY,'available', 7);

/*
 * userAavailability
 *
 * @param string $base Basis URL
 * @param string $token Dies ist der Hex-String zur Authentifizierung welchen Sie zuvor im Connect Portal erzeugt haben.
 * @param string $status Hier wird ein String erwartet mit einem der folgenden Werten ('available'/'limitedAvailable'/'notAvailable')
 * @param int $lifetime Gibt an für wie viele Tage die Verfügbarkeit gesetzt wird. Nach Ablauf der Zeit wird die Verfügbarkeit automatisch zurück gesetzt.
 */
function userAavailability($base, $token, $status, $lifetime) {
    // Build url
    $url = $base . '/interfaces/public/user/useravailability';
    $url .= '?token=' . $token;
    $url .= '&status=' . $status;
    $url .= '&lifeTimeDays=' . $lifetime;
    $response = doRequest($url, null);
    if($response !== false) {
        echo 'ERFOLGREICH' . PHP_EOL;
    }
    else {
        echo 'NICHT ERFOLGREICH' . PHP_EOL;
    }
}

/*
 * doRequest - Sends the API call
 *
 * If $request not null, we will send a POST request, else a GET request.
 * Over the $method parameter can we force a POST or GET request!
 */
function doRequest($url, $request, $method = 'GET') 
{
    // Return
    $ret = false;
    // CURL
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); 
    if($request != null) {
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
    }
    else {
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
    }
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($curl);
    curl_close($curl);
    //var_dump($response);
    if($response != null) {
        return $response;
    }
    return $ret;
}

Hier hatte sich bei Copy&Paste der Methoden-Deklaration ein { statt ; eingeschlichen.

Bist du dir sicher, dass du dir das Projekt zutraust?

Ne sicher nicht, bisher hab ich immer so lange rum getippt bis es funktioniert hat.
Ah der token ist also der Key… ok… ich probiere weiter…

Verfügbarkeit setzen geht schon mal. Jetzt muss ich das ganze noch in Variablen packen um es darzustellen.

es kommt diese Meldung aber die Verfügbarkeit wird geändert.
Warning: Use of undefined constant USER_AGENT - assumed ‚USER_AGENT‘ (this will throw an Error in a future version of PHP) in C:\ProgramData\Symcon\scripts\18742.ips.php on line 48
NICHT ERFOLGREICH

Wenn ich die Verfügbarkeit nur wissen möchte muss ich das anders machen ?

Zeile 48 : curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT);

Meine Glaskugel ist kaputt. Was steht denn in Zeile 48 und welche Daten bekommt das Programm in dieser Zeile vorgesetzt?

Brauchst Du keine Glaskugel:
// CURL
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
Zeile 48 → curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT);
if($request != null) {
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, ‚POST‘);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
}
else {
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
}
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);

Wie und Wo baue ich denn das schreiben aus einer Variable ein ?

Viele Webseiten prüfen den User-Agent (also das, was der Browser vorgibt zu sein). So könnte man theoretisch dem alten Internet-Explorer eine andere (auf seine kaputte Engine zugeschnittene) Webseite liefern, als anderen Browsern. Einige dieser APIs prüfen auf den Useragent ‚Hersteller Android App‘. Nur wenn der gesendet wird, liefern sie überhaupt was. In deinem Fall scheint er nicht nötig zu sein, also kannst du die Zeile einfach löschen.

Alternativ eben einen User-Agent angeben (z.B. 'Mescalero IP-Symcon'.
Die Fehlermeldung sagt, dass du eine sog. Konstante verwendest. Die ist aber nicht definiert.

Ok verstanden. Wenn ich diese availability nur lesen und nicht schreiben möchte wo muss ich da anfassen.
Hintergrund den Status möchte ich eigentlich nur in der App und nicht aus Symcon setzen.

Ich habe doch extra ein Update vom Script geschickt!

Wegen dem userAgent ? Das hatte ich missverstanden. Sorry
Bin jetzt an dem Rückmeldestatus zum Einsatz, den möchte ich auch aus IPS schreiben.
mal sehen, ich haue mal in die Tasten.

hmm muss ich den Teil der Funktion komplett auf userstatus kopieren?
/* userStatus
*Funktionsaufruf
*/
userstatus($BASE_URL, $API_KEY, $status, $driveTimeSeconds, $siteid);

function unserstatus($base, $token, $status, $driveTimeSeconds, $siteid) {
//Build url
$url = $base . ‚/interfaces/public/user/userstatus‘;
$url .= ‚?token=‘ . $token;
$url .= ‚&status=‘ . $status;
$url .= ‚&driveTimeSeconds‘ . $driveTimeSeconds;
$response = doRequest($url, null);
if($response !== true) {
echo ‚ERFOLGREICH‘ . PHP_EOL;
}
else {
echo ‚NICHT ERFOLGREICH‘ . PHP_EOL;