Sprint 7: Particle.publish() released! Let's build a cloud-connected motion detector

Dave is there an ETA for the “webhook” support?

My hope was to release it this sprint, but there are implications with regards to making sure we’re not spamming services, and wanting to be sure it’s robust. I would estimate it’ll be ready this next sprint.



Ahh… the 80/20 rule. The devil is in the details.

I wrote a Node.JS service a couple of weeks ago to post back to “webhooks” for our product at work that has similar throttling capability. Granted, it helps that the webhook destination is maybe 2 rows over in the data center, so it only takes a week for 200+ million records at 20 concurrent connections max.

We maintain a queue in a bigger database (Redis and/or MSSQL), re-fill the in-NodeJS-memory array queue when 10% of the max size is remaining, and simply cap the max concurrent connections (and can add necessary delays if needed). It’s pretty simple, but the raw power of NodeJS can easily cripple anything by accident. I accidentally filled up our dev server to -5GB free space of Apache logs by using it as a sink for testing purposes. Ooops.

1 Like

@zach it would be great to hear what is the best and recommended (and working) way to consume sse events from non-browser clients. In my case that is node.js - I’ve tried to use eventsource but it seems to not work. I have code up and running in the browser, but due to the access token being publicly in there that is not an option for me.


Perhaps I should have asked here instead?

Hi guys,

Two newbie questions here!

  1. In the opening post, where exactly is this printing stuff to?

    Serial.println(“Motion detected!”);

  2. What does the “*” before the text in the syntax examples below mean?

    Spark.publish(const char *eventName, const char *data);
    Spark.publish(String eventName, String data);

    Spark.publish(“temperature”, “19 F”);


  1. This will output to Serial or COM port on your machine

  2. * in programming refers to the pointer of the location of eventName :slight_smile:

1 Like

What is not immediately obvious to newcomers to the Spark and to the Arduino is that the Wiring programming language is C (or C++) with a few things bolted on to supposedly make things easier. A good C primer will help you no end. To answer your question try http://www.cs.bu.edu/teaching/c/string/intro/



2 questions from that link:

So, PrintLabel() could have been written in two ways:

void PrintLabel(char the_label[])
    printf("Label: %s\n", the_label);


void PrintLabel(char *the_label)
    printf("Label: %s\n", the_label);

In the second case above, there was no need to define the pointer earlier?

Furthermore, the only way to change the contents of an array in C is to make changes to each element in the array.

In other words, we can't do the following:
label = "new value";   /* No! */
label = anotherLabel;  /* Wrong! */

^ Does this hold true even for wiring? I can’t ‘overwrite’ new text into an existing string?


(Maybe the moderators want to split the last few posts into a “Newbie’s guide to pointers” type thread?)


At the underlying machine code level the usual way to refer to an array is to give the memory address of the first element in the array. C works at a level not far removed from machine code. But whatever language you use, underlying it all, you are right: to change an array you do it one element at a time. Some languages help you more than others but at least in C it is possible to work out exactly what is going on.

There are attempts to make string handling in Wiring easier and more intuitive using C++ classes such as the (capital-S) String class. Now, I don’t think they make anything easier that way, but that’s me, others may disagree. You might want to give it a try. http://docs.spark.io/firmware/#other-functions-string-class

Q1: Equivalent.
Q2: The parameters to a function are declared as local variables to the function. Each of your two functions compile down to the same code. Each declare the_label as a pointer to char. char *p and char p[] are equivalent.
Q3: strcpy(a, "somestring"); sets (=overwrites) the contents of array a [=sets the contents of a and subsequent memory locations] ending with the implied NUL char ‘\0’ at the end of “somestring”.

You can do the following:

char a[22];
char *s;

s = "new value";
/* set the contents of character pointer s to the address of the beginning of this constant string 
(the compiler puts the constant string in a special data area for you and sets label to point to it)
- nothing is changed, nothing is copied - a pointer is set */

s = "another string"; // s now points at another constant string
// and you can no longer reference the former string, although it is still there
// once again no string is changed or copied, only a pointer is set

strcpy( a, s); 
/* copy the char at address s to address a, advancing one char at a time, until nul '\0' is encountered
This time data is copied, the addresses are not changed */

s = a; // set the contents of character pointer s to the address of the 1st element of a 
a[4] = 'x' ; //note single quotes for char double for string - the 5th element of char array a is set to 'x'
// note that in changing a[4] we have also changed s[4] - they're the same. And s[4] is valid syntax!

Hi Zach,
Thanks for a great tut. but the link to see the code is not working, can you post it the code thanks

If you mean the code to the gist; The actual code is directly below it. If not, then could you please describe what code you’re looking for?

for the reply

Hello! :smile:

I am trying to do a similar thing with the ID-12 RFID reader. I would like to return the ID number of a tag to the cloud when the reader is presented with a tag. I have tried using this example, but i do not know what changes to make? (I am indeed very new do this)

Here is the layout of the ID-12 pins.

Cheers guys thanks !

Hi, I made a new post for this question here. I think you should be able to get more visibility this way.

Is it only me or are the images missing from the first posting in this thread? I just got my Particle Electron & was going to follow this to test the PIR that came with it as one of the sensors.

Particle.publish() now :wink:

I fixed the pictures if you’re still interested.

1 Like

Yes - still interested & used them to get my PIR circuit working. Thanks very much.

1 Like