ROS iot_bridge für openHAB 3
Verfasst: 19. Apr 2022 12:44
Guten Morgen zusammen,
für das Robot Operating System (ROS) gab es dank dem GitHub-User corb555 eine iot_bridge zu openHAB 2. Diese lief für ROS Kinetic (Ubuntu 16.04) und ROS Lunar (Ubuntu 14.04). Ich habe mich dran gemacht, diese anzupassen. Dies beinhaltet gleich eine Anpassung zu openHAB 3 für ROS Kinetic (Ubuntu 16.04) und ROS Noetic (Ubuntu 20.04). Es sollte vermutlich auch ROS Melodic (Ubuntu 18.04) funktionieren, da dass Programm in Python 2 bzw. Python 3 läuft. ROS Kinetic nutzt noch Python 2 und ROS Noetic Python 3. Bei ROS Melodic könnte man sowohl Python 2 als auch Python 3 nutzen. Kommt auf die jeweilige Installation und Konfiguration an. ROS-Pakete in Python müssen Gott sei Dank nicht kompiliert werden. Wäre das Programm in C++ geschrieben, wäre es undenkbar, dass ich sagen würde, dass das Paket auch in ROS Melodic laufen würde, ohne es getestet zu haben.
Hier ein Link zu meinem kinetic-devel Branch: https://github.com/Michdo93/iot_bridge
Hier ein Link zu meinem noetic-devel Branch: https://github.com/Michdo93/iot_bridge/ ... etic-devel
Änderungen im Vergleich zum Original-Repository von corb555 (https://github.com/corb555/iot_bridge):
Aus
habe ich folgendes gemacht:
So müssen Benutzername und Passwort aus iot_bridge/config/items.yaml ebenso bezogen werden.
Um auf openHAB 3 zuzugreifen musste der Header von
angepasst werden zu
Der Unterschied zwischen Python 2 und Python 3 (also zwischen den Branches kinetic-devel und noetic-devel ist folgendes):
Außerdem natürlich in der ersten Zeile
anstelle von
Damit ROS Noetic dass auch bauen kann wurde in der CMakeLists.txt folgendes verändert:
ROS Kinetic:
ROS Noetic:
Ich weiß nicht auswendig, welches Minimum für ROS Melodic benötigt wird. Dies wäre dort die einzige Änderung.
Verwendung
Ich setze mal voraus, dass openHAB 3 und eine der drei ROS Distributionen installiert ist.
Bitte für noetic-devel oder kinetic-devel entsprechend entscheiden.
Als nächstes die iot_bridge/config/items.yaml anpassen, was Hostname, Port, Benutzername und Passwort von openHAB anbelangt.
Im letzten Schritt eine item-Datei erstellen oder eine bestehende Datei bearbeiten. Es muss einmal die ROS-Gruppe erstellt werden und jedes Item, dass über ROS seine Informationen publishen soll, muss dieser Gruppe zugeordnet werden.
Zum Beispiel /etc/openhab/ros.items:
Starten könnt ihr das Programm mit: roslaunch iot_bridge iot.launch
Weitere Informationen könnt ihr aus dem ROS Wiki der alten iot_bridge entnehmen: http://wiki.ros.org/iot_bridge
für das Robot Operating System (ROS) gab es dank dem GitHub-User corb555 eine iot_bridge zu openHAB 2. Diese lief für ROS Kinetic (Ubuntu 16.04) und ROS Lunar (Ubuntu 14.04). Ich habe mich dran gemacht, diese anzupassen. Dies beinhaltet gleich eine Anpassung zu openHAB 3 für ROS Kinetic (Ubuntu 16.04) und ROS Noetic (Ubuntu 20.04). Es sollte vermutlich auch ROS Melodic (Ubuntu 18.04) funktionieren, da dass Programm in Python 2 bzw. Python 3 läuft. ROS Kinetic nutzt noch Python 2 und ROS Noetic Python 3. Bei ROS Melodic könnte man sowohl Python 2 als auch Python 3 nutzen. Kommt auf die jeweilige Installation und Konfiguration an. ROS-Pakete in Python müssen Gott sei Dank nicht kompiliert werden. Wäre das Programm in C++ geschrieben, wäre es undenkbar, dass ich sagen würde, dass das Paket auch in ROS Melodic laufen würde, ohne es getestet zu haben.
Hier ein Link zu meinem kinetic-devel Branch: https://github.com/Michdo93/iot_bridge
Hier ein Link zu meinem noetic-devel Branch: https://github.com/Michdo93/iot_bridge/ ... etic-devel
Änderungen im Vergleich zum Original-Repository von corb555 (https://github.com/corb555/iot_bridge):
Aus
Code: Alles auswählen
self.iot_host = rospy.get_param(BASENAME + '/host', "localhost")
self.iot_port = rospy.get_param(BASENAME + '/port', 8080)
self.username = rospy.get_param(BASENAME + '/username', "openhab")
self.password = rospy.get_param(BASENAME + '/password', "")
self.poll_rate = rospy.get_param(BASENAME + '/pollrate', 2)
Code: Alles auswählen
self.iot_host = rospy.get_param(BASENAME + '/host')
self.iot_port = rospy.get_param(BASENAME + '/port')
self.username = rospy.get_param(BASENAME + '/username')
self.password = rospy.get_param(BASENAME + '/password')
self.poll_rate = rospy.get_param(BASENAME + '/pollrate', 2)
Um auf openHAB 3 zuzugreifen musste der Header von
Code: Alles auswählen
""" Header for OpenHAB REST request """
return {
"Authorization": "Basic %s" % self.cmd.auth,
# "X-Atmosphere-Transport": "streaming",
# "X-Atmosphere-tracking-id": self.iot_rest_id,
"X-Atmosphere-Framework": "1.0",
"Accept": "application/json"}
Code: Alles auswählen
return {"Accept": "application/json"}
Code: Alles auswählen
self.auth = None
if self.params.username is not None or len(self.params.username) != 1:
if self.params.password is not None or len(self.params.password) != 1:
self.auth = base64.encodestring(
'%s:%s' % (self.params.username, self.params.password)
).replace('\n', '')
else:
self.auth = base64.encodestring(
'%s:%s' % (self.params.username, "")
).replace('\n', '')
else:
self.auth = None
Code: Alles auswählen
self.auth = None
if self.params.username is not None or len(self.params.username) != 1:
if self.params.password is not None or len(self.params.password) != 1:
self.auth = base64.encodestring((
'%s:%s' % (self.params.username, self.params.password)
).replace('\n', '').encode()).decode().strip()
else:
self.auth = base64.encodestring((
'%s:%s' % (self.params.username, "")
).replace('\n', '').enconde()).decode().strip()
else:
self.auth = None
Code: Alles auswählen
#!/usr/bin/python3
Code: Alles auswählen
#!/usr/bin/python
ROS Kinetic:
Code: Alles auswählen
cmake_minimum_required(VERSION 2.8.3)
Code: Alles auswählen
cmake_minimum_required(VERSION 3.0.2)
Verwendung
Ich setze mal voraus, dass openHAB 3 und eine der drei ROS Distributionen installiert ist.
Code: Alles auswählen
cd catkin_ws/src
git clone --branch <noetic-|kinetic->devel https://github.com/Michdo93/iot_bridge.git
cd ..
catkin_make
Als nächstes die iot_bridge/config/items.yaml anpassen, was Hostname, Port, Benutzername und Passwort von openHAB anbelangt.
Im letzten Schritt eine item-Datei erstellen oder eine bestehende Datei bearbeiten. Es muss einmal die ROS-Gruppe erstellt werden und jedes Item, dass über ROS seine Informationen publishen soll, muss dieser Gruppe zugeordnet werden.
Zum Beispiel /etc/openhab/ros.items:
Code: Alles auswählen
Group ROS (All)
String ROS_Status "ROS [%s]"
Switch Light_GF_Corridor_Ceiling "Ceiling" (GF_Corridor, Lights, ROS)
Switch Light_GF_Bathroom (GF_Bathroom, Lights, ROS)
Weitere Informationen könnt ihr aus dem ROS Wiki der alten iot_bridge entnehmen: http://wiki.ros.org/iot_bridge