+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 10 von 28
  1. #1
    Registriert seit
    Aug 2016
    Ort
    Stuttgart
    Beiträge
    18

    Standard CUL mit IPS 4.0 auf Raspberry Pi3

    Hallo,

    ich versuche schon seit Tagen einen Busware CUL mit IPS 4.0 auf einen Raspberry Pi3 ans Laufen zu bekommen.
    Wen ich den CUL an einem Windows PC über Virtuellen COM-Port und Hyperterminal anspreche bekomme ich auf die Befehle auch die zu erwartende Rückmeldung.

    in IPS habe ich den CUL als Serial-I/O-Port eingerichtet (9600,8 Datenbits, 1 Stopbit), wenn ich nun einen Text-Befehl sende auf den ich eine Rückantwort bekommen muss, bleibt diese jedoch aus. Daher gehe ich davon aus, dass keine Kommunikation zum CUL aufgebaut werden kann.

    Weiß hier jemand weiter?


    Der CUL läuft auf einen anderen PI und Fhem ohne Probleme.
    Habe vor die letzte Funktion (Somfy RTS Rolläden) die derzeit noch in Fhem läuft in IPS umzuziehen.
    Mit den Lacrosse Temperatursensoren und dem Jeelink-Stick ging es mit einem kleinen Script ohne Probleme.

    Chris
    Geändert von ChrisSunset (14.08.16 um 21:09 Uhr)

  2. #2
    Registriert seit
    Aug 2016
    Ort
    Stuttgart
    Beiträge
    18

    Hat sich erledigt. Musste das Event-Script von hier l etwas anpassen.

  3. #3
    Registriert seit
    May 2005
    Beiträge
    2,278

    Es gibt auch ein IPS 4.0 Modul für Busware CUL/CUN/COC
    Tommi

  4. #4
    Registriert seit
    Aug 2016
    Ort
    Stuttgart
    Beiträge
    18

    Hallo Tommi,


    vielen Dank für den Hinweis. Wo finde ich das Modul?
    Im Forum wurde ich leider nicht fündig.

    Gruß Chris

  5. #5
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    21,876

    Schau mal hier: Übersicht der PHP-Module

    paresy

  6. #6
    Registriert seit
    Jun 2016
    Beiträge
    199

    Zitat Zitat von ChrisSunset Beitrag anzeigen
    Hallo,

    Mit den Lacrosse Temperatursensoren und dem Jeelink-Stick ging es mit einem kleinen Script ohne Probleme.

    Chris
    Hi, könntest du zu dem Thema ein bisschen mehr schreiben?
    Das habe ich bis dato noch nicht gefunden, fände es aber seeeehr Interessant.. (komme von FHEM)

    danke und Gruß
    Suner

  7. #7
    Registriert seit
    Aug 2016
    Ort
    Stuttgart
    Beiträge
    18

    Hallo Suner,

    ich bin folgendermaßen vorgegangen:
    - Jeelink mit LaCrosse Sketch
    - in I/O-Instanzen als Serial Port angelegt (Baudrate: 57600 ,8, 1, N)
    - CutterInstanz rechtes Trennzeichen 0D 0A ; Hex
    - Register Variable angelegt welche das action-skript aufruft.
    PHP-Code:
    <?
    <?

    // Zuordnung hier eintragen

    // IDs der Sensoren
        
    $ID_array=array(37 /*EG\Arbeiten\ID*/
        
    ,/*EG\Speisekammer\ID*/
        
    ,/*Aussen_Ws\ID*/
        
    ,59 /*UG\Bad\ID*/
        
    ,40 /*Garage\ID*/
        
                                                 
    );
    // Arrays mit ID, Temperatur, Luftfeuchtigkeit und Batteriestatus
         
    $ID_variable_array=array(34421 /*[EG\Arbeiten\ID]*/ 
         
    ,32324
        
    ,42858 /*[Aussen\Klimasensoren\ID]*/
        
    ,32856
        
    ,17410 /*[Garage\ID]*/
                                                 
    );
         
    $T_variable_array=array(39793 /*[EG\Arbeiten\Temperatur]*/
         
    ,59585
         
    ,47977 /*[Aussen\Klimasensoren\Temperatur]*/
         
    ,59374
         
    ,30470 /*[Garage\Temperatur]*/
                                                 
    );
         
    $H_variable_array=array(43464 /*[EG\Arbeiten\Luftfeuchtigkeit]*/
         
    ,56477
         
    ,38785 /*[Aussen\Klimasensoren\Luftfeuchtigkeit]*/
         
    ,40426
         
    ,39209 /*[Garage\Luftfeuchtigkeit]*/
                                              
    );
         
    $Batt_variable_array=array(33109 /*[EG\Arbeiten\Batterie Klimasensor]*/
         
    ,20178
        
    ,51813 /*[Aussen\Klimasensoren\Batterie Klimasensor]*/
        
    ,14428
        
    ,24878 /*[Garage\Batterie Klimasensor]*/
                                     
    );
        
    if (
    $_IPS['SENDER'] == "RegisterVariable")
    {
        
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
        
    $data  RegVar_GetBuffer($_IPS['INSTANCE']);
        
    // neu empfangene Daten an $data anhängen
        
    $data $_IPS['VALUE'];


        
    // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
        
    RegVar_SetBuffer($_IPS['INSTANCE'], $data);
    }

        
    // Format
      //
      // OK 9 56 1   4   156 37     ID = 56  T: 18.0  H: 37  no NewBatt
      // OK 9 49 1   4   182 54     ID = 49  T: 20.6  H: 54  no NewBatt
      // OK 9 55 129 4 192 56       ID = 55  T: 21.6  H: 56  WITH NewBatt
      // OK 9 ID XXX XXX XXX XXX
      // |  | |  |   |   |   |
      // |  | |  |   |   |   --- Humidity incl. WeakBatteryFlag
      // |  | |  |   |   |------ Temp * 10 + 1000 LSB
      // |  | |  |   |---------- Temp * 10 + 1000 MSB
      // |  | |  |-------------- Sensor type (1 or 2) +128 if NewBatteryFlag
      // |  | |----------------- Sensor ID
      // |  |------------------- fix "9"
      // |---------------------- fix "OK"
      

    // Decodierung

    # Temperature sensor - Format:
        #      0   1   2   3   4
        # -------------------------
        # OK 9 56  1   4   156 37     ID = 56  T: 18.0  H: 37  no NewBatt
        # OK 9 49  1   4   182 54     ID = 49  T: 20.6  H: 54  no NewBatt
        # OK 9 55  129 4   192 56     ID = 55  T: 21.6  H: 56  WITH NewBatt

        # OK 9 2   1   4 212 106       ID = 2   T: 23.6  H: -- Channel: 1
        # OK 9 2   130 4 225 125       ID = 2   T: 24.9  H: -- Channel: 2

        # OK 9 ID XXX XXX XXX XXX
        # |  | |  |   |   |   |
        # |  | |  |   |   |   --- Humidity incl. WeakBatteryFlag
        # |  | |  |   |   |------ Temp * 10 + 1000 LSB
        # |  | |  |   |---------- Temp * 10 + 1000 MSB
        # |  | |  |-------------- Sensor type (1 or 2) +128 if NewBatteryFlag
        # |  | |----------------- Sensor ID
        # |  |------------------- fix "9"
        # |---------------------- fix "OK"

         
    $data RegVar_GetBuffer(34355 /*[Klimatisierung\Klimasensoren\Lacrosse\Register Variable]*/);

        
    $bytes explode' '$data);


       
    $addr $bytes[2] ;
       
         if (
    in_array($addr$ID_array))
      {
        
    $battery_new = ($bytes[3] & 0x80) >> 7;
        
    $battery_low = ($bytes[6] & 0x80) >> 7;
        
    $type = ($bytes[3] & 0x70) >> 4;
        
    $channel $bytes[3] & 0x0F;
        
    $temperature = ($bytes[4]*256 $bytes[5] - 1000)/10;
        
    $humidity $bytes[6] & 0x7f;
     
      
    // Daten in Variable schreiben
        
    $key=array_search($addr$ID_array);
        
    setvalue($ID_variable_array[$key],$addr);
        
    setvalue($Batt_variable_array[$key],$battery_low);
        
    setvalue($T_variable_array[$key],$temperature);
        
    setvalue($H_variable_array[$key],$humidity);
      }else
      {
       
    //Hier zukünftiges Skript für autocreate

      
    }
      
      
    // Wenn counter =0 Port schließen und LED ausschalten, sonst counter dekrement
      
    $count=GetValueInteger(43582 /*[Klimatisierung\Klimasensoren\Lacrosse\Counter]*/);
      if(
    $count==0)
      {
          
    SPRT_SendText(13147 /*[Jeelink]*/"0a v");
       
    IPS_SetProperty(13147 /*[Jeelink]*/"Open"false);
       
    IPS_ApplyChanges (13147 /*[Jeelink]*/);
      }else
      {
      
    $count=$count-1;
      
    SetValueInteger(43582 /*[Klimatisierung\Klimasensoren\Lacrosse\Counter]*/,$count);
      }
      
    ?>
    Für jeden Sensor müssen die Variablen leider noch manuell angelegt werden. Wenn ich Zeit habe schreibe ich noch ein "autocreate" Welches die Variable automatisch generiert. (siehe Platzhalter im Skript)

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Unbenannt.png 
Hits:	124 
Größe:	6.7 KB 
ID:	35745

    Weil die Sensoren für meine Anwendung die Daten zu oft senden, öffne ich den Serial Port nur alle 5min und empfange x Datensätze (bei mir aktuell Anzahl Sensoren x 3) bevor ich den Port wieder schließe.

    Dazu ein Skript welches den Port alle 5 min öffnet und den Counter initialisiert.

    PHP-Code:
    <?
    // Jellink startup
    $AnzahlSens=6;
    IPS_SetProperty(13147 /*[Jeelink]*/"Open"true);
    IPS_ApplyChanges (13147 /*[Jeelink]*/);
    SetValueInteger(43582 /*[Klimatisierung\Klimasensoren\Lacrosse\Counter]*/$AnzahlSens*3);

    ?>
    Anbei noch ein Überblick
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Unbenannt.png 
Hits:	198 
Größe:	50.9 KB 
ID:	35744

    Ich hoffe es hilft Dir weiter.

    Gruß Chris
    Geändert von ChrisSunset (08.10.16 um 11:40 Uhr)

  8. #8
    Registriert seit
    Aug 2016
    Ort
    Stuttgart
    Beiträge
    18

    Update:

    Hab mich jetzt doch noch drangesetzt und das autocreate programmiert.

    - Jeelink mit LaCrosse Sketch
    - in I/O-Instanzen als Serial Port angelegt (Baudrate: 57600 ,8, 1, N)
    - CutterInstanz rechtes Trennzeichen 0D 0A ; Hex
    - Register Variable angelegen welche das regvar-skript aufruft.

    PHP-Code:
    <?
    //Address-Arrays

    $Addr_ID=14941 /*[Klimatisierung\Klimasensoren\Lacrosse\Register Variable\IDs]*/;
    $Addr_ID_array=49869 /*[Klimatisierung\Klimasensoren\Lacrosse\Register Variable\ID_Variables]*/;
    $Addr_T_array=14058 /*[Klimatisierung\Klimasensoren\Lacrosse\Register Variable\T_Variables]*/;
    $Addr_H_array=25980 /*[Klimatisierung\Klimasensoren\Lacrosse\Register Variable\H_Variables]*/;
    $Addr_Batt_array=42412 /*[Klimatisierung\Klimasensoren\Lacrosse\Register Variable\Batt_Variables]*/;

    // Arrays einlesen

       
    $ID_array = array();
        
    $ID_array unserialize(GetValue($Addr_ID));
        
        
    $ID_variable_array = array();
        
    $ID_variable_array unserialize(GetValue($Addr_ID_array));
        
        
    $T_variable_array = array();
        
    $T_variable_array unserialize(GetValue($Addr_T_array));
        
        
    $H_variable_array = array();
        
    $H_variable_array unserialize(GetValue($Addr_H_array));
        
        
    $Batt_variable_array = array();
        
    $Batt_variable_array unserialize(GetValue($Addr_Batt_array));

       
        
        
    if (
    $_IPS['SENDER'] == "RegisterVariable")
    {
        
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
        
    $data  RegVar_GetBuffer($_IPS['INSTANCE']);
        
    // neu empfangene Daten an $data anhängen
        
    $data $_IPS['VALUE'];


        
    // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
        
    RegVar_SetBuffer($_IPS['INSTANCE'], $data);
    }

        
    // Format
      //
      // OK 9 56 1   4   156 37     ID = 56  T: 18.0  H: 37  no NewBatt
      // OK 9 49 1   4   182 54     ID = 49  T: 20.6  H: 54  no NewBatt
      // OK 9 55 129 4 192 56       ID = 55  T: 21.6  H: 56  WITH NewBatt
      // OK 9 ID XXX XXX XXX XXX
      // |  | |  |   |   |   |
      // |  | |  |   |   |   --- Humidity incl. WeakBatteryFlag
      // |  | |  |   |   |------ Temp * 10 + 1000 LSB
      // |  | |  |   |---------- Temp * 10 + 1000 MSB
      // |  | |  |-------------- Sensor type (1 or 2) +128 if NewBatteryFlag
      // |  | |----------------- Sensor ID
      // |  |------------------- fix "9"
      // |---------------------- fix "OK"
      

    // Decodierung

    # Temperature sensor - Format:
        #      0   1   2   3   4
        # -------------------------
        # OK 9 56  1   4   156 37     ID = 56  T: 18.0  H: 37  no NewBatt
        # OK 9 49  1   4   182 54     ID = 49  T: 20.6  H: 54  no NewBatt
        # OK 9 55  129 4   192 56     ID = 55  T: 21.6  H: 56  WITH NewBatt

        # OK 9 2   1   4 212 106       ID = 2   T: 23.6  H: -- Channel: 1
        # OK 9 2   130 4 225 125       ID = 2   T: 24.9  H: -- Channel: 2

        # OK 9 ID XXX XXX XXX XXX
        # |  | |  |   |   |   |
        # |  | |  |   |   |   --- Humidity incl. WeakBatteryFlag
        # |  | |  |   |   |------ Temp * 10 + 1000 LSB
        # |  | |  |   |---------- Temp * 10 + 1000 MSB
        # |  | |  |-------------- Sensor type (1 or 2) +128 if NewBatteryFlag
        # |  | |----------------- Sensor ID
        # |  |------------------- fix "9"
        # |---------------------- fix "OK"

         
    $data RegVar_GetBuffer(34355 /*[Klimatisierung\Klimasensoren\Lacrosse\Register Variable]*/);

        
    $bytes explode' '$data);


        
    $addr $bytes[2] ;
       if (
    strlen($addr)<=)
       {
        
    $battery_new = ($bytes[3] & 0x80) >> 7;
        
    $battery_low = ($bytes[6] & 0x80) >> 7;
        
    $type = ($bytes[3] & 0x70) >> 4;
        
    $channel $bytes[3] & 0x0F;
        
    $temperature = ($bytes[4]*256 $bytes[5] - 1000)/10;
        
    $humidity $bytes[6] & 0x7f;
       }
       
       if (
    in_array($addr$ID_array) and strlen($addr)<=)
      {
      
      
    // Daten in Variable schreiben
        
    $key=array_search($addr$ID_array);
        
    setvalue($ID_variable_array[$key],$addr);
        
    setvalue($Batt_variable_array[$key],$battery_low);
        
    setvalue($T_variable_array[$key],$temperature);
        
    setvalue($H_variable_array[$key],$humidity);
      }elseif( 
    strlen($addr)<=2)
      {
      
      
    $CatID IPS_CreateCategory();       // Kategorie anlegen
      
    IPS_SetName($CatID,$addr); // Kategorie benennen
      
    IPS_SetParent($CatID,IPS_GetParent IPS_GetParent $_IPS['SELF']))); // Kategorie einsortieren unter dem Objekt mit der ID "12345"
      
      
    $ID_array[]=$addr;
      
    SetValue($Addr_ID,serialize($ID_array));
      
      
    $VarID_IDIPS_CreateVariable(1);
      
    IPS_SetName($VarID_ID"ID"); // Variable benennen
      
    IPS_SetParent($VarID_ID$CatID ); // Variable einsortieren
      
    SetValue($VarID_ID$addr);
      
    $ID_variable_array[]=$VarID_ID;
      
    SetValue($Addr_ID_array,serialize($ID_variable_array));
      
      
    $VarID_TIPS_CreateVariable(2);
      
    IPS_SetName($VarID_T"Temperatur"); // Variable benennen
      
    IPS_SetParent($VarID_T,  $CatID ); // Variable einsortieren
      
    IPS_SetVariableCustomProfile($VarID_T"~Temperature");
      
    SetValue($VarID_T$temperature);
      
    $T_variable_array[]=$VarID_T;
      
    SetValue($Addr_T_array,serialize($T_variable_array));
      
      
    $VarID_HIPS_CreateVariable(2);
      
    IPS_SetName($VarID_H"Luftfeuchtigkeit"); // Variable benennen
      
    IPS_SetParent($VarID_H,  $CatID ); // Variable einsortieren 
      
    IPS_SetVariableCustomProfile($VarID_H"~Humidity.F");
      
    SetValue($VarID_H$humidity);
      
    $H_variable_array[]=$VarID_H;
      
    SetValue($Addr_H_array,serialize($H_variable_array));
      
      
    $VarID_BattIPS_CreateVariable(0);
      
    IPS_SetName($VarID_Batt"Batterie Klimasensor"); // Variable benennen
      
    IPS_SetParent($VarID_Batt,  $CatID ); // Variable einsortieren 
      
    IPS_SetVariableCustomProfile($VarID_Batt"~Battery");
      
    SetValue($VarID_Batt$battery_low);
      
    $Batt_variable_array[]=$VarID_Batt;
      
    SetValue($Addr_Batt_array,serialize($Batt_variable_array));
      }else{
      }
      
      
    // Wenn counter =0 Port schließen und LED ausschalten, sonst counter dekrement
      
    $count=GetValueInteger(43582 /*[Klimatisierung\Klimasensoren\Lacrosse\Register Variable\Counter]*/);
      if(
    $count==0)
      {
          
    SPRT_SendText(13147 /*[Jeelink]*/"0a v");
       
    IPS_SetProperty(13147 /*[Jeelink]*/"Open"false);
       
    IPS_ApplyChanges (13147 /*[Jeelink]*/);
      }else
      {
      
    $count=$count-1;
      
    SetValueInteger(43582 /*[Klimatisierung\Klimasensoren\Lacrosse\Register Variable\Counter]*/,$count);
      }
      
    ?>
    - Folgende Variablen unter der Register variablen anlegen

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Unbenannt.png 
Hits:	143 
Größe:	31.8 KB 
ID:	35753

    - Alle Variablen IDs ausser Counter in regvar-skript unter Address-Arrays eintragen.

    - Startup skript wie im vorherigen Beitrag anlegen und die deine ID für den Counter (bei set value) und die ID für den Serial Port (bei Set property und applychanges) eintragen.

    - Jetzt sollte Pro empfangenem Sensor eine Kategorie (Name entspricht der Sensor ID oben im Bild ID 35) angelegt werden, welche die zugehörigen Variablen/Werte enthält. Der Inhalt der Kategorie kann jetzt beliebig im Projekt verschoben werden.

    Gruß Chris

  9. #9
    Registriert seit
    Jun 2016
    Beiträge
    199

    Ich habe mal den Jeelink für cuxd angepasst.. das ist jetzt aber irgendwie etwas ungüsntig..
    könntest du mir vll deinen Sketch zur Verfügung stellen?

    gruß
    Suner

  10. #10
    Registriert seit
    Jun 2016
    Beiträge
    199

    hab einen Sketch gefunden der ganz gut aussieht werde mal rumprobieren.

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 16.03.16, 00:57
  2. Lirc und USBTOY V2 auf Raspberry Pi 2 mit IPS ?
    Von drapple im Forum Allgemeine Diskussion
    Antworten: 10
    Letzter Beitrag: 24.11.15, 15:02
  3. mit IPS 4.0 auf einem Raspberry SMS Versenden
    Von PaulG4H im Forum Allgemeine Diskussion
    Antworten: 4
    Letzter Beitrag: 18.11.15, 19:51
  4. CUL/CUN mit IPS auf dem Raspberry schon möglich?
    Von PumpkinEater im Forum Allgemeine Diskussion
    Antworten: 0
    Letzter Beitrag: 29.12.14, 16:38
  5. Busware CUL als HMLAN Ersatz mit IPS möglich?
    Von aghira im Forum HomeMatic
    Antworten: 2
    Letzter Beitrag: 29.07.13, 20:26