Schrolli91 / BOSWatch

Python Script to process input data from rtl_fm and multimon-NG - multiple Plugin support
https://bwcc.boswatch.de
GNU General Public License v2.0
132 stars 59 forks source link

Übergabe durch json fehlerhaft? oder Fehler 60 #66

Closed Tauebenuss closed 9 years ago

Tauebenuss commented 9 years ago

Hallo, folgenden Fehler bekomme ich:

recv timed out, retry later
14.07.2015 14:14:44 [DEBUG   ] Aus: 1436876041
14.07.2015 14:14:44 [DEBUG   ] Now: 1436876084
14.07.2015 14:14:44 [DEBUG   ] parsed message: {u'function': u'1', u'functionChar': u'a', u'description': u'(13) FF Muster', u'msg': u'H\xf6ffentlich d\xe4s letzte M\xe4l, verspr\xfcchen', u'bitrate': 1200, u'ric': u'1234567'}
14.07.2015 14:14:44 [DEBUG   ] Open Alarm.html
14.07.2015 14:14:44 [ERROR   ] unknown error
Traceback (most recent call last):
  File "Alarmmonitor.py", line 143, in <module>
    index.write(line.replace(repl,message))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 1: ordinal not in range(128)
14.07.2015 14:14:44 [DEBUG   ] socketServer shuting down
14.07.2015 14:14:44 [DEBUG   ] socket closed
14.07.2015 14:14:44 [DEBUG   ] exiting socketServer
14.07.2015 14:14:44 [DEBUG   ] close Logging
14.07.2015 14:14:44 [INFO    ] socketServer exit()

Leider sehe ich glaube ich den Wald vor lauter Bäumen nicht mehr... Habe wirklich 0-Ahnung oder Ideen noch wo mein Fehler liegen könnte.

Danke schon mal.

Quelltext:

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
PLATZHALTER
"""

IP = ""
# listen on port
PORT = 10501

import fileinput, sys, os
import logging
import logging.handlers
from time import *
import socket
import json

#
# Main Program
#
try:
    # Logging
    myLogger = logging.getLogger()
    myLogger.setLevel(logging.DEBUG)
    formatter = logging.Formatter('%(asctime)s [%(levelname)-8s] %(message)s', '%d.%m.%Y %H:%M:%S')
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)
    ch.setFormatter(formatter)
    myLogger.addHandler(ch)

    # Start TCP socket:
    logging.debug("Start jsonSocketServer")
    sock = socket.socket()
    sock.bind((IP,PORT))
    sock.listen(1)
    sock.settimeout(5)
    logging.info("jsonSocketServer runs")
    aus = time()
    now = time()
    Display_active=0
    Areset = 1
    os.system("export DISPLAY=:0.0&&xhost +")
    os.system("xhost +")
    while True:
    #
    # Zeitüberwachung
    #   

        now = time()
        logging.debug("Aus: %i",aus)
        logging.debug("Now: %i",now)
        Display_active_man = 0

        if aus<now and Areset==1:
            logging.debug("Open Alarm.html")
            uhrzeit = open("uhr.html").readlines()
            index = open("index.html","w")
            for line in uhrzeit:
                index.write(line)
            index.close()
            Areset=0

        if Display_active==1 and aus<=now and Display_active_man!=1:
            os.system("tvservice -o")
            logging.debug("Display ausgeschaltet")
            Display_active = 0

        if Display_active_man==1 and Display_active==0:
            os.system("tvservice -p")
            os.system("chvt 6")
            os.system("chvt 7")
            Display_active = 1
            logging.debug("Display manuell eingeschaltet")

        if Display_active<1 and aus>now:
            os.system("tvservice -p")
            os.system("chvt 6")
            os.system("chvt 7")
            Display_active=1
            logging.debug("Display automatisch eingeschaltet")

        try:
            (clientsocket, address) = sock.accept()
            json_string = clientsocket.recv( 4096 ) # buffer size is 4096 bytes
        except socket.timeout, e:
            err = e.args[0]
            # this next if/else is a bit redundant, but illustrates how the
            # timeout exception is setup
            if err == 'timed out':
                sleep(1)
                print 'recv timed out, retry later'

            else:
                print e
                sys.exit(1)
        except socket.error, e:
            # Something else happened, handle error, exit, etc.
            print e
            sys.exit(1)
        else:
            if len(json_string) == 0:
                print 'orderly shutdown on server end'
                sys.exit(0)
            else:
                data = json.loads(json_string)
                logging.debug("parsed message: %s", data)
                alarmzeit = time()
                aus = alarmzeit+1800        
                try:
                    logging.debug("Open Alarm.html")
                    alarm = open("alarm.html").readlines()
                    index = open("index.html","w+")
                except:
                    logging.error("Cant open Alarmfile")

                TIME = strftime("%H:%M",localtime())                
                message = data["msg"]
                message.encode("utf-8")
                repl  = "%MELDUNG%"
                for line in alarm:
                    index.write(line.replace(repl,message))
                index.close()
                logging.debug("Chrome neu laden und Bildschirm anschalten")
                Display_active = 1
                Areset = 1
                os.system("Chrome-Refresh")
                os.system("tvservice -p")
                os.system("chvt 6")
                os.system("chvt 7") 

except KeyboardInterrupt:
    logging.warning("Keyboard Interrupt")
except:
    logging.exception("unknown error")
finally:
    try:
        logging.debug("socketServer shuting down")
        sock.close()
        logging.debug("socket closed")
        logging.debug("exiting socketServer")
    except:
        logging.warning("failed in clean-up routine")
    finally:
        logging.debug("close Logging")
        logging.info("socketServer exit()")
        logging.shutdown()
        ch.close()
        exit(0)
JHCD commented 9 years ago

Wo kommt die msg her? Original aus Multimon oder aus einem Textfile?

Tauebenuss commented 9 years ago

Aus einem Textfile. Allerdings bezieht sich die Fehlermeldung auf die replace Funktion. Wenn rpl = "123" ist dann funktioniert es... Bloß das % nimmt er nicht...

EDIT: Gedankenfehler : wenn rpl = 123 ersetzt er natürlich auch nichts...

Am 14.07.2015 um 16:54 schrieb Jens Herrmann notifications@github.com:

Wo kommt die msg her? Original aus Multimon oder aus einem Textfile?

— Reply to this email directly or view it on GitHub.