1-Wire "Watchdog"

Guten Morgen,

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?

Gruß moshauer

Herzlich willkommen hier,

für’n Pokey5xE-Modul habe ich hier ein Beispiel. Kannst Du Dir auch für Deine Anwendung umschreiben.

Es kontrolliert den Verbindungszustand der I/O-Instance:

<?
//Verbindung von Pokey prüfen und die Meldung dazu:
$Pokey_Status=(IPS_GetInstance(44603  /*[Pokey 140 Client Socket]*/));
//print_r($Pokey_Status);
//echo $Pokey_Status["InstanceStatus"];// bzw print_r(.......);
if ($Pokey_Status["InstanceStatus"] >=200)
{
SetvalueBoolean(25661 /*[php_zeit\Pokey_Leben]*/, false); // bei Alarm assz tru
}
if ($Pokey_Status["InstanceStatus"] == 102)
{
SetvalueBoolean(25661 /*[php_zeit\Pokey_Leben]*/, true); // bei Alarm assz false
}

?>

Gruß Helmut

Hallo & Danke Helmut!

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.

Hast Du das Script mal auf den 1Wirebus bzw auf die Instance des 1Wireadapters ausprobiert?

Versuchs doch mal, würde mich interessieren, ob der CRC-Fehler über diese Instance erkannt wird.

Gruß Helmut

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

Ist die Frage: Woher kommt die CRC-Fehlermeldung, aus der Abfrage des Sensor und ist der Bus dann gestört?

Ich habe iM kein 1Wire über Tmex.

Aber so oder so: auch das Überwachen einer Variable auf Plausibilität wäre interessant zu sehen :wink:

Gruß Helmut

Gibt es z.Z. nur per PN da noch Beta. Ist aber ein Modul und kein Script.
Bei Interesse als Tester bitte melden :wink:

Ich werde das Skript von Helmut heute in der Produktiv-Umgebung mal testen und melde mich dann, sobald ich Ergebnisse vorliegen habe.

Gruß moshauer

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.

Einzig der Log erscheint hilfreich:

11.04.2014 16:07:58.273 | 15268 | WARNING | TimerID #11, TimerThread #5 | [1-Wire-BUS\G1066] = 1-Wire Operation failed: CRC Error

Ich glaub ich habs!

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.

Such mal nach 1-Wire Geräte auflisten und Verfügbarket anzeigen

Da haste alles was de brauchst

Hier der Link zum Thema: 1-Wire Geräte auflisten und Verfügbarkeit anzeigen.

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
	}
?>

Hallo,
leider etwas spät.
ich habe hier ein generisches Skript im Einsatz, das quasi fast alles überachen kann und einfach zu administrieren ist.

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.

Warum? :confused: