forked from Krautspace/doorstatus
statusd.py now works with json modul, fix bug in set_values()
read and write the api file now uses the json modul. correct a bug in function set_values().
This commit is contained in:
parent
0e405f894d
commit
943c060b60
1 changed files with 13 additions and 38 deletions
45
statusd.py
45
statusd.py
|
@ -11,6 +11,7 @@ import socket
|
|||
import ssl
|
||||
import os
|
||||
import logging
|
||||
import json
|
||||
from time import time, ctime, sleep
|
||||
from sys import exit, byteorder
|
||||
|
||||
|
@ -101,25 +102,6 @@ def receive_buffer_is_valid(raw_data):
|
|||
return False
|
||||
|
||||
|
||||
def replace_entry(line, new):
|
||||
'''
|
||||
The function becomes two strings and replaces the second part of the
|
||||
first string from ":" until end with the second string. Than appends a
|
||||
"," and returns the result.
|
||||
|
||||
!!! Todo: needs exception handling !!!
|
||||
|
||||
param 1: string
|
||||
param 2: string
|
||||
return: string
|
||||
'''
|
||||
array = line.split(':')
|
||||
logging.debug('Replace {} with {}'.format(array[1], new))
|
||||
array[1] = ''.join((new, ','))
|
||||
line = ':'.join((array[0], array[1]))
|
||||
return line
|
||||
|
||||
|
||||
def change_status(raw_data, api):
|
||||
'''
|
||||
Becomes the received byte and the path to API file. Grabs the content of
|
||||
|
@ -139,20 +121,12 @@ def change_status(raw_data, api):
|
|||
logging.debug('API file is writable')
|
||||
with open(api, 'w') as api_file:
|
||||
logging.debug('API file open successfull')
|
||||
for line in data.splitlines():
|
||||
if line.strip().startswith('"state":'):
|
||||
edit = True
|
||||
elif edit == True and line.strip().startswith('"open":'):
|
||||
line = replace_entry(line, status)
|
||||
elif edit == True and line.strip().startswith('"lastchange":'):
|
||||
line = replace_entry(line, timestamp)
|
||||
edit = False
|
||||
data["state"]["open"] = status
|
||||
data["state"]["lastchange"] = timestamp
|
||||
try:
|
||||
api_file.write(line)
|
||||
api_file.write('\n')
|
||||
json.dump(data, api_file, indent=4)
|
||||
except Exception as e:
|
||||
logging.error('Failed to write line to API file')
|
||||
logging.error('Line: {}'.format(line))
|
||||
logging.error('Failed to change API file')
|
||||
logging.error('{}'.format(e))
|
||||
logging.debug('API file changed')
|
||||
else:
|
||||
|
@ -176,12 +150,12 @@ def read_api(api):
|
|||
with open(api, 'r') as api_file:
|
||||
logging.debug('API opened successfull')
|
||||
try:
|
||||
api_data = api_file.read()
|
||||
logging.debug('API read successfull')
|
||||
api_json_data = json.load(api_file)
|
||||
logging.debug('API file read successfull')
|
||||
except Exception as e:
|
||||
logging.error('Failed to read API file(): {}'.format(e))
|
||||
return False
|
||||
return (api_data)
|
||||
return (api_json_data)
|
||||
logging.error('Failed to read API file')
|
||||
return False
|
||||
|
||||
|
@ -194,10 +168,11 @@ def set_values(raw_data):
|
|||
return: tuple
|
||||
'''
|
||||
timestamp = str(time()).split('.')[0]
|
||||
if raw_data == 'b\x01':
|
||||
if raw_data == b'\x01':
|
||||
status = "true"
|
||||
else:
|
||||
status = "false"
|
||||
logging.debug('Set values for timestamp: {} and status: {}'.format(timestamp, status))
|
||||
return (status, timestamp)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue