+ Antworten
Seite 2 von 6 ErsteErste 1 2 3 4 ... LetzteLetzte
Ergebnis 11 bis 20 von 54
  1. #11
    Registriert seit
    May 2013
    Beiträge
    189

    Zitat Zitat von Verfriemelt Beitrag anzeigen
    Ich habe jetzt einen großen Haufen Arduinos, Radios und Zubehör aus China bestellt...
    Ich warte auch noch immer auf ein paar wenige Teile. Aber einen Großteil habe ich schon.
    https://dl.dropboxusercontent.com/u/...5/DSC_0005.JPG

  2. #12
    Registriert seit
    Jun 2006
    Beiträge
    33

    Cool!!

    Ich habe gestern meinen zweiten DHT22 Sensor gebaut. Das ist wirklich sehr einfach (wenn man seine Verdrahtungen und Lötstellen immer wieder auf Richtigkeit prüft)

    Der Sensor meldet sich auch promt und läuft - nach einigen Modifikationen des ProMini - hoffentlich auch sehr lange auf seinen 2 AAA Batterien.

    Leider muss ich im Augenblick noch den Umweg über ein Drittprogramm machen (MYS) um der Node eine ID zu geben. Dannach läuft das kleine Skript im IP Symcon und erstellt eine Kategorie mit den Variablen.

    Wäre jemand in der Lage die Vergabe der ID's und die Bennenung gemäß der API in PHP zu giessen? Ich bin nicht wirklich so gut darin.
    Hat jemand mal mein Skript ausprobiert?

    Bubi124

  3. #13
    Registriert seit
    Aug 2014
    Beiträge
    5

    Eine kleine Basis an Komponenten ist jetzt auch schon bei mir eingetroffen - ein MAX6675 Thermometer für den Grill z.B.

    Vielleicht schaffe ich es heute Abend mal die Steckerleisten anzulöten und zumindest das Gateway zu bauen. Dein Script wird getestet Melde mich dann nochmal.

    Ich glaube hier drin steckt viel Potential, vielleicht schaffen wir es ja noch zu einem Modul für 4.0

    Gruß,

    Björn

    Name:  mysensors.jpg
Hits: 953
Größe:  57.1 KB
    Geändert von Verfriemelt (27.01.16 um 18:07 Uhr)

  4. #14
    Registriert seit
    May 2013
    Beiträge
    189

    Das Serial Gateway lauft bei mir auch schon einwandfrei. Da hatte ich am Anfang noch einen Fehler in meiner Konfiguration Ich habe einen Spannungsregler auf 3,3V vor dem Funk Modul NRF24L01+ angebracht der aber nur geht wenn zwischen 4,5-7V anliegen und auf dem Arduino Nano der per USB betrieben wird, habe ich blöderweise das Plus auf 3,3V Ausgang angehängt

    Bei den Sensoren bin ich noch nicht ganz so weit.
    - den Arduino Pro Mini mit 3,3V kann ich mit einem FTDI USB Modul entsprechend flashen (nachdem ich manuell den Reset Button gedrückt habe am Arduino Pro Mini klappt es dann auch dass das Image korrekt geladen wird)
    - 2x AA Batterien liefern nach dem Messgerät ca. 3,2V Ausgang
    - wenn ich ohne Spannungsregler arbeitet erhalte ich aber keine korrekten Werte vom Sensor über das Funk Modul

    Hier bin ich noch am überlegen an was es liegt. Schlecht gelötet oder brauche ich 3x AA Batterien mit einem Spannungsregler vor dem Funk Modul oder falsch gesteckt oder....

    Hier werde ich wohl am Wochenende nochmal Zeit investieren.

    LG
    Thiemo

  5. #15
    Registriert seit
    Jun 2006
    Beiträge
    33

    Ich habe bei allen teilen eine gemeinsame VCC und GND Versorgung. Damit gehen alle komponenten auch mit 2AA batterien.
    Einen Sensor habe ich versuchsweise mit einem alten Handyakku (LiIon akku) 3,7V und der geht seit 4 Wochen. Lies mal nach wie sich manche über fehlenden strom am NRF beklagen und einen 10 uF Kondensator zwischen VCC und GND löten um die Spitzenströme zu managen.

  6. #16
    Registriert seit
    Aug 2014
    Beiträge
    5

    Ich habe jetzt ein serial Gateway und einen MAX6675 Temperatursensor für meinen Smoker fertig

    Hatte Probleme mit nicht ankommenden Signalen. In MysController sah ich die ID_REQUEST und ID_RESPONSE aber das wars. Jetzt habe ich überall einen 4.7uF zwischen GND und VCC der Radios und danach ging es.

    @Bubi124 - dein Script läuft auch, nachdem ich die richtige Cutterkonfiguration hatte

    Die $IPS_VALUE und $IPS_SENDER mussten noch in $_IPS['VALUE'] sowie $_IPS['SENDER'] umgeschrieben werden.

    Laufen tut es jetzt auf meinem Test Raspi mit IPS4.0

    Gibt es bei euch noch Neuigkeiten? Ich werde den Sensornode dann mal auf eine Streifenplatine löten und in ein Gehäuse bauen. So auf einem Breadboard ist das im Garten beim Grill unpraktisch

  7. #17
    Registriert seit
    Jun 2006
    Beiträge
    33

    Super. Ach ja, sorry, wollte die Cutter config noch beschreiben, hab's aber vergessen. Ich habe nun mit der "Massenproduktion" begonnen. Will in diversen Räumen temperaturen ermitteln. Ich wage mich dannach mal an ein Relais, dafür muss aber die Umsetzung der API hinsichtlich der set Befehle funktionieren. Bin leider kein PHP spezi.
    Eigentlich braucht es sowas wie Tommi für das CUNO / CUL geschrieben hat.
    Ich mache morgen mal Bilder von mein Aufbau und den verwendeten Platinen.

  8. #18
    Registriert seit
    Aug 2009
    Beiträge
    171

    Hallo!

    ich habe auch beschlossen mich Mal mit dem Thema zu beschaeftigen.
    Die ersten Nodes laufen und ich habe angefangen mich um die IPS Integration zu kuemmern.
    Zuerst hatte ich geguckt, ob es Sinn macht eine vorhandenen Controller Software als IPS Gateway zu patchen. Die ideale Basis habe ich aber leider nicht gefunden.
    Danach habe ich MQTT als Gateway zu IPS probiert. Da hier der Controller auch in IPS implemetiert werden muss, habe ich dann beschlossen direkt mit dem Gateway (in meinem Fall Ethernet) zu reden.

    Momentan ist das Script noch 'work in progress', aber einige Sachen gehen schon.

    Es muss ein 'Client Socket' und ein 'RegisterVariable' angelegt werden. 'RegisterVariable' triggert das Script unten, welches am besten in einer eigenen Kategorie liegt.
    Pro Node wird automatisch eine Conf Variable angelegt und eine freie ID vergeben. Die Conf Variable haelt ein Array mit den IPS Var IDs der jeweiligen MySensor Child Variablen. Das hat den Vorteil, das alle automatisch angelegten Varibalen beliebig umbenannt und verschoben werden koennen.

    Ansatzweise setzt das Script auch schon den richtigen Variablen Typ und Profil.
    Leider ist mir noch nicht ganz klar, ob, bzw. wie MySensors definiert, welchen Variablen Typ ein Child nutzt und ob eine Variable Read, Write oder Read/Write ist.
    Letztendlich moechte ich aber, das z.B. ein Relay Node auch automatisch aus dem Webfront geschaltet werden kann.

    Wie gesagt, ugly work in progress....

    PHP-Code:
    <?
    print ( $_IPS['VALUE']);

    $mysensors_base_category IPS_GetParent($_IPS['SELF']);
    $mysensors_client_socket 17889 /*[Client Socket MySensors]*/;

    $topic_level explode(";"$_IPS['VALUE']);

    $node_id $topic_level[0];
    $child_id $topic_level[1];
    $message_type $topic_level[2];
    $ack $topic_level[3];
    $sub_type $topic_level[4];
    $payload trim(@$topic_level[5], "\n");; //sometimes no payload, ignore.

    $ms_msg_type = array(
            
    => 'presentation',
            
    => 'set',
            
    => 'req',
            
    => 'internal',
            
    => 'stream',
            );

    $ms_s_type = array(
            
    => 'S_DOOR',
            
    => 'S_MOTION',
            
    => 'S_SMOKE',
            
    //3 => 'S_LIGHT',
            
    => 'S_BINARY',
            
    => 'S_DIMMER',
            
    => 'S_COVER',
            
    => 'S_TEMP',
            
    => 'S_HUM',
            
    => 'S_BARO',
            
    => 'S_WIND',
            
    10 => 'S_RAIN',
            
    11 => 'S_UV',
            
    12 => 'S_WEIGHT',
            
    13 => 'S_POWER',
            
    14 => 'S_HEATER',
            
    15 => 'S_DISTANCE',
            
    16 => 'S_LIGHT_LEVEL',
            
    17 => 'S_ARDUINO_NODE',
            
    18 => 'S_ARDUINO_REPEATER_NODE',
            
    19 => 'S_LOCK',
            
    20 => 'S_IR',
            
    21 => 'S_WATER',
            
    22 => 'S_AIR_QUALITY',
            
    23 => 'S_CUSTOM',
            
    24 => 'S_DUST',
            
    25 => 'S_SCENE_CONTROLLER',
            
    26 => 'S_RGB_LIGHT',
            
    27 => 'S_RGBW_LIGHT',
            
    28 => 'S_COLOR_SENSOR',
            
    29 => 'S_HVAC',
            
    30 => 'S_MULTIMETER',
            
    31 => 'S_SPRINKLER',
            
    32 => 'S_WATER_LEAK',
            
    33 => 'S_SOUND',
            
    34 => 'S_VIBRATION',
            
    35 => 'S_MOISTURE',
            
    255 => 'S_PRESENTATION',
    );

    /*
    0    Legt eine Variable vom Typ Boolean an
    1    Legt eine Variable vom Typ Integer an
    2    Legt eine Variable vom Typ Float an
    3    Legt eine Variable vom Typ String an
    */

    /*
    ~Mode.HM
    ~Milliampere.HM
    ~Temperature.HM
    ~Window.HM
    ~Electricity.HM
    ~Motion.HM
    ~Volt.230
    ~Raining
    ~ShutterPosition.255
    ~ShutterAssociation
    ~Battery.Reversed
    ~WindDirection.Text
    ~WindDirection
    ~WindSpeed.ms
    ~WindSpeed.kmh
    ~Motion
    ~Valve.F
    ~Battery.100
    ~ShutterPosition.100
    ~Intensity.100
    ~Temperature.Difference
    ~Motion.Reversed
    ~Humidity.F
    ~Presence.Reversed
    ~Valve
    ~Temperature
    ~Illumination.F
    ~Temperature.Room
    ~Temperature.Fahrenheit
    ~Intensity.32767
    ~MailMessages
    ~Occurrence.CO2
    ~AirPressure.F
    ~Alert
    ~WindDirection.F
    ~UVIndex
    ~Switch
    ~Intensity.1
    ~Battery
    ~Illumination
    ~Presence
    ~Lock.Reversed
    ~HTMLBox
    ~Alert.Reversed
    ~Brightness.HM
    ~ShutterMove
    ~Window.Reversed
    ~Volt
    ~Shutter
    ~Lock
    ~Ampere
    ~Ampere.16
    ~Watt.3680
    ~Humidity
    ~Watt.14490
    ~Hertz
    ~Hertz.50
    ~Intensity.255
    ~Electricity
    ~Water
    ~Gas
    ~Power
    ~Window
    ~Flow
    ~String
    ~UnixTimestamp
    ~TextBox
    ~Rainfall
    ~HexColor
    ~AirPressure
    */

    //arrays to be finished...
    $ms_v_type = array(
            
    => array('v_type_name' => 'V_TEMP',         'ips_v_type' => 2'ips_v_profile' => '~Temperature'),
            
    => array('v_type_name' => 'V_HUM',       'ips_v_type' => 2'ips_v_profile' => '~Humidity.F'),
            
    => array('v_type_name' => 'V_STATUS',    'ips_v_type' => 0'ips_v_profile' => '~Switch'),
            
    //2 => 'V_LIGHT',
            
    => array('v_type_name' => 'V_PERCENTAGE','ips_v_type' => 2'ips_v_profile' => '~Intensity.100'),
            
    //3 => 'V_DIMMER',
            
    => array('v_type_name' => 'V_PRESSURE',  'ips_v_type' => 2'ips_v_profile' => '~AirPressure'),
            
    => 'V_FORECAST',
            
    => 'V_RAIN',
            
    => 'V_RAINRATE',
            
    => 'V_WIND',
            
    => 'V_GUST',
            
    10 => 'V_DIRECTION',
            
    11 => 'V_UV',
            
    12 => 'V_WEIGHT',
            
    13 => 'V_DISTANCE',
            
    14 => 'V_IMPEDANCE',
            
    15 => 'V_ARMED',
            
    16 => 'V_TRIPPED',
            
    17 => 'V_WATT',
            
    18 => 'V_KWH',
            
    19 => 'V_SCENE_ON',
            
    20 => 'V_SCENE_OFF',
            
    21 => 'V_HVAC_FLOW_STATE',
            
    22 => 'V_HVAC_SPEED',
            
    23 => 'V_LIGHT_LEVEL',
            
    24 => 'V_VAR1',
            
    25 => 'V_VAR2',
            
    26 => 'V_VAR3',
            
    27 => 'V_VAR4',
            
    28 => 'V_VAR5',
            
    29 => 'V_UP',
            
    30 => 'V_DOWN',
            
    31 => 'V_STOP',
            
    32 => 'V_IR_SEND',
            
    33 => 'V_IR_RECEIVE',
            
    34 => 'V_FLOW',
            
    35 => 'V_VOLUME',
            
    36 => 'V_LOCK_STATUS',
            
    37 => 'V_LEVEL',
            
    38 => array('v_type_name' => 'V_VOLTAGE',    'ips_v_type' => 1'ips_v_profile' => '~Volt'), //well, actually mV...
            
    39 => 'V_CURRENT',
            
    40 => 'V_RGB',
            
    41 => 'V_RGBW',
            
    42 => 'V_ID',
            
    43 => 'V_UNIT_PREFIX',
            
    44 => 'V_HVAC_SETPOINT_COOL',
            
    45 => 'V_HVAC_SETPOINT_HEAT',
            
    46 => 'V_HVAC_FLOW_MODE',
            );
            
    $ms_i_type = array(
            
    => 'I_BATTERY_LEVEL',
            
    => 'I_TIME',
            
    => 'I_VERSION',
            
    => 'I_ID_REQUEST',
            
    => 'I_ID_RESPONSE',
            
    => 'I_INCLUSION_MODE',
            
    => 'I_CONFIG',
            
    => 'I_FIND_PARENT',
            
    => 'I_FIND_PARENT_RESPONSE',
            
    => 'I_LOG_MESSAGE',
            
    10 => 'I_CHILDREN',
            
    11 => 'I_SKETCH_NAME',
            
    12 => 'I_SKETCH_VERSION',
            
    13 => 'I_REBOOT',
            
    14 => 'I_GATEWAY_READY',
            
    15 => 'I_REQUEST_SIGNING',
            
    16 => 'I_GET_NONCE',
            
    17 => 'I_GET_NONCE_RESPONSE',
            );


    //parse different message types
    switch ($ms_msg_type[$message_type])
    {
       
    //($node_id, $child_sensor_id, $message_type, $ack, $sub_type, $payload)

       
    case 'presentation':
            print 
    "Node:" .$node_id
                
    ." - Child:" .$child_id
                
    ." - Func:" .$ms_msg_type[$message_type]
                .
    " - ACK:" .$ack
                
    ." - Sub-Type:" .$ms_s_type[$sub_type]//['v_type_name']
                
    ." - Payload:" .$payload
                
    ."\n";

            
    $node_conf_var create_node_conf($node_id);
            
    $node_conf unserialize(GetValueString($node_conf_var));
            
            
    //a new node?
            
    if (!@array_key_exists ('node_id_' .$node_id$node_conf)) //ignore empty conf warning
            
    {
               echo 
    "creating node instance\n";
               
                
    $instance_id IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}"); //dummy
                
    IPS_SetParent($instance_id$mysensors_base_category);
               
    IPS_SetName($instance_id"node ID" .$node_id);

               
    $node_conf['node_id_' .$node_id] = $instance_id;
            }

            
    //a new child?
            
    if (!@array_key_exists ('child_id_' .$child_id$node_conf)) //ignore empty conf warning
            
    {
               echo 
    "creating child variable\n";
               
               
    $child_var_id IPS_CreateVariable(3); //since we don't know the var type yet, set it to string for the moment
               
    IPS_SetParent($child_var_id$node_conf['node_id_' .$node_id]);
               
    IPS_SetName($child_var_id"child ID" .$child_id .':' .$payload);
               
               
    $node_conf['child_id_' .$child_id] = $child_var_id;
            }
            
            
    //should we acknolege? correct way to be checked..
            
    if($ack === '1')
            {
                echo 
    "send ack";
                
    CSCK_SendText($mysensors_client_socket$node_id .';' .$child_id .';' .$message_type .';1;' .$sub_type .';' .$payload .';' .chr(0x0a));
            }
            
            break;

        case 
    'set':
           print 
    "Node:" .$node_id
                    
    ." - Child:" .$child_id
                    
    ." - Func:" .$ms_msg_type[$message_type]
                    .
    " - ACK:" .$ack
                    
    ." - Sub-Type:" .$ms_v_type[$sub_type]['v_type_name']
                    .
    " - Payload:" .$payload
                    
    ."\n";
                    
          
    $node_conf_var get_node_conf($node_id);

            
    //skip unknown nodes.
            
    if(!$node_conf_var)
            {
                print 
    "unknown node id" .$node_id ."- skipping";
                exit;
            }

            
    $node_conf unserialize(GetValueString($node_conf_var));
            
            
    //var type is not 100% known during presentation. check if it was already updated.
            
    if(IPS_GetVariable($node_conf['child_id_' .$child_id])['VariableType'] != $ms_v_type[$sub_type]['ips_v_type'])
            {
                Print 
    "updating var type\n";
                
    $old_var_name IPS_GetName($node_conf['child_id_' .$child_id]);
                
    IPS_DeleteVariable($node_conf['child_id_' .$child_id]);
                
    $child_var_id IPS_CreateVariable($ms_v_type[$sub_type]['ips_v_type']);
                
    $node_conf['child_id_' .$child_id] = $child_var_id;
             
    IPS_SetParent($child_var_id$node_conf['node_id_' .$node_id]);
               
    IPS_SetName($child_var_id$old_var_name);
               
    IPS_SetVariableCustomProfile($child_var_id$ms_v_type[$sub_type]['ips_v_profile']);
            }
            
            echo 
    "payload" .$payload ."#";
            
            
    //cast the payload into the right type and write it to ips variable
            
    switch ($ms_v_type[$sub_type]['ips_v_type'])
            {
               case 
    0SetValue($node_conf['child_id_' .$child_id], (bool)$payload); break; //it's bool
               
    case 1SetValue($node_conf['child_id_' .$child_id], (integer)$payload); break; //it's int
                
    case 2SetValue($node_conf['child_id_' .$child_id], (float)$payload); break; //it's float
                
    case 3SetValue($node_conf['child_id_' .$child_id], (string)$payload); break; //it's string
            
    }

                    
            break;

       case 
    'req':
            print 
    "Node:" .$node_id
                    
    ." - Child:" .$child_id
                    
    ." - Func:" .$ms_msg_type[$message_type]
                    .
    " - ACK:" .$ack
                    
    ." - Sub-Type:" .$ms_v_type[$sub_type]
                    .
    " - Payload:" .$payload;
            break;

        case 
    'internal':
            print 
    "Node:" .$node_id
                 
    ." - Child:" .$child_id
                 
    ." - Func:" .$ms_msg_type[$message_type]
                 .
    " - ACK:" .$ack
                 
    ." - Sub-Type:" .$ms_i_type[$sub_type]
                 .
    " - Payload:" .$payload;
                 
            switch (
    $ms_i_type[$sub_type])
            {
               case 
    'I_ID_REQUEST':
                    
    //find a node addess free to assign
                    
    $id=1;
                    while (
    $id <= 254)
                    {
                       
    $free_node_id = @IPS_GetVariableIDByName('node_id_' .$id$mysensors_base_category);
                        if(!
    $free_node_id) break;
                        
    $id++;
                    }
                    
                    if (
    $id 254)
                    {
                        print 
    "no more free node IDs - skipping.";
                        exit;
                    }
                    
                    echo 
    'sending new ID ' .$id;
                    
    CSCK_SendText($mysensors_client_socket'255;255;3;0;4;' .$id .';' .chr(0x0a));
                  
                   break;

             case 
    'I_CONFIG':
                  echo 
    'send I_CONFIG';
                  
    //correct way? to be checked...
                    
    CSCK_SendText($mysensors_client_socket$node_id .';' .$child_id .';3;0;6;M;' .chr(0x0a));

                   break;
            }
                 
            break;

        case 
    'stream':
           echo 
    'stream is not supported, yet';
            break;
    }

    if (isset(
    $node_conf_var))
    {
        
    SetValueString($node_conf_var serialize($node_conf));
       
    print_r ($node_conf);
    }
    /*----------------------------------------------------------------------------*/

    function create_node_conf($node_id)
    {
        
    $parent_category IPS_GetParent($_IPS['SELF']);

        
    $var_node_id = @IPS_GetVariableIDByName("node_id_" .$node_id$parent_category);
        if(
    $var_node_id === false)
        {
               echo 
    "creating missing node conf variable for ID:" .$node_id ."\n";
               
    $var_node_id IPS_CreateVariable(3);
               
    IPS_SetName($var_node_id "node_id_" .$node_id);
               
    IPS_SetParent($var_node_id$parent_category);
        }

        return 
    $var_node_id;
    }

    function 
    get_node_conf($node_id)
    {
        
    $parent_category IPS_GetParent($_IPS['SELF']);
        
    $var_node_id = @IPS_GetVariableIDByName("node_id_" .$node_id$parent_category);
        return 
    $var_node_id;
    }

    ?>

    So, ich werde Mal weiter machen. Comments welcome!

    Gruss, Michael

  9. #19
    Registriert seit
    Aug 2014
    Beiträge
    5

    Hallo Michael,

    auf den ersten Blick sieht das super aus , gerne mehr. Ich baue heute Abend mal einen weiteren Node zusammen, dann teste ich den aktuellen Stand des Script mal auf ID Vergabe und so weiter. Die API Dokumentation habe ich mir noch nicht im Detail angeschaut, ganz schlau geworden bin ich auf die Schnelle daraus auch noch nicht. Welcher Subtype set/req unterstützt

  10. #20
    Registriert seit
    Jun 2006
    Beiträge
    33

    Hi Michael,

    ganz klasse! ich probiere das dann auch mal bei mir.
    Zusätzlich zu meinen 3 Nodes habe ich jetzt auch ein Relay-Station erstellt. Kommunikation ist transparent. Man sieht also in den Werten nicht dass es weitergeleitet wurde.Genauer gesagt, scheint es für die Nodes und den Variablen die wir typischerweise sehen wollen (Temp, Volt, Hum etc. ) keinen Unterschied zu machen.

    Jedenfalls danke! Ich bin in PHP eine Niete.

    Neil

Ähnliche Themen

  1. Suche I/O Gerät auf IP-Basis
    Von UVoigi im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 7
    Letzter Beitrag: 07.10.14, 16:16
  2. RPCMobile Client auf Basis von Html5
    Von winston im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 11
    Letzter Beitrag: 13.02.13, 19:35
  3. Steuerung auf HTML-Basis ins WFE einbauen - wie?
    Von Raketenschnecke im Forum Skripte, PHP, SQL
    Antworten: 3
    Letzter Beitrag: 17.05.11, 19:37
  4. Welche Temperatursensoren auf Basis von 1-wire
    Von hrahlers im Forum 1-Wire, M-BUS
    Antworten: 2
    Letzter Beitrag: 17.05.10, 00:12

Stichworte