Dispositivos sempre ficam lotados em alguma companhia específica. Ela fica identificada no arquivo device:
{// documento device gravado com o nome "<imei>" na collection de devices
"imei": "<imei>"
,"deviceOf": "<companyId>"| // Abra o console do inspector, cole isso e dê enter em cada página disponível | |
| // Seleciona todos os elementos com a classe card-lawyer | |
| document.querySelectorAll('.card-lawyer').forEach(card => { | |
| // Dentro de cada card, seleciona o primeiro <a> que possui o atributo aria-label | |
| const lawyerLink = card.querySelector('a[aria-label]'); | |
| // Obtém o valor do atributo aria-label | |
| const lawyerName = lawyerLink ? lawyerLink.getAttribute('aria-label') : ''; | |
| // Dentro de cada card, seleciona o <a> com a classe firm-profile-link |
| # Executar script de monitoramento de website a cada 5 minutos | |
| */5 * * * * /caminho/para/website_monitor.sh > /dev/null 2>&1 | |
| # precisa de permissão | |
| chmod +x /caminho/para/website_monitor.sh | |
| # configurações para o ssh | |
| ssh-keygen -t rsa -b 4096 | |
| ssh-copy-id usuario@servidor_remoto |
| const isBot = require('./../helpers/isBot.js').isBot | |
| const dummyPage = [ | |
| '<!doctype html> <html lang="en"> <head>' | |
| ,'</head> <body>' | |
| ,'</body> </html>' | |
| ] | |
| const defTitle = 'Chats to follow'; | |
| const defLogo = 'https://unnon.com/ogimg.png'; | |
| const app_id = "267524633679818" |
| function oldFix (newdata, previous_position, imei) { | |
| const checkValidDate = function (date) { | |
| const parsed = new Date(date); | |
| if (!parsed) { return null }; | |
| const oneDayInMilliseconds = 24 * 60 * 60 * 1000; | |
| const threeMonthsAgo = new Date(Date.now() - 3 * 30 * oneDayInMilliseconds); | |
| const oneDayInFuture = new Date(Date.now() + oneDayInMilliseconds); | |
| const isFromPast = parsed <= threeMonthsAgo; | |
| const isFromFuture = parsed >= oneDayInFuture; |
| // Shorten names | |
| // types: | |
| export const STRING = "STRING"; | |
| export const BYTES = "BYTES"; | |
| export const INTEGER = "INTEGER"; | |
| export const FLOAT = "FLOAT"; | |
| export const NUMERIC = "NUMERIC"; | |
| export const BOOLEAN = "BOOLEAN"; | |
| export const TIMESTAMP = "TIMESTAMP"; | |
| export const DATE = "DATE"; |
| class PositionsWriter { | |
| static MIN_DISTANCE = 0.02; | |
| static PARKED_MIN_DURATION = 120; | |
| constructor(device, debug = false) { | |
| this.device = device; | |
| this.debug = debug; | |
| this.events = []; | |
| this.positions = []; | |
| this.position = null; |
| const https = require('https'); | |
| const http = require('http'); | |
| const getJSON = (options, onResult) => { | |
| console.log('rest::getJSON'); | |
| const port = options.port == 443 ? https : http; | |
| let output = ''; | |
| const req = port.request(options, (res) => { |
| let yamldata = { | |
| t: newdata.t | |
| ,dt: newdata.dt | |
| ,ft: newdata.ft | |
| ,spd: newdata.spd | |
| ,lat: newdata.lat || 0 | |
| ,lng: newdata.lng || 0 | |
| ,ang: newdata.ang | |
| ,stp: newdata.stp | |
| ,ign: newdata.ign |
| /* UTILS AND CONSTANTS*/ | |
| const SPEED_MULTIPLIER = 1.852; | |
| const DISTANCE_MULTIPLIER = 111.045; | |
| const SETTINGS = { | |
| "default_object_online_timeout": 5 | |
| ,"valid_by_avg_speed": false | |
| ,"min_moving_speed": 6 | |
| ,"addon.device_tracker_app_login": false |
Dispositivos sempre ficam lotados em alguma companhia específica. Ela fica identificada no arquivo device:
{// documento device gravado com o nome "<imei>" na collection de devices
"imei": "<imei>"
,"deviceOf": "<companyId>"