Python fehler code bei langen texten?
Ich habe einen Programm in python geschrieben import json
import os


class NotizManager:
    def __init__(self, datei_name="notizen.json"):
        self.datei_name = datei_name
        self.notizen = self.notizen_laden()

    def notizen_laden(self):
        # Lade Notizen aus der JSON-Datei, falls vorhanden
        if os.path.exists(self.datei_name):
            with open(self.datei_name, 'r') as file:
                return json.load(file)
        return []

    def notizen_speichern(self):
        with open(self.datei_name, 'w') as file:
            json.dump(self.notizen, file, indent=4)

    def notiz_hinzufuegen(self, thema, inhalt):
        self.notizen.append({'thema': thema, 'inhalt': inhalt})
        self.notizen_speichern()
        print(f'Notiz "{thema}" wurde hinzugefügt.')

    def alle_notizen_anzeigen(self):
        if not self.notizen:
            print("Es gibt keine gespeicherten Notizen.")
        else:
            for index, notiz in enumerate(self.notizen, start=1):
                print(f'{index}. Thema: {notiz["thema"]}\n   Inhalt: {notiz["inhalt"]}\n')

    def notiz_bearbeiten(self, index, neues_thema, neuer_inhalt):
        if 0 <= index < len(self.notizen):
            self.notizen[index]['thema'] = neues_thema
            self.notizen[index]['inhalt'] = neuer_inhalt
            self.notizen_speichern()
            print(f'Notiz {index + 1} wurde aktualisiert.')
        else:
            print("Ungültiger Index. Bitte gib einen gültigen Notizindex ein.")

    def notiz_loeschen(self, index):
        if 0 <= index < len(self.notizen):
            geloeschte_notiz = self.notizen.pop(index)
            self.notizen_speichern()
            print(f'Notiz "{geloeschte_notiz["thema"]}" wurde gelöscht.')
        else:
            print("Ungültiger Index. Bitte gib einen gültigen Notizindex ein.")


def hauptmenue():
    manager = NotizManager()

    while True:
        print("\n--- Notiz Manager ---")
        print("1. Notiz hinzufügen")
        print("2. Alle Notizen anzeigen")
        print("3. Notiz bearbeiten")
        print("4. Notiz löschen")
        print("5. Beenden")

        auswahl = input("Wähle eine Option (1-5): ")

        if auswahl == '1':
            thema = input("Thema der Notiz: ")
            inhalt = input("Inhalt der Notiz: ")
            manager.notiz_hinzufuegen(thema, inhalt)

        elif auswahl == '2':
            manager.alle_notizen_anzeigen()

        elif auswahl == '3':
            manager.alle_notizen_anzeigen()
            try:
                index = int(input("Gib den Index der Notiz ein, die du bearbeiten möchtest: ")) - 1
                neues_thema = input("Neues Thema: ")
                neuer_inhalt = input("Neuer Inhalt: ")
                manager.notiz_bearbeiten(index, neues_thema, neuer_inhalt)
            except ValueError:
                print("Bitte gib eine gültige Zahl ein.")

        elif auswahl == '4':
            manager.alle_notizen_anzeigen()
            try:
                index = int(input("Gib den Index der Notiz ein, die du löschen möchtest: ")) - 1
                manager.notiz_loeschen(index)
            except ValueError:
                print("Bitte gib eine gültige Zahl ein.")

        elif auswahl == '5':
            print("Programm beendet.")
            break

        else:
            print("Ungültige Auswahl. Bitte wähle eine Option zwischen 1 und 5.")


if __name__ == "__main__":
    hauptmenue()
Das Problem ist wenn ich einen Thema hinzufügen möchte mache ich das Thema rein und danach der Titel, wenn ich aber einen langen Titel rein mache wird sich das print("\n--- Notiz Manager ---")
print("1. Notiz hinzufügen")
print("2. Alle Notizen anzeigen")
print("3. Notiz bearbeiten")
print("4. Notiz löschen")
print("5. Beenden")

mehrmals wiederholen und der text speichert sich nicht warum?

Code, Programmiersprache, Python, Python 3
Esp8266 Datenübertragung zu Webserver?

Servus, ich will mit dem ESP8266 messdaten an eine datenbank übertragen. Dafür nutzte ich dieses PHP script

<?php
// Datenbankverbindung
$servername = "";
$username = "";
$password = "";
$dbname = "";


// Verbindung zur Datenbank herstellen
$conn = new mysqli($servername, $username, $password, $dbname);


// Verbindung überprüfen
if ($conn->connect_error) {
    die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}


// POST-Daten empfangen
$startTime = $_POST['startTime'];
$elapsedTime = $_POST['elapsedTime'];


// SQL-Abfrage zur Einfügung der Daten
$sql = "INSERT INTO deine_tabelle (start_time, elapsed_time) VALUES ('$startTime', '$elapsedTime')";


if ($conn->query($sql) === TRUE) {
    echo "Daten erfolgreich gespeichert";
} else {
    echo "Fehler: " . $sql . "<br>" . $conn->error;
}


// Verbindung schließen
$conn->close();
?>

Und das ist mein Esp code:

#include <SPI.h>
#include <MFRC522.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>


#define SS_PIN D4  // SDA Pin (Slave Select)
#define RST_PIN D3 // Reset Pin
#define BUTTON_PIN D2  // Pin für den Button


const char* ssid = "";
const char* password = "";
const char* serverName = ""; // Pfad zum PHP-Skript


MFRC522 mfrc522(SS_PIN, RST_PIN);  // RFID-Instanz


unsigned long startTime;
bool timerActive = false;    // Gibt an, ob der Timer läuft
bool buttonPressed = false;  // Gibt an, ob der Button gedrückt wurde
bool waitingForCard = false; // Gibt an, ob wir auf eine Karte warten
bool cardDetectedOnce = false; // Gibt an, ob die Karte einmal erkannt wurde


WiFiClient client;  // WiFiClient-Instanz


void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);  // Button als Eingang mit internem Pullup-Widerstand
  Serial.begin(115200);               // Initialisiere die serielle Kommunikation
  SPI.begin();                        // Initialisiere den SPI-Bus
  mfrc522.PCD_Init();                 // Initialisiere den RFID-Leser


  // WLAN verbinden
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Verbinden mit WiFi...");
  }
  Serial.println("Mit WiFi verbunden!");
}


void loop() {
  // Überprüfen, ob der Button gedrückt wurde
  if (digitalRead(BUTTON_PIN) == LOW && !buttonPressed) {
    Serial.println("Button gedrückt. Warten auf Karte...");
    buttonPressed = true;      // Verhindert mehrfaches Auslösen
    waitingForCard = true;     // Aktiviert die Kartenüberprüfung
    cardDetectedOnce = false; // Zurücksetzen der Karteerkennung
  }


  // Überprüfen, ob wir auf eine Karte warten
  if (waitingForCard) {
    // Überprüfen, ob eine Karte in der Nähe ist
    if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
      if (!timerActive) {
        // Timer starten, wenn er nicht bereits läuft
        Serial.println("Karte erkannt! Timer startet.");
        startTime = millis();   // Startzeit speichern
        timerActive = true;     // Timer aktiv
        cardDetectedOnce = true; // Karte einmal erkannt
      } else if (cardDetectedOnce) {
        // Timer stoppen, wenn die Karte erneut erkannt wird
        unsigned long elapsedTime = millis() - startTime;
        Serial.print("Karte erneut erkannt! Timer gestoppt. Zeit: ");
        Serial.print(elapsedTime);
        Serial.println(" ms");


        // Daten an Server senden
        sendToServer(startTime, elapsedTime);


        timerActive = false;    // Timer stoppen
        buttonPressed = false;  // Erlaubt erneutes Drücken des Buttons
        waitingForCard = false; // Beendet die Kartenüberprüfung
      }


      // Karte gelesen, Lesevorgang stoppen
      mfrc522.PICC_HaltA();
      mfrc522.PCD_StopCrypto1();
    }
  }
}


// Funktion zum Senden der Daten an den Server
void sendToServer(unsigned long startTime, unsigned long elapsedTime) {
  if (WiFi.status() == WL_CONNECTED) { // Überprüfen, ob wir mit dem WLAN verbunden sind
    HTTPClient http;


    // URL festlegen mit WiFiClient
    http.begin(client, serverName);


    // HTTP-POST-Daten
    http.addHeader("Content-Type", "application/x-www-form-urlencoded");
    String postData = "startTime=" + String(startTime) + "&elapsedTime=" + String(elapsedTime);
    Serial.print("POST-Daten: ");
    Serial.println(postData);


    // HTTP-POST-Anfrage senden
    int httpResponseCode = http.POST(postData);


    if (httpResponseCode > 0) {
      String response = http.getString(); // Antwort vom Server lesen
      Serial.println("Antwort vom Server:");
      Serial.println(response);           // Antwort anzeigen
    } else {
      Serial.print("Fehler bei der HTTP-Anfrage: ");
      Serial.println(httpResponseCode);
      Serial.println("Möglicherweise ein Netzwerkproblem oder Server-Fehler.");
    }


    // Verbindung schließen
    http.end();
  } else {
    Serial.println("Nicht mit WiFi verbunden");
  }
}

Leider erhalte ich jedesmal folgende Fehlermeldung Fehler bei HTTP-Anfrage :-1

SQL, Webseite, Arduino, Code, Datenbank, MySQL, PHP, Programmiersprache, Webentwicklung, C (Programmiersprache), Arduino Uno, Arduino IDE
Wie muss ein Pingscript zu Fehlererkennung unter Linux aussehen, das bei Systemstart gestartet wird und ein Log schreibt?

Moin an alle,

ich habe da so ein kleines Projekt vor:
Da unser DSL ab und an aussetzt, da wir - so meine Vermutung - zu wenig Netzwerktraffic erzeugen (es scheint sich zumindest teils zu stabilisieren, wenn man dauerhaft sekündich Pings an Google sendet) und diese DSL-Fehler - so zumindest meine Vermutung - dann auf Dauer auch teils die Fritzbox zum Durchdrehen bringen, würde ich gerne zwei Raspberry Pis der ersten Generation mit Ubuntu bespielen und auf jedem ein Skript mit folgenden Anforderungen laufen lassen:

  • Startet automatisch bei Systemstart.
  • Pingt jede Sekunde eine IP-Adresse oder URL an (über eine Variable des Skripts festlegbar).
  • Dokumentierten jeden Pingfehler (Paket verloren, nicht erreichbar, etc.) in eine ".txt"-Datei.
  • Speichert die ".txt"-Datei mindestens einmal täglich zu einer bestimmten End-Uhrzeit, zu der auch das Skript pausiert wird (Zeit über eine Variable im 24h-Format festlegbar oder via Ubuntu regelbar?).
  • Beginnt eine neue ".txt"-Datei täglich zu einer bestimmten Anfangs-Uhrzeit, zu der auch das Skript neu gestartet wird (Zeit über eine Variable im 24h-Format festlegbar oder via Ubuntu regelbar?).
  • Name der ".txt"-Datei bzw. deren Namensschema am besten per Variable festlegbar.

Der eine Raspberry Pi soll an der Fritzbox direkt angeschlossen werden und die Fritzbox und "Google.de" anpingen (je eine eigene Instanz des Skripts mit je eigenen ".txt"-Logs).
Der andere Raspberry Pi soll am entferntesten Punkt im Netzwerk angeschlossen werden und "Google.de" und den ersten Raspberry Pi anpingen (je eine eigene Instanz des Skripts mit je eigenen ".txt"-Logs).

Ich erhoffe mir damit eine Übersicht der Ausfälle der DSL-Verbindung und der Spinnereinen der Fritzbox.
Die Netzwerkaussetzer sollen dann an den Internetanbieter gesendet werden. Der Rest dient als Nachweis ob die DSL-Aussetzer und die Aussetzer der Fritzbox wirklich zusammen hängen, wie ich das vermute.

Die Fritzbox mit samt Switches, Accesspoints, etc. lasse ich zudem ab sofort über Wochen-Zeitschaltuhren einmal täglch komplett rebooten, in der Hoffnung, dass das ein wenig Abhilfe schafft.

Ich hoffe Ihr könnt mir helfen, da ich leider keine Ahnung habe, wie ich das anstellen soll.
Ich habe zwar das hier für Windows gefunden, doch der Blogautor konnte mir bei Linux auch nicht weiterhelfen:
https://www.andysblog.de/windows-dauerping-mit-protokollierung-von-fehlern

Schonmal danke an alle Tipps und Hilfestellungen!

Server, Internet, WLAN, Internetverbindung, Programm, Netzwerk, IT, programmieren, DSL, FRITZ!Box, Informatik, IP-Adresse, LAN, Logik, Netzwerktechnik, Netzwerkverbindung, Programmiersprache, Router, skript, WLAN-Router, Ping, Repeater, LAN-Kabel, WLAN-Repeater, Raspberry Pi, Raspberry, Pinger

Meistgelesene Beiträge zum Thema Programmiersprache