diff --git a/conf/layer.conf b/conf/layer.conf
index f05f2c693f0040be09aa57cde91df30d05b33529..028356e4a7721d4b0748faef045493cbcc56f482 100644
--- a/conf/layer.conf
+++ b/conf/layer.conf
@@ -5,13 +5,17 @@ BBPATH .= ":${LAYERDIR}"
 BBFILES += "${LAYERDIR}/recipes/*.bb"
 BBFILES += "${LAYERDIR}/recipes/*/*.bb"
 
-BBFILE_COLLECTIONS += "meta-halibut"
-BBFILE_PATTERN_meta-halibut := "^${LAYERDIR}/"
-BBFILE_PRIORITY_meta-halibut = "5"
-BB_VERBOSE_LOGS = "True"
+BBFILE_COLLECTIONS += "meta-pypcc"
+BBFILE_PATTERN_meta-pypcc := "^${LAYERDIR}/"
+BBFILE_PRIORITY_meta-pypcc = "5"
+
 # This should only be incremented on significant changes that will
 # cause compatibility issues with other layers
-LAYERVERSION_meta-halibut = "1"
+LAYERVERSION_meta-pypcc = "1"
+
+#LAYERDEPENDS_meta-pypcc = "python3 (>= 3)"
+
+LAYERSERIES_COMPAT_meta-pypcc = "styhead"
 
-LAYERSERIES_COMPAT_meta-halibut = "styhead scarthgap"
+#LICENSE_PATH += "${LAYERDIR}/pypcc/LICENSE.txt"
 
diff --git a/recipes/files/hwtr b/recipes/files/hwtr
new file mode 100755
index 0000000000000000000000000000000000000000..e815a64647b16b656ba2f0af4058fbbfa118f629
--- /dev/null
+++ b/recipes/files/hwtr
@@ -0,0 +1,166 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides:          ccdtr
+# Required-Start:    $local_fs
+# Should-Start:
+# Required-Stop:     $local_fs
+# Should-Stop:
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: CCD translator
+# Description:       CCD translator
+### END INIT INFO
+
+# PATH should only include /usr/* if it runs after the mountnfs.sh script
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+
+DESC="ccdtr"
+NAME="ccdtr"
+DAEMON=/usr/bin/pypcc-hwtr
+DAEMON_ARGS="-p 4843 -c CCDTR"
+PIDFILE=/var/run/$NAME.pid
+
+. /etc/init.d/functions || exit 1
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+#
+# Function that starts the daemon/service
+#
+do_start() {
+	local status pid
+
+	status=0
+	pid=`pidofproc $NAME` || status=$?
+	case $status in
+	0)
+		echo "$DESC already running ($pid)."
+		exit 1
+		;;
+	*)
+		echo "Starting $DESC ..."
+		exec $DAEMON $DAEMON_ARGS >/dev/null 2>&1 || status=$?
+		echo "ERROR: Failed to start $DESC."
+		exit $status
+		;;
+	esac
+
+	# Add code here, if necessary, that waits for the process to be ready
+	# to handle requests from services started subsequently which depend
+	# on this one.  As a last resort, sleep for some time.
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop() {
+	local pid status
+
+	status=0
+	pid=`pidofproc $NAME` || status=$?
+	case $status in
+	0)
+		# Exit when fail to stop, the kill would complain when fail
+		kill -s 15 $pid >/dev/null && rm -f $PIDFILE && \
+			echo "Stopped $DESC ($pid)." || exit $?
+		;;
+	*)
+		echo "$DESC is not running; none killed." >&2
+		;;
+	esac
+
+	# Wait for children to finish too if this is a daemon that forks
+	# and if the daemon is only ever run from this initscript.
+	# If the above conditions are not satisfied then add some other code
+	# that waits for the process to drop all resources that could be
+	# needed by services started subsequently.  A last resort is to
+	# sleep for some time.
+	return $status
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+	local pid status
+
+	status=0
+        # If the daemon can reload its configuration without
+        # restarting (for example, when it is sent a SIGHUP),
+        # then implement that here.
+	pid=`pidofproc $NAME` || status=$?
+	case $status in
+	0)
+		echo "Reloading $DESC ..."
+		kill -s 1 $pid || exit $?
+		;;
+	*)
+		echo "$DESC is not running; none reloaded." >&2
+		;;
+	esac
+	exit $status
+}
+
+
+#
+# Function that shows the daemon/service status
+#
+status_of_proc () {
+	local pid status
+
+	status=0
+	# pidof output null when no program is running, so no "2>/dev/null".
+	pid=`pidofproc $NAME` || status=$?
+	case $status in
+	0)
+		echo "$DESC is running ($pid)."
+		exit 0
+		;;
+	*)
+		echo "$DESC is not running." >&2
+		exit $status
+		;;
+	esac
+}
+
+case "$1" in
+start)
+	do_start
+	;;
+stop)
+	do_stop || exit $?
+	;;
+status)
+	status_of_proc
+	;;
+restart)
+	# Always start the service regardless the status of do_stop
+	do_stop
+	do_start
+	;;
+try-restart|force-reload)
+	# force-reload is the same as reload or try-restart according
+	# to its definition, the reload is not implemented here, so
+	# force-reload is the alias of try-restart here, but it should
+	# be the alias of reload if reload is implemented.
+	#
+	# Only start the service when do_stop succeeds
+	do_stop && do_start
+	;;
+#reload)
+	# If the "reload" action is implemented properly, then let the
+	# force-reload be the alias of reload, and remove it from
+	# try-restart|force-reload)
+	#
+	#do_reload
+	#;;
+*)
+	echo "Usage: $0 {start|stop|status|restart|try-restart|force-reload}" >&2
+	exit 3
+	;;
+esac
+
diff --git a/recipes/halibut_0.0.1.bb b/recipes/halibut_0.0.1.bb
deleted file mode 100644
index 47dcad8d6b2c977991c8919a0345313611d8d60a..0000000000000000000000000000000000000000
--- a/recipes/halibut_0.0.1.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "LOFAR 2.0 Hardware Translator: Monitor and control devices via OPC-UA"
-DESCRIPTION = "LOFAR 2.0 Hardware Translator running on CCD and APSPU to monitor and control I2C devices via OPC-UA."
-HOMEPAGE = "https://git.astron.nl/lofar2.0/halibut"
-BUGTRACKER = "https://git.astron.nl/lofar2.0/halibut/-/issues"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
-
-SRC_URI = " \
-    git://gitlab.com/systerel/S2OPC.git;protocol=https;branch=S2OPC_Toolkit_1.5.1;tag=S2OPC_Toolkit_1.5.1;destsuffix=deps/s2opc-src;nobranch=1 \
-    git://git.astron.nl/lofar2.0/halibut.git;branch=L2SS-1516-port-pypcc-to-s2opc;rev=f3125335f3e73cb366185513d4b32a9424320277 \
-    "
-
-S = "${WORKDIR}/git"
-SRCREV_FORMAT = "halibut"
-
-DEPENDS:append = "\
-    expat \
-    mbedtls \
-"
-
-inherit cmake
-OECMAKE_CXX_FLAGS:append:toolchain-gcc = " -ffile-prefix-map=${WORKDIR}= -fdebug-prefix-map=${WORKDIR}= "
-
-EXTRA_OECMAKE = " -DENABLE_TESTING=OFF -DENABLE_SAMPLES=OFF -DS2OPC_CRYPTO_MBEDTLS=OFF -DFETCHCONTENT_BASE_DIR=${WORKDIR}/deps/ -DCMAKE_BUILD_TYPE=Release -G Ninja"
-
-INSANE_SKIP:${PN} += "/usr/bin/hwtr"
-
-do_package_qa() {
-}
-
-#FILES:${PN} += "${datadir}"
-
-COMPATIBLE_HOST = "(aarch64|x86_64).*-linux"
diff --git a/recipes/python3-aiofiles_24.1.0.bb b/recipes/python3-aiofiles_24.1.0.bb
new file mode 100644
index 0000000000000000000000000000000000000000..d69714a9742036a5fb2af626c2a4b826dd1c500b
--- /dev/null
+++ b/recipes/python3-aiofiles_24.1.0.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "File support for asyncio."
+HOMEPAGE = "None"
+AUTHOR = "None <Tin Tvrtkovic <tinchester@gmail.com>>"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
+
+SRC_URI = "https://files.pythonhosted.org/packages/0b/03/a88171e277e8caa88a4c77808c20ebb04ba74cc4681bf1e9416c862de237/aiofiles-24.1.0.tar.gz"
+SRC_URI[md5sum] = "530273426ff7ee50283e52186e185c81"
+SRC_URI[sha256sum] = "22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c"
+
+S = "${WORKDIR}/aiofiles-24.1.0"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-aiosqlite_0.20.0.bb b/recipes/python3-aiosqlite_0.20.0.bb
new file mode 100644
index 0000000000000000000000000000000000000000..b2232c93215809fc146f4c694fb6e186cb177ccf
--- /dev/null
+++ b/recipes/python3-aiosqlite_0.20.0.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "asyncio bridge to the standard sqlite3 module"
+HOMEPAGE = "None"
+AUTHOR = "None <Amethyst Reese <amy@n7.gg>>"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f0c422eaa1f23d09f8203dc0af3e2d54"
+
+SRC_URI = "https://files.pythonhosted.org/packages/0d/3a/22ff5415bf4d296c1e92b07fd746ad42c96781f13295a074d58e77747848/aiosqlite-0.20.0.tar.gz"
+SRC_URI[md5sum] = "22620fe09bc9d9df3bffef19919eed7f"
+SRC_URI[sha256sum] = "6d35c8c256637f4672f843c31021464090805bf925385ac39473fb16eaaca3d7"
+
+S = "${WORKDIR}/aiosqlite-0.20.0"
+
+RDEPENDS_${PN} = "python3-typing-extensions"
+
+inherit setuptools3
diff --git a/recipes/python3-asyncua_1.1.5.bb b/recipes/python3-asyncua_1.1.5.bb
new file mode 100644
index 0000000000000000000000000000000000000000..08fc4e5dc19b513a482833af635478fef54f0285
--- /dev/null
+++ b/recipes/python3-asyncua_1.1.5.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Pure Python OPC-UA client and server library"
+HOMEPAGE = "http://freeopcua.github.io/"
+AUTHOR = "Olivier Roulet-Dubonnet <olivier.roulet@gmail.com>"
+LICENSE = "LGPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+SRC_URI = "https://files.pythonhosted.org/packages/49/be/be6dad2b7db58fc9e92260fa9fdda8604841f2863d60ec2c49dccb1f9661/asyncua-1.1.5.tar.gz"
+SRC_URI[md5sum] = "8c41793e873928027dad4da9035aaf8a"
+SRC_URI[sha256sum] = "d5edac9234fd7f1ed6a923fad1bd709bd0fd3f8a0d41637d645666620375173f"
+
+S = "${WORKDIR}/asyncua-1.1.5"
+
+RDEPENDS_${PN} = "python3-aiofiles python3-aiosqlite python3-python-dateutil python3-pytz python3-cryptography python3-sortedcontainers python3-pyopenssl python3-typing-extensions"
+
+inherit setuptools3
diff --git a/recipes/python3-certifi_2024.8.30.bb b/recipes/python3-certifi_2024.8.30.bb
new file mode 100644
index 0000000000000000000000000000000000000000..dfc33c43368a81a9421a6c2c6e5b28c9184d8327
--- /dev/null
+++ b/recipes/python3-certifi_2024.8.30.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Python package for providing Mozilla's CA Bundle."
+HOMEPAGE = "https://github.com/certifi/python-certifi"
+AUTHOR = "Kenneth Reitz <me@kennethreitz.com>"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=11618cb6a975948679286b1211bd573c"
+
+SRC_URI = "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz"
+SRC_URI[md5sum] = "f842fc7a8ef562539e07873475eed593"
+SRC_URI[sha256sum] = "bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"
+
+S = "${WORKDIR}/certifi-2024.8.30"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-charset-normalizer_3.3.2.bb b/recipes/python3-charset-normalizer_3.3.2.bb
new file mode 100644
index 0000000000000000000000000000000000000000..5585ffb42b2b384bf173928cfe080a2283839237
--- /dev/null
+++ b/recipes/python3-charset-normalizer_3.3.2.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
+HOMEPAGE = "https://github.com/Ousret/charset_normalizer"
+AUTHOR = "Ahmed TAHRI <ahmed.tahri@cloudnursery.dev>"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0974a390827087287db39928f7c524b5"
+
+SRC_URI = "https://files.pythonhosted.org/packages/63/09/c1bc53dab74b1816a00d8d030de5bf98f724c52c1635e07681d312f20be8/charset-normalizer-3.3.2.tar.gz"
+SRC_URI[md5sum] = "0a4019908d9e50ff13138e8a794d9e2b"
+SRC_URI[sha256sum] = "f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"
+
+S = "${WORKDIR}/charset-normalizer-3.3.2"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-deprecated_1.2.14.bb b/recipes/python3-deprecated_1.2.14.bb
new file mode 100644
index 0000000000000000000000000000000000000000..caed2894e3bf411ac82c1d359848707d0b92327d
--- /dev/null
+++ b/recipes/python3-deprecated_1.2.14.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Python @deprecated decorator to deprecate old python classes, functions or methods."
+HOMEPAGE = "https://github.com/tantale/deprecated"
+AUTHOR = "Laurent LAPORTE <tantale.solutions@gmail.com>"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=44288e26f4896bdab14072d4fa35ff01"
+
+SRC_URI = "https://files.pythonhosted.org/packages/92/14/1e41f504a246fc224d2ac264c227975427a85caf37c3979979edb9b1b232/Deprecated-1.2.14.tar.gz"
+SRC_URI[md5sum] = "57e0ded86d04f22c65033dea230ad035"
+SRC_URI[sha256sum] = "e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"
+
+S = "${WORKDIR}/Deprecated-1.2.14"
+
+RDEPENDS_${PN} = "python3-wrapt"
+
+inherit setuptools3
diff --git a/recipes/python3-idna_3.10.bb b/recipes/python3-idna_3.10.bb
new file mode 100644
index 0000000000000000000000000000000000000000..0cdab68ad46e679e064b5a8e813b1bfe382081f3
--- /dev/null
+++ b/recipes/python3-idna_3.10.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Internationalized Domain Names in Applications (IDNA)"
+HOMEPAGE = "None"
+AUTHOR = "None <Kim Davies <kim+pypi@gumleaf.org>>"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=204c0612e40a4dd46012a78d02c80fb1"
+
+SRC_URI = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz"
+SRC_URI[md5sum] = "28448b00665099117b6daa9887812cc4"
+SRC_URI[sha256sum] = "12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"
+
+S = "${WORKDIR}/idna-3.10"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-importlib-resources_6.4.5.bb b/recipes/python3-importlib-resources_6.4.5.bb
new file mode 100644
index 0000000000000000000000000000000000000000..41b7219abc48b44df7c49e42055dc47e45249ae0
--- /dev/null
+++ b/recipes/python3-importlib-resources_6.4.5.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Read resources from Python packages"
+HOMEPAGE = "None"
+AUTHOR = "None <Barry Warsaw <barry@python.org>>"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI = "https://files.pythonhosted.org/packages/98/be/f3e8c6081b684f176b761e6a2fef02a0be939740ed6f54109a2951d806f3/importlib_resources-6.4.5.tar.gz"
+SRC_URI[md5sum] = "1e59bab9b52373ee500b4e2907af9a85"
+SRC_URI[sha256sum] = "980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"
+
+S = "${WORKDIR}/importlib_resources-6.4.5"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-limits_3.13.0.bb b/recipes/python3-limits_3.13.0.bb
new file mode 100644
index 0000000000000000000000000000000000000000..0123c98fde13a2e977a1b79e86e74eca6b6819d9
--- /dev/null
+++ b/recipes/python3-limits_3.13.0.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Rate limiting utilities"
+HOMEPAGE = "https://limits.readthedocs.org"
+AUTHOR = "Ali-Akber Saifee <ali@indydevs.org>"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2455d5e574bc0fc489411ca45766ac78"
+
+SRC_URI = "https://files.pythonhosted.org/packages/c4/5f/89fb5405ee37d8b172e48e357438dd79482731b0cd5db2f734ac58f019e4/limits-3.13.0.tar.gz"
+SRC_URI[md5sum] = "b94cb8c334294c850deae07f445b94d2"
+SRC_URI[sha256sum] = "6571b0c567bfa175a35fed9f8a954c0c92f1c3200804282f1b8f1de4ad98a953"
+
+S = "${WORKDIR}/limits-3.13.0"
+
+RDEPENDS_${PN} = "python3-deprecated python3-importlib-resources python3-packaging python3-typing-extensions"
+
+inherit setuptools3
diff --git a/recipes/python3-packaging_24.1.bb b/recipes/python3-packaging_24.1.bb
new file mode 100644
index 0000000000000000000000000000000000000000..676ce51686a26aea93bea723572e1f8f8b721274
--- /dev/null
+++ b/recipes/python3-packaging_24.1.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Core utilities for Python packages"
+HOMEPAGE = "None"
+AUTHOR = "None <Donald Stufft <donald@stufft.io>>"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=faadaedca9251a90b205c9167578ce91"
+
+SRC_URI = "https://files.pythonhosted.org/packages/51/65/50db4dda066951078f0a96cf12f4b9ada6e4b811516bf0262c0f4f7064d4/packaging-24.1.tar.gz"
+SRC_URI[md5sum] = "99b97d1f30017a62a2aae777a14782d0"
+SRC_URI[sha256sum] = "026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"
+
+S = "${WORKDIR}/packaging-24.1"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-pylibi2c_0.2.1.bb b/recipes/python3-pylibi2c_0.2.1.bb
new file mode 100644
index 0000000000000000000000000000000000000000..ac73e05ab42d52c5792f55ac61717956b0843d98
--- /dev/null
+++ b/recipes/python3-pylibi2c_0.2.1.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Linux userspace i2c operation library"
+HOMEPAGE = "https://github.com/amaork/libi2c"
+AUTHOR = "Amaork <amaork <amaork@gmail.com>>"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e634287ae62a4f8c6004aca72b94fc28"
+
+SRC_URI = "https://files.pythonhosted.org/packages/a5/b9/d206e9d751cdad20add03a00d10d2608f9d84f413bf338eae0420cbaff23/pylibi2c-0.2.1.tar.gz"
+SRC_URI[md5sum] = "5eac0db57008274783cd6d63a5a02642"
+SRC_URI[sha256sum] = "7f7b9e8d1c7adf79ba8c5fdccbcb5c116e4c0f873fcf99b48f78bb765bec09e4"
+
+S = "${WORKDIR}/pylibi2c-0.2.1"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-pylogbeat_2.0.1.bb b/recipes/python3-pylogbeat_2.0.1.bb
new file mode 100644
index 0000000000000000000000000000000000000000..3d1ab0392477fff4ab12bdb1ea88a406cf01cfd9
--- /dev/null
+++ b/recipes/python3-pylogbeat_2.0.1.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Simple, incomplete implementation of the Beats protocol used by Elastic Beats and Logstash."
+HOMEPAGE = "https://github.com/eht16/pylogbeat/"
+AUTHOR = "Enrico Tröger <enrico.troeger@uvena.de>"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=cfe8bfb2bbcdfb318a315828e007e25d"
+
+SRC_URI = "https://files.pythonhosted.org/packages/ac/3d/310e231cbe5137a0393bf91fb1c0515c5ebb9b17d891e7f31d53e8c4bfa6/pylogbeat-2.0.1.tar.gz"
+SRC_URI[md5sum] = "f7db4488d49b70243b88567165898fa8"
+SRC_URI[sha256sum] = "c483f0002b896f487299467ae88f8da5d4dde2de22abee2ad4cc66ec89108645"
+
+S = "${WORKDIR}/pylogbeat-2.0.1"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-pyopenssl_24.2.1.bb b/recipes/python3-pyopenssl_24.2.1.bb
new file mode 100644
index 0000000000000000000000000000000000000000..1ec72650879e4517da35d20df4db3bdb1e9ca612
--- /dev/null
+++ b/recipes/python3-pyopenssl_24.2.1.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Python wrapper module around the OpenSSL library"
+HOMEPAGE = "https://pyopenssl.org/"
+AUTHOR = "The pyOpenSSL developers <cryptography-dev@python.org>"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI = "https://files.pythonhosted.org/packages/5d/70/ff56a63248562e77c0c8ee4aefc3224258f1856977e0c1472672b62dadb8/pyopenssl-24.2.1.tar.gz"
+SRC_URI[md5sum] = "4e41c41b8a14ac141dde132c348aaf5d"
+SRC_URI[sha256sum] = "4247f0dbe3748d560dcbb2ff3ea01af0f9a1a001ef5f7c4c647956ed8cbf0e95"
+
+S = "${WORKDIR}/pyopenssl-24.2.1"
+
+RDEPENDS_${PN} = "python3-cryptography"
+
+inherit setuptools3
diff --git a/recipes/python3-pypcc_1.0.0.bb b/recipes/python3-pypcc_1.0.0.bb
new file mode 100644
index 0000000000000000000000000000000000000000..5341acd1ecfe0af67af2b1798c769574662cdc73
--- /dev/null
+++ b/recipes/python3-pypcc_1.0.0.bb
@@ -0,0 +1,67 @@
+SUMMARY = "in-depth comparison of files, archives, and directories"
+DESCRIPTION = "Tries to get to the bottom of what makes files or directories \
+different. It will recursively unpack archives of many kinds and transform \
+various binary formats into more human-readable form to compare them. \
+It can compare two tarballs, ISO images, or PDF just as easily."
+HOMEPAGE = "https://diffoscope.org/"
+BUGTRACKER = "https://salsa.debian.org/reproducible-builds/diffoscope/-/issues"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e69695c29b07eeb2a832d4a7e1f1e86b"
+
+inherit setuptools3
+
+SRC_URI = " \
+    git://git.astron.nl/lofar2.0/pypcc.git;branch=yocto;rev=7963eebea771fb5e437bc6b6546d44eec182ed72 \
+    git://gitlab.com/systerel/S2OPC.git;branch=S2OPC_Toolkit_1.5.1;rev=c4d5a55701f758ff7aa09192672194893c1dcb45;destsuffix=git/deps/s2opc \
+    "
+
+S = "${WORKDIR}/git"
+
+#BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += "\
+    initscripts \
+    bash \
+    python3-modules \
+    python3-fcntl \
+    python3-multiprocessing \
+    python3-cryptography \
+    python3-pyopenssl \
+    python3-aiofiles \
+    python3-setuptools \
+    python3-pylibi2c \
+    python3-numpy \
+    python3-asyncua \
+    python3-numpy \
+    python3-recordclass \
+    python3-pyyaml \
+    python3-python-logstash-async \
+    python3-rpi-gpio \
+    python3-smbus \
+    python3-dateutil \
+    python3-pytz \
+"
+
+do_install:append () {    
+    install -d ${D}${sysconfdir}/hwtr
+    install -d ${D}${sysconfdir}/default/hwtr
+    install -m 644 -t ${D}${sysconfdir}/hwtr ${S}/pypcc/config/*
+    install -m 644 -t ${D}${sysconfdir}/default/hwtr ${S}/default-config/*
+
+	install -d ${D}${sysconfdir}/init.d
+	cat ${S}/bin/hwtr | \
+	  sed -e 's,/etc,${sysconfdir},g' \
+	      -e 's,/usr/sbin,${sbindir},g' \
+	      -e 's,/var,${localstatedir},g' \
+	      -e 's,/usr/bin,${bindir},g' \
+	      -e 's,/usr,${prefix},g' > ${D}${sysconfdir}/init.d/hwtr
+	chmod a+x ${D}${sysconfdir}/init.d/hwtr
+    ln -s -r ${D}${sysconfdir}/init.d/hwtr ${D}${sysconfdir}/init.d/hwtr.apscttr
+    ln -s -r ${D}${sysconfdir}/init.d/hwtr ${D}${sysconfdir}/init.d/hwtr.apsputr
+    ln -s -r ${D}${sysconfdir}/init.d/hwtr ${D}${sysconfdir}/init.d/hwtr.ccdtr
+    ln -s -r ${D}${sysconfdir}/init.d/hwtr ${D}${sysconfdir}/init.d/hwtr.recvtr
+    ln -s -r ${D}${sysconfdir}/init.d/hwtr ${D}${sysconfdir}/init.d/hwtr.unb2tr
+}
+
+
+#CONFFILES:${PN} += "${sysconfdir}/pypcc/config"
diff --git a/recipes/python3-python-dateutil_2.9.0.post0.bb b/recipes/python3-python-dateutil_2.9.0.post0.bb
new file mode 100644
index 0000000000000000000000000000000000000000..205a8e6d28f34507603b08c77f2a065e0e5e1f30
--- /dev/null
+++ b/recipes/python3-python-dateutil_2.9.0.post0.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Extensions to the standard Python datetime module"
+HOMEPAGE = "https://github.com/dateutil/dateutil"
+AUTHOR = "Gustavo Niemeyer <gustavo@niemeyer.net>"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e3155c7bdc71f66e02678411d2abf996"
+
+SRC_URI = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz"
+SRC_URI[md5sum] = "81cb6aad924ef40ebfd3d62eaebe47c6"
+SRC_URI[sha256sum] = "37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"
+
+S = "${WORKDIR}/python-dateutil-2.9.0.post0"
+
+RDEPENDS_${PN} = "python3-six"
+
+inherit setuptools3
diff --git a/recipes/python3-python-logstash-async_3.0.0.bb b/recipes/python3-python-logstash-async_3.0.0.bb
new file mode 100644
index 0000000000000000000000000000000000000000..d5260d53430851356f231eb163de640b6219510f
--- /dev/null
+++ b/recipes/python3-python-logstash-async_3.0.0.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Asynchronous Python logging handler for Logstash."
+HOMEPAGE = "https://github.com/eht16/python-logstash-async"
+AUTHOR = "Enrico Tröger <enrico.troeger@uvena.de>"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3182001001c4ca30ab9518729301ca63"
+
+SRC_URI = "https://files.pythonhosted.org/packages/49/de/268a0c18ea8422254e4a6ebd767430b30899dcdc38a20fcbf0400b553755/python-logstash-async-3.0.0.tar.gz"
+SRC_URI[md5sum] = "86fa30581d7e9a4bf39571137e8051b1"
+SRC_URI[sha256sum] = "acbbac8355d556d12cd7d89fd05da6ea7c1d548bff1f9ebda8721e4b3a751379"
+
+S = "${WORKDIR}/python-logstash-async-3.0.0"
+
+RDEPENDS_${PN} = "python3-limits python3-pylogbeat python3-requests"
+
+inherit setuptools3
diff --git a/recipes/python3-pytz_2024.2.bb b/recipes/python3-pytz_2024.2.bb
new file mode 100644
index 0000000000000000000000000000000000000000..d71ad41b67641df1a8879502738244ff71c01ebb
--- /dev/null
+++ b/recipes/python3-pytz_2024.2.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "World timezone definitions, modern and historical"
+HOMEPAGE = "http://pythonhosted.org/pytz"
+AUTHOR = "Stuart Bishop <stuart@stuartbishop.net>"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=1a67fc46c1b596cce5d21209bbe75999"
+
+SRC_URI = "https://files.pythonhosted.org/packages/3a/31/3c70bf7603cc2dca0f19bdc53b4537a797747a58875b552c8c413d963a3f/pytz-2024.2.tar.gz"
+SRC_URI[md5sum] = "efcb554763a36b3e18acee074f44d1a5"
+SRC_URI[sha256sum] = "2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"
+
+S = "${WORKDIR}/pytz-2024.2"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-recordclass_0.22.1.bb b/recipes/python3-recordclass_0.22.1.bb
new file mode 100644
index 0000000000000000000000000000000000000000..14bfe7e7ca3bf3ecd335d3c5da7057d0d42cafef
--- /dev/null
+++ b/recipes/python3-recordclass_0.22.1.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Mutable variant of namedtuple -- recordclass, which support assignments, compact dataclasses and other memory saving variants."
+HOMEPAGE = "https://github.com/intellimath/recordclass"
+AUTHOR = "Zaur Shibzukhov <szport@gmail.com>"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=632b16170a42117ce73eaca5e992bf27"
+
+SRC_URI = "https://files.pythonhosted.org/packages/fd/ee/f45fac2500ef2e401b6073023b59ae6a51e189732ca85409b0dfbb3f51a4/recordclass-0.22.1.tar.gz"
+SRC_URI[md5sum] = "1d99bc016c1679256bef97a35bdd9a4f"
+SRC_URI[sha256sum] = "80a4c79270edb8fb55bcb96bec0159a292b485c997e2f33b38fdc9e8d6c0c315"
+
+S = "${WORKDIR}/recordclass-0.22.1"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-requests_2.32.3.bb b/recipes/python3-requests_2.32.3.bb
new file mode 100644
index 0000000000000000000000000000000000000000..62782af3a31cec99253e62aeddf70f712e9c7a83
--- /dev/null
+++ b/recipes/python3-requests_2.32.3.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Python HTTP for Humans."
+HOMEPAGE = "https://requests.readthedocs.io"
+AUTHOR = "Kenneth Reitz <me@kennethreitz.org>"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=34400b68072d710fecd0a2940a0d1658"
+
+SRC_URI = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz"
+SRC_URI[md5sum] = "fa3ee5ac3f1b3f4368bd74ab530d3f0f"
+SRC_URI[sha256sum] = "55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"
+
+S = "${WORKDIR}/requests-2.32.3"
+
+RDEPENDS_${PN} = "python3-charset-normalizer python3-idna python3-urllib3 python3-certifi"
+
+inherit setuptools3
diff --git a/recipes/python3-rpi-gpio_0.7.1.bb b/recipes/python3-rpi-gpio_0.7.1.bb
new file mode 100644
index 0000000000000000000000000000000000000000..8011d36fb156f0fd1b2b6f23510fd9e626625950
--- /dev/null
+++ b/recipes/python3-rpi-gpio_0.7.1.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "A module to control Raspberry Pi GPIO channels"
+HOMEPAGE = "http://sourceforge.net/projects/raspberry-gpio-python/"
+AUTHOR = "Ben Croston <ben@croston.org>"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://setup.py;md5=f85f6b9f8e6b7437e5f58f73ae33e558"
+
+SRC_URI = "https://files.pythonhosted.org/packages/c4/0f/10b524a12b3445af1c607c27b2f5ed122ef55756e29942900e5c950735f2/RPi.GPIO-0.7.1.tar.gz"
+SRC_URI[md5sum] = "22704930a4e674a3d35342bde6d69fe5"
+SRC_URI[sha256sum] = "cd61c4b03c37b62bba4a5acfea9862749c33c618e0295e7e90aa4713fb373b70"
+
+S = "${WORKDIR}/RPi.GPIO-0.7.1"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-six_1.16.0.bb b/recipes/python3-six_1.16.0.bb
new file mode 100644
index 0000000000000000000000000000000000000000..3e84f806f24af0fafe7c15c4f4232d3a7db0b052
--- /dev/null
+++ b/recipes/python3-six_1.16.0.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Python 2 and 3 compatibility utilities"
+HOMEPAGE = "https://github.com/benjaminp/six"
+AUTHOR = "Benjamin Peterson <benjamin@python.org>"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=43cfc9e4ac0e377acfb9b76f56b8415d"
+
+SRC_URI = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz"
+SRC_URI[md5sum] = "a7c927740e4964dd29b72cebfc1429bb"
+SRC_URI[sha256sum] = "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"
+
+S = "${WORKDIR}/six-1.16.0"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-sortedcontainers_2.4.0.bb b/recipes/python3-sortedcontainers_2.4.0.bb
new file mode 100644
index 0000000000000000000000000000000000000000..6aefc48648089951c896e97a2b4dce3fdc1f4831
--- /dev/null
+++ b/recipes/python3-sortedcontainers_2.4.0.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set"
+HOMEPAGE = "http://www.grantjenks.com/docs/sortedcontainers/"
+AUTHOR = "Grant Jenks <contact@grantjenks.com>"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7c7c6a1a12ec816da16c1839137d53ae"
+
+SRC_URI = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz"
+SRC_URI[md5sum] = "50eeb6cb739568b590b28f9a3f445c78"
+SRC_URI[sha256sum] = "25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"
+
+S = "${WORKDIR}/sortedcontainers-2.4.0"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-typing-extensions_4.12.2.bb b/recipes/python3-typing-extensions_4.12.2.bb
new file mode 100644
index 0000000000000000000000000000000000000000..c229cfe6e091c36dcbe1c487d304c39c518be163
--- /dev/null
+++ b/recipes/python3-typing-extensions_4.12.2.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Backported and Experimental Type Hints for Python 3.8+"
+HOMEPAGE = "None"
+AUTHOR = "None <"Guido van Rossum, Jukka Lehtosalo, Łukasz Langa, Michael Lee" <levkivskyi@gmail.com>>"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fcf6b249c2641540219a727f35d8d2c2"
+
+SRC_URI = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz"
+SRC_URI[md5sum] = "cf64c2313f5fa5eb04c1deb3fc93abe9"
+SRC_URI[sha256sum] = "1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"
+
+S = "${WORKDIR}/typing_extensions-4.12.2"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-urllib3_2.2.3.bb b/recipes/python3-urllib3_2.2.3.bb
new file mode 100644
index 0000000000000000000000000000000000000000..dd977dd49de2860401c2c1ac5d4d7767f201c260
--- /dev/null
+++ b/recipes/python3-urllib3_2.2.3.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "HTTP library with thread-safe connection pooling, file post, and more."
+HOMEPAGE = "None"
+AUTHOR = "None <Andrey Petrov <andrey.petrov@shazow.net>>"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=52d273a3054ced561275d4d15260ecda"
+
+SRC_URI = "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz"
+SRC_URI[md5sum] = "d65de4f0effae2b52669246f0aab0a91"
+SRC_URI[sha256sum] = "e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"
+
+S = "${WORKDIR}/urllib3-2.2.3"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3
diff --git a/recipes/python3-versions.inc b/recipes/python3-versions.inc
new file mode 100644
index 0000000000000000000000000000000000000000..cfb53ce1d0fc266460a672f97664ab24536a8100
--- /dev/null
+++ b/recipes/python3-versions.inc
@@ -0,0 +1 @@
+PREFERRED_VERSION_python3-cryptography = "43.0.1"
\ No newline at end of file
diff --git a/recipes/python3-wrapt_1.16.0.bb b/recipes/python3-wrapt_1.16.0.bb
new file mode 100644
index 0000000000000000000000000000000000000000..f34f0029dee83c00eff48a69eb1fa769667818d4
--- /dev/null
+++ b/recipes/python3-wrapt_1.16.0.bb
@@ -0,0 +1,16 @@
+
+SUMMARY = "Module for decorators, wrappers and monkey patching."
+HOMEPAGE = "https://github.com/GrahamDumpleton/wrapt"
+AUTHOR = "Graham Dumpleton <Graham.Dumpleton@gmail.com>"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=dc34cbad60bc961452eb7ade801d25f7"
+
+SRC_URI = "https://files.pythonhosted.org/packages/95/4c/063a912e20bcef7124e0df97282a8af3ff3e4b603ce84c481d6d7346be0a/wrapt-1.16.0.tar.gz"
+SRC_URI[md5sum] = "3e370b4bc08f7dcc518cf8895673b19c"
+SRC_URI[sha256sum] = "5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"
+
+S = "${WORKDIR}/wrapt-1.16.0"
+
+RDEPENDS_${PN} = ""
+
+inherit setuptools3