1 Wire Sensoren CRC Error abfragen

Ich hab seit kurzem von dem „Problembehafteteten“ blauen DS9490R Gateway auf den Eservice 1Wire USB v2 Gateway umgestellt.
Der neue 1 Wire Gateway funktioniert jetzt einfach zuverlässig! Nicht wie der DS9490R - den musste meine Überwachung regelmässig durchstarten.(wbei das ein IPS Problem ist - da der 1 Wire Stick mit dem Maxim 1 Wire Viewer in diesen Fällen immer ansprechbar war :frowning: - Nur in IPS nicht ).
-Egal-

Nun möchte ich fehlerhafte Sensoren anzeigen lassen.

Ich hab da derzeit einen kaputten Sensor :slight_smile:

Hier mein Abfragewskript eines TEmp-Sensors:

if (IPS_SemaphoreEnter("TMEX", 1000))
{
 TMEX_RequestRead(43332 /*[Haus\Temperaturen\Wohnzimmer\Wohnzimmer]*/);
 SetValue(17112 /*[Haus\Temperaturen\Wohnzimmer\Wohnzimmer\Erfolgreicher Abruf]*/,date("d.m.y H:i:s"));
 IPS_SemaphoreLeave("TMEX");
}
else
{
//Abfrage hat nicht funktioniert, deshalb Rückmeldung
 SetValue(14472 /*[Haus\Temperaturen\Wohnzimmer\Wohnzimmer\Fehlerhafter Abruf]*/,date("d.m.y H:i:s"));
 IPS_SemaphoreLeave("TMEX");
}

Leider gibt mir diese Abfrage immer einen erfolgreichen Abruf zurück.

Der Sensor sollte aber einen CRC Error ausspucken.
Zumindest spuckt das die manuelle Abfrage aus. Wo kann ich diesen CRC Error als Antwort abgreifen?

Das Debug im TMEX Eservice zeigt leider keinen FEhler an:
1wire_debug.JPG
Lediglich Request / Grant und Release SLot

Im Meldungsfenster wird der CRC Error ebenfalls angezeigt:

Die Semaphore hat hier eigentlich nichts zu suchen!?

Sowas sollte gehen:


if(@TMEX_RequestRead(43332 /*[Haus\Temperaturen\Wohnzimmer\Wohnzimmer]*/) === false) {
 //Erfolgreich
} else {
 //Fehler!
}

paresy

@paresy

danke erst mal für deinen Denkanstoss.

Zu meiner Variante mit dem Semaphore… Ich musste ne zeit lang die „weit“ entfernten 1 Wire Sensoren damit abfragen.
D.h. ich hab der Abfrage Zeit gegeben. -> Ansonsten hat IPS die WErte nicht erhalten. INteressanterweise konnte ich die per 1 Wire Viewer ohne FEhler abrufen :slight_smile:
Jetzt mit dem Eservice Gateway ist das vermutlich hinfällig da der robuster ist und auch ne bessere Spannungsversorgung bereit stellt.

Jetzt aber zu deinem Skript.

Das fängt „CRC Error“ leider nicht ab ;-(

if(@TMEX_RequestRead(57661 /*[Haus\Temperaturen\Aussen\Aussentemperatur]*/) === false)
{
SetValue(38187 /*[Haus\Temperaturen\Aussen\Aussentemperatur\Erfolgreicher Abruf]*/,date("d.m.y H:i:s"));
}
else
{
//Abfrage hat nicht funktioniert, deshalb Rückmeldung
SetValue(56205 /*[Haus\Temperaturen\Aussen\Aussentemperatur\Fehlerhafter Abruf]*/,date("d.m.y H:i:s"));
}

Die Abfrage gibt bei einem kaputten Sensor ein erfolgreich zurück :slight_smile:
Nach meinem verständnis geht die Abfrage nur dann auf einen Fehler, wenn der 1 Wire Gateway selbst nicht funktioniert. - Nicht der Sensor selbst .

Abfrage eines defekten Sensors

echo ow_requeststatus(43332);
echo tmex_requestread(43332);

ergibt:
ow_requestatus:
PHP-Error-Warning: 1-Wire Operation failed: CRC Error
Error in Script C:\IP-SYMCON\scripts\45754.ips.php on Line 2
Warning: 1-Wire Operation failed: CRC Error in C:\IP-SYMCON\scripts\45754.ips.php on line 2

für
tmex_requestread:
PHP-Error-Warning: 1-Wire Operation failed: CRC Error
Error in Script C:\IP-SYMCON\scripts__compatibility.inc.php on Line 4676
Warning: 1-Wire Operation failed: CRC Error in C:\IP-SYMCON\scripts__compatibility.inc.php on line 4676

Wie könnte ich das nun abfangen?

Abfrage eines funktionierenden Sensors gibt den Temperaturwert aus.

P.S:
Ist die 1Wire Abfrage „OW_…“ dann die neue Variante. „TMEX_…“ die alte?

Hi!

OW_… = NEU
TMEX_… = ALT

Und ich würde einfach mit dem Rückgabewert vom TMEX_RequestRead arbeiten!?

Konnte der Befehl erfolgreich ausgeführt werden, liefert er als Ergebnis TRUE, andernfalls FALSE.

Also:

$result = @TMEX_RequestRead(43332);

if ($result == true) {
    echo "ALLES OK";
}
else {
    echo "FEHLER beim Abfragen";
}

Grüße,
Chris

Hallo Chris,

vielen Dank - Das wars :slight_smile:

Hier zum nachlesen für andere:

Damit erhalte ich einerseits einen Zeitstempel in die Variable „Erfolgreicher Abruf“ oder „Fehlerhafter Abruf“.
Desweiteren lasse ich das Ergebnis True oder False in die Variable „Ergebnis“ schreiben.
D.h. über die Variable „Ergebnis“ könnte man sich für das Ereignis „False“ - eine Nachricht schicken lassen, oder den Schalter ins Webfront verlinken…


$ergebnis = @TMEX_RequestRead(57661 /*[Haus\Temperaturen\Aussen\Aussentemperatur]*/);
//echo $ergebnis;
setValueString(17666 /*[Haus\Temperaturen\Aussen\Aussentemperatur\Ergebnis]*/,$ergebnis);
if(@ergebnis == false)
{
SetValue(38187 /*[Haus\Temperaturen\Aussen\Aussentemperatur\Erfolgreicher Abruf]*/,date("d.m.y H:i:s"));
}
else
{
//Abfrage hat nicht funktioniert, deshalb Rückmeldung
SetValue(56205 /*[Haus\Temperaturen\Aussen\Aussentemperatur\Fehlerhafter Abruf]*/,date("d.m.y H:i:s"));
}

ergibt in der Konsole folgende Ansicht:

Grüsse
Michael

OW_* sind die neuen Befehle. Leider stehen in der Doku noch die alten Befehle.

paresy

@paresy

Danke noch für den abschliessenden Hinweis:

Dann die zukünftig korrekte Version :smiley:

$ergebnis = @ow_Requeststatus(57661 /*[Haus\Temperaturen\Aussen\Aussentemperatur]*/);
//echo $ergebnis;
setValueString(17666 /*[Haus\Temperaturen\Aussen\Aussentemperatur\Ergebnis]*/,$ergebnis);
if(@ergebnis == false)
{
SetValue(38187 /*[Haus\Temperaturen\Aussen\Aussentemperatur\Erfolgreicher Abruf]*/,date("d.m.y H:i:s"));
}
else
{
//Abfrage hat nicht funktioniert, deshalb Rückmeldung
SetValue(56205 /*[Haus\Temperaturen\Aussen\Aussentemperatur\Fehlerhafter Abruf]*/,date("d.m.y H:i:s"));
}  

Ich hätte aber auch selbst drauf kommen, wenn man in den 1 Wire Sensor mit „Befehl testen“ schaut. Da ist in meiner BETA bereits „OW_requeststatus“ hinterlegt :loveips:

Die Semaphore hat hier eigentlich nichts zu suchen!?

Also bei mir geht der 1-wire Bus nur mit Semaphore ohne Crash…

Grüße Jens