Skip to main content

Extension to connect to a local Homegear service.

Project description

python3-homegear

python3-homegear is a python extension to connect to Homegear over Unix Domain Sockets. It supports all of Homegear's RPC methods and live event reception.

Prerequisites

The extension requires libhomegear-ipc to be installed and it needs at least Python version 3. To install it, add the Homegear APT repository for your distribution (see https://homegear.eu/downloads.html) and execute

apt install libhomegear-ipc

Alternatively on non Debian-like systems you can compile libhomegear-ipc manually:

git clone https://github.com/Homegear/libhomegear-ipc
cd libhomegear-ipc
./makeRelease.sh

Setup

if you have pip, just do:

sudo python3 -m pip install homegear

To compile and install the extension manually, download it from GibHut and execute

sudo python3 setup.py install

Methods

There is only one object available: Homegear. It takes two parameters in it's constructor: The path to the Homegear IPC socket (normally /var/run/homegear/homegearIPC.sock) and a callback method. The callback method is executed when a device variable is updated in Homegear. On instantiation the class waits until it is connected succesfully to Homegear. After 2 seconds it returns even if there is no connection. To check, if the object is still connected, you can call connected(). Apart from this method, you can call all RPC methods available in Homegear (see ref.homegear.eu).

Behaviour on no connection

When there is no connection to Homegear, the constructor returns after 2 seconds. It indefinitely tries to reconnect until it is able to establish a connection. The same happens on connection loss. To check if the module is connected, call connected(). Even when there is no connection, you can still call all RPC methods without exception. The return value will be None.

Type conversion

Python variable to Homegear variable

Python Homegear
None Void
Bool Boolean
Long Integer
Float Float
Unicode String
Bytes Binary
List Array
Tuple Array
Dict Struct

Homegear variable to Python variable

Homegear Python
Void None
Boolean Bool
Integer Long
Float Float
String Unicode
Binary Bytes
Array List
Struct Dict

Usage example

A minimal example:

from homegear import Homegear

# This callback method is called on Homegear variable changes
def eventHandler(eventSource, peerId, channel, variableName, value):
	# Note that the event handler is called by a different thread than the main thread. I. e. thread synchronization is
	# needed when you access non local variables.
	print("Event handler called with arguments: source: " + eventSource + " peerId: " + str(peerId) + "; channel: " + str(channel) + "; variable name: " + variableName + "; value: " + str(value));

hg = Homegear("/var/run/homegear/homegearIPC.sock", eventHandler);

Please note that the callback method is called from a different thread. Please use thread synchronization when accessing shared variables.

To execute a RPC method, just type hg.<method name>. For example to set the system variable "TEST" to "6" and retrieve it again:

hg.setSystemVariable("TEST", 6);
print(hg.getSystemVariable("TEST"));

A full example:

import time
from homegear import Homegear

# This callback method is called on Homegear variable changes
def eventHandler(eventSource, peerId, channel, variableName, value):
	# Note that the event handler is called by a different thread than the main thread. I. e. thread synchronization is
	# needed when you access non local variables.
	print("Event handler called with arguments: source: " + eventSource + " peerId: " + str(peerId) + "; channel: " + str(channel) + "; variable name: " + variableName + "; value: " + str(value));

hg = Homegear("/var/run/homegear/homegearIPC.sock", eventHandler);

# hg waits until the connection is established (but for a maximum of 2 seonds).

hg.setSystemVariable("TEST", 6);
print("getSystemVariable(\"TEST\") after setting \"TEST\" to 6: ", hg.getSystemVariable("TEST"));

hg.setSystemVariable("TEST", ["One", 2, 3.3]);
print("getSystemVariable(\"TEST\") after setting \"TEST\" to an array: ", hg.getSystemVariable("TEST"));

hg.setSystemVariable("TEST", {"One": 1, 2: "Two", 3: [3, 3, 3]});
print("getSystemVariable(\"TEST\") after setting \"TEST\" to a struct: ", hg.getSystemVariable("TEST"));

counter = 0;
while(hg.connected()):
	time.sleep(1);
	counter += 1;
	hg.setSystemVariable("TEST", counter);

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

homegear-1.0.27.tar.gz (10.6 kB view details)

Uploaded Source

File details

Details for the file homegear-1.0.27.tar.gz.

File metadata

  • Download URL: homegear-1.0.27.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.5

File hashes

Hashes for homegear-1.0.27.tar.gz
Algorithm Hash digest
SHA256 7e7fae8821830808241b1aca87f78c96c757dbefd95444d1c82289fff2272f52
MD5 78ba57dc6bd06e5227516eff5aa9709f
BLAKE2b-256 c2f987faf73c48507c7e46b538789a8fad9b015a2c81a1685b1b8aec45cb7ef0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page