+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 10 von 25
  1. #1
    Registriert seit
    Aug 2008
    Ort
    Sereetz
    Beiträge
    1,649

    Lightbulb HID-Verbindungsskript

    Folgendes Skript dient zur Suche eines HID-Gerätes mit gegebener Vendor- und Product-ID und anschließendem Verbinden. Das ist z.B. bei Benutzung von USB-LAN-Bridges oder anderen Gründen von USB-Neuverbindungen nützlich.
    PHP-Code:
    <?php
    $hid_id 
    12345;        // ID der HID-Instanz in IP-Symcon

    $vendor_id 6789;      // Vendor-ID des zu suchenden HID-Geräts
    $product_id 98765;    // Product-ID des zu suchenden HID-Geräts

    $interval 5;          // Kontrollintervall in Minuten

    $instance IPS_GetInstance($hid_id);
    if (
    $instance['InstanceStatus'] >= 200)
    {
        
    $found_device false;

        if (((int)
    HID_GetDeviceVendorID($hid_id) != $vendor_id) && ((int)HID_GetDeviceProductID($hid_id) != $product_id))
        {
            echo 
    "looking for hid device... ";
            
    $devices HID_GetDevices($hid_id);
            foreach (
    $devices as $data)
            {
                if (((int)
    $data['VendorID'] == $vendor_id) && ((int)$data['ProductID'] == $product_id))
                {
                    echo 
    "found device... ";
                    
    $found_device true;
                    
    HID_SetDeviceSerial($hid_id, (String)$data['DeviceSerial']);
                    
    HID_SetDeviceVendorID($hid_id$vendor_id);
                    
    HID_SetDeviceProductID($hid_id$product_id);
                    
    IPS_ApplyChanges($hid_id);
                    break;
                }
            }
            if (!
    $found_device) echo "no device found! ";
        }
        else
        {
            
    $found_device true;
            echo 
    "found device... ";
        }

        if (
    $found_device)
        {
            
    HID_SetOpen($hid_idtrue);
            
    IPS_ApplyChanges($hid_id);
            echo 
    "device opened... ";
        }
    }

    IPS_SetScriptTimer($IPS_SELF$interval 60);
    ?>
    Vendor- und Product-ID aller am PC angeschlossenen HID-Devices lassen sich mit folgendem Skript auflisten:
    PHP-Code:
    <?php
    $hid_id 
    12345;
    print_r(HID_GetDevices($hid_id));
    ?>
    Geändert von Horst (27.12.10 um 20:53 Uhr) Grund: Anpassung an IPS 2.3
    Horst

  2. #2
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    7,331

    Habs in der Sammlung verewigt.
    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


  3. #3
    Registriert seit
    Jun 2005
    Beiträge
    3,649

    Ja, lieber Horst, probiere ich gerne aus,
    was ich gerne hätte, ist, dass ich ich in die Sendebuffer schreiben kann.

    Beispiel, ich habe iM ein HID-Gerät (kann PWM, 433MHz-Baumarkt-Steckdosen, Ports,- analog und digital beschalten) gebastelt, welche mir 12 Sende und 12 Empfangsbuffer (je ein Daten-Byte) liefert.

    Lesen ist kein Problem, aber wie schreibe ich in die 12 Sendebuffer?

    Beispiel: Byte 2 und 3 ist für HAUSCODE und STECKDOSENCODE der Baumarktsteckdosen, Byte 4 und 5 ist für 2 PWM(0-10Volt), wie schreibe ich gezielt da hinein??

    Gruß Helmut
    Geändert von Helmut (13.06.09 um 01:44 Uhr) Grund: Legastenie

  4. #4
    Registriert seit
    Apr 2008
    Ort
    D-21423
    Beiträge
    874

    Standard geht der hier?

    Zitat Zitat von Helmut Beitrag anzeigen
    Lesen ist kein Problem, aber wie schreibe ich in die 12 Sendebuffer?
    Hi Helmut,

    hab zwar noch keine Erfahrungen mit HID, aber wie ist es mit dem:

    PHP-Code:
    <?

    HID_SendEvent
    (InstanceIDReportIDSendEvent);

    ?>
    Hab ihn über die registrierten IPS Funktionen



    Im neuen Script entweder rechte Mautaste --> Funktionsliste anzeigen

    oder aber:

    CTRL + SPACE drücken,

    dann Anfangsbuchstaben zum vorselektieren

    DA sind Sie ALLE die einem i.d.R. entfallen sind,

    die Gefahr, sich zu vertippen umgeht man:

    einfach beim selektierten ENTER reinhauen,

    ist IPS nicht schön.



    gefunden.



    mfg

    BerndJ

    PS: Frag mich bitte nicht, was die ReportID ist, ich hab keine Ahnung und träume auch noch von der Möglichkeit in dieser Funktionsliste direkt eine entsprechende Hilfe "quasi per Tastendruck", zu erhalten.

  5. #5
    Registriert seit
    Jun 2005
    Beiträge
    3,649

    Zitat Zitat von BerndJ Beitrag anzeigen
    Hi Helmut,...

    HID_SendEvent(InstanceID, ReportID, SendEvent);
    Habe 12 HID IN/OUT- Buffer, wenn ich nun alle auf einmal beschreiben will, geht
    123 234 001 065 098.... usw? Lesen geht ja.

    Und woher bekomme ich die ReportID, sind das die HID-Buffer mit Nr. ?

    Ein Beispiel wäre schön, für RS232 geht es, mit vielen Parametern.

    Gruß Helmut

  6. #6
    Registriert seit
    Aug 2008
    Ort
    Sereetz
    Beiträge
    1,649

    Mal ein Beispiel zum Senden:
    PHP-Code:
    HID_SendEvent($hid0chr(0x20).chr(0x00).chr(0x08).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00)); 
    Die ReportID unterscheidet verschiedene Typen von Reports. Die sind für jedes HID-Gerät implementationsabhängig. Da musst Du in der Protokollbeschreibung nachsehen oder selbst das Protokoll analysieren. Die offizielle HID-Spezifikation findet sich unter USB.org - HID Tools. Mehr als mit der WMRS200 zu reden hab ich mit HID bisher nicht gemacht. Der Begriff HID-Buffer ist mir auch nicht geläufig.
    Horst

  7. #7
    Registriert seit
    Jun 2005
    Beiträge
    3,649

    Hallo Horst, hallo Alle,

    hier: bei Sprut in Deutsch

    wird es gut verständlich beschrieben.

    Sind die ReportID`s dann die da beschriebenen Endpunktebuffer?

    Das wären nämlich meine Parameterübergabe-Buffer zu meinem Interface, Marke Selbstbau.

    Und dann fehlt mir noch der Zusammenhang mit dem Wert "ReportID", kann man denn dadurch einen von max.64 Buffer direkt ansprechen?

    Lieber Paresy, kann man Einen von 64 max. damit gezielt ansprechen?

    PS: Falls es in der falschen Rubrik ist, verschiebe es bitte.



    Gruß Helmut
    Geändert von Helmut (13.06.09 um 19:21 Uhr) Grund: Rubrikfrage

  8. #8
    Registriert seit
    Aug 2008
    Ort
    Sereetz
    Beiträge
    1,649

    Ich sehe da leider nirgendwo das Wörtchen HID. Das sieht mir da eher nach einem USB-Gerät mit eigenem Treiber aus. Die ReportID beim HID beschreibt von welchem Datensatztyp die gesendeten Daten sind (siehe HID Reports).
    Da da Delphi-Beispielcode bei ist könntest Du Dir ein IP-Symcon-Modul schreiben. Ist eigentlich recht unkompliziert. Meine Delphi-Kenntnisse haben nach vier Jahren Inaktivität immernoch dafür gereicht.
    Horst

  9. #9
    Registriert seit
    Jun 2005
    Beiträge
    3,649

    Zitat Zitat von Horst Beitrag anzeigen
    Ich sehe da leider nirgendwo das Wörtchen HID. Das sieht mir da eher nach einem USB-Gerät mit eigenem Treiber aus. Die ReportID beim HID beschreibt von welchem Datensatztyp die gesendeten Daten sind (siehe HID Reports).
    Da da Delphi-Beispielcode bei ist könntest Du Dir ein IP-Symcon-Modul schreiben. Ist eigentlich recht unkompliziert. Meine Delphi-Kenntnisse haben nach vier Jahren Inaktivität immernoch dafür gereicht.
    Hallo Horst,
    hab`noch nie Delphie gemacht und meine Basic oder PHP-Kenntnisse
    sind auch nicht soo dolle.

    Dein Link würde meine Frage nach der direkten Adressierung der ReportID bejahen....???...

    Ich meine, ob ein USB-Gerät ein HumanInterfaceDevice oder eine andere Anwendung, zB eine USB-Festplatte, wird liegt an den Descriptoren dazu.

    Ein HID-Device hat den Vorteil: es braucht keine Treiber.

    Gruß und vielen Dank für alle Antworten, wieder viel gelernt.

    Helmut

  10. #10
    Registriert seit
    Aug 2008
    Ort
    Sereetz
    Beiträge
    1,649

    Keine Treiber ist auch nicht richtig. Eher: Der Treiber ist beim OS dabei. Als was das USB-Gerät anzusehen ist steht dann schon in den Deskriptoren. Ich vermute, dass die Befehle in IP-Symcon nur für richtige HID-Devices funktionieren und nicht für jedes USB-Gerät.
    Meinen Link würde ich so interpretieren, dass für identisch große Datensätze anhand der ReportID eine Unterscheidung möglich ist, wie diese zu interpretieren sind. Nimmt man z.B. einen Block von 3 Byte Länge könnte ReportID 0 bedeuten, dass Byte 1 Luftfeuchtigkeit, Byte 2 und 3 Temperatur darstellen; ReportID 1 sagt, dass Byte 1 bis 3 zusammen einen 24bit Zählerwert darstellen.
    Bei der WMRS200 hat das keinen interessiert, da gibt es nur ReportID 0. Empfange Pakete sagen dann in Byte 1, wie viele Bytes des Datenblocks zu verwerten sind. Diese muss man dann bis zum Auftauchen einer Trennfolge zusammensetzen und die Datensätze interpretieren. Welcher Sensor was gesagt hat ist dann im jeweiligen Datenblock zu finden.
    Horst

Ähnliche Themen

  1. HID Gerät per Befehl öffnen
    Von Clipper_l im Forum Skripte, PHP, SQL
    Antworten: 4
    Letzter Beitrag: 07.06.09, 19:05
  2. HID lesen und schreiben
    Von Helmut im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 10
    Letzter Beitrag: 01.05.09, 19:55
  3. Hid
    Von mas im Forum Allgemeine Diskussion
    Antworten: 10
    Letzter Beitrag: 01.03.07, 18:10

Stichworte