1-Wire Geräte auflisten und Verfügbarkeit anzeigen

Bei vielen Geräten kann nach dem ersten Ausführen die Konsole ein wenig träge reagieren.
Die ID in Klammern (000000…) muss erhalten bleiben. Davor und dahinter können beliebige Worte stehen.


<?
$id = 0; //ID der TMEX I/O Instanz

//Ab hier nicht mehr verändern
$devs = @TMEXA_EnumerateDevices($id);

$vid = CreateVariableByName($IPS_SELF, "Bus-Status", 0);
$status = !($devs === false);
if(GetValue($vid) != $status) {
    SetValue($vid, $status);
}

if($devs === false)
    return;
    
$objs = IPS_GetChildrenIDs($IPS_SELF);
foreach($objs as $oid) {
    if(IPS_VariableExists($oid)) {
        $v = IPS_GetVariable($oid);
        if($v['VariableValue']['ValueType'] == 0) {
            if(IPS_GetName($oid) != "Bus-Status") {
               $found = false;
               foreach($devs as $key=>$value) {
                  if(!(strpos(IPS_GetName($oid), $value) === false)) {
                     $found = true;
                     unset($devs[$key]);
                     break;
                  }
               }
               if(GetValue($oid) != $found) {
                   SetValue($oid, $found);
               }
            }
        }
    }
}
foreach($devs as $dev) {
    if(substr($dev, 14, 2) == "81") {
       $name = "Interface";
    } else {
        $name = "Device";
    }
     //$ids = IPS_GetInstanceListByModuleID("{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}");

//Ab IP-Symcon 3.4
$ids = array_merge(
 IPS_GetInstanceListByModuleID("{F1B54BB1-DC7D-42D9-A973-6CA4789E358F}"),
 IPS_GetInstanceListByModuleID("{685D4911-57CC-43AF-BA36-183EF2C8518F}"),
 IPS_GetInstanceListByModuleID("{50DB3978-CF6A-4BCE-87DF-5BB45D900628}"),
 IPS_GetInstanceListByModuleID("{88A63FF8-832B-48E3-B989-A416C7908E6A}"),
 IPS_GetInstanceListByModuleID("{5DF182B0-01DF-4D8A-82CD-E646FD9BF0B2}"),
 IPS_GetInstanceListByModuleID("{301FA314-65F8-4317-8BF5-729CF8664F54}"),
 IPS_GetInstanceListByModuleID("{766E337F-A707-48CC-A323-70D7E77E3F8C}"),
 IPS_GetInstanceListByModuleID("{6A75828A-25CD-4CF3-83EA-DAAB914030A7}"),
 IPS_GetInstanceListByModuleID("{E02955B3-49E4-47A9-A9ED-2C71401F6D6E}"),
 IPS_GetInstanceListByModuleID("{BD0F2622-F67C-4248-9A04-316DF13914C3}")
);  

    foreach($ids as $id) {
        if(TMEX_GetDevice($id) == $dev) {
            $name = IPS_GetName($id);
           break;
       }
    }
    $vid = CreateVariableByName($IPS_SELF, $name." (".$dev.")", 0);
    SetValue($vid, true);
}

function CreateVariableByName($id, $name, $type)
{
  global $IPS_SELF;
  $vid = @IPS_GetVariableIDByName($name, $id);
  if($vid === false)
  {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
      IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
  }
  return $vid;
}

if($IPS_SENDER == "Execute") {
    IPS_SetScriptTimer($IPS_SELF, 60);
}

?>

paresy

Nur durch Zufall bin ich darauf gestoßen das dieses Script bei mir immer noch ausgeführt wird aber eigentlich nicht mehr funktioniert. Es werden keine Fehlermeldungen angezeigt, aber Ergebnisse auch nicht. Was muss geändert werden damit es unter V2.5 läuft?

da brauchst Du nichts zu ändern läuft bei mir nach wie vor ohne Problem
Wichtig ist nur die id der I/O Instanz anzugeben

Ja läuft.
Es war ein Denkfehler meinerseits. Solange alle 1W funktionieren wird auch nichts aktualisiert. Wenn man in der Zwischenzeit Devices umbenennt wird der alte Name solange angezeigt bis man ihn vom Bus abzieht und wieder anschließt.

Hallo,

ich nutze das Script, um den 1-Wire Status anzuzeigen. Jetzt viel mir auf, das plötzlich nur noch „Device und die Geräte-ID“ angezeigt werden. Früher wurden aber die Variablen mit dem richtigen GeräteNAMEN angelegt. Ausserdem kann ich den Timer nicht umbenennen, ohne das beim nächsten Ausführen ein zusätzlicher Timer angelegt wird.

Ich bilde mir ein, das dies vor dem Update auf 3.40 nicht so war.

Was müsste denn geändert werden, damit alles wieder richtig angezeigt wird ???

Gruß Proxima

Ich habe mal das Skript angepasst für die 3.4. Es haben sich dort die ModulIDs geändert :wink:

paresy

Hallo,

das Script läuft wieder unter 3.40.

Ich habe aber noch eine andere Frage:
Die beiden Bausteine meines Solar- und Helligkeitssensors V1 (von eservice-online) werden von o.g. Script, ich vermute wenn es zu dunkel ist, immer als OFFLINE angezeigt. Bei Sonneneinstrahlung ist der Sensor immer ONLINE.

Ist das bei Euch auch so ???

Gruß Proxima

Hallo,

  1. Kann das Script auch für den neuen 1-Wire-Controller 1 genutzt werden ???
  2. Was wäre für den Controller 1 anzupassen ???

Hätte halt gerne im Webfront gesehen, ob der 1-Wire-Bus noch arbeitet / lebt.

Proxima

Hallo Proxima,

das Skript ist für die Anbindung per TMEX vorgesehen. Für den 1-Wire Controller 1 its es nicht anwendbar.

Die Problematik bei der Verbindung per TMEX war, dass es zu sporadischen Unterbrechungen gekommen ist. Die Situation ist durch die Verbindung über den Socket mit dem 1-Wire Controller 1 gänzlich anderst und stabiler. Wie ich gesehen habe, kannst du dies aus deiner Erfahrung auch bestätigen, oder?

Ob der 1-Wire Controller 1 eine Verbindung zu IP-Symcon hat, kannst du am Status der „KAL“ Variable sehen. Wenn die Aktualisierungszeit deutlich von der Systemzeit abweicht, gibt kannst du eine Fehlermeldung erstellen.

Grüße
Andreas

Hallo,

ja, ich kann guten Gewissens sagen, dass der Controller (zumindest bei mir) um einiges stabiler läuft (bisher gar keine Ausfälle).

Leider sind meine PHP-Kenntnisse für ein gutes Statusscript nicht ausreichend.

Ich könnte mir vorstellen:

  • KAL-Zeit mit Systemzeit vergleichen und anhand dessen eine Statusvariable setzen
  • Liste aller vorhandenen Geräte aus dem Controller auslesen und mit Liste erreichbarer/fehlerfreier Geräte vergleichen, dann pro Gerät eine Statusvariable setzen (ähnlich dem „TMEX“-Auswertescript oben)
  • Ausgabe der aktuellen Aktualisierungs-Zeit des Controllers

Vielleicht hat jemand Zeit und Lust an einem solchen Projekt(chen). :o

Gruß Proxima

Moin,
Deinen ersten Vorschlag finde ich gut.
Deinen zweiten Vorschlag würde ich dadurch ersetzen, dass Du die letzte Aktualisierung der Variablen abfragst und Alarm schlägst, wenn diese zu lange her ist.

Fang mal an mit dem Projekt. Dann schauen wir, wie weit Du kommst und dann schauen wir, wo es noch klemmt.

Gruß,
Christoph

Ich habe heute den Schritt von 3.4 auf Version 4 gewagt. Nun habe ich auch „brav“ meine drei DS9490R USB Adapter mit LinkUSB Adaptern ersetzt.

Da ich in einigen Skripten die Funktion „TMEXA_EnumerateDevices“ einsetze, stellt sich mir die Frage, ob es einen würdigen Nachfolger dafür gibt. In der „__compatibility.inc“ habe ich zwar gefunden, dass es die Funktion „0W_EnumerateDevices“ gibt, aber damit scheinen meine Skripte auch nicht zu funktionieren - sie werden als fehlerhaft angezeigt, obwohl kein Fehler ausgegeben wird.

Wer weiß Rat? :confused:

Hallo, das gleiche Problem habe ich seit dem Schritt zu 4.0 auch. Ich lese über „TMEXA_EnumerateDevices“ vorhandene iButtons am Bus aus. Über eine Lösung wäre ich auch sehr dankbar.

Gruß

Michael

Die Kompatibilitätsfunktion sollte eigentlich alles korrekt abbilden. Was geht denn nicht im Detail?

apresy

Hallo Paresy,

schön, dass du fragst. Ich habe bislang noch nicht richtig die Zeit dazu gefunden, mich weiter damit zu beschäftigen. Die Anbindung an HomeKit war mir wichtiger :rolleyes:

Nun aber zu deiner Frage:

Der Befehl „TMEXA_EnumerateDevices“ schmeißt bei mir folgende Fehlermeldung aus:

Fatal error:  Call to undefined function OW_EnumerateDevices() in C:\IP-Symcon\scripts\__compatibility.inc.php on line 4692
Abort Processing during Fatal-Error: Call to undefined function OW_EnumerateDevices()
   Error in Script C:\IP-Symcon\scripts\__compatibility.inc.php on Line 4692

Demnach kann die Funktion „0W_EnumerateDevices“ nicht angesprochen werden. Hast du eine Idee?

Besten Gruß,

Specky

Öhm. :slight_smile: Ja, das ist ein Fehler. Ich melde mich, sobald ich einen Fix habe :slight_smile:

paresy

Moin Specky!

Der Fix steckt im nächsten Update :cool:

Pio

Moin Pio,

ich kenne dich (bislang) noch nicht, habe dich aber jetzt schon für das kommende Update lieb :wink:

Gruß in den Norden an die Entwicklerfront,

Specky

Ist bereits hier verfügbar: IP-Symcon 4.0.x (Beta)

paresy

Hallo Zusammen, ich habe heute den neuersten FIX dcf19ae3864a installiert jedoch komme ich leider immer noch nicht wirklich weiter. Ich bekomme nun folgende Fehlermeldung beim Ausführen des @TMEXA_EnumerateDevices Befehls:

ID:54409 = Instanz ID Seriel Port one Wire
ID: 32253 /[OneWire Konfigurator]/
Modul ID in meinem Skript: F462BFF3-6772-4720-8450-49E6E2820643

Über einen Tipp zum lösen des Problems wäre ich sehr dankbar.

Grüße aus dem Süden

Michael

Fatal error: Uncaught exception ‚Exception‘ with message ‚Cannot find OneWire Configurator instance‘ in C:\IP-Symcon\scripts__compatibility.inc.php:4703
Stack trace:
#0 C:\IP-Symcon\scripts__compatibility.inc.php(2195): TMEX_EnumerateDevices(54409)
#1 C:\IP-Symcon\scripts\46844.ips.php(5): TMEXA_EnumerateDevices(54409)
#2 {main}
thrown in C:\IP-Symcon\scripts__compatibility.inc.php on line 4703
Abort Processing during Fatal-Error: Uncaught exception ‚Exception‘ with message ‚Cannot find OneWire Configurator instance‘ in C:\IP-Symcon\scripts__compatibility.inc.php:4703
Stack trace:
#0 C:\IP-Symcon\scripts__compatibility.inc.php(2195): TMEX_EnumerateDevices(54409)
#1 C:\IP-Symcon\scripts\46844.ips.php(5): TMEXA_EnumerateDevices(54409)
#2 {main}
thrown
Error in Script C:\IP-Symcon\scripts__compatibility.inc.php on Line 4703