I/O Instanzen; HID Gerät öffnen

Hallo zusammen, erst mal alles Gute für 2010.

Hatte gestern bei mir einen Stromausfall und danach ist mir mein
altes Problem wieder aufgefallen:

Meine HDI I/O Instanzen waren nach dem reboot nicht geöffnet.

Diese Rotine habe ich bereits implementiert:

// Velleman Board

$status = IPS_GetInstance(54880 /*[HID]*/);

if ($status["InstanceStatus"] == 102)
       SetValueBoolean(32500 /*[Gerätezustand\IO Vellemann]*/, true);
elseif ($status["InstanceStatus"] >= 200)
       { IPS_ApplyChanges(54880 /*[HID]*/);
      IPS_Sleep(500);
               $status = IPS_GetInstance(54880 /*[HID]*/);
              if ($status["InstanceStatus"] >= 200)
         {  SetValueBoolean(32500 /*[Gerätezustand\IO Vellemann]*/,  false);
                      $Fehler = true;
                          }
    }

Fuktioniert, wenn der Rechner an ist und ein USB-Kabel gezogen wurde.

Bei einem restart nicht.

Dankbar für eure Tipps,

Jürgen

Hallo Jürgen,

ich würde erst prüfen ob der Port offen ist.

HID_GetOpen(12345);

und wenn nicht

HID_SetOpen(12345, true);

Du könntest dir auch ein Startscript bauen, welches Du unter Kern Instanzen => Event Handler hinzufügst, der dir dann alle deine Problemfälle prüft und gegebenenfalls öffnet.

für HID z.B.

$HID = HID_GetOpen(12345);
if (!$HID)
{
    HID_SetOpen(12345/*[HID]*/, true);
    IPS_ApplyChanges(12345/*[HID]*/);
}

Hallo Rainer,

ich habs gelöst:


// Velleman Board

	$status = IPS_GetInstance(54880 /*[HID]*/);

	if ( !HID_GetOpen(54880 /*[HID]*/) )
		HID_SetOpen(54880 /*[HID]*/, true);
	else

		if ($status["InstanceStatus"] == 102)
   		SetValueBoolean(32500 /*[Gerätezustand\IO Vellemann]*/, true);
		elseif ($status["InstanceStatus"] >= 200)
   		{  HID_SetDeviceSerial(54880 /*[HID]*/, 2624);
			   HID_SetDeviceVendorID(54880 /*[HID]*/, 4303);
           	HID_SetDeviceProductID(54880 /*[HID]*/, 21763);
				IPS_ApplyChanges(54880 /*[HID]*/);
		  		IPS_Sleep(500);
				$status = IPS_GetInstance(54880 /*[HID]*/);
				if ($status["InstanceStatus"] >= 200)
					{  SetValueBoolean(32500 /*[Gerätezustand\IO Vellemann]*/, false);
						$Fehler = true;
					}
			}

Liebe Grüße
Jürgen

Bitte PHP Tags benutzen, dann können wir es alle besser lesen.:wink:

Hallo,

ich häng mich mal hier ran.

Ich habe das gleiche Problem mit meiner WMRS200.
Ich starte meine HID mit:

HID_SetDeviceSerial(41030 /*[HID]*/,"2088");
IPS_ApplyChanges(41030 /*[HID]*/);

Aber leider ändert sich meine Serial nach einen Neustart.
Ich habe schon alle Möglichkeiten durchprobiert:

HID_SetOpen(41030 /*[HID]*/
HID_SetDeviceSerial(41030 /*[HID]*/
HID_SetDeviceVendorID(41030 /*[HID]*/
HID_SetDeviceProductID(41030 /*[HID]*/

Aber es geht nur mit dieser DeviceSerial und diese ändert sich jedesmal.

Hat jemand einen Tip oder Codeschnipsel für mich?
Danke.

Gruß
Christian

PS: bei diesen Test habe ich folgende Ausgabe:

<?
$status = HID_GetDevices(41030 /*[HID]*/);
$serial = $status['0']["DeviceSerial"]."
";
echo $serial;
HID_SetDeviceSerial(41030 /*[HID]*/,$serial);
IPS_sleep (80);
IPS_ApplyChanges(41030 /*[HID]*/);

echo (HID_GetOpen(41030 /*[HID]*/)."
");
echo (HID_GetDeviceSerial(41030 /*[HID]*/)."
");
echo (HID_GetDeviceVendorID(41030 /*[HID]*/)."
");
echo (HID_GetDeviceProductID(41030 /*[HID]*/)."
");
print_r (HID_GetDevices(41030 /*[HID]*/));

Ergibt:
2088

Warning:  Ausgewähltes Gerät konnte nicht gefunden werden in [Test2] on line 7
1
2088

4062
51713
Array
(
    [0] => Array
        (
            [DeviceName] => Universal Bridge
            [DeviceSerial] => 2088
            [DeviceVendor] => ?
            [ProductID] => 51713
            [VendorID] => 4062
        )

)