Index: trunk/FACT++/scripts/Main.js
===================================================================
--- trunk/FACT++/scripts/Main.js	(revision 15353)
+++ trunk/FACT++/scripts/Main.js	(revision 15354)
@@ -119,45 +119,20 @@
 {
     if (!evt.data)
-    {
-        this.last_inc = 0;
         return;
-    }
 
     var inc = evt.obj['incomplete'];
-    if (!inc)
-    {
-        this.last_inc = 0;
+    if (!inc || inc>0xffffffffff)
         return;
-    }
-
-    if (this.last_inc==inc)
+
+    if (incomplete>0)
         return;
 
+    if (dim.state("MCP").name!="TakingData")
+        return;
+
     incomplete = inc;
 
-    var reset = [ ];
-
-    for (var i=0; i<40; i++)
-        if (inc&(1<<i))
-        {
-            console.out("  FAD %2d".$(i)+" lost during data taking.");
-            reset.push(parseInt(i/10));
-        }
-
-    if (reset.length>10)
-        return;
-
-    dim.send("MCP/RESET");
-
-    reset = reset.filter(function(elem,pos){return reset.indexOf(elem)==pos;});
-
-    if (reset.length>0)
-    {
-        console.out("");
-        console.out("  FADs belong to crate(s): "+reset);
-        console.out("");
-    }
-
-    this.last_inc  = inc;
+    console.out("Sending MCP/STOP");
+    dim.send("MCP/STOP");
 }
 
@@ -241,4 +216,43 @@
 startrun.get(5000);
 
+function reconnect(list, txt)
+{ /*
+    var reset = [ ];
+
+    for (var i=0; i<list.length; i++)
+        {
+            console.out("  FAD %2d".$(list[i])+" lost during "+txt);
+            reset.push(parseInt(list[i]/10));
+        }
+
+    reset = reset.filter(function(elem,pos){return reset.indexOf(elem)==pos;});
+
+    console.out("");
+    console.out("  FADs belong to crate(s): "+reset);
+    console.out("");
+*/
+    console.out("");
+    console.out("Trying automatic reconnect ["+txt+"]...");
+
+    for (var i=0; i<list.length; i++)
+    {
+        console.out("   ...disconnect "+list[i]);
+        dim.send("FAD_CONTROL/DISCONNECT", list[i]);
+    }
+
+    console.out("   ...waiting for 5s");
+    v8.sleep(5000);
+
+    for (var i=0; i<list.length; i++)
+    {
+        console.out("   ...reconnect "+list[i]);
+        dim.send("FAD_CONTROL/CONNECT", list[i]);
+    }
+
+    console.out("   ...waiting for 1s");
+    v8.sleep(1000);
+    console.out("");
+}
+
 function takeRun(type, count, time)
 {
@@ -251,4 +265,5 @@
     console.out("  Take run %3d".$(nextrun)+": N="+count+" T="+time+"s ["+type+"]");
 
+    incomplete = 0;
     dim.send("MCP/START", time?time:-1, count?count:-1, type);
 
@@ -291,4 +306,5 @@
 
     // Here we could check and handle fad losses
+
     try
     {
@@ -320,4 +336,5 @@
         dim.wait("MCP",         "Idle",      3000);
 
+        /*** FOR REMOVE ***/
         var reset = [ ];
 
@@ -337,63 +354,41 @@
             console.out("");
         }
-
-        console.out("");
-        console.out("Trying automatic reconnect...");
-
+        /**** FOR REMOVE ****/
+
+        var list = [];
         for (var i=0; i<40; i++)
             if (stat[i]!=0x43)
-            {
-                console.out("   ...disconnect "+i);
-                dim.send("FAD_CONTROL/DISCONNECT", i);
-            }
-
-        console.out("   ...waiting for 5s");
-        v8.sleep(5000);
-
-        for (var i=0; i<40; i++)
-            if (stat[i]!=0x43)
-            {
-                console.out("   ...reconnect "+i);
-                dim.send("FAD_CONTROL/CONNECT", i);
-            }
-
-        console.out("   ...waiting for 1s");
-        v8.sleep(1000);
+                list.push(i);
+
+        reconnect(list, "configuration");
+
+        throw e;
+    }
+
+    dim.wait("MCP", "Idle", time>0 ? time*1250 : undefined); // run time plus 25%
+
+    if (incomplete)
+    {
+        console.out("Incomplete: "+incomplete);
+
         console.out("");
-
-        throw e;
-    }
-
-    dim.wait("MCP", "Idle", time>0 ? time*1250 : undefined); // run time plus 25%
-
-    console.out("debug: "+incomplete);
-
-    if (incomplete)
-    {
+        console.out("MCP:         "+dim.state("MCP").name);
+        console.out("FAD_CONTROL: "+dim.state("FAD_CONTROL").name);
+        console.out("FTM_CONTROL: "+dim.state("FTM_CONTROL").name);
         console.out("");
-        console.out("Trying automatic reconnect...");
-
+
+        dim.wait("MCP",         "Idle", 3000);
+        dim.wait("FTM_CONTROL", "Idle", 3000);
+
+        // Necessary to allow the disconnect, reconnect
+        dim.send("FAD_CONTROL/CLOSE_OPEN_FILES");
+        dim.wait("FAD_CONTROL", "Connected", 3000);
+
+        var list = [];
         for (var i=0; i<40; i++)
             if (incomplete&(1<<i))
-            {
-                console.out("   ...disconnect "+i);
-                dim.send("FAD_CONTROL/DISCONNECT", i);
-            }
-
-        console.out("   ...waiting for 5s");
-        v8.sleep(5000);
-
-        for (var i=0; i<40; i++)
-            if (incomplete&(1<<i))
-            {
-                console.out("   ...reconnect "+i);
-                dim.send("FAD_CONTROL/CONNECT", i);
-            }
-
-        console.out("   ...waiting for 1s");
-        v8.sleep(1000);
-        console.out("");
-
-        incomplete = 0;
+                list.push(i);
+
+        reconnect(list, "data taking");
 
         throw new Error("In-run FAD loss detected.");
@@ -425,6 +420,16 @@
         if (!takeRun("drs-pedestal", 1000))     // 40 / 20s     (50Hz)
             continue;
+
+        // Does that fix the runopen before runclose problem?
+        //dim.wait("FAD_CONTROL", "Connected", 3000);
+        //v8.sleep(1000);
+
         if (!takeRun("drs-gain",     1000))     // 40 / 20s     (50Hz)
             continue;
+
+        // Does that fix the runopen before runclose problem?
+        //dim.wait("FAD_CONTROL", "Connected", 3000);
+        //v8.sleep(1000);
+
         if (!takeRun("drs-pedestal", 1000))     // 40 / 20s     (50Hz)
             continue;
@@ -513,5 +518,5 @@
 
     this.voltageStep = null;
-    if (!evt.obj)
+    if (!evt.data)
         return;
 
@@ -726,4 +731,100 @@
 
 // ================================================================
+// Check datalogger subscriptions
+// ================================================================
+
+var datalogger_subscriptions = new Subscription("DATA_LOGGER/SUBSCRIPTIONS");
+datalogger_subscriptions.get(3000, false);
+
+datalogger_subscriptions.check = function()
+{
+    var obj = this.get();
+    if (!obj.data)
+        throw new Error("DATA_LOGGER/SUBSCRIPTIONS not available.");
+
+    var expected =
+        [
+         "BIAS_CONTROL/CURRENT",
+         "BIAS_CONTROL/DAC",
+         "BIAS_CONTROL/NOMINAL",
+         "BIAS_CONTROL/VOLTAGE",
+         "DRIVE_CONTROL/POINTING_POSITION",
+         "DRIVE_CONTROL/SOURCE_POSITION",
+         "DRIVE_CONTROL/STATUS",
+         "DRIVE_CONTROL/TRACKING_POSITION",
+         "FAD_CONTROL/CONNECTIONS",
+         "FAD_CONTROL/DAC",
+         "FAD_CONTROL/DNA",
+         "FAD_CONTROL/DRS_RUNS",
+         "FAD_CONTROL/EVENTS",
+         "FAD_CONTROL/FEEDBACK_DATA",
+         "FAD_CONTROL/FILE_FORMAT",
+         "FAD_CONTROL/FIRMWARE_VERSION",
+         "FAD_CONTROL/INCOMPLETE",
+         "FAD_CONTROL/PRESCALER",
+         "FAD_CONTROL/REFERENCE_CLOCK",
+         "FAD_CONTROL/REGION_OF_INTEREST",
+         "FAD_CONTROL/RUNS",
+         "FAD_CONTROL/RUN_NUMBER",
+         "FAD_CONTROL/START_RUN",
+         "FAD_CONTROL/STATISTICS1",
+         "FAD_CONTROL/STATISTICS2",
+         "FAD_CONTROL/STATS",
+         "FAD_CONTROL/STATUS",
+         "FAD_CONTROL/TEMPERATURE",
+         "FEEDBACK/CALIBRATED_CURRENTS",
+         "FEEDBACK/CALIBRATION",
+         "FEEDBACK/DEVIATION",
+         "FEEDBACK/REFERENCE",
+         "FSC_CONTROL/CURRENT",
+         "FSC_CONTROL/HUMIDITY",
+         "FSC_CONTROL/TEMPERATURE",
+         "FSC_CONTROL/VOLTAGE",
+         "FTM_CONTROL/COUNTER",
+         "FTM_CONTROL/DYNAMIC_DATA",
+         "FTM_CONTROL/ERROR",
+         "FTM_CONTROL/FTU_LIST",
+         "FTM_CONTROL/PASSPORT",
+         "FTM_CONTROL/STATIC_DATA",
+         "FTM_CONTROL/TRIGGER_RATES",
+         "LID_CONTROL/DATA",
+         "MAGIC_LIDAR/DATA",
+         "MAGIC_WEATHER/DATA",
+         "MCP/CONFIGURATION",
+         "PWR_CONTROL/DATA",
+         "RATE_CONTROL/THRESHOLD",
+         "RATE_SCAN/DATA",
+         "RATE_SCAN/PROCESS_DATA",
+         "TEMPERATURE/DATA",
+         "TIME_CHECK/OFFSET",
+         "TNG_WEATHER/DATA",
+         "TNG_WEATHER/DUST",
+        ];
+
+    function map(entry)
+    {
+        if (entry.length==0)
+            return undefined;
+
+        var rc = entry.split(',');
+        if (rc.length!=2)
+            throw new Error("Subscription list entry '"+entry+"' has wrong number of elements.");
+        return rc;
+    }
+
+    var list = obj.data.split('\n').map(map);
+
+    function check(name)
+    {
+        if (list.every(function(el){return el[0]!=name;}))
+            throw new Error("Subscription to '"+name+"' not available.");
+    }
+
+    expected.forEach(check);
+}
+
+
+
+// ================================================================
 // Crosscheck all states
 // ================================================================
@@ -835,5 +936,5 @@
     if (!was_up && sun.isUp)
     {
-        console.out("Sun rise detected.... automatic shutdown initiated!");
+        console.out("", "Sun rise detected.... automatic shutdown initiated!");
         // FIXME: State check?
         Shutdown();
@@ -887,4 +988,10 @@
     }
 
+    if (system_on===false && task!="STARTUP")
+    {
+        v8.sleep(1000);
+        continue;
+    }
+
     // Check if sun is still up... only DATA and RATESCAN must be suppressed
     if ((obs[sub].task=="DATA" || obs[sub].task=="RATESCAN") && sun.isUp)
@@ -897,13 +1004,8 @@
     }
 
-    if (system_on===false && task!="STARTUP")
-    {
-        v8.sleep(1000);
-        continue;
-    }
+    console.out("\n"+(new Date()).toUTCString()+": Current measurement: "+obs[sub]);
 
     var power_states = sun.isUp || system_on===false ? [ "DriveOff" ] : [ "SystemOn" ];
-
-    var drive_states = sun.isUp || system_on===false ? [ ] : [ "Armed", "Tracking", "OnTrack" ];
+    var drive_states = sun.isUp || system_on===false ?   undefined    : [ "Armed", "Tracking", "OnTrack" ];
 
     // A scheduled task was found, lets check if all servers are
@@ -917,4 +1019,5 @@
          [ "CHAT"          ],
          [ "SMART_FACT"    ],
+         [ "TEMPERATURE"   ],
          [ "DATA_LOGGER",     [ "NightlyFileOpen", "WaitForRun", "Logging" ] ],
          [ "FSC_CONTROL",     [ "Connected"                ] ],
@@ -922,5 +1025,5 @@
          [ "TIME_CHECK",      [ "Valid"                    ] ],
          [ "PWR_CONTROL",     power_states/*[ "SystemOn"                 ]*/ ],
-         [ "AGILENT_CONTROL", [ "VoltageOn"                ] ],
+//         [ "AGILENT_CONTROL", [ "VoltageOn"                ] ],
          [ "BIAS_CONTROL",    [ "VoltageOff", "VoltageOn", "Ramping" ] ],
          [ "FEEDBACK",        [ "CurrentControl", "CurrentCtrlIdle" ] ],
@@ -941,5 +1044,5 @@
     }
 
-    console.out("\n"+(new Date()).toUTCString()+": Current measurement: "+obs[sub]);
+    datalogger_subscriptions.check();
 
     // Check if obs.task is one of the one-time-tasks
Index: trunk/FACT++/scripts/MainClassic.js
===================================================================
--- trunk/FACT++/scripts/MainClassic.js	(revision 15353)
+++ trunk/FACT++/scripts/MainClassic.js	(revision 15354)
@@ -102,45 +102,20 @@
 {
     if (!evt.data)
-    {
-        this.last_inc = 0;
         return;
-    }
 
     var inc = evt.obj['incomplete'];
-    if (!inc)
-    {
-        this.last_inc = 0;
+    if (!inc || inc>0xffffffffff)
         return;
-    }
-
-    if (this.last_inc==inc)
+
+    if (incomplete>0)
         return;
 
+    if (dim.state("MCP").name!="TakingData")
+        return;
+
     incomplete = inc;
 
-    var reset = [ ];
-
-    for (var i=0; i<40; i++)
-        if (inc&(1<<i))
-        {
-            console.out("  FAD %2d".$(i)+" lost during data taking.");
-            reset.push(parseInt(i/10));
-        }
-
-    if (reset.length>10)
-        return;
-
-    dim.send("MCP/RESET");
-
-    reset = reset.filter(function(elem,pos){return reset.indexOf(elem)==pos;});
-
-    if (reset.length>0)
-    {
-        console.out("");
-        console.out("  FADs belong to crate(s): "+reset);
-        console.out("");
-    }
-
-    this.last_inc  = inc;
+    console.out("Sending MCP/STOP");
+    dim.send("MCP/STOP");
 }
 
@@ -224,4 +199,43 @@
 startrun.get(5000);
 
+function reconnect(list, txt)
+{ /*
+    var reset = [ ];
+
+    for (var i=0; i<list.length; i++)
+        {
+            console.out("  FAD %2d".$(list[i])+" lost during "+txt);
+            reset.push(parseInt(list[i]/10));
+        }
+
+    reset = reset.filter(function(elem,pos){return reset.indexOf(elem)==pos;});
+
+    console.out("");
+    console.out("  FADs belong to crate(s): "+reset);
+    console.out("");
+*/
+    console.out("");
+    console.out("Trying automatic reconnect ["+txt+"]...");
+
+    for (var i=0; i<list.length; i++)
+    {
+        console.out("   ...disconnect "+list[i]);
+        dim.send("FAD_CONTROL/DISCONNECT", list[i]);
+    }
+
+    console.out("   ...waiting for 5s");
+    v8.sleep(5000);
+
+    for (var i=0; i<list.length; i++)
+    {
+        console.out("   ...reconnect "+list[i]);
+        dim.send("FAD_CONTROL/CONNECT", list[i]);
+    }
+
+    console.out("   ...waiting for 1s");
+    v8.sleep(1000);
+    console.out("");
+}
+
 function takeRun(type, count, time)
 {
@@ -234,4 +248,5 @@
     console.out("  Take run %3d".$(nextrun)+": N="+count+" T="+time+"s ["+type+"]");
 
+    incomplete = 0;
     dim.send("MCP/START", time?time:-1, count?count:-1, type);
 
@@ -274,4 +289,5 @@
 
     // Here we could check and handle fad losses
+
     try
     {
@@ -303,4 +319,5 @@
         dim.wait("MCP",         "Idle",      3000);
 
+        /*** FOR REMOVE ***/
         var reset = [ ];
 
@@ -320,61 +337,41 @@
             console.out("");
         }
-
-        console.out("");
-        console.out("Trying automatic reconnect...");
-
+        /**** FOR REMOVE ****/
+
+        var list = [];
         for (var i=0; i<40; i++)
             if (stat[i]!=0x43)
-            {
-                console.out("   ...disconnect "+i);
-                dim.send("FAD_CONTROL/DISCONNECT", i);
-            }
-
-        console.out("   ...waiting for 5s");
-        v8.sleep(5000);
-
-        for (var i=0; i<40; i++)
-            if (stat[i]!=0x43)
-            {
-                console.out("   ...reconnect "+i);
-                dim.send("FAD_CONTROL/CONNECT", i);
-            }
-
-        console.out("   ...waiting for 1s");
-        v8.sleep(1000);
+                list.push(i);
+
+        reconnect(list, "configuration");
+
+        throw e;
+    }
+
+    dim.wait("MCP", "Idle", time>0 ? time*1250 : undefined); // run time plus 25%
+
+    if (incomplete)
+    {
+        console.out("Incomplete: "+incomplete);
+
         console.out("");
-
-        throw e;
-    }
-
-    dim.wait("MCP", "Idle", time>0 ? time*1250 : undefined); // run time plus 25%
-
-    if (incomplete)
-    {
+        console.out("MCP:         "+dim.state("MCP").name);
+        console.out("FAD_CONTROL: "+dim.state("FAD_CONTROL").name);
+        console.out("FTM_CONTROL: "+dim.state("FTM_CONTROL").name);
         console.out("");
-        console.out("Trying automatic reconnect...");
-
+
+        dim.wait("MCP",         "Idle", 3000);
+        dim.wait("FTM_CONTROL", "Idle", 3000);
+
+        // Necessary to allow the disconnect, reconnect
+        dim.send("FAD_CONTROL/CLOSE_OPEN_FILES");
+        dim.wait("FAD_CONTROL", "Connected", 3000);
+
+        var list = [];
         for (var i=0; i<40; i++)
             if (incomplete&(1<<i))
-            {
-                console.out("   ...disconnect "+i);
-                dim.send("FAD_CONTROL/DISCONNECT", i);
-            }
-
-        console.out("   ...waiting for 5s");
-        v8.sleep(5000);
-
-        for (var i=0; i<40; i++)
-            if (incomplete&(1<<i))
-            {
-                console.out("   ...reconnect "+i);
-                dim.send("FAD_CONTROL/CONNECT", i);
-            }
-
-        console.out("   ...waiting for 1s");
-        v8.sleep(1000);
-        console.out("");
-
-        incomplete = 0;
+                list.push(i);
+
+        reconnect(list, "data taking");
 
         throw new Error("In-run FAD loss detected.");
@@ -406,6 +403,16 @@
         if (!takeRun("drs-pedestal", 1000))     // 40 / 20s     (50Hz)
             continue;
+
+        // Does that fix the runopen before runclose problem?
+        //dim.wait("FAD_CONTROL", "Connected", 3000);
+        //v8.sleep(1000);
+
         if (!takeRun("drs-gain",     1000))     // 40 / 20s     (50Hz)
             continue;
+
+        // Does that fix the runopen before runclose problem?
+        //dim.wait("FAD_CONTROL", "Connected", 3000);
+        //v8.sleep(1000);
+
         if (!takeRun("drs-pedestal", 1000))     // 40 / 20s     (50Hz)
             continue;
@@ -494,5 +501,5 @@
 
     this.voltageStep = null;
-    if (!evt.obj)
+    if (!evt.data)
         return;
 
@@ -707,4 +714,100 @@
 
 // ================================================================
+// Check datalogger subscriptions
+// ================================================================
+
+var datalogger_subscriptions = new Subscription("DATA_LOGGER/SUBSCRIPTIONS");
+datalogger_subscriptions.get(3000, false);
+
+datalogger_subscriptions.check = function()
+{
+    var obj = this.get();
+    if (!obj.data)
+        throw new Error("DATA_LOGGER/SUBSCRIPTIONS not available.");
+
+    var expected =
+        [
+         "BIAS_CONTROL/CURRENT",
+         "BIAS_CONTROL/DAC",
+         "BIAS_CONTROL/NOMINAL",
+         "BIAS_CONTROL/VOLTAGE",
+         "DRIVE_CONTROL/POINTING_POSITION",
+         "DRIVE_CONTROL/SOURCE_POSITION",
+         "DRIVE_CONTROL/STATUS",
+         "DRIVE_CONTROL/TRACKING_POSITION",
+         "FAD_CONTROL/CONNECTIONS",
+         "FAD_CONTROL/DAC",
+         "FAD_CONTROL/DNA",
+         "FAD_CONTROL/DRS_RUNS",
+         "FAD_CONTROL/EVENTS",
+         "FAD_CONTROL/FEEDBACK_DATA",
+         "FAD_CONTROL/FILE_FORMAT",
+         "FAD_CONTROL/FIRMWARE_VERSION",
+         "FAD_CONTROL/INCOMPLETE",
+         "FAD_CONTROL/PRESCALER",
+         "FAD_CONTROL/REFERENCE_CLOCK",
+         "FAD_CONTROL/REGION_OF_INTEREST",
+         "FAD_CONTROL/RUNS",
+         "FAD_CONTROL/RUN_NUMBER",
+         "FAD_CONTROL/START_RUN",
+         "FAD_CONTROL/STATISTICS1",
+         "FAD_CONTROL/STATISTICS2",
+         "FAD_CONTROL/STATS",
+         "FAD_CONTROL/STATUS",
+         "FAD_CONTROL/TEMPERATURE",
+         "FEEDBACK/CALIBRATED_CURRENTS",
+         "FEEDBACK/CALIBRATION",
+         "FEEDBACK/DEVIATION",
+         "FEEDBACK/REFERENCE",
+         "FSC_CONTROL/CURRENT",
+         "FSC_CONTROL/HUMIDITY",
+         "FSC_CONTROL/TEMPERATURE",
+         "FSC_CONTROL/VOLTAGE",
+         "FTM_CONTROL/COUNTER",
+         "FTM_CONTROL/DYNAMIC_DATA",
+         "FTM_CONTROL/ERROR",
+         "FTM_CONTROL/FTU_LIST",
+         "FTM_CONTROL/PASSPORT",
+         "FTM_CONTROL/STATIC_DATA",
+         "FTM_CONTROL/TRIGGER_RATES",
+         "LID_CONTROL/DATA",
+         "MAGIC_LIDAR/DATA",
+         "MAGIC_WEATHER/DATA",
+         "MCP/CONFIGURATION",
+         "PWR_CONTROL/DATA",
+         "RATE_CONTROL/THRESHOLD",
+         "RATE_SCAN/DATA",
+         "RATE_SCAN/PROCESS_DATA",
+         "TEMPERATURE/DATA",
+         "TIME_CHECK/OFFSET",
+         "TNG_WEATHER/DATA",
+         "TNG_WEATHER/DUST",
+        ];
+
+    function map(entry)
+    {
+        if (entry.length==0)
+            return undefined;
+
+        var rc = entry.split(',');
+        if (rc.length!=2)
+            throw new Error("Subscription list entry '"+entry+"' has wrong number of elements.");
+        return rc;
+    }
+
+    var list = obj.data.split('\n').map(map);
+
+    function check(name)
+    {
+        if (list.every(function(el){return el[0]!=name;}))
+            throw new Error("Subscription to '"+name+"' not available.");
+    }
+
+    expected.forEach(check);
+}
+
+
+
+// ================================================================
 // Crosscheck all states
 // ================================================================
@@ -816,5 +919,5 @@
     if (!was_up && sun.isUp)
     {
-        console.out("Sun rise detected.... automatic shutdown initiated!");
+        console.out("", "Sun rise detected.... automatic shutdown initiated!");
         // FIXME: State check?
         Shutdown();
@@ -870,4 +973,10 @@
     var task = obs[sub].task;
 
+    if (system_on===false && task!="STARTUP")
+    {
+        v8.sleep(1000);
+        continue;
+    }
+
     // Check if sun is still up... only DATA and RATESCAN must be suppressed
     if ((task=="DATA" || task=="RATESCAN") && sun.isUp)
@@ -880,13 +989,8 @@
     }
 
-    if (system_on===false && task!="STARTUP")
-    {
-        v8.sleep(1000);
-        continue;
-    }
+    console.out("\n"+(new Date()).toUTCString()+": Current measurement: "+obs[sub]);
 
     var power_states = sun.isUp || system_on===false ? [ "DriveOff" ] : [ "SystemOn" ];
-
-    var drive_states = sun.isUp || system_on===false ? [ ] : [ "Armed", "Tracking", "OnTrack" ];
+    var drive_states = sun.isUp || system_on===false ?   undefined    : [ "Armed", "Tracking", "OnTrack" ];
 
     // A scheduled task was found, lets check if all servers are
@@ -900,4 +1004,5 @@
          [ "CHAT"          ],
          [ "SMART_FACT"    ],
+         [ "TEMPERATURE"   ],
          [ "DATA_LOGGER",     [ "NightlyFileOpen", "WaitForRun", "Logging" ] ],
          [ "FSC_CONTROL",     [ "Connected"                ] ],
@@ -905,5 +1010,5 @@
          [ "TIME_CHECK",      [ "Valid"                    ] ],
          [ "PWR_CONTROL",     power_states/*[ "SystemOn"                 ]*/ ],
-         [ "AGILENT_CONTROL", [ "VoltageOn"                ] ],
+//         [ "AGILENT_CONTROL", [ "VoltageOn"                ] ],
          [ "BIAS_CONTROL",    [ "VoltageOff", "VoltageOn", "Ramping" ] ],
          [ "FEEDBACK",        [ "CurrentControl", "CurrentCtrlIdle" ] ],
@@ -923,5 +1028,5 @@
     }
 
-    console.out("\n"+(new Date()).toUTCString()+": Current measurement: "+obs[sub]);
+    datalogger_subscriptions.check();
 
     // Check if obs.task is one of the one-time-tasks
