Python – die besten Beiträge

Wie bekomme ich es hin das eine Python Datei Automatisch gestartet wird auf dem Raspberry Pi5?

Ich habe Raspberry PiOS 64-Bit und versuche schon lange wie ich meine Python Datei "Autostarten" kann. Das Script schaut in einem Loop nach MQTT Nachrichten und führt befehle aus, wenn eine Bestimmte Nachricht eintrifft. Daher braucht es ja auch Internet zugriff usw. .

Ich habe schon vieles versucht wie "crontab -e" und eine Zeile mit "@reboot python3 /home/user/Openhab_Mqttv2.py &" hinzugefügt hat aber nicht geklappt und jetzt sitze ich daran es mit "systemd" zu probieren. Jedoch klappt es auch nicht und ich kriege nur Fehlermeldungen. Ich verstehe auch nicht ganz wie das "systemd" funktioniert. Außer dass ich eine ".service" Datei in "/etc/systemd/system" brauche damit etwas ausgeführt wird.

sudo nano /etc/systemd/system/Openhab_Mqttv2_Autostart.service

[Unit]
Description=Openhab Mqtt working  Autostart
After=network.target


[Service]
TimeoutStartSec=2min
ExecStart=/home/richard/Openhab_Mqttv2.py
Restart=always


[Install]
WantedBy=multi-user.target

Status:

x@raspberrypi:~ $ systemctl status Openhab_Mqttv2_Autostart.service
× Openhab_Mqttv2_Autostart.service - Openhab Mqtt working  Autostart
     Loaded: loaded (/etc/systemd/system/Openhab_Mqttv2_Autostart.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Tue 2024-04-02 23:51:00 CEST; 5s ago
   Duration: 1ms
    Process: 75239 ExecStart=/home/richard/Openhab_Mqttv2.py (code=exited, status=203/EXEC)
   Main PID: 75239 (code=exited, status=203/EXEC)
        CPU: 1ms


Apr 02 23:51:00 raspberrypi systemd[1]: Openhab_Mqttv2_Autostart.service: Scheduled restart job, restart counter is at 5.
Apr 02 23:51:00 raspberrypi systemd[1]: Stopped Openhab_Mqttv2_Autostart.service - Openhab Mqtt working  Autostart.
Apr 02 23:51:00 raspberrypi systemd[1]: Openhab_Mqttv2_Autostart.service: Start request repeated too quickly.
Apr 02 23:51:00 raspberrypi systemd[1]: Openhab_Mqttv2_Autostart.service: Failed with result 'exit-code'.
Apr 02 23:51:00 raspberrypi systemd[1]: Failed to start Openhab_Mqttv2_Autostart.service - Openhab Mqtt working  Autostart. 

journalctl:

x@raspberrypi:~ $ sudo journalctl -u Openhab_Mqttv2_Autostart.service
Apr 02 21:49:44 raspberrypi systemd[1]: Started Openhab_Mqttv2_Autostart.service - Mein Service.
Apr 02 21:49:45 raspberrypi python3[958]: Traceback (most recent call last):
Apr 02 21:49:45 raspberrypi python3[958]:   File "/home/richard/Openhab_Mqttv2.py", line 417, in <module>
Apr 02 21:49:45 raspberrypi python3[958]:     client.connect( "192.168.0.182", 1883, 60)
Apr 02 21:49:45 raspberrypi python3[958]:   File "/usr/lib/python3/dist-packages/paho/mqtt/client.py", line 914, in connect
Apr 02 21:49:45 raspberrypi python3[958]:     return self.reconnect()
Apr 02 21:49:45 raspberrypi python3[958]:            ^^^^^^^^^^^^^^^^
Apr 02 21:49:45 raspberrypi python3[958]:   File "/usr/lib/python3/dist-packages/paho/mqtt/client.py", line 1044, in reconnect
Apr 02 21:49:45 raspberrypi python3[958]:     sock = self._create_socket_connection()
Apr 02 21:49:45 raspberrypi python3[958]:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 21:49:45 raspberrypi python3[958]:   File "/usr/lib/python3/dist-packages/paho/mqtt/client.py", line 3685, in _create_socket_connection
Apr 02 21:49:45 raspberrypi python3[958]:     return socket.create_connection(addr, timeout=self._connect_timeout, source_address=source)
Apr 02 21:49:45 raspberrypi python3[958]:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 21:49:45 raspberrypi python3[958]:   File "/usr/lib/python3.11/socket.py", line 851, in create_connection
Apr 02 21:49:45 raspberrypi python3[958]:     raise exceptions[0]
Apr 02 21:49:45 raspberrypi python3[958]:   File "/usr/lib/python3.11/socket.py", line 836, in create_connection
Apr 02 21:49:45 raspberrypi python3[958]:     sock.connect(sa)
Apr 02 21:49:45 raspberrypi python3[958]: OSError: [Errno 101] Network is unreachable
Apr 02 21:49:45 raspberrypi systemd[1]: Openhab_Mqttv2_Autostart.service: Main process exited, code=exited, status=1/FAILURE
Apr 02 21:49:45 raspberrypi systemd[1]: Openhab_Mqttv2_Autostart.service: Failed with result 'exit-code'.
Apr 02 21:49:45 raspberrypi systemd[1]: Openhab_Mqttv2_Autostart.service: Scheduled restart job, restart counter is at 1.

Was genau kann ich an dem "/etc/systemd/system/Openhab_Mqttv2_Autostart.service" File ändern damit es endlich klappt, dass die Python Datei im Loop läuft und was genau habe ich falsch gemacht?

Mit ChatGPT versucht und es hat mir für die ".service" Datei gesagt, dass ich auch "/usr/bin/python3" zwischen "ExecStart=" und "/home" hinzufügen sollte. Habe es versucht und in der Fehlermeldung steht drin, dass man nicht mehr als einen setting in "ExecStart=" rein machen darf und auch mehrere "ExecStart=" gehen auch nicht.

Linux, Boot, System, Programmiersprache, Python, Autostart, Python 3, Raspberry Pi

Gibt es ein ähnliches (mobile) Spiel wie das was ich jetzt beschreibe?

Hi,

Ich hab eine Idee für eine richtig coole App und frag mich gibt es sowas vielleicht schon.

Also eine App wo man sich um ein Kind kümmern muss aber gar nicht wie so simples Tamagotchi sondern man sucht sich zuerst aus ob Mädchen oder junge und alter und kann dann mit ihm reden, also wie mit ChatGPT einer KI.

Dann muss man zb mit ihr zur schule, mit ihr Hausaufgaben machen usw alles was in echt.

Und man kann halt auch mit ihm reden mit KI stimme wie wenn man bei ChatGPT Sprachchat macht und man muss halt sie Erziehen dass sie ein liebes kind wird und kein freches balg und wenn man es nicht macht wird sie/er schlechte noten bekommen und man muss zu Elterngespräch in schule.

Oder wenn in RL Weihnachten ist dann auch bei dem KI kind, man macht ihm Geschenke und sie/er singt Weihnachtslieder und man spielt mit dem kind eben alles wie in echt und zieht es halt groß bloß dass die zeit ein bisschen schneller vorbei geht vielleicht 1 Monat = 1Jahr oder so.

Zb mit Einschulung, Grundschule, dann später Realschule oder so, Ausbildung oder Studium, sie oder er wird 18 und das game endet wenn er oder sie auszieht was ca. Ein jahr in RL dauern könnte und mit Geburtstag feiern, mit ihr/ihm Fernsehen, kuscheln und gute Nacht Geschichte erzählen usw.

Das wäre voll schön iwie.

Spiele, App, Kinder, Sims, Webseite, Gaming, Gamer, Handyspiele, künstliche Intelligenz, Python, Simulation, Simulator, Tamagotchi, Simulations Spiel, ChatGPT

Wo ist der Fehler in meinem Python Code (MQTT)?

Ich habe ein Python Script erstellt, damit später bei Nachrichten bestimmte befehle ausgeführt werden. Beim ersten Script(Openhab_Mqtt.py) habe ich beim Testen 3 Terminals aufgemacht und beim 2.(Openhab_Mqttv2.py) auch genau gleiche Sorgehensweise.

Im 1. Terminal habe ich das Python Script gestartet mit:

python Openhab_Mqttv2.py

Output:
Script 1: Connected to MQTT broker
Script 2: Connected to MQTT broker
Connected to MQTT broker

Im 2. Terminal habe ich die Nachricht ausgegeben bei Nachrichten mit:

mosquitto_sub -t "main/messager" -v -u xxx -P xxx

Output(Nach T3):
Script 1: main/messager test
Script 2: main/messager test

Und im 3. Terminal habe ich eine Nachricht gesendet mit:

mosquitto_pub -t "main/messager" -m "test" -u xxx-P xxx  

Output:
Script 1: Payload: test und BLA...
Script 2:

Ich kann einfach nicht den Fehler finden, warum es bei Openhab_Mqtt.py funktioniert und bei Openhab_Mqttv2.py nicht funktioniert.

Openhab_Mqtt.py DATA:

import paho.mqtt.client as mqtt
import os
import time
import bme280_temp
import smbus2
import bme280
import threading

def on_subscribe(client, userdata, mid, granted_qos):
 print("Subscribed to topic : " + str(mid) +" with QoS" + str(granted_qos))


def on_connect(client, userdata, flags, rc):
 print("Connected to MQTT broker")


def on_message(client, userdata, msg): 
 print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload))
 print("Payload: " + msg.payload.decode())
 if msg.payload.decode() == "send_signal":
  print("Calling script to send signal...")
  IR_Signal()
 if msg.payload.decode() == "temp_bme280_start":
  print("Calling script to for temperature start...")
  userdata["counter"] += 1
  print(str(userdata["counter"]))
  client.publish("frame/monitor", "START", qos=0, retain=True)
  Temp_sensor() 
 if msg.payload.decode() == "temp_bme280_stop":
  print("Calling script to for temperature stop...")
  userdata["counter"] -= 1
  print(str(userdata["counter"]))
  client.publish("frame/monitor", "STOP", qos=0, retain=True)
 if msg.payload.decode() == "test":
  print("BLA...")  
  print(str(["counter"])) 
  os.system("vcgencmd measure_temp") 
 else:
  pass    



#Bme280_basic Temperature
address = 0x76
bus = smbus2.SMBus(1)
calibration_params = bme280.load_calibration_params(bus, address)

def Temp_sensor():
 data = bme280.sample(bus, address, calibration_params)
 temperature_celsius = data.temperature      
 print("Temperature: {:.2f} °C".format(temperature_celsius))
 time.sleep(2)
    
 
def IR_Signal():
 os.system("irsend SEND_ONCE pioneer_vsx-301 KEY_POWER")
 print ("Signal Send!")


client = mqtt.Client()
client.on_message = on_message 
client.on_connect = on_connect
client.user_data_set({"counter": 0})
client.username_pw_set( "xx" , "xx" )
client.connect( "192.x.x.x", 1883, 60)
client.subscribe( "main/messager" , qos=0)


client.loop_forever() 

Openhab_Mqttv2.py

import paho.mqtt.client as mqtt
import time
import smbus2
import bme280
import threading


# Getting information
def on_subscribe(client, userdata, mid, granted_qos):
 print("Subscribed to topic : " + str(mid) +" with QoS" + str(granted_qos))
                                                                 
def on_connect(client, userdata, flags, rc):
 print("Connected to MQTT broker")


# Damit loops nicht am anfang durchstarten 
TempLoop_running = False


# Checking for messages to execute code
def on_message(client, userdata, msg):
 print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload))
 print("Payload: " + msg.payload.decode())
 if msg.payload.decode() == "Temp_Start":
  start_TempLoop()
 if msg.payload.decode() == "Temp_Stop":
  stop_TempLoop()
 if msg.payload.decode() == "test":
  print("TESTING...")
  client.publish("main/messager", "START", qos=0, retain=True)
 else:
  pass



# Execute things here ->


# Getting Temperature
address = 0x76
bus = smbus2.SMBus(1)
# Load calibration parameters
calibration_params = bme280.load_calibration_params(bus, address)
def Temperature_loop():
 global TempLoop_running
 while TempLoop_running:
  data = bme280.sample(bus, address, calibration_params)
  #Extract temperature, pressure, and humidity
  temperature_celsius = data.temperature      
  #Print the readings
  print("Temperature: {:.2f} °C".format(temperature_celsius))
  # Nachricht an das entsprechende Topic senden
  client.publish("Temp/Loop", "Temperature: {:.2f} °C".format(temperature_celsius))
  # Wartezeit, um die Ausgabe zu verlangsamen
  time.sleep(2)
# Funktion zum Starten der Temperatur Schleife
def start_TempLoop():
 global TempLoop_running
 TempLoop_running = True
 threading.Thread(target=Temperature_loop).start()
# Funktion zum Stoppen der Temperatur Schleife
def stop_TempLoop():
 global TempLoop_running
 TempLoop_running = False



# Set general data
client = mqtt.Client()
client.on_message = on_message 
client.on_connect = on_connect
client.connect( "192.x.x.x", 1883, 60)
client.username_pw_set( "xx", "xx" )
client.subscribe( "main/messager", qos=0)


# Loop forever
client.loop_forever()
Code, Python, Terminal, Message, Python 3, Raspberry Pi, mqtt

Javascript für allgemein programmieren lernen?

Hallo,

ich lerne aktuell programmieren bzw. habe schon etwas Erfahrung. Ich habe etwas in c rein geschnuppert, da ich mit Platinen gearbeitet habe. Allerdings habe ich da das Problem, dass ich zwar Sachen zum Laufen bekomme, es aber sehr lang dauert bzw. es mir sehr schwer fällt eine Struktur in mein Programm zu bringen.
Was in c noch dazu kommt: Man kann nicht so richtig das "reine programmieren" üben, weil man nie weiß ob es ein Hardware oder Software Problem ist. Teilweise debugge ich sehr lange meinen Code, nur um dann irgendeinen Hardware Fehler zu
finden und umgedreht.
Mir ist auch klar, dass genau das c programmieren ausmacht. Aber ich möchte jetzt erstmal etwas besser in programmieren und strukturieren von Programmen werden.

Jetzt hatte ich auch ein kleines bisschen mit Python angefangen, da man das auch später mal für Scripte gebrauchen kann. Hier fehlt mir allerdings etwas der Antrieb. Ideen für größere Programme finde ich nicht so richtig im Netz.

Jetzt war meine Idee ein paar kleine Spiele, wie z.B. Snake/TicTacToe etc. zu programmieren. Mit einer UI ist das in Python aber wieder etwas Pain.

In Javacript bzw. HTML/CSS bekommt man ja sehr viel leichter eine UI hin.

Denkt ihr ich kann auch Javascript verwenden um einfach besser im programmieren zu werden? Oder was sind eure Erfahrungen, wie man c programmieren besser lernt?

Bin für alle Tipps offen, vielen Dank!

HTML, CSS, Programmiersprache, Python

Meistgelesene Beiträge zum Thema Python