OpenWebRX+ um Automation erweitert

November 2023

Ich wollte gerne meine Sensoren der Funk-Wetterstation von der Firma Bresser mitlesen und deren Daten einfach zwischenspeichern, damit man sehen kann, wie sie die Temperatur-Werte im Laufe der Zeit verändern. Da ich ja das Web-SDR am Laufen habe, fragte ich mich, ob man die Werte damit nicht einfach auslesen und per MQTT an meinen Server für die solaranzeige.de Software senden kann. Dort ist ja alles vorhanden, was man zur Weiterverarbeitung braucht (MQTT, InfluxDB & Grafana.) also habe ich nach einigem Herumprobieren und ein paar Hinweisen vom Programmierer des OWRX folgendes hinzugefügt, was man nach jedem Update wieder einfügen muss:

Da ich das RaspberryPi Image von OWRX+ nutze, habe ich im Pfad: /usr/lib/python3/dist-packages/owrx die Datei toolbox.py geändert:

                # ganz oben in der Datei bei den imports einfügen:
                import subprocess

                # in der class TextParser(LineBasedModule):
                # nach __del__ einfügen:
                def mqtt(self, line):
                    # Initialisierung des Arrays
                    if not hasattr(self, 'data_array'):
                        self.data_array = {}
                    key = ""
                    value = ""
                    shell_script_path = '/var/lib/openwebrx/mqtt_send.sh'

                    msg = str(line)
                    msg = msg.replace("b'","")
                    msg = msg.replace("'","")
                    #logger.info("TEXT2PARSE pre  : %s" % msg)
                    if len(msg) < 4:
                        # Array ausgeben und zurücksetzen
                        result = self.data_array
                        #logger.info("TEXT2PARSE Array-Length: %s" % str(len(result)))
                        try:
                            if result.get("model") == "Nexus-TH" and result.get("Channel") == "2":
                                logger.info("TEXT2PARSE md: %s" % result.get("model"))
                                logger.info("TEXT2PARSE CH: %s" % result.get("Channel"))
                                logger.info("TEXT2PARSE T : %s" % result.get("Temperature"))
                                logger.info("TEXT2PARSE H : %s" % result.get("Humidity"))
                                command = [shell_script_path, "Aussen", result.get("Temperature"), result.get("Humidity")]
                                logger.info("TEXT2PARSE cmd %s" % command)
                                subprocess.run(command, check=True)
                            else:
                                logger.info("TEXT2PARSE CH: %s (not)" % result.get("Channel"))

                        except subprocess.CalledProcessError as e:
                            logger.info("TEXT2PARSE: kein Nexus-TH oder anderer Fehler {e}")


                        self.data_array = {}

                    else:
                        # Verarbeiten der Datenzeile
                        data = str(msg).strip()
                        if ": " in data:
                            key, value = data.split(': ')
                            key = key.strip()
                            value = value.strip()
                            if key == "Temperature":
                                value = value.replace(" C","")
                            if key == "Humidity":
                                value = value.replace(" %","")
                            self.data_array[key] = value

                    #logger.info("TEXT2PARSE split: %s - %s " % (str(key), str(value)))
              

Und etwas weiter unten in der Methode process:

                # unter out = None einfügen:
                out = self.mqtt(line)
              

Projektinformation

  • Kategorie: Funk
  • Bereich: WEB-SDR Server
  • Project date: irgendwann 2023