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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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