NRF24L01 y emoncms

Hola a todos.
Hace tiempo que estoy liado con este transceptor. Para las pruebas tengo varios sensores de temperatura en red utilizando las librerias de maniacbug y ultimamente su version mejorada (GitHub - nRF24/RF24Network: OSI Layer 3 Networking for nRF24L01(+) Radios on Arduino and Raspberry Pi).
Funcionan muy bien y en el nodo 00 lo tengo como un datalogger con SD, lcd y rtc.
Esta reciente version mejorada de rf24network tambien tiene librerias para la raspi, asi que le conecte al gpio directamente un nrf24 y lance el ejemplo Hello World, que funciono de inmediato. Ya tenia mis arduinos hablando con la raspi.
El siguiente paso es tener el loggeo de los sensores en la web, por lo que monte en la raspi el emoncms de openenergymonitor ( http://emoncms.org), que me funciona sin problemas con comandos json.
En ese proyecto se usa un rfm12pi ( http://wiki.openenergymonitor.org/index.php?title=RFM12Pi_V2), que no es mas que un arduino con un rfm12 como transceptor que envia por serie uart los datos que recibe a la raspberry con el webserver emoncms, que los almacena y muestra.
Y aqui es donde me he atascado. He intentado emular el formato con el que el rfm12pi manda los datos por serie, pero mi raspi con emoncms recibe los datos que le mando por el nrf24l01 y no los reconoce.
Creo que el problema tiene que ver con que el rfm12pi manda los datos por el puerto serie uart (tx y rx) y mi nrf24l01 los manda por ICSP. Lo que quiero es que el printf que me muestra el nodo y los datos recibidos por pantalla en la raspi pueda dirigirse al puerto uart, para que emoncms crea que se los manda el rfm12pi.

Y aqui es donde me he atascado. He intentado emular el formato con el que el rfm12pi manda los datos por serie, pero mi raspi con emoncms recibe los datos que le mando por el nrf24l01 y no los reconoce.
Creo que el problema tiene que ver con que el rfm12pi manda los datos por el puerto serie uart (tx y rx) y mi nrf24l01 los manda por ICSP. Lo que quiero es que el printf que me muestra el nodo y los datos recibidos por pantalla en la raspi pueda dirigirse al puerto uart, para que emoncms crea que se los manda el rfm12pi.

O sea que el problema está en el Rasperri PI quien en definitiva envia los datos al emoncms
Ahora lo que esta mostrando son datos del rfm12pi (porque no pones como lo hace o qué le envía).
El nrf24L01 está en el raspi?
Qué haces con ellos, los muestras en pantalla?

Porque no haces un diagrama de como estan conectados cada modulo y que puertos intervienen, eso ayudaría.

Hola surbyte, gracias por tu interés.
Intentaré concretar mis dudas.
En el proyecto original, se usa un shield llamado RFM12pi que se conecta directamente al GPIO de la Raspi. Es un arduino con un transceptor RFM12 que recibe los datos del nodo sensor remoto y los trasmite por el puerto UART, donde el software de emoncms (PHP) escucha, procesa y graba los datos. El firm esta aquí:
https://github.com/openenergymonitor/RFM2Pi/blob/master/firmware/RF12_Demo_atmega328/RF12_Demo_atmega328.ino
A partir de la línea 255 se define la estructura de la cadena que se transmite por el serial (“ “nodo” “ payload) hacia la raspi.
Yo utilizo otro transceptor el NRF24L01, que lo conecto directamente (sin arduino de por medio) al GPIO de la Raspi (simplicidad y ahorro). Se conecta al puerto serie SPI (MISO, MOSI, SCK, CSN, CE, VCC y GND). Mis nodos sensores arduino con NRF24L01, mandan periódicamente una cadena con el numero de nodo y los datos de temperatura.
Con la librería RF24Network y un programa en C basado en helloworld_rx.cpp, veo sin problemas por la consola de la Raspi las cadenas transmitidas.
Pero como el software emoncms esta escuchando el puerto UART (ttyAMA0) y mis datos entran por el SPI (CE0), pues no los recibe.
Mi idea era, mediante comandos C, “redirigir” los datos del SPI al UART de la raspi para “engañar” a emoncms. Posiblemente sea más fácil modificar el emoncms, pero si de C se poco, de php nada.
Emoncms para raspberry: https://github.com/emoncms/raspberrypi

Saludos

Bien.. no se porque pero ahora te comprendo mejor aunque me explicaste lo mismo jajaja, el problema soy yo no tu.
Veamos.

Alternativa 1:
Porque no usa al RFM12pi para escuchar los nodos nRF24L01, se que suena engorroso pero podrías escuchar todo el trafico entre nodos y entonces si METER todo via UART al Raspi.
Esa es la solucion mas simple siempre y cuando tengas accesibles los pines SPI.
Ventajas: tendras todo ingresando por el mismo puerto serie del RFM12pi al RASPI.
Desventajas: agregar el código nRF24L01 aunque ya esta la librería y que este sea el master en lugar del RASPI.

Alternativa 2:
Lo que dijiste redirigir.
Si tuvieras dos seriales podrias hacer esto: Pero mirando el pinout veo que no. Aunque hay placas que expanden los seriales.
Tal vez no sea una buena idea.
Que el RFM12pi envie los datos a otro serial (serial 1, estas usando el 0), que obviamente vas a leer. Y ahora con los datos de 1 y lo que llega via SPI, puedes enviar todo por el serial restante a emoncms.

Alternativa 3 :
Es la que vos sugeríste. Moficar el código de Raspi para que reenvie via UART los datos recibidos por el SPI.
Esta es la mas simple.
Si vas a un foro Raspi yo creo que te lo resuelven inmediatamente.
Muestrales como es el protocolo RFM12pi y por ahi estará la solucion.
El foro de www.openenergymonitor.org también es buen candidato.
Pero no hago mas que repetir, solo que encausaría mi consultas por ahi.