Add comms/ebusd, daemon for communication with eBUS heating systems
PR: 239796 Submitted by: samm@os2.kiev.ua
This commit is contained in:
parent
2b7ccfab00
commit
06bcaf30c8
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=512996
2
GIDs
2
GIDs
@ -794,7 +794,7 @@ qbittorrent:*:850:
|
||||
cassandra:*:851:
|
||||
p0f:*:852:
|
||||
_geodns:*:853:
|
||||
# free: 854
|
||||
ebusd:*:854:
|
||||
# free: 855
|
||||
# free: 856
|
||||
# free: 857
|
||||
|
2
UIDs
2
UIDs
@ -799,7 +799,7 @@ qbittorrent:*:850:850::0:0:qBittorrent Daemon User:/var/db/qbittorrent/conf:/usr
|
||||
cassandra:*:851:851::0:0:Cassandra DB Daemon User:/var/db/cassandra:/usr/sbin/nologin
|
||||
p0f:*:852:852::0:0:p0f unprivileged user:/var/empty:/usr/sbin/nologin
|
||||
_geodns:*:853:853::0:0:GeoDNS User:/var/empty:/usr/sbin/nologin
|
||||
# free: 854
|
||||
ebusd:*:854:854::0:0:eBUS Daemon user:/nonexistent:/usr/sbin/nologin
|
||||
# free: 855
|
||||
# free: 856
|
||||
# free: 857
|
||||
|
@ -39,6 +39,7 @@
|
||||
SUBDIR += dump1090
|
||||
SUBDIR += ebook2cw
|
||||
SUBDIR += ebook2cwgui
|
||||
SUBDIR += ebusd
|
||||
SUBDIR += echolinux
|
||||
SUBDIR += efax
|
||||
SUBDIR += ems-flasher
|
||||
|
47
comms/ebusd/Makefile
Normal file
47
comms/ebusd/Makefile
Normal file
@ -0,0 +1,47 @@
|
||||
# $FreeBSD$
|
||||
|
||||
PORTNAME= ebusd
|
||||
PORTVERSION= 3.3
|
||||
CATEGORIES= comms
|
||||
|
||||
MAINTAINER= samm@os2.kiev.ua
|
||||
COMMENT= Daemon for communication with eBUS heating systems
|
||||
|
||||
LICENSE= GPLv3
|
||||
LICENSE_FILE= ${WRKSRC}/LICENSE
|
||||
|
||||
LIB_DEPENDS= libargp.so:devel/argp-standalone
|
||||
|
||||
USES= autoreconf localbase:ldflags
|
||||
|
||||
OPTIONS_DEFINE= MQTT
|
||||
OPTIONS_DEFAULT=MQTT
|
||||
MQTT_DESC= MQTT protocol support
|
||||
|
||||
USE_GITHUB= yes
|
||||
GH_ACCOUNT= john30
|
||||
GH_TAGNAME= v${PORTVERSION}
|
||||
|
||||
USE_RC_SUBR= ebusd
|
||||
|
||||
USERS= ebusd
|
||||
GROUPS= ebusd
|
||||
|
||||
LOGDIR= /var/log/${PORTNAME}
|
||||
RUNDIR= /var/run/${PORTNAME}
|
||||
CPPFLAGS+= -I${LOCALBASE}/include
|
||||
GNU_CONFIGURE= yes
|
||||
|
||||
PLIST_SUB= USER=${USERS} GROUP=${GROUPS} \
|
||||
LOGDIR=${LOGDIR} \
|
||||
RUNDIR=${RUNDIR}
|
||||
|
||||
MQTT_CONFIGURE_WITH= mqtt
|
||||
MQTT_LIB_DEPENDS= libmosquitto.so:net/mosquitto
|
||||
MQTT_VARS= LIBS+=-lmosquitto
|
||||
|
||||
post-install:
|
||||
${MKDIR} ${STAGEDIR}${LOGDIR}
|
||||
${MKDIR} ${STAGEDIR}${RUNDIR}
|
||||
|
||||
.include <bsd.port.mk>
|
3
comms/ebusd/distinfo
Normal file
3
comms/ebusd/distinfo
Normal file
@ -0,0 +1,3 @@
|
||||
TIMESTAMP = 1565559816
|
||||
SHA256 (john30-ebusd-3.3-v3.3_GH0.tar.gz) = 48669140cfafbe060c765b4530018b30f07e1b074dbce00b205a8f2a22dee573
|
||||
SIZE (john30-ebusd-3.3-v3.3_GH0.tar.gz) = 696172
|
37
comms/ebusd/files/ebusd.in
Normal file
37
comms/ebusd/files/ebusd.in
Normal file
@ -0,0 +1,37 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $FreeBSD$
|
||||
#
|
||||
# PROVIDE: ebusd
|
||||
# REQUIRE: LOGIN cleanvar
|
||||
# KEYWORD: shutdown
|
||||
|
||||
#
|
||||
# Add the following lines to /etc/rc.conf to enable ebusd:
|
||||
#
|
||||
#ebusd_enable (bool): set to "YES" to start domotics at boot
|
||||
#ebusd_user (str): Default to ebusd, user for starting ebusd
|
||||
#ebusd_group (str): Default to ebusd, group for stating ebusd
|
||||
#ebusd_pidfile (str): Custum PID file path and name
|
||||
# Default to "/var/run/ebusd/${hostname}.pid".
|
||||
#ebusd_args (str): Custom additional arguments to be passed
|
||||
# Default to "-d /dev/ttyU0 --scanconfig --localhost"
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="ebusd"
|
||||
rcvar="ebusd_enable"
|
||||
|
||||
load_rc_config $name
|
||||
|
||||
: ${ebusd_user:=ebusd}
|
||||
: ${ebusd_group:=ebusd}
|
||||
: ${ebusd_enable:=NO}
|
||||
: ${ebusd_args:="-d /dev/ttyU0 --scanconfig --localhost"}
|
||||
|
||||
pidfile=${ebusd_pidfile:-"/var/run/ebusd/${hostname}.pid"}
|
||||
|
||||
command="%%PREFIX%%/bin/ebusd"
|
||||
command_args="--pidfile ${pidfile} ${ebusd_args}"
|
||||
|
||||
run_rc_command "$1"
|
19
comms/ebusd/files/patch-configure.ac
Normal file
19
comms/ebusd/files/patch-configure.ac
Normal file
@ -0,0 +1,19 @@
|
||||
--- configure.ac.orig 2018-12-26 15:38:15 UTC
|
||||
+++ configure.ac
|
||||
@@ -36,6 +36,7 @@ AC_SUBST(EXTRA_LIBS)
|
||||
AC_CHECK_FUNC([pselect], [AC_DEFINE(HAVE_PSELECT, [1], [Defined if pselect() is available.])])
|
||||
AC_CHECK_FUNC([ppoll], [AC_DEFINE(HAVE_PPOLL, [1], [Defined if ppoll() is available.])])
|
||||
AC_CHECK_HEADER([linux/serial.h], [AC_DEFINE(HAVE_LINUX_SERIAL, [1], [Defined if linux/serial.h is available.])])
|
||||
+AC_CHECK_HEADER([dev/usb/uftdiio.h], [AC_DEFINE(HAVE_FREEBSD_UFTDI, [1], [Defined if dev/usb/uftdiio.h is available.])])
|
||||
|
||||
AC_ARG_ENABLE(coverage, AS_HELP_STRING([--enable-coverage], [enable code coverage tracking]), [CXXFLAGS+=" -coverage -O0"], [])
|
||||
AC_ARG_WITH(contrib, AS_HELP_STRING([--without-contrib], [disable inclusion of contributed sources]), [], [with_contrib=yes])
|
||||
@@ -118,7 +119,7 @@ AM_COND_IF([CONTRIB], [AC_CONFIG_FILES([
|
||||
])])
|
||||
|
||||
AC_DEFINE_UNQUOTED(PACKAGE_PIDFILE, LOCALSTATEDIR "/run/" PACKAGE ".pid", [The path and name of the PID file.])
|
||||
-AC_DEFINE_UNQUOTED(PACKAGE_LOGFILE, LOCALSTATEDIR "/log/" PACKAGE ".log", [The path and name of the log file.])
|
||||
+AC_DEFINE_UNQUOTED(PACKAGE_LOGFILE, LOCALSTATEDIR "/log/" PACKAGE "/" PACKAGE ".log", [The path and name of the log file.])
|
||||
AC_DEFINE(SCAN_VERSION, "[m4_esyscmd_s([sed -e 's#^\([0-9]*\.[0-9]*\).*#\1#' -e 's#\.\([0-9]\)$#0\1#' -e 's#\.##' VERSION])]", [The version of the package formatted for the scan result.])
|
||||
AC_DEFINE(REVISION, "[m4_esyscmd_s([git describe --always 2>/dev/null || (date +p%Y%m%d)])]", [The revision of the package.])
|
||||
|
59
comms/ebusd/files/patch-src_lib_ebus_device.cpp
Normal file
59
comms/ebusd/files/patch-src_lib_ebus_device.cpp
Normal file
@ -0,0 +1,59 @@
|
||||
--- src/lib/ebus/device.cpp.orig 2018-12-26 15:38:15 UTC
|
||||
+++ src/lib/ebus/device.cpp
|
||||
@@ -30,6 +30,9 @@
|
||||
#ifdef HAVE_LINUX_SERIAL
|
||||
# include <linux/serial.h>
|
||||
#endif
|
||||
+#ifdef HAVE_FREEBSD_UFTDI
|
||||
+# include <dev/usb/uftdiio.h>
|
||||
+#endif
|
||||
#include <errno.h>
|
||||
#ifdef HAVE_PPOLL
|
||||
# include <poll.h>
|
||||
@@ -192,7 +195,7 @@ result_t SerialDevice::open() {
|
||||
struct termios newSettings;
|
||||
|
||||
// open file descriptor
|
||||
- m_fd = ::open(m_name, O_RDWR | O_NOCTTY);
|
||||
+ m_fd = ::open(m_name, O_RDWR | O_NOCTTY | O_NDELAY);
|
||||
|
||||
if (m_fd < 0) {
|
||||
return RESULT_ERR_NOTFOUND;
|
||||
@@ -215,13 +218,24 @@ result_t SerialDevice::open() {
|
||||
}
|
||||
#endif
|
||||
|
||||
+#ifdef HAVE_FREEBSD_UFTDI
|
||||
+ int param = 0;
|
||||
+ // flush tx/rx and set low latency on uftdi device
|
||||
+ if (ioctl(m_fd, UFTDIIOC_GET_LATENCY, ¶m) == 0) {
|
||||
+ ioctl(m_fd, UFTDIIOC_RESET_IO, ¶m);
|
||||
+ param = 1;
|
||||
+ ioctl(m_fd, UFTDIIOC_SET_LATENCY, ¶m);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
// save current settings
|
||||
tcgetattr(m_fd, &m_oldSettings);
|
||||
|
||||
// create new settings
|
||||
memset(&newSettings, 0, sizeof(newSettings));
|
||||
|
||||
- newSettings.c_cflag |= (B2400 | CS8 | CLOCAL | CREAD);
|
||||
+ cfsetspeed(&newSettings, B2400);
|
||||
+ newSettings.c_cflag |= (CS8 | CLOCAL | CREAD);
|
||||
newSettings.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // non-canonical mode
|
||||
newSettings.c_iflag |= IGNPAR; // ignore parity errors
|
||||
newSettings.c_oflag &= ~OPOST;
|
||||
@@ -234,7 +248,10 @@ result_t SerialDevice::open() {
|
||||
tcflush(m_fd, TCIFLUSH);
|
||||
|
||||
// activate new settings of serial device
|
||||
- tcsetattr(m_fd, TCSAFLUSH, &newSettings);
|
||||
+ if (tcsetattr(m_fd, TCSAFLUSH, &newSettings)) {
|
||||
+ close();
|
||||
+ return RESULT_ERR_DEVICE;
|
||||
+ }
|
||||
|
||||
// set serial device into blocking mode
|
||||
fcntl(m_fd, F_SETFL, fcntl(m_fd, F_GETFL) & ~O_NONBLOCK);
|
10
comms/ebusd/files/patch-src_lib_ebus_device.h
Normal file
10
comms/ebusd/files/patch-src_lib_ebus_device.h
Normal file
@ -0,0 +1,10 @@
|
||||
--- src/lib/ebus/device.h.orig 2018-12-26 15:38:15 UTC
|
||||
+++ src/lib/ebus/device.h
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <unistd.h>
|
||||
#include <termios.h>
|
||||
#include <arpa/inet.h>
|
||||
+#include <netinet/in.h>
|
||||
#include <netdb.h>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
10
comms/ebusd/files/patch-src_lib_utils_tcpsocket.h
Normal file
10
comms/ebusd/files/patch-src_lib_utils_tcpsocket.h
Normal file
@ -0,0 +1,10 @@
|
||||
--- src/lib/utils/tcpsocket.h.orig 2018-12-26 15:38:15 UTC
|
||||
+++ src/lib/utils/tcpsocket.h
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/socket.h>
|
||||
+#include <netinet/in.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdint.h>
|
||||
#include <string>
|
8
comms/ebusd/pkg-descr
Normal file
8
comms/ebusd/pkg-descr
Normal file
@ -0,0 +1,8 @@
|
||||
ebusd is a daemon for handling communication with eBUS devices connected to a
|
||||
2-wire bus system ("energy bus" used by numerous heating systems).
|
||||
|
||||
It is known to run fine on regular PC hardware as well as on smaller devices
|
||||
like Fritzbox and Raspberry Pi. In order to use it, a hardware interface is
|
||||
necessary.
|
||||
|
||||
WWW: https://github.com/john30/ebusd/wiki
|
21
comms/ebusd/pkg-message
Normal file
21
comms/ebusd/pkg-message
Normal file
@ -0,0 +1,21 @@
|
||||
[
|
||||
{
|
||||
type: install
|
||||
message: <<EOD
|
||||
To start ebusd as a daemon during startup, add
|
||||
|
||||
ebusd_enable="YES"
|
||||
|
||||
to your /etc/rc.conf.
|
||||
|
||||
Extra options can be found in startup script.
|
||||
|
||||
To be able to access serial port from the ebusd daemon, you might want to
|
||||
add the following line:
|
||||
|
||||
add path 'ttyU0' mode 0660 group ebusd
|
||||
|
||||
to your local devfs.rules(5) configuration.
|
||||
EOD
|
||||
}
|
||||
]
|
6
comms/ebusd/pkg-plist
Normal file
6
comms/ebusd/pkg-plist
Normal file
@ -0,0 +1,6 @@
|
||||
bin/ebusd
|
||||
bin/ebusctl
|
||||
bin/ebusfeed
|
||||
@dir(%%USER%%,%%GROUP%%,750) %%RUNDIR%%
|
||||
@dir(%%USER%%,%%GROUP%%,750) %%LOGDIR%%
|
||||
@dir %%ETCDIR%%
|
Loading…
Reference in New Issue
Block a user