+ Antworten
Ergebnis 1 bis 9 von 9
  1. #1
    Registriert seit
    Jan 2009
    Ort
    Thalmässing
    Beiträge
    295

    Standard Script zum Auflisten von 1-Wire Devices als txt oder HTML

    Hallo,

    da ich wissen wollte welche 1-Wire Bausteine bei mir im System verbaut sind und ich irgendwie eine Möglichkeit zur Erstellung einer Übersicht gesucht habe, habe ich 2 Scripte geschrieben.

    Das erste Script erstellt eine Datei 1Wire.txt im IPS-Verzeichnis. Diese Datei lässt sich wunderbar mit Excel öffnen und weiterverarbeiten uvm. (siehe Bild)

    PHP-Code:
    <?
    // Skript zum Auslesen der 1-Wire Bausteine in IpSymCon
    // Ausgabe: Legt die Datei 1Wire.txt im IPSymcon-Hauptverzeichnis an und zeigt es in der Skriptausgabe
    //             ObjektID, Type des 1-WireBaustein, Bausteinart, Seriennummer, Kategorie/Ort
    //
    // Datum:     20.07.2009
    // läuft mit v2.0
    // brdiver677
     
    $guid "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}";
    $ids IPS_GetInstancesByModuleID($guid);
    $dir IPS_GetKernelDir();
     
    $datei fopen($dir."1Wire.txt","w");

    echo 
    $dir."1Wire.txt erstellt.\n\n";
    echo 
    "ObjID\tTyp\tArt\t\t\t\t\tSN\t\t\t\t\t\tOrt\n";
    echo 
    "-----------------------------------------------------------------\n";
    fwrite($datei"ObjektID\tTyp\tArt\tSN\tOrt\n");
    foreach(
    $ids as $id)
     {
     
    $sn TMEX_GetDevice($id);
     
    $arr1 str_split($sn);
     
    $fam_code $arr1[14].$arr1[15];

    switch(
    $fam_code) {
    case 
    '05'$b_id="2405";$b_bez="1-channel addressable switch";break;
    case 
    '10'$b_id="18S20";$b_bez="Temperaturfühler";break;
    case 
    '20'$b_id="2450";$b_bez="4-fach AD-Wandler";break;
    case 
    '26'$b_id="2438";$b_bez="Smart Battery Monitor";break;
    case 
    '28'$b_id="18B20";$b_bez="Temperaturfühler";break;
    case 
    '29'$b_id="2408";$b_bez="8-channel addressable switch";break;
    case 
    '1D'$b_id="2423";$b_bez="4k ram with counter";break;
    case 
    '2C'$b_id="2890";$b_bez="digital potentiomete";break;
    case 
    '3A'$b_id="2413";$b_bez="2-channel addressable switch";break;
    default: 
    $b_id="n/a";$b_bez="n/a";break;
    }
    echo 
    $id."\t".$b_id."\t".$b_bez."\t".$sn."\t".IPS_GetLocation($id)."\n";
    fwrite($datei$id."\t".$b_id."\t".$b_bez."\t".$sn."\t".IPS_GetLocation($id)."\n");

     }
     
    $timestamp time();
    $datum date("d.m.Y",$timestamp);
    $uhrzeit date("H:i",$timestamp);
    echo 
    "\nStand: ".$datum," ",$uhrzeit," Uhr";
    fwrite($datei,"Stand: ".$datum." ".$uhrzeit." Uhr\n");

    fclose($datei);

    ?>
    Das zweite Script erstellt eine Datei 1Wire.html im IPS-Verzeichnis. Diese Datei lässt sich mit einem beliebigen Browser öffnen, ausdrucken uvm. (siehe Bild)

    PHP-Code:
    <?
    // Skript zum Auslesen der 1-Wire Bausteine in IpSymCon
    // Ausgabe: ObjektID, Type des 1-WireBaustein, Bausteinart, Seriennummer, Kategorie/Ort
    //          Erstellt eine HTML-Datei im IPS-Verzeichnis
    // Datum: 20.07.2009
    // läuft mit v2.0
    // brdiver677

     
    $guid "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}";
     
    $ids IPS_GetInstancesByModuleID($guid);
    $dir IPS_GetKernelDir();

    $datei fopen($dir."1Wire.html","w");

     
    fwrite ($datei,"<html> \n<body>\n");
     
    fwrite ($datei"<h1>1-Wire Devices</h1>\n\n");
     
    fwrite ($datei"<table border='1'>\n\n");
     
    fwrite ($datei,"<thead>\n<tr>\n<th style='padding-left:5px'>ObjektID</th>\n<th style='padding-left:5px'>Typ</th>\n<th style='padding-left:5px'>Art</th>\n<th style='padding-left:5px'>Seriennummer</th>\n<th style='padding-left:5px'>Kategorie/Ort</th>\n</tr>\n</thead>\n\n");
     
      
    fwrite ($datei,"<tbody>\n");

     foreach(
    $ids as $id)
     {
     
    $sn TMEX_GetDevice($id);
     
    $arr1 str_split($sn);
     
    $fam_code $arr1[14].$arr1[15];

    switch(
    $fam_code) {
    case 
    '05'$b_id="2405";$b_bez="1-channel addressable switch";break;
    case 
    '10'$b_id="18S20";$b_bez="Temperaturfühler";break;
    case 
    '20'$b_id="2450";$b_bez="4-fach AD-Wandler";break;
    case 
    '26'$b_id="2438";$b_bez="Smart Battery Monitor";break;
    case 
    '28'$b_id="18B20";$b_bez="Temperaturfühler";break;
    case 
    '29'$b_id="2408";$b_bez="8-channel addressable switch";break;
    case 
    '1D'$b_id="2423";$b_bez="4k ram with counter";break;
    case 
    '2C'$b_id="2890";$b_bez="digital potentiomete";break;
    case 
    '3A'$b_id="2413";$b_bez="2-channel addressable switch";break;
    default: 
    $b_id="n/a";$b_bez="n/a";break;

    }
    fwrite($datei,"<tr>\n");
    fwrite($datei,"<td style='padding-left:7px'>".$id."</td>\n");
    fwrite($datei,"<td style='padding-left:7px'>".$b_id."</td>\n");
    fwrite($datei,"<td style='padding-left:7px'>".$b_bez."</td>\n");
    fwrite($datei,"<td style='padding-left:7px'>".$sn."</td>\n");
    fwrite($datei,"<td style='padding-left:7px'>".IPS_GetLocation($id)."</td>\n");
    fwrite($datei,"</tr>\n");

     }

    fwrite ($datei,"</tbody>\n\n");
    fwrite ($datei,"</table>\n\n<br>");

    $timestamp time();
    $datum date("d.m.Y",$timestamp);
    $uhrzeit date("H:i",$timestamp);

    fwrite($datei,"Stand: ".$datum." ".$uhrzeit." Uhr\n");

     
    fwrite ($datei"</html>\n</body>");
    fclose($datei);

    ?>
    Ich möchte nur noch darauf hinweisen, dass ich die Grundidee aus einem älteren Thread übernommen habe und eine Möglichkeit der Weiterverarbeitung bzw. Drucken schaffen wollte. Diese Grundidee bzw. Basis für mein Script stammt von paresy.

    Das Auslesen des Family Codes habe ich dazu genutzt die Art und Typ des Bausteins in der Liste zu integrieren.


    Viele Grüße
    Björn
    Geändert von brdiver677 (22.07.09 um 21:20 Uhr) Grund: Schreibfehler
    XComfort: USB-Gateway,Konfig-Schnittstelle,Schaltaktoren,Binäreingänge, Jalousieaktoren,RoomManager,RoomController /1-Wire: Link45,Verteilermodul,DS18B20,V2A DS18B20,DS2438,S0-Counter,/ProJET:Öl-Tank:LevelJET-St mit Seriell-USB Wandler/HM CCU2,Aktoren //2xWAGO/3xEKM// RPI2 v5.2 // Razberry / ZWave//

  2. #2
    Registriert seit
    Feb 2007
    Ort
    Zwickau
    Beiträge
    5,490

    Hallo Björn,

    das macht die WIIPS zwar in ähnlicher Form, aber Deine Variante ist etwas ausführlicher. Danke! Habs mal in die Script Library aufgenommen.
    MfG Thomas

    Eaton Xcomfort|FS20|1-Wire|Axis WebCams|WMRS200 Wetterstation|Funksystem-868|Gas und Wasserzähler per S0 1-Wire|E-Zähler per OKK+seriell2LAN Adapter|Amazon Alexa|
    Visu auf: 10"Touchscr.|Apple iPod Touch|Apple iPhone|Apple iPad|IPS V5.x|Dashboard|WebFront|iFront


  3. #3
    Registriert seit
    Dec 2006
    Ort
    Oberkrämer bei Berlin
    Beiträge
    1,465

    Ich wollte mal kurz eine 1Wire Liste drucken und habe obiges Script probiert.
    Der erste Fehler bei IPS V2.3 ist der >IPS_GetInstanceListByModuleID< Befehl. Aber die Zeile
    $fam_code = $arr1[14].$arr1[15];
    führt mehrmals zum Fehler
    Undefinined offset:14 in C:\.....\ on line 25 (txt bzw 27 bei html ) und
    Undefinined offset:15 in C:\.....\ on line 25 (bzw 27)

    könnte das mal jemand anpassen an die aktuelle IPS Version?
    Geändert von Heidewinkler (11.10.10 um 19:34 Uhr)
    MfG: Heiner_________________IPS5.2, NUC-i5 Lüfterlos, SSD, Win10Home, 24/7; IPS-Mobile Android V5.2.1; FHZ1300PC: FS20, HMS100, KS300, PS50, FHT; WDE1; Harmony1100 + Wandlung einzelner FHT80TF in FS20 Adressen mit FS20Manager; 3x ChromoflexII + 14x IIIRC; DMX4ALL, ArtNet (Dimmer6); IPS-868: EKM, RGBW, WDT, JKM/Termojet; 1Wire über blauem DS9490R; HomeMatic: CCU3, LAN_Adapter, Hm + HmIP, Winmatic; XBee Pro: Roomba;

  4. #4
    Registriert seit
    Jan 2009
    Ort
    Thalmässing
    Beiträge
    295

    Standard läuft auch mit 2.3

    Hi,

    ich habe gerade beide Skripte ausprobiert.
    Sie laufen ohne Probleme und erstellen die Dateien.

    Ich habe sie von der Konsole aus gestartet.
    Die Dateien liegen dann im IPS->Verzeichnis.

    1Wire.html und 1Wire.txt

    Wie hast du denn die Skripte gestartet ?

    Gruss
    Björn
    XComfort: USB-Gateway,Konfig-Schnittstelle,Schaltaktoren,Binäreingänge, Jalousieaktoren,RoomManager,RoomController /1-Wire: Link45,Verteilermodul,DS18B20,V2A DS18B20,DS2438,S0-Counter,/ProJET:Öl-Tank:LevelJET-St mit Seriell-USB Wandler/HM CCU2,Aktoren //2xWAGO/3xEKM// RPI2 v5.2 // Razberry / ZWave//

  5. #5
    Registriert seit
    Jul 2006
    Ort
    Butzbach, die schöne Wetterau
    Beiträge
    1,475

    Geht bei mir nur wenn ich

    PHP-Code:
    $ids IPS_GetInstancesByModuleID($guid); 
    in

    PHP-Code:
    $ids IPS_GetInstanceByModuleID($guid); 
    ändere
    Gruß Uwe
    (bmwm3)


  6. #6
    Registriert seit
    Jul 2010
    Beiträge
    73

    Zitat Zitat von bmwm3 Beitrag anzeigen

    PHP-Code:
    $ids IPS_GetInstanceByModuleID($guid); 

    hmmm aber auch damit bekomme ich das Script nicht zum laufen:
    Code:
    Fatal error:  Call to undefined function IPS_GetInstanceByModuleID() in [.sonstiges\1-Wire-get_Devices] on line 11

  7. #7
    Registriert seit
    Jan 2009
    Ort
    Thalmässing
    Beiträge
    295

    Standard Hier nochmal zu Kontrolle

    anbei die beiden Skripte nochmal komplett zur Kontrolle:

    1. 1-Wire Bausteine Auslesen und in TXT-ablegen:

    PHP-Code:
    <?
    // Skcript zum Auslesen der 1-Wire Bausteine in IpSymCon
    // Ausgabe: Legt die Datei 1Wire.txt im IPSymcon-Hauptverzeichnis an und zeigt es in der Skriptausgabe
    //             ObjektID, Type des 1-WireBaustein, Bausteinart, Seriennummer, Kategorie/Ort
    //
    // Datum:     11.10.2010
    // läuft mit v2.3
    // brdiver677
     
    $guid "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}";
    $ids IPS_GetInstanceListByModuleID($guid);
    $dir IPS_GetKernelDir();
     
    $datei fopen($dir."1Wire.txt","w");

    echo 
    $dir."1Wire.txt erstellt.\n\n";
    echo 
    "ObjID\tTyp\tArt\t\t\t\t\tSN\t\t\t\t\t\tOrt\n";
    echo 
    "-----------------------------------------------------------------\n";
    fwrite($datei"ObjektID\tTyp\tArt\tSN\tOrt\n");
    foreach(
    $ids as $id)
     {
     
    $sn TMEX_GetDevice($id);
     
    $arr1 str_split($sn);
     
    $fam_code $arr1[14].$arr1[15];

    switch(
    $fam_code) {
    case 
    '05'$b_id="2405";$b_bez="1-channel addressable switch";break;
    case 
    '10'$b_id="18S20";$b_bez="Temperaturfühler";break;
    case 
    '20'$b_id="2450";$b_bez="4-fach AD-Wandler";break;
    case 
    '26'$b_id="2438";$b_bez="Smart Battery Monitor";break;
    case 
    '28'$b_id="18B20";$b_bez="Temperaturfühler";break;
    case 
    '29'$b_id="2408";$b_bez="8-channel addressable switch";break;
    case 
    '1D'$b_id="2423";$b_bez="4k ram with counter";break;
    case 
    '2C'$b_id="2890";$b_bez="digital potentiomete";break;
    case 
    '3A'$b_id="2413";$b_bez="2-channel addressable switch";break;
    default: 
    $b_id="n/a";$b_bez="n/a";break;
    }
    echo 
    $id."\t".$b_id."\t".$b_bez."\t".$sn."\t".IPS_GetLocation($id)."\n";
    fwrite($datei$id."\t".$b_id."\t".$b_bez."\t".$sn."\t".IPS_GetLocation($id)."\n");

     }
     
    $timestamp time();
    $datum date("d.m.Y",$timestamp);
    $uhrzeit date("H:i",$timestamp);
    echo 
    "\nStand: ".$datum," ",$uhrzeit," Uhr";
    fwrite($datei,"Stand: ".$datum." ".$uhrzeit." Uhr\n");

    fclose($datei);

    ?>
    2. 1-Wire Bautsteine auslesen und in html-Datei ablegen

    PHP-Code:
    <?
    // Skcript zum Auslesen der 1-Wire Bausteine in IpSymCon
    // Ausgabe: ObjektID, Type des 1-WireBaustein, Bausteinart, Seriennummer, Kategorie/Ort
    //          Erstellt eine HTML-Datei im IPS-Verzeichnis
    // Datum: 11.10.2010
    // läuft mit v2.3
    // brdiver677

     
    $guid "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}";
     
    $ids IPS_GetInstanceListByModuleID($guid);
    $dir IPS_GetKernelDir();

    $datei fopen($dir."1Wire.html","w");

     
    fwrite ($datei,"<html> \n<body>\n");
     
    fwrite ($datei"<h1>1-Wire Devices</h1>\n\n");
     
    fwrite ($datei"<table border='1'>\n\n");
     
    fwrite ($datei,"<thead>\n<tr>\n<th style='padding-left:5px'>ObjektID</th>\n<th style='padding-left:5px'>Typ</th>\n<th style='padding-left:5px'>Art</th>\n<th style='padding-left:5px'>Seriennummer</th>\n<th style='padding-left:5px'>Kategorie/Ort</th>\n</tr>\n</thead>\n\n");
      
     foreach(
    $ids as $id)
     {
     
    $sn TMEX_GetDevice($id);
     
    $arr1 str_split($sn);
     
    $fam_code $arr1[14].$arr1[15];

    switch(
    $fam_code) {
    case 
    '05'$b_id="2405";$b_bez="1-channel addressable switch";break;
    case 
    '10'$b_id="18S20";$b_bez="Temperaturfühler";break;
    case 
    '20'$b_id="2450";$b_bez="4-fach AD-Wandler";break;
    case 
    '26'$b_id="2438";$b_bez="Smart Battery Monitor";break;
    case 
    '28'$b_id="18B20";$b_bez="Temperaturfühler";break;
    case 
    '29'$b_id="2408";$b_bez="8-channel addressable switch";break;
    case 
    '1D'$b_id="2423";$b_bez="4k ram with counter";break;
    case 
    '2C'$b_id="2890";$b_bez="digital potentiomete";break;
    case 
    '3A'$b_id="2413";$b_bez="2-channel addressable switch";break;
    default: 
    $b_id="n/a";$b_bez="n/a";break;

    }
    fwrite($datei,"<tr>\n");
    fwrite($datei,"<td style='padding-left:7px'>".$id."</td>\n");
    fwrite($datei,"<td style='padding-left:7px'>".$b_id."</td>\n");
    fwrite($datei,"<td style='padding-left:7px'>".$b_bez."</td>\n");
    fwrite($datei,"<td style='padding-left:7px'>".$sn."</td>\n");
    fwrite($datei,"<td style='padding-left:7px'>".IPS_GetLocation($id)."</td>\n");
    fwrite($datei,"</tr>\n");

     }

    fwrite ($datei,"</tbody>\n\n");
    fwrite ($datei,"</table>\n\n<br>");

    $timestamp time();
    $datum date("d.m.Y",$timestamp);
    $uhrzeit date("H:i",$timestamp);

    fwrite($datei,"Stand: ".$datum." ".$uhrzeit." Uhr\n");

     
    fwrite ($datei"</html>\n</body>");
    fclose($datei);

    ?>
    Diese beiden laufen bei mir ohne Probleme.

    IPS_GetInstanceByModuleID() läuft ab der Version IP-Symcon >= 2.1.
    Daher sollte es eigentlich kein Problem geben.


    Was passiert denn, wenn du folgendes Skript startest:
    PHP-Code:
    <?
    //1-Wire
    $guid "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}";

    //Auflisten
    print_r(IPS_GetInstanceListByModuleID($guid));

    ?>
    Du solltest nun eine Auflistung der 1-Wire ObjektID`s erhalten.
    Wenn das klappt, wären wir schon ein Stück weiter.

    Gruss
    Björn
    XComfort: USB-Gateway,Konfig-Schnittstelle,Schaltaktoren,Binäreingänge, Jalousieaktoren,RoomManager,RoomController /1-Wire: Link45,Verteilermodul,DS18B20,V2A DS18B20,DS2438,S0-Counter,/ProJET:Öl-Tank:LevelJET-St mit Seriell-USB Wandler/HM CCU2,Aktoren //2xWAGO/3xEKM// RPI2 v5.2 // Razberry / ZWave//

  8. #8
    Registriert seit
    Dec 2006
    Ort
    Oberkrämer bei Berlin
    Beiträge
    1,465

    Ich kann frühestens heute Abend probieren, aber vielleicht könntest du kurz die Zeile
    $fam_code = $arr1[14].$arr1[15];
    erklären. Sie wird ja bei mir in beiden Scripts moniert. Was kann da der >Undefinined offset< sein?
    Gestartet habe ich das Script per Hand mit Ausführen.

    Und an bmwm3: Nimm IPS_GetInstanceListByModuleID
    Geändert von Heidewinkler (12.10.10 um 06:51 Uhr)
    MfG: Heiner_________________IPS5.2, NUC-i5 Lüfterlos, SSD, Win10Home, 24/7; IPS-Mobile Android V5.2.1; FHZ1300PC: FS20, HMS100, KS300, PS50, FHT; WDE1; Harmony1100 + Wandlung einzelner FHT80TF in FS20 Adressen mit FS20Manager; 3x ChromoflexII + 14x IIIRC; DMX4ALL, ArtNet (Dimmer6); IPS-868: EKM, RGBW, WDT, JKM/Termojet; 1Wire über blauem DS9490R; HomeMatic: CCU3, LAN_Adapter, Hm + HmIP, Winmatic; XBee Pro: Roomba;

  9. #9
    Registriert seit
    Jan 2009
    Ort
    Thalmässing
    Beiträge
    295

    Standard okay, neuer Versuch, kleine Änderung

    Hallo,

    ich habel mal kurz etwas geändert:

    Ersetz mal die 3 Zeilen:
    PHP-Code:
     $sn TMEX_GetDevice($id);
     
    $arr1 str_split($sn);
     
    $fam_code $arr1[14].$arr1[15]; 
    durch den folgenden Code:
    PHP-Code:
     $sn TMEX_GetDevice($id);
     
    $fam_code substr($sn, -2,2); 
    Zur Erläuterung der Zeile:
    $fam_code = $arr1[14].$arr1[15];
    Die Seriennummer der 1-Wire-Bausteine besteht aus 16 Stellen.
    Diese Seriennummer hatte ich mithilfe eines Arrays in 16 Teile zerteilt von $arr1[0] bis $arr1[15].
    Die beiden letzten Stellen, hier $arr1[14] und $arr1[15] geben gemeinsam den sog. Familiy Code an.
    Diesen hatte ich einfach zu einem neuen String zusammengesetzt bzw. aneinandergesetzt.
    Da es bei dir zu Problemen geführt hat, habe ich jetzt den String geschnitten und nur die beiden letzten Stellen übrig gelassen.

    Vielleicht klappt es ja jetzt bei dir.

    Viele Grüße
    Björn
    XComfort: USB-Gateway,Konfig-Schnittstelle,Schaltaktoren,Binäreingänge, Jalousieaktoren,RoomManager,RoomController /1-Wire: Link45,Verteilermodul,DS18B20,V2A DS18B20,DS2438,S0-Counter,/ProJET:Öl-Tank:LevelJET-St mit Seriell-USB Wandler/HM CCU2,Aktoren //2xWAGO/3xEKM// RPI2 v5.2 // Razberry / ZWave//

Ähnliche Themen

  1. [BUG gefixt 0.91] RRD Datenbank wird nicht angelegt
    Von Stefan im Forum IP-Symcon WIIPS für Version 1.0
    Antworten: 19
    Letzter Beitrag: 19.09.06, 14:54
  2. Software oder Script ?
    Von guyabano im Forum Allgemeine Diskussion
    Antworten: 30
    Letzter Beitrag: 21.12.05, 13:14
  3. Verschiedene Scripte mit else?
    Von hbraun im Forum Allgemeine Diskussion
    Antworten: 7
    Letzter Beitrag: 29.11.05, 22:43

Stichworte