diff --git a/README.md b/README.md index b2a7b1c..fb3a027 100644 --- a/README.md +++ b/README.md @@ -66,9 +66,10 @@ add the following to /home/pi/userdata/etc/log4j2.xml # Optional: -Add the following line to /etc/fstab +Add the following lines to /etc/fstab tmpfs /var/log/openhab tmpfs rw,size=1g,uid=1000,gid=1000,mode=0755 0 0 + tmpfs /home/pi/psa/log tmpfs rw,size=1g,uid=1000,gid=1000,mode=0755 0 0 # Restore backed up config diff --git a/openhab.yml b/openhab.yml index 62a9e82..bfadfea 100644 --- a/openhab.yml +++ b/openhab.yml @@ -6,5 +6,6 @@ roles: - raspberry - openhab + - psa_car_controller diff --git a/roles/openhab/tasks/scripts.yml b/roles/openhab/tasks/scripts.yml index 3a693c6..bb073ca 100644 --- a/roles/openhab/tasks/scripts.yml +++ b/roles/openhab/tasks/scripts.yml @@ -13,4 +13,4 @@ group: root mode: "u=rwx,g=xr,o=rx" loop: - - backup + - backup-openhab diff --git a/roles/openhab/templates/backup.sh b/roles/openhab/templates/backup-openhab.sh similarity index 100% rename from roles/openhab/templates/backup.sh rename to roles/openhab/templates/backup-openhab.sh diff --git a/roles/psa_car_controller/Readme.me b/roles/psa_car_controller/Readme.me new file mode 100644 index 0000000..1d53558 --- /dev/null +++ b/roles/psa_car_controller/Readme.me @@ -0,0 +1,20 @@ +See https://github.com/flobz/psa_car_controller + +cli paramters: https://github.com/flobz/psa_car_controller/blob/master/psa_car_controller/psacc/application/car_controller.py + + parser.add_argument("-f", "--config", help="config file, default file: config.json", default="config.json") + parser.add_argument("-c", "--charge-control", help="enable charge control, default charge_config.json", + const="charge_config.json", nargs='?', metavar='charge config file') + parser.add_argument("-d", "--debug", help="enable debug", const=10, default=20, nargs='?', + metavar='Debug level number or name') + parser.add_argument("-l", "--listen", help="change server listen address", default="127.0.0.1", metavar="IP") + parser.add_argument("-p", "--port", help="change server listen port", default="5000") + parser.add_argument("-r", "--record", help="save vehicle data to db", action='store_true') + parser.add_argument("-R", "--refresh", help="refresh vehicles status every x min", type=int) + parser.add_argument("-m", "--mail", default=environ.get('USER_EMAIL', None), help="set the email address") + parser.add_argument("-P", "--password", default=environ.get('USER_PASSWORD', None), help="set the password") + parser.add_argument("--remote-disable", help="disable remote control", action='store_true') + parser.add_argument("--offline", help="offline limited mode", action='store_true') + parser.add_argument("--web-conf", help="ignore if config files not existing yet", action='store_true') + parser.add_argument("-b", "--base-path", help="base path for web app", default="/") + parser.add_argument('--version', action='version', version='PSACC {}'.format(psa_car_controller.__version__)) diff --git a/roles/psa_car_controller/files/mylogger.py b/roles/psa_car_controller/files/mylogger.py new file mode 100644 index 0000000..061f90f --- /dev/null +++ b/roles/psa_car_controller/files/mylogger.py @@ -0,0 +1,55 @@ +import logging +from logging.handlers import RotatingFileHandler + +LOG_FILE = '/var/log/activity.log' + +DEBUG_LEVELV_NUM = 9 +logging.addLevelName(DEBUG_LEVELV_NUM, "DEBUGV") + + +class CustomLogger(logging.Logger): + def _log(self, level, # pylint: disable=too-many-arguments,unused-argument + msg, + args, + exc_info=None, + extra=None, + stack_info=False, + exc_info_debug=False, + **kwargs): + if exc_info_debug and self.isEnabledFor(logging.DEBUG): + exc_info = True + super()._log(level, msg, args, exc_info, extra, stack_info) + + def __new_style_log(self, level, msg, args, exc_info=None, extra=None, # pylint: disable=too-many-arguments + stack_info=False, **kwargs): + if kwargs.pop('style', "%") == "{": # optional + msg = msg.format(*args) + args = [] + self._log(level, msg, args, exc_info, extra, stack_info) + + def debugv(self, msg, *args, **kwargs): + if self.isEnabledFor(DEBUG_LEVELV_NUM): + self.__new_style_log(DEBUG_LEVELV_NUM, msg, args, **kwargs) + + @staticmethod + def getLogger(name): + return logging.getLogger(name) + + +logging.setLoggerClass(CustomLogger) +logger = logging.getLogger() + +file_handler = RotatingFileHandler(LOG_FILE, 'a', 1000000, 1, encoding='utf8') +formatter = logging.Formatter('%(asctime)s :: %(levelname)s :: %(message)s') +stream_handler = logging.StreamHandler() + + +def my_logger(handler_level=logging.INFO): + logger.setLevel(handler_level) + file_handler.setLevel(handler_level) + file_handler.setFormatter(formatter) + logger.addHandler(file_handler) + stream_handler.setLevel(handler_level) + stream_handler.setFormatter(formatter) + logger.addHandler(stream_handler) + diff --git a/roles/psa_car_controller/tasks/main.yml b/roles/psa_car_controller/tasks/main.yml new file mode 100644 index 0000000..75eb43b --- /dev/null +++ b/roles/psa_car_controller/tasks/main.yml @@ -0,0 +1,12 @@ +--- + +- include: psacc.yml + tags: + - psacc + - openhab_all + +- include: scripts.yml + tags: + - psacc + - openhab_all + diff --git a/roles/psa_car_controller/tasks/psacc.yml b/roles/psa_car_controller/tasks/psacc.yml new file mode 100644 index 0000000..a53fb20 --- /dev/null +++ b/roles/psa_car_controller/tasks/psacc.yml @@ -0,0 +1,16 @@ +--- + +- name: Adding user pi to group docker + user: name=pi + groups=docker + append=yes + +- name: install docker-compose file + template: + src: docker-compose.yaml + dest: /home/pi/psa/docker-compose.yaml + +- name: install patch + copy: + src: mylogger.py + dest: /home/pi/psa/mylogger.py diff --git a/roles/psa_car_controller/tasks/scripts.yml b/roles/psa_car_controller/tasks/scripts.yml new file mode 100644 index 0000000..62127d6 --- /dev/null +++ b/roles/psa_car_controller/tasks/scripts.yml @@ -0,0 +1,16 @@ +--- + +- name: create scripts dir + file: + dest: "/home/pi/bin" + state: directory + +- name: create scripts + template: + src: "{{ item }}.sh" + dest: "/home/pi/bin/{{ item }}" + owner: root + group: root + mode: "u=rwx,g=xr,o=rx" + loop: + - backup-psa diff --git a/roles/psa_car_controller/templates/backup-psa.sh b/roles/psa_car_controller/templates/backup-psa.sh new file mode 100644 index 0000000..0d2f8de --- /dev/null +++ b/roles/psa_car_controller/templates/backup-psa.sh @@ -0,0 +1,9 @@ +BACKUP_SERVER_URL="christian@ds3018:/volume1/backup/psa" +BACKUP_FILE="psa_$(date '+%F_%H-%M').tgz" + +cd /home/pi/psa +tar -czf psacc.tgz config + +scp psacc.tgz ${BACKUP_SERVER_URL}/${BACKUP_FILE} + +rm psacc.tgz diff --git a/roles/psa_car_controller/templates/docker-compose.yaml b/roles/psa_car_controller/templates/docker-compose.yaml new file mode 100644 index 0000000..b5d2615 --- /dev/null +++ b/roles/psa_car_controller/templates/docker-compose.yaml @@ -0,0 +1,15 @@ +version: "2" + +services: + psacc: + image: flobz/psa_car_controller:v3.0.7 + restart: unless-stopped + privileged: true + ports: + - "5000:5000" + volumes: + - ./config:/config + - ./log:/var/log + - ./mylogger.py:/usr/local/lib/python3.9/dist-packages/psa_car_controller/common/mylogger.py + command: psa-car-controller -l 0.0.0.0 -b / -c -r --web-conf -R 10 +