Einzelne 1wire-Module werden als fehlerhaft angezeigt aber können ausgelesen werden?!

Hallo,

seit dem Update auf 3676 werden 4 meiner 29 1wire-Module/Sensoren (ohne das ich am Netzwerk was geändert habe) im OneWire-Konfiguartor grauhinterlegt (fehlerhaft?) angezeigt (es wird auch kein „Typ“ angegeben). Können jedoch über die entsprechene Instanz korrekt und (scheinbar) problemlos ausgelesen werden!

Wenn ich sie per TMEX_RequestRead(INstanzID) abfrage kommt die Fehlermeldung:

Warning:  1-Wire Operation failed: CRC Error in C:\IP-Symcon\scripts\__compatibility.inc.php on line 4636

Kann das jemand bestätigen oder noch besser jemand nen Tipp geben woran es liegen könnte.
Liegs am Update (Stichwort Trennung in mehrere OneWire-Module) oder sind gleichzeitig 4 Sensoren defekt (obwohl sie noch anzeigen was sie sollen)?

hardlog

Habe auch seltsame 1-W fehler.


Call to undefined function TMEX_SetF20Voltage() in E:\ips\scripts\33003.ips.php on line 145
Abort Processing during Fatal-Error: Call to undefined function TMEX_SetF20Voltage()

Bin aber noch nicht sicher, ob das damit zusammen hängt.

Ist es bei der #3683 genauso? Ich glaube dort sollte der DS2450 korrekt gelistet werden :slight_smile:

@wupperi: Schaue ich mir an. Da fehlen anscheinend noch ein paar Kompatibilitätsfunktionen.

paresy

Das ist ein Skript, vergleichbar mit meinem, welches die Fehler auslöst:


<?

/******************************************************************************1-Wire Hub, Auswerteskriptwww.eservice-online.de*******************************************************************************
Dieses Skript dient dazu die Spannungs- und Stromüberwachung für das1-Wire-Hub Modul von E-Service (eservice-online.de) weitgehenst automatischin IPS-Symcon einzurichten.
Erstellt von  E-Service Online (http://www.eservice-online.de)Version 1.5, 14-08-2013, geändert von andrge
Nachfolgende fünf Schritte müßen Sie von Hand ausführen:    Schritt 1:    Kategorie für den 1-Wire-Hub anlegen.    Name nach eigenen Wünschen
    Schritt 2:    Ein neues Skript unterhalb der Kategorie (aus Schritt 1) erstellen.    Name nach eigenen Wünschen
    Schritt 3:    Eine Instanz für den DS2450 unterhalb dieser Kategorie (aus Schritt 1) anlegen.
    !!! Wichtig !!! Der Name muß lauten:  1-Wire-Hub (case sensitive)    andernfalls ist der Name in Zeile 67 zu ändern.
    Schritt 4:    Auswahl der 1-Wire Hub Version in Zeile 48:    Die Version finden Sie auf dem Typenschild.    Version 1 ist bis Mitte 2013, Version 2 ab ca. 6-2013 verfügbar.    Angabe zur Version finden Sie auf dem Typenschild.
    Schritt 5:    Skript 1x per "Ausführen" starten
    FERTIG !!!!!!!!
Ab jetzt wird das Skript bei einer Änderung der Variable 12V Strom (Port 0)getriggert.


*******************************************************************************///Auswahl der 1-Wire Hub Version$version = 2    ;  //1 = 1-Wire Hub bis V1, 2 = 1-Wire Hub II V2 (ab 6-2013)

// Debug-Modus an=true / aus=false$debug = false;
$offset_Strom_5V = 20;                 // ist der Nullwertfehler für 5V Strom den der AD-Wandler ohne Last ausgibt$offset_Strom_12V = 20;             // ist der Nullwertfehler für 12V Strom den der AD-Wandler ohne Last ausgibt
/********************************************************************************Ab hier nichts mehr ändern !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!********************************************************************************/
// Übergeordnete Kategorie ermitteln$parentID = IPS_GetObject($IPS_SELF);$parentID = $parentID['ParentID'];
// Manuelle Definition evtl. IDs$DS2450 = IPS_GetInstanceIDByName ( '1-Wire-Hub', $parentID );  //Name geändert!!
// Variablen zur Skriptverarbeitung einlesen und intern verfügbar machen$DS2450_Port0 = IPS_GetStatusVariableID($DS2450, "F20_Var0");$DS2450_Port1 = IPS_GetStatusVariableID($DS2450, "F20_Var1");$DS2450_Port2 = IPS_GetStatusVariableID($DS2450, "F20_Var2");$DS2450_Port3 = IPS_GetStatusVariableID($DS2450, "F20_Var3");if($debug) {echo $DS2450_Port0."
";}if($debug) {echo $DS2450_Port1."
";}if($debug) {echo $DS2450_Port2."
";}if($debug) {echo $DS2450_Port3."
";}
// Inhalt des benötigten Actionsskripts in Variable ablegen$actionScript = "<?if(\$IPS_SENDER == 'WebFront') {      SetValue(\$IPS_VARIABLE, \$IPS_VALUE);}?>";
// ***************** Start Erstinitialisierung *********************************if($IPS_SENDER == "Execute") {                // nur wenn bei "Ausführen"    // Variablenprofil für Spannung anlegen    if(!IPS_VariableProfileExists('Busspannung')) {        IPS_CreateVariableProfile ('Busspannung',2);        IPS_SetVariableProfileText('Busspannung','','V');        IPS_SetVariableProfileIcon ('Busspannung', 'Graph');        IPS_SetVariableProfileDigits('Busspannung', 2);        if($debug) { echo "Variablenprofil angelegt
"; }    }    else {   if($debug) {echo "Variableprofil Busspannung besteht bereits
";     } }
    // Variablenprofil für Strom anlegen    if(!IPS_VariableProfileExists('Busstrom')) {        IPS_CreateVariableProfile ('Busstrom',2);        IPS_SetVariableProfileText('Busstrom','','mA');        IPS_SetVariableProfileIcon ('Busstrom', 'Graph');        IPS_SetVariableProfileDigits('Busstrom', 1);        if($debug) { echo "Variablenprofil angelegt
"; }        }    else {   if($debug) {echo "Variableprofil Busstrom besteht bereits
";  }    }
    // Variablenprofil für Leistung anlegen    if(!IPS_VariableProfileExists('Leistung-Summe')) {        IPS_CreateVariableProfile ('Leistung-Summe',2);        IPS_SetVariableProfileText('Leistung-Summe','','W');        IPS_SetVariableProfileIcon ('Leistung-Summe', 'Graph');        IPS_SetVariableProfileDigits('Leistung-Summe', 2);        if($debug) {echo "Variablenprofil angelegt
";}        }    else { if($debug) {echo "Variableprofil Leistung-Summe besteht bereits
";    }  }
    // Skript verstecken   IPS_SetHidden($IPS_SELF, true);   IPS_SetPosition($IPS_SELF, 99);
    // Actionskript erzeugen (siehe function)   $ScriptID = CreateScriptByName("Aktionskript 1-Wire-Hub", $parentID, $actionScript);    if($debug) { echo "Actionskript angelegt
";    }
    // Variablen des DS2450 umbennen    IPS_SetName($DS2450_Port0, "12V Strom, Status Port 0");    IPS_SetPosition($DS2450_Port0, 1);    IPS_SetName($DS2450_Port1, "12V Spannung, Status Port 1");    IPS_SetPosition($DS2450_Port1, 2);    IPS_SetName($DS2450_Port2, "5V Strom, Status Port 2");    IPS_SetPosition($DS2450_Port2, 3);    IPS_SetName($DS2450_Port3, "5V Spannung, Status Port 3");    IPS_SetPosition($DS2450_Port3, 4);    if($debug) { echo "DS2450 Variablen umbenannt
";    }
    // DS2450 programmieren    TMEX_SetF20Voltage($DS2450, 0, true);    TMEX_SetF20PortType($DS2450, 0, true);    TMEX_SetF20Resolution($DS2450, 0, 12);
    TMEX_SetF20Voltage($DS2450, 1, true);    TMEX_SetF20PortType($DS2450, 1, true);    TMEX_SetF20Resolution($DS2450, 1, 12);
    TMEX_SetF20Voltage($DS2450, 2, true);    TMEX_SetF20PortType($DS2450, 2, true);    TMEX_SetF20Resolution($DS2450, 2, 12);
    TMEX_SetF20Voltage($DS2450, 3, true);    TMEX_SetF20PortType($DS2450, 3, true);    TMEX_SetF20Resolution($DS2450, 3, 12);
    TMEX_SetInterval($DS2450, 5);    if($debug) {    echo "DS2450 Instanz programmiert
";    }
    // Ereignis für Skript erstellen falls nicht vorhanden    $EreignisID = @IPS_GetEventIDByName("Port0", $IPS_SELF);    if ($EreignisID == 0) {        $eid = IPS_CreateEvent(0);                                    // Ausgelöstes Ereignis        IPS_SetEventTrigger($eid, 0, $DS2450_Port0);             // Bei Änderung von Variable        IPS_SetParent($eid, $IPS_SELF);                                 // Ereignis zuordnen        IPS_SetName($eid, "Port0");                                    // Ereignis umbennen        IPS_SetEventActive($eid, true);                       // Ereignis aktivieren    }    else { if($debug) {echo "Ereignis bereits erstellt";    }   }
}// ****************** Ende Erstinitialisierung *********************************
// ******************* Start Berechnung ****************************************
// Variablen IDs zuweisen und gegebenenfalls anlegen$Spannung_OK        = CreateVariableByName($parentID, "Busspannung OK",    "OK");$Leistung_OK      = CreateVariableByName($parentID, "Ueberlast",          "OK");$Busspannung_5V     = CreateVariableByName($parentID, "5V Busspannung",    "Volt");$Busspannung_12V    = CreateVariableByName($parentID, "12V Busspannung",    "Volt");$Busstrom_5V        = CreateVariableByName($parentID, "5V Strom",            "mA");$Busstrom_12V       = CreateVariableByName($parentID, "12V Strom",            "mA");$Leistung_Summe      = CreateVariableByName($parentID, "Leistung-Summe",    "W");
// Grenzwerte für Gut-Erkennung$Grenzwert_5V = 4.50;$Grenzwert_12V = 11.5;
//Berechung Busspannungen//******************************************************************if ($version == 1) {$bereich = 5.12 ; }if ($version == 2) {$bereich = 5.0 ;  }
// 5V Spannung Berechnung$Bus_5V_Wert = (($bereich / 4096) * 1.11) * GetValue($DS2450_Port3);// 12V Spannung Berechnung$Bus_12V_Wert = (($bereich/ 4096) * 2.63) * GetValue($DS2450_Port1);
// Errechneten Werte in Variable schreibenSetValue($Busspannung_5V, $Bus_5V_Wert);SetValue($Busspannung_12V, $Bus_12V_Wert);
//Stromberechung//******************************************************************$widerstand = 49;                 // ermittelter Faktor für 0,22 Ohm Shunt
//Ermittelter Faktor 5V und 0,22 Ohm Shunt$Busstrom_5V_1 = ($bereich / 4096) * (GetValue($DS2450_Port2) - $offset_Strom_5V) * $widerstand;//Ermittelter Faktor 12V und 0,22 Ohm Shunt$Busstrom_12V_1 = ($bereich / 4096) * (GetValue($DS2450_Port0) - $offset_Strom_12V) * $widerstand;
// Errechnete Werte in Variablen speichernSetValue($Busstrom_5V, $Busstrom_5V_1);SetValue($Busstrom_12V, $Busstrom_12V_1);
//Leisung Summenberechung//******************************************************************$Leistung = (($Busstrom_12V_1 * 0.001)* $Bus_12V_Wert) + (($Busstrom_5V_1 * 0.001) * $Bus_5V_Wert);SetValue($Leistung_Summe, $Leistung);
//Ueberlasterkennungif ($Leistung > 4.5)  {    SetValue($Leistung_OK, false);    if($debug) { echo "Leistungsaufnahme ist kleiner 4,5W.
"; } //Ausgabe    }else  {    SetValueBoolean($Leistung_OK, true);    if($debug) { echo "Ueberlastung !!
"; }     //Ausgabe    }
//Ausgabe Status der Busüberwachung//******************************************************************if (($Bus_5V_Wert <= $Grenzwert_5V) or ($Bus_12V_Wert <= $Grenzwert_12V))     {    SetValue($Spannung_OK, false);    if($debug) { echo "Busspannung ist o.k.
"; } //Ausgabe    }else  {    SetValueBoolean($Spannung_OK, true);    if($debug) { echo "Busspannung ausserhalb des erlaubten Bereichs!!
"; }     //Ausgabe    }// Ende Berechnung// ****************************************************************************


// Funktionen// Variablen erstellen falls nicht vorhanden und ID entsprechend zuordnen// erstellt von IP-Symcon, angepasst von bbernhard und wgreiplfunction CreateVariableByName($id, $name, $type)    {    global $IPS_SELF;    global $ScriptID;    $vid = @IPS_GetVariableIDByName($name, $id);    if($vid === false) {        $vartype = 1;        if ($type == 'Volt') $vartype = 2;      if ($type == 'mA')     $vartype = 2;      if ($type == 'W')     $vartype = 2;      if ($type == 'OK')     $vartype = 0;
        $vid = IPS_CreateVariable($vartype);        IPS_SetParent($vid, $id);        IPS_SetName($vid, $name);        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if ($type == 'Volt')    {            IPS_SetVariableCustomProfile ($vid, "Busspannung");            IPS_SetPosition($vid, 10);            }        if ($type == 'mA') {            IPS_SetVariableCustomProfile ($vid, "Busstrom");            IPS_SetPosition($vid, 20);            }        if ($type == 'W')    {            IPS_SetVariableCustomProfile ($vid, "Leistung-Summe");            IPS_SetPosition($vid, 30);            }          if ($type == 'Ueberlast') {            IPS_SetVariableCustomProfile ($vid, "~Alert.Reversed");            IPS_SetVariableCustomAction($vid, $ScriptID);            IPS_SetPosition($vid, 5);            }        if ($type == 'OK') {            IPS_SetVariableCustomProfile ($vid, "~Alert.Reversed");            IPS_SetVariableCustomAction($vid, $ScriptID);            IPS_SetPosition($vid, 5);            }
        }return $vid;}
// Eine Function um ein Script im Script-Verzeichnis zu erzeugen// erstellt von hirschbrat, angepasst wgreiplfunction CreateScriptByName($ScriptNAME, $ParentID, $ScriptTEXT)    {    global $IPS_SELF;    $ScriptID = @IPS_GetScriptIDByName($ScriptNAME, $ParentID);    if ($ScriptID == 0){        $ScriptID = IPS_CreateScript(0);        IPS_SetName($ScriptID, $ScriptNAME);        IPS_SetParent($ScriptID, $ParentID);        IPS_SetInfo($ScriptID, "This script was created by: #$IPS_SELF#");        $fh = fopen(IPS_GetKernelDir()."scripts\\".$ScriptID.".ips.php", 'w') or die("can't open file");        fwrite($fh, $ScriptTEXT);        fclose($fh);        $ScriptPath = $ScriptID.".ips.php";     //Skriptdatei        IPS_SetScriptFile($ScriptID, $ScriptPath);        IPS_SetHidden($ScriptID, true);        IPS_SetPosition($ScriptID, 98);        // echo "Die Skript-ID lautet: ". $ScriptID;    }return $ScriptID;}
?>


EDIT: Habe jetzt mehrfach versucht, den Code halbwegs lesbar einzupasten, aber irgendwie erscheint der ohne vernünftige CRLFs. Sorry für die Lesbarkeit.

Fix ist im LiveUpdate!

paresy

Geht bei mir wieder. Danke fürs schnelle fixen!

Bei mir kommt bei allen DS18x20 Sensoren die Fehlermeldung 1-Wire Operation failed: conversion failed.
Es funktionieren aber alle Sensoren. Das Fix #3684 hat wohl noch nicht alles behoben.
Hat eventuell noch jemand den Fehler?

Matthias

Habe ich auch noch.

Ich auch noch :frowning:

Bevor ich meine 1-wire-Verkabelung ganz aufreiße und die einzelnen Sensoren demontiere … ist es realistisch das es am Update liegt? Wenn ja, dann würde ich damit nämlich warten und auf ein hotfix hoffen.

hardlog

jetzt wirds kryptisch:

hab gerade einen der nicht mehr angezeigten Temp (DS18B20) - Sensoren ausgebaut und als einziges Modul an den Gateway angeschlossen und siehe da: Er geht alleine ABER die IPS-interne Zuordnung scheint plötzlich durcheinander zu sein?! Der Sensor der bisher (4 Jahre tadellos) als „Temp.Sensor Abluft Lütungsanlage“ durchgegangen ist wird in IPS plötzlich als „Temp.Sensor Schlafzimmer“ zugeordnet!!! Hähhhhh? Es wurden KEIN neuen Senoren integriert oder getauscht! 1-wire-viewer zeigt alles korrekt an! Nur in IPS stimmt was nicht!!!

Kann das jemand bestätigen und vielleicht auch lösen?

Hardlog

Ich würde sehr stark davon ausgehen, dass es ein Fehler mit dem Update ist. Ich habe heute schon versucht das Problem nach zu stellen, aber anscheinend brauche ich ein paar mehr Sensoren, damit es sich nachstellen lässt.

Ich bin auf jeden Fall dran.

paresy

Hallo paresy,

ich kanns leider nicht ganz logisch klären.
Bei mir sind es 4 von 30 Sensoren. Alles DS18B20 (bzw. DS1920). Hängen alle an einem Gateway (LinkUSB). Es scheinen sich IDs zu überschneiden, bzw. falsch zugeordnet zu werden.
Anbei ein Screenshot des Konfigurators:


Die Problemsensoren sind grau unterlegt. Der „Type“ wir NICHT angezeigt. Wenn ich, wie gesagt z.B. den mit Pfeil markierten Sensor alleine anhänge wird den Typ angeizeigt, ABER die verbundene ID falsch zugeordnet. Ich schätze das es irgendwo „codierungsdopplungen“ gibt und die Senoren daher in der summe des Netzes wegen doppelter Seriennummer (?) nicht zuordnenbar sind ???

Wenn ich noch irgend was testen soll sags mir.

Gruß
hardlog

Ich habe bisher keine so richtig gute Idee woran es liegen könnte. Hast du Zeit, damit ich es mir per TeamViewer mal ansehen könnte?

paresy

Hallo Paresy,

ich kann in der Mittagspause nach Hause fahren und den TeamViewer aktivieren. Wäre so gegen 14 Uhr bis max. 14:45.

hardlog

Sehr gerne. Rufst du dann bei uns im Büro an, und wir sehen und das gemeinsam an?

paresy

Auch ich habe diesen Fehler bei allen DS 1820 Temperatursensoren seit der Version #3670.

Was mir aufgefallen ist:

Der Befehl „OW_RequestStatus($InstanceID)“ benötigt bei den DS1820 ca. 750ms, bei einem DS2438 gerade mal 45 ms. Je mehr Abfragen auf dem Bus, desto häufiger der Fehler.

Gruß
Calelust

Danke @paresy für deine Hilfe.

Aber es war doch keiner der 1wire-Sensoren defekt, es war noch ein zweiter gedoppelt mit falscher Zuordnung. Gelöscht und alles war gut. Aber wie kam es zu dem Durcheinander? Ich hatte an der Stelle seit Monaten sicher nichts geändert?!

Gruß
hardlog

Gibt es hier schon eine Lösung? Ich habe das gleiche Problem auf der Raspberry Version 6f3da3e6.
Witzig ist, dass der OW Konfigurator bei mir ab und zu Devices findet, die es an meinem Bus gar nicht gibt - also irgendwelche Zufalls-IDs.
Habe aktuell 25 Sensoren am Bus.

Hallo ich habe seit dem update auf 3699 auch das Problem mit dem CRC fehler. Ausserdem funktionieren die Shutter Control Handler überhaupt nicht mehr. Der Bus lief seit ca. 1,5jahren ohne Probleme.

Gibt es schon eine Lösung dafür?

Gruß

Michael

Danke für den Hinweis!

Ja, gibt es.

Folgende Änderungen bitte durchführen


Suche:        case "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}":  //1-Wire Shutter Modul (e-service Online)
Ersetze:      case "{BD0F2622-F67C-4248-9A04-316DF13914C3}":  //1-Wire Shutter Modul (e-service Online)

und


Suche:        case "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}": //1-Wire Shutter (1-wire.de)
Ersetze:      case "{6A75828A-25CD-4CF3-83EA-DAAB914030A7}": //1-Wire Shutter (1-wire.de)

Bei den CRC Fehlern würde ich eher vermute, dass diese schon vorher da waren, du sie nur jetzt gesehen hattest. Bisher sind uns da keine Fehler bekannt.

paresy