[Modul] OilFox Füllstandsmesser

Also bei mir kommen keine Fehlermeldungen.

Ich habe aber trotzdem das Script für den Datenabruf mal neu gemacht. Jetzt muss man die Variablen der zu Empfangenden Daten nicht mehr händisch anlegen.

<?php
//Variablennummer mit Access Token in die Klammer eingeben
$token = GetValue ();

//Geräte ID zwischen die ' eingeben
$geraet = '';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://api.oilfox.io/customer-api/v1/device/' .$geraet);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');


$headers = array();
$headers[] = "Authorization: Bearer ".$token;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}

curl_close ($ch);

//Anlage der Variablenprofile

if (IPS_VariableProfileExists("intTage") == false){
    IPS_CreateVariableProfile("intTage", 1);
    IPS_SetVariableProfileText("intTage", "", " Tage");
}

if (IPS_VariableProfileExists("intProzent") == false){
    IPS_CreateVariableProfile("intProzent", 1);
    IPS_SetVariableProfileText("intProzent", "", " %");
}

if (IPS_VariableProfileExists("intLiter") == false){
    IPS_CreateVariableProfile("intLiter", 1);
    IPS_SetVariableProfileText("intLiter", "", " L");
}


//Anlage der Variablen
$hwidID = @IPS_GetObjectIDByIdent("hwid", $_IPS['SELF']);
if ($hwidID == false){
    $hwidID = IPS_CreateVariable(3);
    IPS_SetName($hwidID, "hwid"); // Variable benennen
    IPS_SetParent($hwidID, $_IPS['SELF']); 
    IPS_SetIdent($hwidID, "hwid"); 
}

$currentMeteringAtID = @IPS_GetObjectIDByIdent("currentMeteringAt", $_IPS['SELF']);
if ($currentMeteringAtID == false){
    $currentMeteringAtID = IPS_CreateVariable(3);
    IPS_SetName($currentMeteringAtID, "currentMeteringAt"); // Variable benennen
    IPS_SetParent($currentMeteringAtID, $_IPS['SELF']); 
    IPS_SetIdent($currentMeteringAtID, "currentMeteringAt"); 
}

$fillLevelPercentID = @IPS_GetObjectIDByIdent("fillLevelPercent", $_IPS['SELF']);
if ($fillLevelPercentID == false){
    $fillLevelPercentID = IPS_CreateVariable(1);
    IPS_SetName($fillLevelPercentID, "fillLevelPercent"); // Variable benennen
    IPS_SetParent($fillLevelPercentID, $_IPS['SELF']); 
    IPS_SetIdent($fillLevelPercentID, "fillLevelPercent"); 
    IPS_SetVariableCustomProfile($fillLevelPercentID, "intProzent");
}

$batteryLevelID = @IPS_GetObjectIDByIdent("batteryLevel", $_IPS['SELF']);
if ($batteryLevelID == false){
    $batteryLevelID = IPS_CreateVariable(3);
    IPS_SetName($batteryLevelID, "batteryLevel"); // Variable benennen
    IPS_SetParent($batteryLevelID, $_IPS['SELF']); 
    IPS_SetIdent($batteryLevelID, "batteryLevel"); 
}

$daysReachID = @IPS_GetObjectIDByIdent("daysReach", $_IPS['SELF']);
if ($daysReachID == false){
    $daysReachID = IPS_CreateVariable(1);
    IPS_SetName($daysReachID, "daysReach"); // Variable benennen
    IPS_SetParent($daysReachID, $_IPS['SELF']);
    IPS_SetIdent($daysReachID, "daysReach");
    IPS_SetVariableCustomProfile($daysReachID, "intTage");
}

$fillLevelQuantityID = @IPS_GetObjectIDByIdent("fillLevelQuantity", $_IPS['SELF']);
if ($fillLevelQuantityID == false){
    $fillLevelQuantityID = IPS_CreateVariable(1);
    IPS_SetName($fillLevelQuantityID, "fillLevelQuantity"); // Variable benennen
    IPS_SetParent($fillLevelQuantityID, $_IPS['SELF']);
    IPS_SetIdent($fillLevelQuantityID, "fillLevelQuantity");
    IPS_SetVariableCustomProfile($fillLevelQuantityID, "intLiter");
}

$nextMeteringAtID = @IPS_GetObjectIDByIdent("nextMeteringAt", $_IPS['SELF']);
if ($nextMeteringAtID == false){
    $nextMeteringAtID = IPS_CreateVariable(3);
    IPS_SetName($nextMeteringAtID, "nextMeteringAt"); // Variable benennen
    IPS_SetParent($nextMeteringAtID, $_IPS['SELF']); 
    IPS_SetIdent($nextMeteringAtID, "nextMeteringAt"); 
}

$quantityUnitID = @IPS_GetObjectIDByIdent("quantityUnit", $_IPS['SELF']);
if ($quantityUnitID == false){
    $quantityUnitID = IPS_CreateVariable(3);
    IPS_SetName($quantityUnitID, "quantityUnit"); // Variable benennen
    IPS_SetParent($quantityUnitID, $_IPS['SELF']); 
    IPS_SetIdent($quantityUnitID, "quantityUnit"); 
}

//Wird aktuell nicht benötigt
//$validationErrorID = @IPS_GetObjectIDByIdent("validationError", $_IPS['SELF']);
//if ($validationErrorID == false){
    //$validationErrorID = IPS_CreateVariable(3);
    //IPS_SetName($validationErrorID, "validationError"); // Variable benennen
    //IPS_SetParent($validationErrorID, $_IPS['SELF']); 
    //IPS_SetIdent($validationErrorID, "validationError"); 
//}



$a =(json_decode($result));

//hwid = string = Hardware ID of the device
SetValue(IPS_GetObjectIDByIdent("hwid", $_IPS['SELF']), $a->{"hwid"});
//currentMeteringAt = string = RFC3339 timestamp
SetValue(IPS_GetObjectIDByIdent("currentMeteringAt", $_IPS['SELF']), $a->{"currentMeteringAt"});
//fillLevelPercent = int, optional = fill level in %, 0-100
SetValue(IPS_GetObjectIDByIdent("fillLevelPercent", $_IPS['SELF']), $a->{"fillLevelPercent"});
//batteryLevel = string, optional = enum of the battery level, see below
SetValue(IPS_GetObjectIDByIdent("batteryLevel", $_IPS['SELF']), $a->{"batteryLevel"});
//daysReach = int, optional = estimated days until the storage runs empty
SetValue(IPS_GetObjectIDByIdent("daysReach", $_IPS['SELF']), $a->{"daysReach"});
//fillLevelQuantity = int, optional = fill level in kg or L
SetValue(IPS_GetObjectIDByIdent("fillLevelQuantity", $_IPS['SELF']), $a->{"fillLevelQuantity"});
//nextMeteringAt = string = RFC3339 timestamp
SetValue(IPS_GetObjectIDByIdent("nextMeteringAt", $_IPS['SELF']), $a->{"nextMeteringAt"});
//quantityUnit = string = unit of the fill level: kg or L
SetValue(IPS_GetObjectIDByIdent("quantityUnit", $_IPS['SELF']), $a->{"quantityUnit"});
//validationError = string, optional = enum with errors regarding the measurement, see below
//SetValue(IPS_GetObjectIDByIdent("validationError", $_IPS['SELF']), $a->{"validationError"});
1 „Gefällt mir“

Danke dir für die Zeit die du investiert hast und danke für 3 funktionierende Scripte. Ich lasse Script 2 und Script 3 einmal am Tag als Ablaufplan laufen und erhalte endlich wieder meine Messwerte.

hi super läuft klasse :wink:

Tipp: die Geräte ID steht in der App unter eurem Produktnamen, fängt bei mir mit ONR an
image

Hi,
bin auch auf der Suche nach einem Füllstandsmesser für meine Öltanks. Geht dieser Oilfox noch reibungslos in Symcon? Vielleicht gibt es jetzt Alternativen?

LG
Stefan

also bei mir läuft der oilfox sehr gut

Danke für die Rückmeldung. Geht aber nicht mehr über das Modul sondern nur noch über die o.g. Skripte?

ja, es gibt kein Modul im Store dafür….leider
lg

Ok, Danke dir. Was für Daten stehen da einem zu Verfügung in Symcon?

LG
Stefan

Falles es noch Notwendig ist…

Es stehen die folgenden Daten zur Verfügung:

  • battery Level (nur als Status und nicht als Prozent)
  • currentMeteringAt (Datum und Uhrzeit letzte Messung)
  • daysReach (wie lange bis Tank leer)
  • fillLevelPercent (Füllstand in Prozent)
  • fillLevelQuantity (Füllstand in Liter)
  • hwid (Hardware ID)
  • nextMeteringAt (Datum und Uhrzeit nächste Messung)
  • quantityUnit (eingestellt Einheit)

Da ich mich mit der Modul Programmierung leider nicht auskenne, kann ich auch keines zur Verfügung stellen. Wenn jemand aus den Scripten ein Modul erstellen würde, würde es mich sehr freuen.

1 „Gefällt mir“

sorry hab es überlesen,
bei mir schaut das wie folgt aus


lg

Danke euch für die Info.

1 „Gefällt mir“

Guten morgen, seit dem Update auf die Version 7 kommen bei mir folgende Warnungen hoch

Das betrifft diesen Bereich

Muss ich was anpassen? Ich sehe den Grund der Warnung leider nicht.

Skript rennt aber, ist nur eine Warnung

Ruf ich das Skript evtl… zu oft ab, aktuell alle 3 Std. könnte das der Fall sein?

Danke vorab

Hi,
greife mal wieder das Thema auf. Wenn ich den Oilfox über WLAN betreiben möchte brauche ich dann noch ein Zusatzgerät das als Bridge dient? Auf der Seite kann ich nichts von WLAN lesen oder habe was übersehen.

nein brauchst du nicht hat WLAN integriert

Manuel vom OilFox
image
image

Hi,
ja, habe ich schon festgestellt, aber trotzdem Danke. Leider ist es so das man die Verbindungsart nicht frei wählen kann. Der Sensor verbindet sich immer mit dem besten Netz was vorhanden ist (laut Support). Das ist halt ein Manko finde ich. Des Weiteren muss man auch mit der Tankhöhe und Volumen etwas probieren, bei meinem Fall ist es so, wenn ich die genaue Maße eingebe, stimmt die Füllhöhe nicht und beim richtigen Volumen zieht er einfach einige Hundert Liter ab. Bei mir sind es Gesamt 4500 L und die App zeigt mir 4275 L.

hast du keinen Standard Tank welchen du aus der Vorlage der App ziehen kannst?

Nein, leider nicht. Mein Hersteller ist Lentz.