Skip to content

Instantly share code, notes, and snippets.

@hardillb
Last active December 12, 2015 12:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hardillb/4769885 to your computer and use it in GitHub Desktop.
Save hardillb/4769885 to your computer and use it in GitHub Desktop.
Set the RGB values for Blink(1)/Digispark+RGB according to the time to the next meeting in your Lotus Notes Calendar. Moving from green at 20min (or more) to red in the last 5 mins before a meeting. The light turns blue for the duration of the meeting.
package uk.me.hardill.notes;
/**
* NextCalEntry
*
* Sets the RGB values for Blink(1)/Digispark+RGB
* according to the time to the next meeting in
* your Lotus Notes Calendar
*
* This should be run with the JRE that ships with
* Lotus notes as it has the required classes on
* classpath and have Lotus notes directory on
* library path e.g.
* LD_LIBRARY_PATH=/opt/ibm/lotus/notes
* /opt/ibm/lotus/notes/jvm/bin/java NextCalEntry -d
*/
import java.text.SimpleDateFormat;
import java.util.Date;
import lotus.domino.Database;
import lotus.domino.DateTime;
import lotus.domino.DbDirectory;
import lotus.domino.Document;
import lotus.domino.NotesFactory;
import lotus.domino.NotesThread;
import lotus.domino.Session;
import lotus.domino.View;
import lotus.domino.ViewEntry;
import lotus.domino.ViewEntryCollection;
public class NextCalEntry extends NotesThread {
static SimpleDateFormat dateFormat = new SimpleDateFormat(
"dd/MM/yy H:m:s z");
static int rgb[] = { 0, 200, 0 };
static int pollInterval = 300;
static boolean mqtt = false;
static String topic = "";
static boolean digi = true;
public static void main(String argv[]) {
for (int i = 0; i < argv.length; i++) {
if (argv[i].equals("-b")) {
} else if (argv[i].equals("-d")) {
} else if (argv[i].equals("-t")) {
mqtt = true;
topic = argv[++i];
}
}
NextCalEntry nextCalEntry = new NextCalEntry();
nextCalEntry.start();
}
public void runNotes() {
try {
Session s = NotesFactory.createSession();
DbDirectory dir = s.getDbDirectory(null);
Database db = dir.getFirstDatabase(DbDirectory.DATABASE);
db = dir.openMailDatabase();
if (db.isOpen() == false)
db.open();
db = dir.openMailDatabase();
View calendarView = db.getView("($Calendar)");
DateTime sdt = s.createDateTime("today");
sdt.setNow();
DateTime edt = s.createDateTime("today");
edt.setNow();
edt.adjustDay(+1);
ViewEntryCollection vec = calendarView.getAllEntries();
ViewEntry entry = vec.getFirstEntry();
int offset = 3600;
boolean poisonPill = false;
while (entry != null) {
Document caldoc = entry.getDocument();
String sub = caldoc.getItemValueString("Subject");
DateTime startDate = null;
try {
startDate = (DateTime) caldoc.getItemValueDateTimeArray(
"StartDate").firstElement();
} catch (Exception e) {
}
if (startDate != null) {
for (int i = 0; i < caldoc.getItemValueDateTimeArray(
"StartDateTime").size(); i++) {
int st = sdt.timeDifference((DateTime) caldoc
.getItemValueDateTimeArray("StartDateTime")
.get(i));
int en = edt.timeDifference((DateTime) caldoc
.getItemValueDateTimeArray("EndDateTime")
.get(i));
Date start = dateFormat.parse(caldoc
.getItemValueDateTimeArray("StartDateTime")
.get(i).toString());
Date end = dateFormat.parse(caldoc
.getItemValueDateTimeArray("EndDateTime")
.get(i).toString());
Date now = new Date();
if ((st <= 0) & (en >= 0)) {
if ((-1 * st) < offset) {
offset = (-1 * st);
}
} else if (now.after(start) && now.before(end)) {
offset = -1;
poisonPill = true;
break;
}
}
}
if (poisonPill) {
break;
}
entry = vec.getNextEntry();
}
if (offset > 0 && offset <= 300) {
// red
rgb[0] = 20;
rgb[1] = 0;
rgb[2] = 0;
} else if (offset > 300 && offset <= 600) {
// redish
rgb[0] = 15;
rgb[1] = 5;
rgb[2] = 0;
} else if (offset > 600 && offset <= 900) {
// greenish/redish
rgb[0] = 10;
rgb[1] = 10;
rgb[2] = 0;
} else if (offset > 900 && offset <= 1200) {
// greenish
rgb[0] = 5;
rgb[1] = 15;
rgb[2] = 0;
} else if (offset == -1) {
// blue
rgb[0] = 0;
rgb[1] = 0;
rgb[2] = 20;
} else {
// green
rgb[0] = 0;
rgb[1] = 20;
rgb[2] = 0;
}
if (mqtt) {
// TODO
// connect to broker and publish
} else {
Runtime runtime = Runtime.getRuntime();
String cmd[];
if (digi) {
System.out.println(rgb[0] + " " + rgb[1] + " " + rgb[2]);
cmd = new String[4];
cmd[0] = "DigiRGB.py";
cmd[1] = rgb[0] + "";
cmd[2] = rgb[1] + "";
cmd[3] = rgb[2] + "";
} else {
System.out.println(rgb[0] + "," + rgb[1] + "," + rgb[2]);
cmd = new String[3];
cmd[0] = "blink1-tool";
cmd[1] = "--rgb";
cmd[2] = rgb[0] + "," + rgb[1] + "," + rgb[2];
}
Process proc = runtime.exec(cmd);
proc.waitFor();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment