diff --git a/etc/fakeNode.py b/etc/fakeNode.py new file mode 100644 index 0000000..c964682 --- /dev/null +++ b/etc/fakeNode.py @@ -0,0 +1,102 @@ +# https://github.com/pdxlocations/mudp/blob/main/examples/helloworld-example.py +import time +import random +from pubsub import pub +from meshtastic.protobuf import mesh_pb2 +from mudp import ( + conn, + node, + UDPPacketStream, + send_nodeinfo, + send_text_message, + send_device_telemetry, + send_position, + send_environment_metrics, + send_power_metrics, + send_waypoint, +) + +MCAST_GRP = "224.0.0.69" +MCAST_PORT = 4403 +KEY = "1PG7OiApB1nwvP+rz05pAQ==" + +interface = UDPPacketStream(MCAST_GRP, MCAST_PORT, key=KEY) + +def setup_node(): + node.node_id = "!deadbeef" + node.long_name = "UDP Test" + node.short_name = "UDP" + node.channel = "LongFast" + node.key = "AQ==" + conn.setup_multicast(MCAST_GRP, MCAST_PORT) + # Convert hex node_id to decimal (strip the '!' first) + decimal_id = int(node.node_id[1:], 16) + print(f"Node ID: {node.node_id} (decimal: {decimal_id})") + print(f"Channel: {node.channel}, Key: {node.key}") + +def demo_send_messages(): + print("Sending node info...") + send_nodeinfo() + time.sleep(3) + print("Sending text message...") + send_text_message("hello world") + time.sleep(3) + print("Sending device telemetry position...") + send_position(latitude=37.7749, longitude=-122.4194, altitude=3000, precision_bits=3, ground_speed=5) + time.sleep(3) + print("Sending device telemetry local node data...") + send_device_telemetry(battery_level=50, voltage=3.7, channel_utilization=25, air_util_tx=15, uptime_seconds=123456) + time.sleep(3) + print("Sending environment metrics...") + send_environment_metrics( + temperature=23.072298, + relative_humidity=17.5602016, + barometric_pressure=995.36261, + gas_resistance=229.093369, + voltage=5.816, + current=-29.3, + iaq=66, + ) + time.sleep(3) + print("Sending power metrics...") + send_power_metrics( + ch1_voltage=18.744, + ch1_current=11.2, + ch2_voltage=2.792, + ch2_current=18.4, + ch3_voltage=0, + ch3_current=0, + ) + time.sleep(3) + print("Sending waypoint...") + send_waypoint( + id=random.randint(1, 2**32 - 1), + latitude=45.271394, + longitude=-121.736083, + expire=0, + locked_to=node.node_id, + name="Camp", + description="Main campsite near the lake", + icon=0x1F3D5, # 🏕 + ) + +def main(): + setup_node() + interface.start() + print("MUDP Fake Node is running. Press Ctrl+C to exit.") + print("You can send demo messages to the network.") + try: + while True: + answer = input("Do you want to send demo messages? (y/n): ").strip().lower() + if answer == "y": + demo_send_messages() + elif answer == "n": + print("Exiting.") + break + except KeyboardInterrupt: + pass + finally: + interface.stop() + +if __name__ == "__main__": + main()