serial reading


  • Hero Member

    Hello,

    I've managed to make my first emaitter/receptor !

    Now I'm trying to read from the serial port on the controller and get

    0;0;4;11;Message available on pipe 1
    0;0;4;11;Sent ack msg to 255
    0;0;4;11;Rx: fr=255,to=0,la=255,ci=255,mt=4,t=5,cr=136(ok):
    255;255;4;5;

    serial api documentation says the message is "radioId;childId;messageType;subType;payload\n", but I can't match them all given the sensor is an humidity DHT11.

    in a perl script reading the serial interface I get only "255 255 4 5", not the last value, any clue ?


  • Hero Member

    I restarted both, it seems the sensor can't get an id

    Sensor:

    Started sensor. 0 0 0 0
    Relay=0, distance=1 0 0 0 0
    No radio id found in EEPROM fetching one 0 0 0 0
    from sensor net gateway
    Relaying message back to gateway.
    Tx: fr=255,to=0,la=255,ne=0,ci=255,mt=4,ty=5,cr=136:
    Ack: received OK
    Relaying message back to gateway.
    Tx: fr=255,to=0,la=255,ne=0,ci=255,mt=4,ty=5,cr=136:
    Ack: received OK

    Gateway:
    0;0;4;11;Arduino startup complete.
    0;0;4;11;Message available on pipe 1
    0;0;4;11;Sent ack msg to 255
    0;0;4;11;Rx: fr=255,to=0,la=255,ci=255,mt=4,t=5,cr=136(ok):
    0;0;4;11;Message available on pipe 1
    0;0;4;11;Sent ack msg to 255
    0;0;4;11;Rx: fr=255,to=0,la=255,ci=255,mt=4,t=5,cr=136(ok):

    any hint why the gateway doesn't answer ?


  • Hero Member

    other point: I have the external antenna... and tried the gw.begin(AUTO, RF24_PA_LOW) but I get:

    SerialGateway.ino: In function ‘void setup()’:
    SerialGateway:50: error: invalid conversion from ‘int’ to ‘rf24_pa_dbm_e’
    SerialGateway:50: error: initializing argument 1 of ‘void Gateway::begin(rf24_pa_dbm_e, uint8_t, rf24_datarate_e, void ()(char))’

    any hint ?

    I've moved to a standard emitter, same issue as above



  • 225;255;4;5 is the first message sent from a node at startup if it hasn't a RADIO_ID in it's EEPROM.
    255 is the startup ID
    255 is node or the arduino it self.
    4 is internal message
    5 is I_REQUEST_ID

    The node expect to get a
    255;255:4;5;<RAIDO_ID_THAT_YOU_WANT_TO_ASSIGN_TO_THE_NODE>

    It's an automated way to assign RADIO_ID from the controller. usally a Vera or in your case your perl script needs to do that.

    Or if I rember correctly you can set the RAIDO_ID in the arduion when compiling the code:
    change in the .ino file.
    sensors.begin();
    to
    sensors.begin(<RAIDO_ID_THAT_YOU_WANT_TO_ASSIGN_TO_THE_NODE>);

    To decode the messages sent to and from a node check the tables in http://www.mysensors.org/build/sensor_api#the-serial-protocol

    /WB


  • Hero Member

    Hello,

    Thanks for your answer, this is what I thought but I don't understand why it can't get the node from the gateway ? I flashed it again but with no more success.

    The correct method is gw.begin(1) in my case.

    Now it answers with all the presentation, but get stuck in sending mesurement unit:

    0;0;4;11;Rx: fr=1,to=0,la=1,ci=255,mt=4,t=13,cr=73(ok):


  • Hero Member

    it looks like the gateway never answers, any hint ? bad wiring ? other issue ?


  • Hero Member

    similar issue here, I regroup it:

    link text


  • Admin

    Controller normally answer the unit setting requests from sensor. You have to answer manually (or from your perl program).

    Check the Troubleshooting section on our website if you're unable to communicate.


  • Hero Member

    @hek right, I've not read thoroughly what @wannabee told me about who sets the ID. I'll know it for the next time.

    Should I answer also for the metric ?

    I have a strange behavior having commented out the metric line although they are close::

    0;0;4;11;Relaying message back to gateway.
    0;0;4;11;Tx: fr=0,to=0,la=0,ne=0,ci=255,mt=4,ty=13,cr=52:
    0;0;4;11;Ack: receive timeout



  • You perl program needs to tell the arudion Gateway if it Imperial or Metric it should you for it's number. The gateway will forward that information to the node

    Here is post where I explain how it works.
    http://forum.mysensors.org/topic/62/#315

    Basicly the arduion gatweway don't controll high level stuff. It only controlls the low level stuff. the raido communication.

    Your perl program needs to do all the higlevel stuff like responed to request from the network about raido_id, metric system, storing the data,etc. This is what the vera does. you are replacing the vera with your program so now you have to do all the stuff. a quick way forward is to translate https://github.com/mysensors/Vera/blob/master/L_Arduino.lua to perl. You have to build some more function since the Vera is doing stuff like storing data and configuration hat is not in the lua-file.

    This is what I have done in python see https://github.com/wbcode/ham and it transform the mysensor api to/from openhab api.

    /WB


  • Hero Member

    perfect, this is what I was searching for...

    I'm too much accustomed to RFX433 or z-Wave that handles many things themself, I now understand that only the basic is here.

    I can read easily lua, logic can be simple, afterward I have my scripts, in fact I thought of doing the bidirectionnal integration with domoticz and/or cosm/xively for I've got already many of it. For the first, I guess some local logic must be implemented, discovered devices can be created through JSON, and then updated/queried as you already know, so the glue is possible 😉



  • @epierre +1 for Domoticz integration

    Do you want to make gateway working in the same way as RFX433?


  • Hero Member

    @jendrush could be a possibility... but to have it exaclty the same, the gateway should do all the work meaning push when a new node is discovered, give all values... the whole vera programm should be built inside the arduino... I don't know how it would fit, but in the meantime some outside scripts can do it.


  • Hero Member

    @wannabee I'm desesperatly (as a newbee ) trying to send the message back, but it doesn't seem to work with

    echo -en '1;255;4;13;M' > /dev/ttyUSB0

    any idea ? my script doesn't seem to write too, strange...


  • Admin

    @epierre

    Don't forget the newline character.


  • Hero Member

    @hek right the -n option removed newline, but I have still the same behavior. Can both gateway and sensors on the same machine usb port make a difference in this ?

    So this one should be good, but no behavior change (same when writing from perl to the port):

    echo -e '1;255;4;13;M' > /dev/ttyUSB0

    does reading through perl locks it ? well I'm new on this ...


  • Hero Member

    Looks like one got to the sensor:

    Sent ack msg to 0 0 0 0 0
    Rx: fr=0,to=1,la=0,ci=255,mt=4,t=13,cr=57(ok): M 0 0 0 0
    Message addressed for this node. 0 0 0 0
    675 Relaying message back to gateway.
    Tx: fr=1,to=0,la=1,ne=0,ci=1,mt=1,ty=0,cr=216: 20.0

    Relaying message back to gateway. 0 0 0 0
    Tx: fr=1,to=0,la=1,ne=0,ci=1,mt=1,ty=0,cr=216: 20.0 0 0 0 0
    676 Ack: received OK
    T: 20.00
    Relaying message back to gateway.
    Tx: fr=1,to=0,la=1,ne=0,ci=0,mt=1,ty=1,cr=162: 56.0
    Ack: received OK
    H: 56.00

    Relaying message back to gateway. 0 0 0 0
    Tx: fr=1,to=0,la=1,ne=0,ci=1,mt=1,ty=0,cr=216: 20.0 0 0 0 0
    676 Ack: received OK
    T: 20.00

    Relaying message back to gateway.
    Tx: fr=1,to=0,la=1,ne=0,ci=0,mt=1,ty=1,cr=162: 56.0
    Ack: received OK
    H: 56.00

    707 Relaying message back to gateway.
    Tx: fr=1,to=0,la=1,ne=0,ci=0,mt=1,ty=1,cr=84: 55.0
    Ack: receive timeout
    H: 55.00

    Relaying message back to gateway. 0 0 0 0
    Tx: fr=1,to=0,la=1,ne=0,ci=0,mt=1,ty=1,cr=84: 55.0 0 0 0 0
    Ack: receive timeout 0 0 0 0
    H: 55.00 0 0 0 0

    then nothing...

    I unplugged the node, plugged it back and it is asking again the metric...


  • Hero Member

    This post is deleted!

  • Hero Member

    I'm getting closer, since I launched the arduino console log my scripts works, and is able so write back the answer...

    Starting
    1 255 0 17 1.3b3 (67f4ca1)
    1 255 4 7 0
    1 255 4 14 Humidity
    1 255 4 15 1.0
    1 255 4 13 0
    W : 1;255;4;13;M
    1 1 1 0 21.0
    1 0 1 1 52.0

    looks like it is sleeping forever ?


  • Hero Member

    Hello,

    Looks like it's good, in one hour I've had 12 metering values, given I modified the timer in the sensor to 10 instead of 30. It is reporting only changed values which is smart (should be documented, extra value !)

    1 1 1 0 21.0
    1 0 1 1 52.0
    1 0 1 1 53.0
    1 0 1 1 54.0
    1 1 1 0 20.0
    1 1 1 0 21.0
    1 1 1 0 20.0
    1 0 1 1 55.0
    1 0 1 1 54.0
    1 0 1 1 55.0
    1 0 1 1 54.0
    1 0 1 1 55.0
    1 1 1 0 21.0


  • Hero Member

    well... I tried to replicate this on a cubitruck2 (IBOX), does not work...

    I did on the i5 a test to see conf of usb port that works with:

    stty -F /dev/ttyUSB1
    speed 115200 baud; line = 0;
    kill = ^H; min = 0; time = 0;
    ignbrk -brkint -icrnl -imaxbel
    -opost -onlcr
    -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

    I tried to replicate it to the cubie:
    stty -F /dev/ttyUSB1 cs8 115200 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke -ixon -crtscts kill ^H min 0

    but still nothing... any idea ?


  • Hero Member

    my bad, wrong reading script... works straight with the above parameters, should check if it works without... well no arduino ide run before it works for me now, I'm a bit farther than the arduino.cc forum 😉


  • Hero Member

    Hello,

    Works like a charm, I now receive the DHT11 values and I am able to post it to a (now) static node in domoticz (could be used for every system with a json posting interface).

    This is where it can be tricky, you need both Temp and Humidity to report, so I have to wait to have them both in memory to push a report.

    I expect to use a sqlite3 database locally to handle the last known value and the status/association of a node and its device. Doing so requires that either I handle all in a conf file, or that creation of device are driven by the script which I can handle too (maybe specific to domoticz).



  • I have little success too. I modified some code from other project, and now i can report temperatures(DS18B20), temperatures + humidity(DHT22), motion sensor to Domoticz. Today i will try to handle turning on, and off a switch, and also i am planning to modify relay code to handle my wireless 433MHz wall plugs to work as normal relay. Next time maybe reading status of power meter? But in this case i see a problem - how to read last value of acumulated energy from Domoticz? Now some information about solution. Serial gateway is connected to Raspberry Pi(Domoticz), and there is Node.js script. Script can read, and send messages through serial, and post links to Domoticz by JSON.




  • Contest Winner

    @jendrush

    very nice!



  • Now i am lack of arduinos, DHT22 is connected directly to atmega on breadboard:) Maybe i recieve this week few of 4 i've ordered lately.

    I have one Stellaris launchpad, someone tried to make it work with mysensors? 🙂


  • Admin

    👍


  • Hero Member

    @jendrush you can see from my Xively script how to do it: http://www.domoticz.com/wiki/Perl_for_Domoticz#Pachube_.2F_Cosm_.2F_Xively, in short you get all the nodes, you aprse the one you need, and you get the data field, first one is instant, second cumulated separated by a semicolon (";").

    To push data, please see http://www.domoticz.com/wiki/Domoticz_API/JSON_URL's#Electric.28Instant_and_Counter.29, I updated it recently.

    BTW, as you can see in the first script, I post all my values to Xyvely/COSM/Pachube... but this is another story for I made modification yesterday and I've not reported them to the wiki yet.


  • Hero Member

    Ok so today I've added a conf file reading, and started to work on the database model (hardware-device-sensor) in sqlite3 to keep track of last known value and last affected sensor id. This speeds up the whole thing at startup.

    Next step is to store all devices data in the table, and update them whenever they are received.

    Afterward, I'll try creating a new sensor automatically, and then try to extend it to other sensors type.

    If anyone is interrested in trying it (very beta yet...)...



  • @epierre I wish to see the code:)


  • Hero Member

    Hello,

    This is very alpha, it handles only one node with id=1 till I manage the sqlite3 database fully (data model is not right yet...).
    mysensors-gw.pl : main file, reader, tested only with DHT11 Temp+Humidity
    .conf-mysensors : conf file to set serial port, domoticz IP/PORT, hardware device (for future virtual sensors creation, I prefer to leave it configurable by now)

    github repository

    You will need those packages:
    sudo apt-get install libdevice-serialport-perl libdatetime-perl libdbd-sqlite3-perl libdbi-perl sqlite3 libjson-perl libfile-slurp-unicode-perl libwww-perl libconfig-simple-perl

    Discussion:

    • What I need to see is how to handle existing nodes that wouldn't be in the database, I thought of a config file ? In RFX433 devices, when you change the battery, it resets all ... painfull... here I would like to avoid this situation but this will be complicated without a GUI.
    • Other point, to send orders, I would need to have some JSON API, or a script that is called from the DZ to interract with the sensors. the Gateway.py from @wannabee does it.
    • I will try maybe to implement the same conf file than @wanabee link text for he has identified the same issues as me, meaning all mapping of a sensor will be done in the conf file (see wiki)


  • @epierre I will try to use MySQL with my project.


  • Hero Member

    @jendrush mysql is only a small conf change (replace dbi:SQLite:dbname=mysensors.db by DBI:mysql:database=$database;host=$hostname;port=$port 😉


 

243
Online

8.2k
Users

9.1k
Topics

96.6k
Posts