Ende des Jahres war der Tower-Server / Laptop meines Hauses auf einmal kaputt gegangen, und ich habe hart daran gearbeitet, die unordentliche Umgebung wiederherzustellen, aber ich konnte nichts Neues bewältigen. Ich habe eine Benachrichtigungs-App für erstellt.
Letztes Jahr habe ich eine USB-Kamera und eine Infrarot-LED an Raspai angeschlossen und eine kleine elektronische Arbeitsumgebung erstellt, die sich anfühlt, als würde man einen Fernseher mit Spracherkennung betreiben. Deshalb habe ich eine Windows-Anwendung mit dem Gefühl erstellt, sie dieser Umgebung hinzuzufügen.
Der Datenfluss sieht wie folgt aus.
** ⇒ Die in 2 gesendete Nachricht wurde auch auf der Laptopseite empfangen und die Nachricht wurde angezeigt. ** ** **
Das Popup sieht mit Growl so aus. Knurren Einfach und leicht zu bedienen! !!
Raspberry PI
Windows10
Benachrichtigung an gntp 1.0.3 # Growl
Übrigens war ich ein bisschen süchtig nach der Installation und Verwendung von pywin32. Vielen Dank für die Informationen der Pioniere. So schreiben Sie einen Windows-Dienst in Python Kurzsteuerung zum Registrieren Ihres eigenen Python-Skripts in Windows Server als Dienst (1) Pywin32 funktionierte nicht mit Python 3.4- Windows-Dienst kann unter Python, pywin32 nicht gestartet werden
Ich habe hier auch für Growl erwähnt. (Kein Passwort erforderlich, ist es ein Umweltunterschied?) Knurrbenachrichtigung unter Windows
Fügen Sie die ganze Sauce ein. Es funktioniert, aber ich entschuldige mich für die verschiedenen Eignungen. Bei der Verbindung mit Rabbit MQ mit Pika habe ich mich auf Blocking Connection verlassen Es war mein erstes Mal, dass ich es mit einem Generator drehte.
win_notification.py
import logging
import logging.handlers
import pika
import win32serviceutil
import win32service
import win32event
import servicemanager
from gntp.notifier import GrowlNotifier
#Log
LOG_FILE_PATH = 'C:\\tmp\win_notification_consumer.log'
LOG_BK_COUNT = 2
LOG_LEVEL = logging.INFO
# MQ
MQ_IP = "x.x.x.x"
MQ_QUEUE = "Queue2"
#Benachrichtigung
GROW_IP = "127.0.0.1"
GROW_PASS = None
GROW_APP_NAME = "amqp notif"
GROW_NOTIFS = ["Message"]
GROW_NOTE_TYPE = "Message"
GROW_TITLE = "Get Message"
#Windows-Dienst
WIN_SRV_NAME = "WinNotificationConsumer"
WIN_DISP_NAME = "WinNotificationConsumer"
class WinNotificationConsumer(win32serviceutil.ServiceFramework):
# Required Attributes:
_svc_name_ = WIN_SRV_NAME
_svc_display_name_ = WIN_DISP_NAME
def __init__(self, args):
#Protokollinitialisierung
self.logger = logging.getLogger()
self.logger.setLevel(LOG_LEVEL)
formatter = logging.Formatter(
'%(asctime)s - %(levelname)s - %(message)s')
handler = logging.handlers.TimedRotatingFileHandler(
filename=LOG_FILE_PATH,
when='D',
backupCount=LOG_BK_COUNT
)
handler.setLevel(logging.DEBUG)
handler.setFormatter(formatter)
self.logger.addHandler(handler)
self.logger.debug('init log end.')
#Initialisieren Sie um die Win32-API
win32serviceutil.ServiceFramework.__init__(self, args)
self.stop_event = win32event.CreateEvent(None, 0, 0, None)
self.logger.debug('init win32 end.')
#Benachrichtigungsinitialisierung
self.notifier = GrowlNotifier(
applicationName=GROW_APP_NAME,
notifications=GROW_NOTIFS,
hostname=GROW_IP,
password=GROW_PASS)
self.notifier.register()
self.logger.debug('init notif end.')
def SvcDoRun(self):
# service start
self.logger.info('service starting...')
#Ereignisprotokollausgabe
servicemanager.LogMsg(
servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, 'test')
)
self.consuming_and_notificate()
def consuming_and_notificate(self):
self.logger.debug('consuming and notificate starting...')
#Rabbit MQ-Verbindungseinstellungen
self.connection = pika.BlockingConnection(
pika.ConnectionParameters(host=MQ_IP)
)
self.channel = self.connection.channel()
#Erstellen, wenn keine Warteschlange vorhanden ist
self.channel.queue_declare(
queue=MQ_QUEUE,
durable=True
)
#Die aus der Warteschlange erhaltene Nachricht wird vom Generator weitergeleitet.
self.logger.info('start consuming message.')
for msg in self.channel.consume(queue=MQ_QUEUE, no_ack=True):
message_body = msg[2]
self.logger.debug(message_body)
self.notifier.notify(noteType=GROW_NOTE_TYPE,
title=GROW_TITLE,
description=message_body)
def SvcStop(self):
# service stop
self.logger.info('service stopping...')
#Verwenden Sie Methoden höherer Klasse
self.ReportServiceStatus(
win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.stop_event)
#MQ trennen
self.channel.close()
self.connection.close()
self.logger.info('service stopped.')
def main():
#Streit('start','stop','install' etc.)Servicestart basierend auf/Anmeldung/Halt/Löschen usw. ausführen.
win32serviceutil.HandleCommandLine(WinNotificationConsumer)
if __name__ == '__main__':
main()
So können Sie sich registrieren und automatisch starten.
C:\\Python27\python.exe win_notification.py --auto install
Ich konnte ganz einfach tun, was ich wollte (Growls verschiedene Gefühle in Bezug auf Popups). Da ich RabbitMQ über den Windows-Dienst in Verbindung halten konnte, hatte ich das Gefühl, dass ich durch Sprachbedienung verschiedene Dinge mit meinem Computer tun kann. Ich möchte auch etwas über andere Python-Apps schreiben ... Der vorhandene Code wurde mir nicht ohne Refactoring angezeigt ...
Recommended Posts