[Modul] OilFox Füllstandsmesser

Kann ich dazu noch mal was fragen, ich wollte den Oilfox2 jetzt bestellen aber muss ich auf was achten ?

Die Version 2 gibt es wohl als 2 Versionen. Einmal mit W-LAN und einmal mit Mobilfunk. Je nach Einbauort muss man sich für das entsprechende System entscheiden.
Und ein Schraubanschluss muss an der Tankoberseite noch frei sein.

Ok, vielen Dank. Ich habe das Dingen jetzt mal bestellt. Einschrauben sollte ich es ja da können wo die alte Anzeige war (Skala mit Schwimmer im Öl)

Mehr Löcher habe ich Knut in dem Tank .

Hallo,

seit ein paar Tagen wird mein Ölstand nicht mehr aktualisiert.

Beim Abruf kommt die Fehlermeldung

Update zum Oilfox gab es keinen

Gruß

Oliver

Hallo,

keiner eine Idee, wie ich das wieder zum laufen kriege. ?

Gruß

Oliver

Habe leider auch Probleme bis gerade eben wurden seit August keine Daten mehr geladen und jetzt gerade lädt er welche aber nicht alle und diesen Fehler habe ich

<br />
<b>Notice</b>: Trying to access array offset on value of type null in <b>/var/lib/symcon/modules/de.codeking.symcon.oilfox/OilFox/module.php</b> on line <b>124</b><br />

kann jemand helfen? Meine Daten werden nicht mehr alle angezeigt !

Leider nein.
Ich habe eine andere Lösung gemacht, mein Brenner hat ne Klemme für einen Betriebsstunden Zähler(230V Ausgang), den habe ich in IPS gebracht, und IPS rechnet über die Laufzeit den Ölverbrauch aus (Daten stehen auf dem Brenner oder im Handbuch). Ist zwar nicht ganz so genau, aber das läuft seit Jahren sehr gut.
Nur mal so als als Tipp.

Hallo Zusammen,

hat schon jemand eine Lösung gefunden ? Würde nur ungern noch zusätzlich was anbringen ?
Hatte mir das dingen extra gekauft weil es im IPS funktionierte !

Wird an dem Plugin noch weiter gearbeitet

Die API hat sicher geändert.
Der Aufruf ist ein anderer und die übermittelten Werte sind nun um einiges weniger.

https://api.oilfox.io/customer-api/v1/login

https://api.oilfox.io/customer-api/v1/device

Ergebnis:
Array(
[items] => Array(
[0] => Array(
[hwid] => -------------------------
[currentMeteringAt] => 2022-04-13T08:15:52.916Z
[nextMeteringAt] => 2022-04-14T08:15:52.916Z
[daysReach] => 1108
[batteryLevel] => FULL
[fillLevelPercent] => 83
[fillLevelQuantity] => 4963
[quantityUnit] => L
)
)
)

Hallo Manni
kannst Du uns auch mitteilen wo die Änderungen im Script eingebaut werden müssen?
Ich benutze das Modul und seit 23.3. erhalte ich keine Daten mehr. Wäre schön wenn wieder Daten ankommen würden.
LG Georg

Hallo,

da Codeking seit mehreren Jahren hier nicht mehr aktiv ist, könnte nicht jemand das oilfox Modul forken und wieder mal aktualisieren?
oder als neues Modul im Store?

Gruß

Oliver

1 „Gefällt mir“

Hey,

wäre schon cool wenn hier jemand helfen könnte.

1 „Gefällt mir“

Ich habe mir heute mal ein wenig Arbeit gemacht und ein paar Scripte gebaut die das ganze wieder in Symcon möglich machen.

Leider müssen alle Variablen und Scripte noch händisch angelegt werden, aber vielleich bekomme ich (oder ein versierterer hier aus dem Forum) das noch hin, dass man nur ein Script braucht um alles andere angelegt zu bekommen.

Mit folgendem Script bekommt man den ersten „Access Token“ und den „Refresh Token“ um die Daten abrufen zu können. Das Script speichert diese Token jeweils in einer String Variable welche später in anderen Scripten genutzt werden kann. Die beiden Variablen müssen händisch angelegt werden und am Ende vom Script eingetragen werden.

<?php
//Kennwort
$password = "Kennwort";
//E-Mail Adresse
$email = "E-Mail Adresse";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://api.oilfox.io/customer-api/v1/login');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"password\":\"$password\",\"email\":\"$email\"}");
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

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

curl_close ($ch);
$a =(json_decode($result));
//Variable mit Access Token
SetValue(39482, $a->{"access_token"});
//Variable mit Refresh Token
SetValue(15794, $a->{"refresh_token"});

Dieses Script benötigt man nur für den ersten Zugang.

Das zweite Script erneuert den „Access Token“ und den „Refresh Token“. Dieses sollte alle 15 Minuten automatisch ausgeführt werden. Auch hier müssen die beiden vorherigen Variablen mit eingetragen werden.

<?php
//Variable mit Refresh Token
$token = GetValue (15794);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://api.oilfox.io/customer-api/v1/token?refresh_token=' .$token);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "-urlencode");

$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);
$a =(json_decode($result));
//Variable mit Access token
SetValue(39482, $a->{"access_token"});
//Variable mit Refresh token
SetValue(15794, $a->{"refresh_token"});

Im nächsten Script werden die einzelnen Daten eines Gerätes abgefragt.
Hierzu muss die Variable mit dem Access Token und die Geräte ID im Kopf eingetragen werden. Zusätzlich müssen am Ende des Scriptes die einzelnen Variablen für die Empfangen Daten eingetragen werden. Leider müssen diese Variablen derzeit händisch angelegt werden.

<?php
//Variable mit Access Token
$token = GetValue (39482);
//Geräte ID
$geraet = 'Geräte ID';

$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);
$a =(json_decode($result));

//hwid = string = Hardware ID of the device
SetValue(36853, $a->{"hwid"});
//currentMeteringAT = string = RFC3339 timestamp
SetValue(14873, $a->{"currentMeteringAt"});
//fillLevelPersent = int, optional = fill level in %, 0-100
SetValue(44078, $a->{"fillLevelPercent"});
//batteryLevel = string, optional = enum of the battery level, see below
SetValue(13880, $a->{"batteryLevel"});
//daysReach = int, optional = estimated days until the storage runs empty
SetValue(46706, $a->{"daysReach"});
//fillLevelQuantity = int, optional = fill level in kg or L
SetValue(56369, $a->{"fillLevelQuantity"});
//nextMeteringAt = string = RFC3339 timestamp
SetValue(38746, $a->{"nextMeteringAt"});
//quantityUnit = string = unit of the fill level: kg or L
SetValue(30786, $a->{"quantityUnit"});
//validationError = string, optional = enum with errors regarding the measurement, see below
//SetValue(11834, $a->{"validationError"});

gerade eingerichtet, klappt, danke

eine Frage dazu, warum wird der Token so oft erneuert? reicht es nicht in der Häufigkeit, wie ich die Daten abfrage?

Theoretisch müsste dies reichen. Der Access Token ist immer nur 15 Minuten haltbar. Deswegen lasse ich dann alle 15 Minuten ein neues generieren.

Da die Sensoren nur alle 24h messen, würde es reichen kurz vorher den access token zu generieren

ich bekomme im IPSLOGGER eine Fehlermeldung:

Error: Notice: Trying to get property ‚hwid‘ of non-object
Error in Script /var/lib/symcon/scripts/17489.ips.php on Line 27
134 in IPSLibrary/app/core/IPSLogger/IPSLogger.inc.php (call IPSLogger_Out)
44 in IPSLibrary/app/core/IPSLogger/IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
27 in 17489.ips.php (call IPSLogger_PhpErrorHandler)

Betrifft den Teil des Skriptes, dass die daten abfragt:

$a =(json_decode($result));
//hwid = string = Hardware ID of the device
SetValue(44408, $a->{„hwid“});
//currentMeteringAT = string = RFC3339 timestamp
SetValue(24948, $a->{„currentMeteringAt“});
//fillLevelPersent = int, optional = fill level in %, 0-100
SetValue(31413, $a->{„fillLevelPercent“});
//batteryLevel = string, optional = enum of the battery level, see below
SetValue(50310, $a->{„batteryLevel“});
//daysReach = int, optional = estimated days until the storage runs empty
SetValue(17972, $a->{„daysReach“});
//fillLevelQuantity = int, optional = fill level in kg or L
SetValue(45484, $a->{„fillLevelQuantity“});
//nextMeteringAt = string = RFC3339 timestamp
SetValue(24948, $a->{„nextMeteringAt“});
//quantityUnit = string = unit of the fill level: kg or L
SetValue(51851, $a->{„quantityUnit“});
//validationError = string, optional = enum with errors regarding the measurement, see below
//SetValue(56711, $a->{„validationError“});

funktionieren tut es aber ?? muss da noch was geändert werden?

Schaue ich mir am Wochenende an. Ich habe die Meldung bisher nicht gehabt.