forked from iarv/meshing-around
Create fakeNode.py
This commit is contained in:
102
etc/fakeNode.py
Normal file
102
etc/fakeNode.py
Normal file
@@ -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()
|
||||
Reference in New Issue
Block a user