Open tzavellas opened 1 year ago
.docker/entrypoint.sh
#!/bin/bash
args=()
if [ ! -z "$SERIAL" ]; then
args+=(--serial $SERIAL)
fi
if [ ! -z "$BAUD" ]; then
args+=(--baud $BAUD)
fi
if [ ! -z "$CONNECT" ]; then
args+=(--connect $CONNECT)
fi
if [ ! -z "$CONFIG" ]; then
args+=(--config $CONFIG)
fi
if [ ! -z "$LOG" ]; then
args+=(--log $LOG)
cat /dev/null > $LOG
fi
if [ ! -z "$DEBUG" ]; then
args+=(--debug --debug-log $DEBUG)
cat /dev/null > $DEBUG
fi
echo "Server args ${args[@]}"
nx584_server --listen $LISTEN "${args[@]}"
docker-compose.yml
version: "3.2"
services:
pynx584:
container_name: pynx584
image: kk7ds/pynx584
# Uncomment to expose tty device in container
#devices:
# - "/dev/ttyS0:/dev/ttyS0"
build:
context: .docker
dockerfile: Dockerfile
restart: unless-stopped
ports:
- 5007:5007
environment:
# Uncomment these as needed, depending on how you connect to the panel (via Serial or TCP Socket)
# - SERIAL=/dev/ttyS0
# - BAUD=38400
- CONNECT=192.168.1.167:9997
# Uncomment as needed, depending on the location of the config file
- CONFIG=/app/config.ini
# - DEBUG=/app/debug.log
- LOG=/app/log
- PUID=1000
- PGID=1000
- UMASK=007
network_mode: bridge
working_dir: /app
volumes:
- ./:/app
config.ini
[config]
# max_zone is the highest numbered zone you have populated
max_zone = 13
# Disable zone name updates from NX8 system. If your system doesn't set zone
# names and you prefer define them through pynx584, set this value to False.
# Defaults to True
zone_name_update = False
# Set to true if your unit sends DD/MM dates instead of MM/DD
#euro_date_format = True
# Set To true if using binary protocol
# Defaults to False
use_binary_protocol = True
# Length of idle time before sending heartbeat keep alive
# (This is useful with the NX590 as it disconnects idle connections in a
# short period of time)
# Defaults to 120 seconds
idle_time_heartbeat_seconds = 30
[email]
fromaddr = XYZ@gmail.com
smtphost = smtp.gmail.com
[zones]
# Zone names
1 = Front Door
2 = Office
3 = Main Bedroom
4 = Kitchen
5 = Living Room
6 = Bedroom 1
7 = Bedroom 2
8 = Fire Alarm
9 = Main Balcony
10= Other Balcony
11= Tamper Main Balcony
12= Tamper Other Balcony
13= Siren
length = self.read(1)[0]
This looks like maybe a latent bug, but I'd probably need to be able to reproduce it to tell. I imagine its because read returns a bytes
and a single-element of a bytes is an int (but used to be a string in python2). Although then it should complain about concat'ing a bytes
to a str
. Maybe change it to self.read(1)[0:1]
and see what happens?
This is very strange because it only happens when I run the server inside the docker container. I tried running it on the command line and I never got the error: on the contrary the server receives data from the NX module and I get the proper status of the module.
Surely you're not running python2 in the docker container (or outside) right? That might explain something. The only other thing I can think of is you're using the NX584 binary protocol in one place and ascii one in the other and they're running different code in the communication routines.
Surely you're not running python2 in the docker container (or outside) right?
Well.. I am running python2 in the container (I think). I use your .docker file directly and its contents are:
FROM python:2.7
ENV LISTEN=0.0.0.0
RUN pip install --no-cache-dir pynx584
ADD entrypoint.sh /usr/local/bin/entrypoint.sh
EXPOSE 5007
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
Should I change this to FROM python:3
?
I changed the FROM directive in the Docker file as above and I no longer get the error. However, after accepting the initial status of the zones from the NX590e, I don't see any updates triggered in the logs. Do you think it's configuration of the NX590e or source code related?
Ah, that was contributed by a user, I've never run it myself. It definitely shouldn't be running on python2 anymore.
And yep, you need to configure the panel to send events to the serial device, otherwise it just responds to queries.
Hello,
When trying to start a docker container with docker compose, I get the following log:
I tried looking at the code and it appears the error is caused at line 218 NXBinary.read_frame() when it tries to read the variable length and a string is assigned to it instead of an integer.
After that the code recovers and reconnects but no data stream ever arrives, even if I wait a bit.
This is very strange because it only happens when I run the server inside the docker container. I tried running it on the command line and I never got the error: on the contrary the server receives data from the NX module and I get the proper status of the module.
I will attach my docker-compose.py for your reference. FYI I have made a few changes on the entrypoint.sh in order to be able to pass nx584_server arguments such as config file in the container.
I have the NX590e (might not be relevant but I mention it), hence I can only run the nx584_server in binary mode and thus I need the config file in the docker container before running it.