Skip to content
Commits on Source (2)
......@@ -10,7 +10,6 @@ from flask import request
# Custom modules
from config import constants
from .baseresource import ResourceDev
from .sequencer_instance import seq
......@@ -44,14 +43,15 @@ class FrameBinning(ResourceDev):
class Cooler(ResourceDev):
"""Manage the CCD cooler status"""
# def get(self):
# """Check wether the CCD cooler is on or off."""
# res = {
# "response": self.dev.cooler,
# "error": self.dev.error,
# "timestamp": self.timestamp,
# }
# return res
def get(self):
"""Check wether the CCD cooler is on or off."""
res = {
"raw": self.dev.cooler,
"response": constants.on_off[self.dev.cooler],
"error": self.dev.error,
"timestamp": self.timestamp,
}
return res
def put(self):
"""Set on or off the CCD cooler."""
......@@ -139,7 +139,8 @@ class Filter(ResourceDev):
def get(self):
"""Retrieve the current filter."""
res = {
"response": self.dev.filter,
"raw": self.dev.filter,
"response": constants.filter_name[self.dev.filter],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......@@ -153,7 +154,8 @@ class FilterMovement(ResourceDev):
def get(self):
"""Check if the filter wheel is moving."""
res = {
"response": self.dev.is_moving,
"raw": self.dev.is_moving,
"response": constants.filter_state[self.dev.is_moving],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......@@ -310,8 +312,9 @@ class SnapshotState(ResourceDev):
def get(self):
"""Retrieve the status of the acquisition process."""
res = {
"response": self.dev.state,
res = {
"raw": self.dev.state,
"response": constants.camera_state[self.dev.state],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......
......@@ -6,6 +6,8 @@
# Third-party modules
from flask import request
# Custom modules
from config import constants
from .baseresource import ResourceDev
......@@ -17,9 +19,10 @@ class Position(ResourceDev):
'''Check the azimuth of the dome, and if
this corresponds to the parking position.'''
res = {
"raw": self.dev.is_parked,
"response": {
"azimuth": self.dev.azimuth,
"parked": self.dev.is_parked,
"parked": constants.yes_no[self.dev.is_parked],
},
"error": self.dev.error,
"timestamp": self.timestamp,
......@@ -34,13 +37,13 @@ class Shutter(ResourceDev):
def get(self):
'''Check the state of the dome shutter.'''
res = {
"response": self.dev.shutter,
"raw": self.dev.shutter,
"response": constants.open_state[self.dev.shutter],
"error": self.dev.error,
"timestamp": self.timestamp,
}
return res
# @api.route("/shutter/movement")
class ShutterMovement(ResourceDev):
'''Manage the movement of the dome shutter.'''
......@@ -51,7 +54,8 @@ class ShutterMovement(ResourceDev):
target = request.json
self.dev.open = target
res = {
"response": self.dev.open,
"raw": self.dev.open,
"response": constants.open_state[self.open],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......@@ -76,7 +80,8 @@ class PositionSlaved(ResourceDev):
'''Check if the dome is slaved
to the telescope or not.'''
res = {
"response": self.dev.slave,
"raw": self.dev.slave,
"response": constants.yes_no[self.dev.slave],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......@@ -88,7 +93,8 @@ class PositionSlaved(ResourceDev):
slaved = request.json
self.dev.slave = slaved
res = {
"response": self.dev.slave,
"raw": self.dev.slave,
"response": constants.yes_no[self.dev.slave],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......@@ -119,7 +125,8 @@ class PositionMovement(ResourceDev):
def get(self):
'''Return if the dome is moving or not.'''
res = {
"response": self.dev.is_moving,
"raw": self.dev.is_moving,
"response": constants.yes_no[self.dev.is_moving],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......@@ -173,7 +180,8 @@ class Connection(ResourceDev):
'''check if the dome is connected to ASCOM.'''
res = {
"response": self.dev.connection,
"raw": self.dev.connection,
"response": constants.yes_no[self.dev.connection],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......@@ -184,7 +192,8 @@ class Connection(ResourceDev):
connection = request.json
self.dev.connection = connection
res = {
"response": self.dev.connection,
"raw": self.dev.connection,
"response": constants.yes_no[self.dev.connection],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......
......@@ -8,9 +8,10 @@
# Third-party modules
from flask import request
# Custom modules
from config import constants
from .baseresource import ResourceDev
# @api.route("/dome/light")
# @api.route("/telescope/lamp")
# @api.route("/camera/power")
......@@ -26,7 +27,8 @@ class State(ResourceDev):
def get(self):
'''Check if the switch on or off.'''
res = {
"response": self.dev.state,
"raw": self.dev.state,
"response": constants.on_off[self.dev.state],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......@@ -38,7 +40,8 @@ class State(ResourceDev):
state = request.json
self.dev.state = state
res = {
"response": self.dev.state,
"raw": self.dev.state,
"response": constants.on_off[self.dev.state],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......
......@@ -10,8 +10,8 @@ from datetime import datetime
from flask import request
# Custom modules
from config import constants
from utils.coordinates import to_hms, to_hms_dms, to_radec
from .baseresource import ResourceDev
......@@ -196,7 +196,8 @@ class CoordinatesMovementAtpark(ResourceDev):
'''Send the telescope to park position.'''
parked = self.dev.park
res = {
"response": parked,
"raw": parked,
"response": constants.yes_no[parked],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......@@ -265,7 +266,8 @@ class CoordinatesTracking(ResourceDev):
def get(self):
'''Check if the telescope is tracking or not.'''
res = {
"response": self.dev.tracking,
"raw": self.dev.tracking,
"response": constants.yes_no[self.dev.tracking],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......@@ -291,7 +293,8 @@ class Connection(ResourceDev):
'''Check if the telescope is connected to ASCOM.'''
res = {
"response": self.dev.connection,
"raw": self.dev.connection,
"response": constants.yes_no[self.dev.connection],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......@@ -303,7 +306,8 @@ class Connection(ResourceDev):
connection = request.json
self.dev.connection = connection
res = {
"response": self.dev.connection,
"raw": self.dev.connection,
"response": constants.yes_no[self.dev.connection],
"error": self.dev.error,
"timestamp": self.timestamp,
}
......
......@@ -34,7 +34,7 @@ def get_status(namespace):
res = client.get(power)
name = "-".join(power.split("/")[2:]) # "dome-shutter-movement"
endpoints[name] = res.get_json()
if not res.get_json()["response"]:
if not res.get_json()["raw"]:
return endpoints
for rule in app.url_map.iter_rules():
......
......@@ -463,11 +463,11 @@ Control
</small>
<small class="col text-success">
moving:
<var data-status="camera-movement"></var>
<var data-status="camera-filter-movement"></var>
</small>
<small class="col text-success">
state:
<var data-status="camera-state"></var>
<var data-status="camera-snapshot-state"></var>
</small>
</aside>
......
......@@ -19,8 +19,8 @@ def enable(app):
app.register_blueprint(routes.web, url_prefix='/web')
base_url = {"ext_base_url": "http://fork.orsa.unige.net:5533", # what form-crud needs
"int_base_url": "http://10.185.119.108:5533"} # what instance needs
base_url = {"ext_base_url": "http://fork.orsa.unige.net:5533", # what browser needs
"int_base_url": "http://10.185.119.108:5533"} # what server needs
# "int_base_url": "http://130.251.19.108:5533"} # from outside
@app.context_processor
......
......@@ -87,7 +87,6 @@ def tail_f(socketio, num_lines=30, sleep=0.25, once=False):
status.last['new_lines'] = lines
while not once:
socketio.sleep(sleep) # Sleep before checking again
current_size = os.path.getsize(filename)
if current_size < file_size:
file_size = 0
......@@ -100,6 +99,7 @@ def tail_f(socketio, num_lines=30, sleep=0.25, once=False):
if new_lines:
socketio.emit('new_lines', new_lines)
status.last['new_lines'] = new_lines
socketio.sleep(sleep) # Sleep before checking again
......
......@@ -7,19 +7,19 @@
$('[data-control="telescope-lamp"]').click(function(){
$(this).crud("GET", "/api/telescope/lamp").then(function(e){
$(this).crud("PUT", "/api/telescope/lamp", !e.response)
$(this).crud("PUT", "/api/telescope/lamp", !e.raw)
})
})
$('[data-control="telescope-power"]').click(function(){
$(this).crud("GET", "/api/telescope/power").then(function(e){
$(this).crud("PUT", "/api/telescope/power", !e.response)
$(this).crud("PUT", "/api/telescope/power", !e.raw)
})
})
$('[data-control="telescope-connection"]').click(function(){
$(this).crud("GET", "/api/telescope/connection").then(function(e){
$(this).crud("PUT", "/api/telescope/connection", !e.response)
$(this).crud("PUT", "/api/telescope/connection", !e.raw)
})
})
......@@ -106,13 +106,13 @@ $("#coordinates-stop").on("click", function(){
$('[data-control="dome-connection"]').click(function(){
$(this).crud("GET", "/api/dome/connection").then(function(e){
$(this).crud("PUT", "/api/dome/connection", !e.response)
$(this).crud("PUT", "/api/dome/connection", !e.raw)
})
})
$('[data-control="dome-light"]').click(function(){
$(this).crud("GET", "/api/dome/light").then(function(e){
$(this).crud("PUT", "/api/dome/light", !e.response)
$(this).crud("PUT", "/api/dome/light", !e.raw)
})
})
......@@ -156,7 +156,7 @@ $('[data-control="dome-shutter"]').click(function(){
$('[data-control="camera-power"]').click(function(){
$(this).crud("GET", "/api/camera/power").then(function(e){
$(this).crud("PUT", "/api/camera/power", !e.response)
$(this).crud("PUT", "/api/camera/power", !e.raw)
})
})
......
//////////////////
/// Connection
//////////////////
......@@ -42,7 +43,9 @@ socket.on("all-dome",function(e) {
$("[data-status="+k+"-azimuth]").text(e[k].response.azimuth)
$("[data-status="+k+"-parked]").text(e[k].response.parked)
}
// pulse(elem)
});
});
......@@ -77,6 +80,8 @@ socket.on("all-telescope",function(e) {
$("[data-status="+k+"-az]").text((e[k].response[1]*3600).toFixed(1))
}
// pulse(elem)
})
});
......@@ -85,8 +90,9 @@ socket.on("all-telescope",function(e) {
/// Camera stream
//////////////////
socket.on("all-camera",function(e) {
socket.on("all-camera",function(e) {
//console.log(e)
$.each(e, function(k,v){
/// Depth 1
......@@ -218,3 +224,56 @@ socket.on("new_lines", function(lines) {
})
});
///////////////////////
/// Pulse on changes
///////////////////////
$(document).ready(function(){
// Select all elements with data-status attribute
const elements = document.querySelectorAll('[data-status]');
// Object to store previous text content of each element
const previousTextContent = {};
// Function to monitor text changes
function observeChanges(element) {
const observer = new MutationObserver(mutationsList => {
for (let mutation of mutationsList) {
if (mutation.type === 'childList') {
const previousText = previousTextContent[element.getAttribute('data-status')];
const currentText = element.textContent.trim();
if (previousText !== currentText) {
pulse($(element))
previousTextContent[element.getAttribute('data-status')] = currentText;
}
}
}
});
observer.observe(element, { subtree: true, childList: true });
}
// Apply observeChanges function to each element
elements.forEach(element => {
previousTextContent[element.getAttribute('data-status')] = element.textContent.trim();
observeChanges(element);
});
});
function pulse(selector) {
// var done = "bg-success"
// var delay = 200
selector.fadeTo('slow', 0.5, function() {
selector.fadeTo('slow', 1.0) //.removeClass(done);
});
// setTimeout(function() {
// selector.removeClass(done);
// }, delay);
}