[Documentation] [TitleIndex] [WordIndex

Describe openhab_bridge/Tutorials/WritingAndExaminingASimplePublisherForTheLocationItemTypePython here.

import rospy
from openhab_msgs.msg import LocationCommand

class LocationPublisher(object):
    """Node example class."""

    def __init__(self, item_name):

        self.item_name = item_name
        self.pub = rospy.Publisher("/openhab/items/" + self.item_name + "/command", LocationCommand, queue_size=10)
        self.rate = rospy.Rate(10) # 10hz

        # Initialize message variables.
        self.enable = False
        self.message = None

        if self.enable:
            self.start()
        else:
            self.stop()

    def start(self):
        """Turn on publisher."""
        self.enable = True
        self.pub = rospy.Publisher("/openhab/items/" + self.item_name + "/command", LocationCommand, queue_size=10)

        while not rospy.is_shutdown():

            self.message = LocationCommand()

            self.message.latitude = 48.0501442
            self.message.longitude = 8.2014192
            self.message.altitude = 857.0
            
            self.message.isnull = False

            self.message.header.stamp = rospy.Time.now()
            self.message.header.frame_id = "/base_link"
            self.message.item = self.item_name

            message = "Publishing to %s at %s: latitude = %s, longitude = %s, altitude = %s" % (self.message.item, rospy.get_time(), self.message.latitude, self.message.longitude, self.message.altitude)
            rospy.loginfo(message)

            self.pub.publish(self.message)
            self.rate.sleep()

    def stop(self):
        """Turn off publisher."""
        self.enable = False
        self.pub.unregister()

# Main function.
if __name__ == "__main__":
    # Initialize the node and name it.
    rospy.init_node("LocationPublisherNode", anonymous=True)
    # Go to class functions that do all the heavy lifting.

    locationPublisher = LocationPublisher("testLocation")

    try:
        locationPublisher.start()
    except rospy.ROSInterruptException:
        pass
    # Allow ROS to go to all callbacks.
    # spin() simply keeps python from exiting until this node is stopped
    rospy.spin()

2024-11-23 14:49