My tech leader on RHIoT project (ex-camellabs) Henryk had just release the last version of RHIoT project : 0.1.2. Lot of new stuffs are included in this new release, more details available here. I found in list a cool stuff to test. We gonna check if our new commiter @levackt from ZA worked well ;-)

Webcam camel component on Mac OSX with Groovy language

Let’s start to broadcast yourself.

Requisites

  • Have a mac
  • tested MacBook Pro Retina, 13-inch, Mid 2014
  • Groovy Mac port installed
  • Groovy Version: 2.4.4 JVM: 1.8.0_45 Vendor: Oracle Corporation OS: Mac OS X

Program

We gonna use Groovy language for this simple example

The key point of this program are :

  • the @Grab annotation to download camel-webcam component : @Grab(group=“io.rhiot”,module=“camel-webcam”,version=“0.1.2”)
  • the from command to capture image every second : from(“webcam:cam?consumer.delay=1000”)

Copy log4j.properties into the same directory

Execution

Let’s run it now

[mbp:~/Source/tmp/io/rhiot/test]$> groovy MyRouteBuilder.groovy
[         main] MainSupport                    INFO  Apache Camel 2.16.0 starting
[         main] DefaultCamelContext            INFO  Apache Camel 2.16.0 (CamelContext: camel-1) is starting
[         main] ManagedManagementStrategy      INFO  JMX is enabled
[         main] DefaultTypeConverter           INFO  Loaded 182 type converters
[         main] DefaultRuntimeEndpointRegistry INFO  Runtime endpoint registry is in extended mode gathering usage statistics of all incoming and outgoing endpoints (cache limit: 1000)
[         main] WebcamEndpoint                 WARN  Driver not supported
[         main] Webcam                         INFO  WebcamDefaultDriver capture driver will be used
[            atomic-processor-1] WebcamOpenTask                 INFO  Opening webcam FaceTime HD Camera CC242951XGLF6VVD4
[         main] DefaultCamelContext            INFO  AllowUseOriginalMessage is enabled. If access to the original message is not needed, then its recommended to turn this option off as it may improve performance.
[         main] DefaultCamelContext            INFO  StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
[         main] DefaultCamelContext            INFO  Route: route1 started and consuming from: Endpoint[webcam://cam?consumer.delay=1000]
[         main] DefaultCamelContext            INFO  Total 1 routes, of which 1 is started.
[         main] DefaultCamelContext            INFO  Apache Camel 2.16.0 (CamelContext: camel-1) started in 1.754 seconds
[         main] MainSupport                    INFO  Waiting for: 5 SECONDS
[el-1) thread #0 - webcam://cam] rhiot         INFO  Exchange[Id: ID-mbp-g-a-net-50581-1445506480782-0-2, ExchangePattern: OutOnly, Properties: {CamelCreatedTimestamp=Thu Oct 22 11:34:43 CEST 2015, CamelMessageHistory=[DefaultMessageHistory[routeId=route1, node=to1]], CamelToEndpoint=log://io.rhiot?showAll=true}, Headers: {breadcrumbId=ID-mbp-g-a-net-50581-1445506480782-0-1, CamelFileName=ID-mbp-g-a-net-50581-1445506480782-IHDR@�O*<�IDATx�ܽg�m�Y�~� DKj��[j����0��X6�c3�60�=06�A ux�^媛sNus�9V�W/����
   ....................  OMIT ....................
       �����o�ů~�O~
       ���...]
^[[?1;2c[el-1) thread #0 - webcam://cam] rhiot INFO  Exchange[Id: ID-mbp-g-a-net-50581-1445506480782-0-4, ExchangePattern: OutOnly, Properties: {CamelCreatedTimestamp=Thu Oct 22 11:34:45 CEST 2015, CamelMessageHistory=[DefaultMessageHistory[routeId=route1, node=to1]], CamelToEndpoint=log://io.rhiot?showAll=true}, Headers: {breadcrumbId=ID-mbp-g-a-net-50581-1445506480782-0-3, CamelFileName=ID-mbp-g-a-net-50581-144550�mcL;J�n��ܜ�'�|�=7�J*UI��$����<�}����=kf��t#����{n�����~�k��]+�
  ....................  OMIT ....................
                    w�������7صv�HK��z�Y��F¤1�a�i�6͑̀��s�����Z1&���#*�L�%�1s,4
[el-1) thread #0 - webcam://cam] rhiot         INFO  Exchange[Id: ID-mbp-g-a-net-50581-1445506480782-0-6, ExchangePattern: OutOnly, Properties: {CamelCreatedTimestamp=Thu Oct 22 11:34:46 CEST 2015, CamelMessageHistory=[DefaultMessageHistory[routeId=route1, node=to1]], CamelToEndpoint=log://io.rhiot?showAll=true}, Headers: {breadcrumbId=ID-mbp-g-a-net-50581-1445506480782-0-5, CamelFileName=ID-mbp-g-a-net-50581-1445506480782-IHDR@�O*<�IDATx�ܽw���yߋ�l�$�$�"�

....................  OMIT ....................


[��W�jCe����+��m����n�?�_���<�ƺ���ftXZ�3������{]�l���Z�c�ZG...]

[el-1) thread #0 - webcam://cam] rhiot         INFO  Exchange[Id: ID-mbp-g-a-net-50581-1445506480782-0-8, ExchangePattern: OutOnly, Properties: {CamelCreatedTimestamp=Thu Oct 22 11:34:47 CEST 2015, CamelMessageHistory=[DefaultMessageHistory[routeId=route1, node=to1]], CamelToEndpoint=log://io.rhiot?showAll=true}, Headers: {breadcrumbId=ID-mbp-g-a-net-50581-1445506480782-0-7,

  ....................  OMIT ....................

  CamelFileName=ID-mbp-g-a-net-50581-1445506480782-IHDR@�O*<�IDATx�ܽy��gy%��2], Body�
[         main] MainSupport                    INFO  Apache Camel 2.16.0 stopping
[         main] DefaultCamelContext            INFO  Apache Camel 2.16.0 (CamelContext: camel-1) is shutting down
[         main] DefaultShutdownStrategy        INFO  Starting to graceful shutdown 1 routes (timeout 300 seconds)
[el-1) thread #1 - ShutdownTask] DefaultShutdownStrategy        INFO  Route: route1 shutdown complete, was consuming from: Endpoint[webcam://cam?consumer.delay=1000]
[         main] DefaultShutdownStrategy        INFO  Graceful shutdown of 1 routes completed in 0 seconds
[            atomic-processor-1] WebcamCloseTask                INFO  Closing FaceTime HD Camera CC242951XGLF6VVD4
[         main] DefaultCamelContext            INFO  Apache Camel 2.16.0 (CamelContext: camel-1) uptime 6.833 seconds
[         main] DefaultCamelContext            INFO  Apache Camel 2.16.0 (CamelContext: camel-1) is shutdown in 0.070 seconds
[     Thread-1] MainSupport$HangupInterceptor  INFO  Received hang up - stopping the main instance.
[mbp:~/Source/tmp/io/rhiot/test]$>

And the result

After 5s of running, you can find all images into webcam directory

Conclusion

With this small example, we can see the power of camel and the integration with hardware component managed via Rhiot project. Just imagine a camel including both webcam and websocket components. I would like thanks a lot Taariq Levack for this so cool component ;-). I’m sure he will provide some new cool stuff like this one soon.