ich habe mich bereits einmal quer durch die 1-Wire Kategorie gelesen, bin aber noch nicht fündig geworden, deshalb ein neuer Post.
Ich suche eine Möglichkeit, mit der man die gepollten Werte der DS18S20 Sensoren prüft, d.h. sollte ein Sonsor ausfallen und einen CRC-Fehler liefern, so sollte im WebFront auch entsprechend eine Signalisierung/Darstellung erfolgen. Momentan steht halt der letzte Wert da und das ist nur unbefriedigend für meine Bedürfnisse.
Beispiel: Der Sensor wird vom Bus getrennt, dann gibt die Software ja einen CRC-Fehler in der Console aus.
Kann ich die Meldung irgendwie im WebFront ausgeben?
Wenn ich Dein Skript richtig interpretiere, dann wird der Wert abgefragt?
Das Skript kann ich dann leider nicht anwenden, da der 1-Wire Bus den Sensor abfragt und den zuletzt ermittelte Wert bestehen bleibt. Genau da ist ja der Knackpunkt, weswegen ich den Log auslesen will, da dort der CRC-Fehler ausgegeben wird.
Nicht wirklich.
Das Script von Helmut überprüft den Status der Instanz, nicht den Wert einer Variable der Instanz.
Wenn die Instanz aber nie in Fehlerhaft geht, funktioniert das leider auch nicht.
Probier es doch mal aus.
Alternativ habe ich noch was, welches Variablen auf zyklische Änderungen überwacht und bei ausbleiben Alarm schlägt.
Michael
Die Abfrage des Instanzstatus für ins nichts – Leider. Ich kann damit lediglich den Status des USB Moduls (TMEX) abfragen, aber die Sensoren auf dem BUS liefern keine brauchbaren Ergebnisse.
Ich nutze jetzt statt des Timers einfach ein Skript zum auslesen der Sensoren. Mit dem Befehl TMEX_RequestRead lasse ich einfach prüfen, ob es geklappt hat, oder nicht. Neben den Werten, die in die Variablen geschrieben werden steht halt noch die Antwort true oder false zur Verfügung.
Zudem habe ich noch ein Script (vermutlich zumindest in Teilen) hier aus dem Forum, um den Bus und den Busmaster selbst zu überwachen und zu resetten.
Aus dem oben genannten Script dann die IDs für den Bus Status und Busmaster unten eintragen.
Dazu noch die TMEX Instanz ID und die ID einer WebFront Boolean Variable eintragen
<?
/* Das Script prüft,
- ob die TMEX Instanz ok ist (wenn ok, dann Rückgabewert = 102
- ob one-Wire Bus (ID kommt aus Auslesescript oben) ok ist
- ob one-Wire BusMaster (ID kommt aus Auslesescript oben) ok ist
Das Script resetet die TMEX Instanz im Fehlerfall (mit 5 sec.
Das Script ändert die Webfront Variable für den Status im Fehlerfall/Gutfall
*/
$ObjektID = 12345 /*[TMEX]*/; // !!!! ID des TMEX einfügen!!!!
$busstat = 23456; // !!! ID des Bus Status
$masterstat = 45678; // !!! ID des BusMaster Status
$onewstat = 34567; // !!! ID der Webfront Variable 1-Wire Status
$inst = IPS_GetInstance($ObjektID /*[TMEX]*/);
If ((getvalue($busstat) == false) or
(getvalue($masterstat) == false)or
($inst['InstanceStatus'])!="102") {
echo "TMEX reset!";
// Statusvariable fürs Webfront auf false setzen. false = Fehler
setvalueboolean($onewstat, false);
set_time_limit(180); //Timeout für dieses Script auf 180s setzen
TMEXA_SetOpen($ObjektID, false);
// TMEX ausschalten
IPS_ApplyChanges($ObjektID);
IPS_Sleep(5000);
TMEXA_SetOpen($ObjektID, True);
// TMEX einschalten
IPS_ApplyChanges($ObjektID);
}
If ((getvalue($busstat) == true) and (getvalue($masterstat) == true)) {
setvalueboolean($onewstat, true);
// Statusvariable fürs Webfront auf True setzen. True = kein Fehler
}
?>
Der Befehl TMEX_RequestRead verhält sich sonderbar. Im ersten Anlauf wird bei nicht angeschlossenem Sensor in der Tat FALSE als Rückgabewert ausgegegen. Soweit so gut, ABER wenn das Script nun erneut aufgerufen wird, dann wird, egal ob der Sensor ansprechbar ist oder nicht der Wert TRUE ausgegeben. Dieses Verhalten wiederholt sich dann im Wechsel bei jedem Aufruf, bis der Sensor wirklich wieder vorhanden bzw. ansprechbar ist.