Exception beim Berry-Script

  • Hi,

    ich habe versucht ein Berry-skript zu erstellen, mit dem ich LORA-Empfangsdaten im Hauptmenü anzeigen kann.

    Das Skript wirft mir immer folgenden Fehler: Exception> 'syntax_error' - input:1: expected '->' before '/'

    Habt ihr eine Idee, was mir der Fehler sagen will? Danke euch.

    Das Skript selbst sieht wie folgt aus:

  • Dein Berry-Skript für Tasmota sieht größtenteils korrekt aus, aber es gibt ein paar potenzielle Syntax- und Laufzeitfehler : ich bin im Berry nicht mit dabei, da zu komplex !

    Mögliche Probleme:

    1. Zuweisung von lastReceivedTime

      Code
      berryKopierenBearbeitenlastReceivedTime = time()
      • Das time()-Objekt gibt normalerweise eine Zahl (z. B. Unix-Zeit) zurück. Falls Tasmota eine andere Art von Zeitwert erwartet, könnte das problematisch sein. Prüfe, ob du besser time().toString() verwenden solltest.
    2. JSON-Serialisierung von payload

      Code
      berryKopierenBearbeitenmqtt.publish(topic, json.encode(payload), false)
      • Falls json.encode() nicht verfügbar ist oder eine Fehlermeldung wirft, prüfe, ob mqtt.publish() stattdessen eine Zeichenkette erwartet:

        Code
        berryKopierenBearbeitenmqtt.publish(topic, '{"message": "' + lastMessage + '", "rssi": ' + lastRSSI + ', "received_time": "' + lastReceivedTime + '"}', false)
    3. Datenzugriff in onLoRaReceive

      Code
      berryKopierenBearbeitenlastMessage = data["Data"]  // Nachrichtinhalt
      lastRSSI = data["RSSI"]      // Empfangsstärke
      • Falls data nicht garantiert ein Dictionary ist, könnte dies zu einem Fehler führen. Du kannst mit if "Data" in data absichern:

        Code
        berryKopierenBearbeitenif "Data" in data and "RSSI" in data {
            lastMessage = data["Data"]
            lastRSSI = data["RSSI"]
        }
    4. lastReceivedTime als Bedingung in if-Statements

      Code
      berryKopierenBearbeitenif lastReceivedTime != ""
      • Falls lastReceivedTime eine Zahl ist (von time()), sollte die Bedingung if lastReceivedTime > 0 sein.

    Überarbeitete Version:

    Änderungen:

    Überprüfung von data vor dem Zugriff auf Data und RSSI
    Korrektur der lastReceivedTime-Bedingung (> 0 statt != "")
    Sichere JSON-Serialisierung vor mqtt.publish()