从“Globaltronics”品牌接收和/或向无线电控制插座(GT-FSI-11型)发送命令。

gtsocket的Python项目详细描述


简介
==



此软件包提供python模块"gtsocket",可用于从制造商"globaltronics"向(打开和关闭)433MHz受控的
插座(型号gt-fsi-11)发送命令,并接收由相应的远程。

支持的型号(目前已知)是:
*Globaltronics:gt-fsi-11(Aldi Süd也以易用型销售)

请发送[电子邮件](gtsocket@funke-software.de),我将更新此文档。

如果您喜欢快速概述,请至少阅读**使用**和**脚本**部分。


安装
==


此软件包可以通过pip安装:


或从github页克隆:

git clonegit@github.com:funkesoftware/gtsocket.git



a**signal**(如本文档中所用)是433MHz上发送的时间段,在这段时间内,要么一直打开,要么一直关闭。
这些信号在配置中定义为正整数或负整数。
正值表示x微秒打开,负值表示x微秒关闭,即300=300微秒开启(在433MHz上接收信号),-2400=2400微秒。关(不接收任何信号)。

a**signal sequence**(如本文档中所用)指一系列信号,例如:[-300,700]表示前300微秒。关,然后700微秒。on.

a**数据序列**是二进制1和0的序列。编码定义如何将数据序列作为信号序列发送。例如,1可以作为[300,-700]发送,0可以作为[1000]发送,-200]。


从远程发送到套接字的每个命令由以下架构的四个部分组成:


-init**信号序列:由以相同编码发送的所有命令共享-**数据**数据序列:由一个或多个socket命令组合共享
-数据序列**结束**:由特定socket的所有命令共享

每个socket命令组合都有不同的数据序列。遥控器一个接一个地发出这些信号。每个命令序列以所有可用的编码发送(在我的情况下为2),并重复多次(在我的情况下为4次)。

结束(a)[以编码2发送四次]
初始开始数据(a-on2)结束(a)[以编码1发送四次]
初始开始数据(a-on2)结束(a)[以编码2发送四次]
初始开始数据(a-on3)结束(a)[以编码1发送四次]
初始开始数据(a-on3)结束(a)[以编码2发送四次]
init start data(a-on4)end(a)[以编码方式发送1四次]
init start data(a-on4)end(a)[以编码方式发送2四次]

命令。

configuration
=使用:

-**接收GPIO引脚**和**发送GPIO引脚**设置Rasperry PI GPIO bcm引脚号433MHz接收器和发送器连接到
-**最大信号差**定义测量信号长度和T之间的最大差在编码中定义的信号长度,用于将测量信号识别为定义信号(百分比)
-**序列最小长度**定义被认为有效的信号序列的最小长度,较短的序列不会触发信号/命令
处理程序
-**序列重复**定义发送命令时使用给定编码重复命令信号序列的频率(制造商的
远程重复四次)

不同的编码。我的遥控器以两种不同的编码发送命令,我假设其他遥控器使用相同的编码。所以你可以在这里保留默认配置。编码定义如下:

[编码:1]
init=300,-2400
1=1000,-500
0=300,-1200

编码名称可以自由选择(但最好省略空白字符)。
每个命令序列以包含两个信号的init序列开始,每个二进制1和每个二进制0分别编码为两个信号。

相同的编码和相同的起始数据序列。它们在[group:name]部分定义。

[group:1]
encodings=1,2
起始数据=1110

with**编码**定义编码的名称,with**起始数据**定义一组套接字使用的起始数据序列。

节。

[插座:A]
组=1
打开命令数据=11011101001100101100110100011000111110010101101011010
关闭命令数据=0100001011000001000001010001011011101011,0000100000111
结束数据=1100

带**组**定义此套接字所属的套接字组。使用**end_data**定义此套接字使用的结束数据序列。使用**打开命令数据**和**关闭命令数据**将打开和关闭命令的数据序列定义为逗号分隔列表。一些套接字命令组合共享相同的数据序列。对于我的套接字,a-on和c-off的数据序列是相同的。在这种情况下,您可以按如下方式重用另一个套接字的数据序列:

[socket:c]
off_command_data=socket:a on_command_data


usage
==


请确保首先完成配置部分。默认配置很可能无法使用套接字。"bin/gtsocket setup"脚本提供了一个向导,用于创建特定于您的设置的配置文件。
请查看"bin/gtsocket test"脚本,其中包含发送和接收命令的工作示例。

模块

import gtsocket


初始化配置文件中配置的raspberry pi的gpios。这将发送管脚配置为输出管脚,将接收管脚配置为输入管脚。这只需要在脚本开始时执行一次,**而不是每次发送命令时**。


gtsocket.initialize_gpios()


create socket object指定命令应发送到的套接字的名称(如配置中所定义),然后发送命令"on"
打开此套接字。

socket=gtsocket.socket('a')
socket.send_command('on')

这会将这些管脚设置回输入模式。
这只需在脚本结束时执行一次,**而不是每次发送命令时执行**。


gtsocket.clear_gpios()


receiving commands
----


import module:

import gtsocket

initialize gpios在*sending commands*:


gtsocket.initialize_gpios()


create socket object中所述的raspberry pi,应接收以下对象的命令:


socket=gtsocket.socket('a')

将任何函数注册为thi的命令处理程序s套接字:

socket.add_command_handler(my_command_handler)

例如,它可能如下所示:

def my_command_handler(socket,command):
print("received command",command,"for socket",socket.get_name())

这将创建一个新线程来进行接收。线程保存在
"socket.receiving_thread"中,并由"start_receiving()"返回。


socket.start_receiving()


如果要停止接收,请执行以下操作:

socket.stop_receiving()
socket.receiving_thread.join()

清除树莓pi的gpio,如"发送"中所述命令*

gtsocket.clear_gpios()


scripts
==


通过PIP安装时,可以使用命令"gtsocket setup"和"gtsocket test"(否则,您可以在"bin/"文件夹中找到它们)。
"gtsocket setup"是一个帮助工具,用于查找正确的编码和特定套接字的信号/数据序列,并为设置创建配置文件。
`gtsocket test`用作演示,演示如何使用模块,并可用于手动发送命令和测试
接收命令是否有效。


setup script-gtsocket setup
--------


说明。将创建一个特定于安装程序的配置文件` ~/.gtsocket/config.ini`。

setup脚本包括三个步骤:*pins*、*encodings*和*sequences*
在没有任何选项的情况下调用脚本将从第一步开始。
使用**-s/--step**选项,您可以直接跳转到某个步骤。

在脚本的开头(无论步骤如何),系统会询问您要为哪组套接字创建配置。一组插座是由同一个遥控器控制的插座。您可以自由选择名称,但应避免使用空白字符。

**管脚**定义发送和接收设备连接到的GPIO管脚。

**编码**用于确定远程用于发送数据的编码(通过无线电发送的信号有多长,用于
发送二进制1和0)。(另请参见"如何工作"和"配置"部分)


系统会要求您按住遥控器上的一个按钮,以便脚本可以接收发送的信号并确定编码(在您的帮助下)。
之后,您将获得接收信号的概述,这些信号应该与此类似:


p(0)=-200,p(1)=800,p(2)=-500,p(3)=1000,p(4)=200,p(5)=-100,p(6)=300,p(7)=-1200,p(8)=-1300,p(9)=-2400,p(a)=-2400,p(a)=1100,p(b)=2900,p(c)=-7300,p(d)=900,p(e)=-600,p(f)=400,p(10)=-1100,p(11)=-5700,p(12)=-100,p(12)=-100,p(4)=-200,p(5)=-100,p(5)=-100,p(6)=-100,p(6)=-300,,P(13)=-1500,P(14)=-1400,P(15)=-1000,P(16)=-400,p(17)=700,p(18)=-800,p(19)=3000,p(1a)=600,p(1b)=-2500,p(1c)=-3400,p(1d)=-900,p(1e)=-700
接收信号:0.1.2.3.2.4.5.1.2.6.7.6.8.3.2.6.8.3.2.3.2.6.8.3.2.4.8.6.7.6.8.3.2.3.2.3.2.4.8.6.8.6.9.3.2.a.2.3.2.6.8.6.8.3.2.3.2.a.2.6.7.6.8.a.2.4.8.a.2.3.2.6.7.3.2.6.7.6.7.6.8.a.2.3.2.3.2.6.8.6.8.6.9.a.2.3.2.3.2.6.8.6.7.a.
2.3.2.3.2.6.8.6.8.3.2.4.8.3.2.3.2.6.8.3.2.6.8.6.8.6.8.3.2.a.2.3.2.6.8.6.8.b.c.d.e.d.e.d.e.f.10.f.10.d.e.3.e.d.e.f.10.f.7.d.e.f.10.f.11.12.13.12.14.12.13.12.0.12.0.12.15.12.16.12.15.12.0.12.7.12.13.12.5.12.8.4.5.12.5.12.5.12.5.12.5.12.5.12.5.12.5.12.5.12.5.12.5.12.5.12.5.
12.5.12.5.12.5.12.c.d.e.d.e.d.e.f.7.f.10.d.e.d.e.d.e.f.7.f.10.d.e.f.10.d.e.d.e.f.7.d.e.f.10.f.10.f.10.d.e.d.e.d.e.f.10.f.10.b.c.d.e.d.e.d.e.f.10.f.10.d.e.d.e.d.e.f.10.f.10.d.e.f.10.d.e.d.e.f.10.d.e.f.10.f.10.f.10.d.e.d.e.17.18.f.10.f.10.19.c.d.e.d.e.d.e.f.10.f.
10.d.e.d.e.d.e.f.10.f.10.1a.1b.12.0.12.16.12.18.12.1c.12.0.12.1d.12.0.12.7.12.5.12.8.12.5.12.8.12.5.12.5.12.5.12.5.12.e.d.e.d.e.f.10.f.7.6.9.3.2.A.2.3.2.6.7.A.2.3.2.6.7.6.7.6.7.3.2.3.2.3.2.6.7.6.7.3.2.8.3.2.6.3.2.3.2.3.2.6.8.6.8.6.9.3.2.3.2.3.2.6.8.3.2.a.2.6.7.
6.7.6.7.a.2.3.2.3.2.3.2.6.7.6.7.3.2.6.8.3.2.6.8.3.2.3.2.3.2.6.7.6.7.6.9.3.2.3.2.3.2.6.7.a.2.3.2.6.8.6.8.6.8.3.2.3.2.3.2.3.2.6.7.6.8.3.2.6.8.3.2.6.7.3.2.3.2.3.2.6.8.6.8.6.9.3.2.3.2.3.2.6.7.a.2.3.2.6.7.6.7.6.8.3.2.3.2.a.2.3.2.
6.8.6.7.3.2.6.8.3.2.6.8.3.2.3.2.3.2.6.8.6.8.b.c.d.e.d.e.d.e.f.10.d.e.d.e.f.10.f.10.f.10.d.e.d.e.d.e.d.e.f.10.f.10.d.e.f.10.d.e.f.10.d.e.d.e.d.e.f.10.f.10.19.c.d.e.d.e.d.e.f.10.d.e.d.e.f.10.f.10.f.10.d.e.d.e.d.e.d.e.f.10.f.10.d.e.f.10.d.e.f.10.d.e.d.e.d.e.f.10.f.10.19.
c.d.e.d.e.d.e.f.10.d.e.d.e.f.10.f.10.f.10D.D.D.D.E.D.D.E.D.E.D.E.D.E.D.D.D.D.D.E.D.D.E.D.D.E.D.D.D.E.D.D.E.D.D.E.D.D.E.D.D.E.D.D.D.D.D.D.D.D.D.D.D.D.E.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.E.E.D.D.D.E.D.D.D.D.E.D.D.E.D.D.E.D.D.E.E.D.D.D.E.D.E.E.D.E.D D.E.F.10.F.


第一行是一个图例,显示如何(使用哪些索引)在下面向您显示接收到的信号。接收信号被点隔开,每个数字对应一个接收信号。在本例中,"0"表示接收到200微秒的低信号,"6"表示接收到300微秒的高信号。

这看起来比实际情况更复杂。看看哪些索引在序列中重复,哪些没有重复。在本例中,索引"0"和"1"可以在开头找到,但不会在后面出现,因此它们很可能是噪音。例如,"3"、"8"、"10"经常出现。

现在决定保留哪些索引(命令信号)和消除哪些索引(噪声)。你不必在第一次尝试时100%正确。只需保留那些你确定是命令信号和那些你不确定。您将重复此操作,直到对命令信号非常确定为止。多留总比少留好。几个错误的信号不会对你造成伤害。(阅读*它是如何工作的*和*配置*会对您有所帮助。)

P(1)=-2400,P(2)=1000,P(3)=-500,P(4)=-1200,P(5)=2900,P(6)=-7300,P(7)=900,P(8)=-600,P(9)=400,p(a)=-1100
接收信号:04787894940123232304230404232304232304230423230423042323042401232304230404232304232304230423230423042323042401232304710404040404040404030000030000000000080000428004230000030424012323042304042323042323042304232304230423230404040404300404040408008000030800042804230000000030404040404040223230422304230404232304232304234232304230423040404040452678789A9A789A789A789A789A789A789A789A789A78989A9A56787899A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A23042323040401223230423230423232323042304042323042323040456789A789A78789A789A789A789A789A789A789A789A789A78789A78787878789A789A789A789A789A567878789A78787878789A789A789A789A78789A7878789A78789A78789A7878789A787878789A7878789A787878789A78789A7878789A78789A789A789A789A789A789A789A789A789A789A789A789A789A78942304040423230404012323230404232304042304232304230404042323040401232323040423230230404232304042304232304230404042323040412323040401232323040423230230230423230423040423230404232304042323056789A78789A789A789A789A789A789A789A567878789A78789A789A7878789A789A56787878789A9A787878787878
9A78789A789A7878789A5678789A7878789A789A789A789A9A7878789A940123234232304040223232302304042304230423232304040123234232304042323230404230423232304042304232323040412323042323041232304232304232304232304232304232304232304232304232302304042304232330423234042304042304232340423056787
A9A7878789A789A789A78789A5678789A787878949A78787878789A789A789A78789A78789A78789A7878789A7878789A789A78789A789A78789A78787878789A789A567878789A789A7878789A789A789A78789A787878789A7878789A7878789A7878789A7878789A787878789A787878423040423230423230423042323042304232304123232304230404232304232304230423230423042323042304232304
0401223230423040423230423230423042323042304232304230423230423042323042323042323042304232304230423230423042323042304232304234232304234232304234232304234232304278789A9A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A5678789A789A789A789A789A789A789A789A789A567789A789A789A789A789A789A789A789A789A789A789A7
89A787889A94012323423230423232323232323232323042304042323042323040412323042323042323230423230423232323232323232304230
选择编码名称后(您可以自由选择,但我建议保留默认值)您将被要求给出"init"、"binary 1"和"binary 0"的信号序列。必须从上面的接收信号序列中提取。一旦你了解了底层系统(参见"它是如何工作的"和"配置"部分),你就很容易发现:

每种编码都有两个信号。例如,上面的接收信号序列包含以下模式:

0478789494(初始垃圾)
012323230423040423230423230423042323042304232304230423230404(初始序列01,接下来是23对和04对)
接下来是78和9A对)
5678789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A789A7894


-编码1:01=init,23=binary 1,04=二进制0
-编码2:56=init,78=二进制1,9a=二进制0

但这两种编码必须一致。您可能已经注意到,"012323230423040423230423230423042323042304232304230423230404"和"5678789A789A789A789A78789A789A789A78789A789A789A789A"使用两种不同的编码对相同的数据进行编码。因此,如果选择将"23"设置为二进制1,则还必须将"78"设置为二进制1。

**序列**用于确定为每个命令(如"打开套接字A")发送的实际数据。

您希望能够使用。
请按照脚本的说明操作。您应该得到类似于下面的输出。(如果没有,您很可能在"编码"步骤中出错。请尝试重做it.):

<1110-11000111010101-1100
1110-11000111110010101-1100
1110-1100-0111
1110-1100
1110-1100011101010-1110
1110-110001-1110
1110-1001101011010-1100
1110-1001101101011010-1100
1110-1001101101011010-1100
1110-1001101011010-1100
1110-1001101011010-1100
0-1001101101010-1100
1110-1001101101010-1100
1110-1001101101010-1100
1110-100110110101101-0110
1110-1101111110100110-1100
1110-1101111110100110-1100
1110-1101111110100110-1100
1110-1101111111111110100110-1100100110-1100
1110-1101111110100110-1100
1110-11011111101001-1011
1110-0111011010001-1100
[…]


现在必须告诉脚本每个按钮的"开始数据"、"数据序列"和"结束数据"(socket命令组合)。所有按钮的"开始数据"应相同,每个插座的"结束数据"应唯一(不是按钮!)你应该能看到四种不同的"数据序列"。脚本通过用破折号分隔这三个字符来帮助区分它们。在本例中,"开始数据"是"1110",即"结束数据"是‘1100’,‘数据序列’是‘11000111110010101’,‘1001101101011010’,‘1101111110100110’和‘01111001010001’(最后一个也被重新编码,但在这里被截断)。

您可以在`~/.gtsocket/config.ini`中找到特定于套接字的配置文件,并准备好使用"gtsocket test"脚本进行测试。

testing script-gtsocket test(在此示例中,将命令"on"发送到套接字"a"):


gtsocket test-m send-sa-c on

接收特定套接字的命令并在一定时间内打印到stdout(在此示例中,套接字"b"持续5秒):


known问题
====


-同时从远程接收多个套接字的信号/命令无法正常工作。
在这种情况下,许多信号无法正确识别,从而导致无法检测到命令。



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
由于java的原因,maven无法运行代码。lang.NoClassDefFoundError:com/fasterxml/jackson/annotation/JsonMerge   Android项目中的java Creative SDK图像编辑器UI   java如何在Android Studio中使用DataOutputStream上传文件并将其他参数传递到web服务器   java倒计时服务打开时崩溃   java将RubyonRails项目转换为JRubyonRails项目   java我的图库意图是不显示图像?为什么?   java如何在春季启动时跳过mongodb/   java@Autowired在Spring中是如何实现的   甲骨文Akka java。util。同时发生的timeoutexception线程池频繁超时   java maven依赖项对spring启动应用程序有何影响?   java Firestore执行复合查询,未截获事件“已修改”   java ItemStreamException:未能初始化读取器,原因是:IllegalStateException:流已初始化。重新开放前关闭   java将空标记解组到集合的新实例中   使用AspectJ的java新手:无法调用aspect   java查找棋类游戏的所有组合   你为什么要这样做and==与Java中的equals方法不一样吗?   如何对使用JavaUUID的代码进行单元测试?