Advertisement
Barney90

Awtrix Deal-Alarm

May 31st, 2024
1,466
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.74 KB | Source Code | 0 0
  1. import feedparser
  2. import requests
  3. import time
  4. import datetime
  5.  
  6. IP = "http://192.168.1.42"  # Ersetzen durch lokale IP eurer Uhr
  7. RSS = "https://www.mydealz.de/rssx/keyword-alarm/XXX"  # Ersetzen durch eigenen RSS-Feed
  8. REFRESH_INTERVAL = 60  # Wartezeit zwischen Abrufen in Sekunden
  9. ALARM = "Siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e"  # RTTTL-Sound für Preisfehler-Alarm
  10. BLACKLIST = ["gästeklo", "leasing"]  # Ersetzen durch eigene Begriffe, die blockiert werden sollen
  11.  
  12.  
  13. def get_alert():
  14.     """Ruft den Titel des neuesten Alarms aus dem RSS-Feed ab."""
  15.     loop = True
  16.     while loop:
  17.         try:
  18.             feed = feedparser.parse(RSS)
  19.             entry = feed.entries[0]
  20.             loop = False
  21.             return entry.title
  22.         except IndexError:
  23.             print("Fehler, versuche es in 10 Sekunden erneut.")
  24.             time.sleep(10)
  25.             pass
  26.  
  27.  
  28. def blacklist_match(word):
  29.     """Durchsucht String nach Begriff auf der Blacklist. True bei Treffer, ansonsten False."""
  30.     for term in BLACKLIST:
  31.         if term.lower() in word.lower():
  32.             return True
  33.     return False
  34.  
  35.  
  36. def preisfehler_alarm():
  37.     """Erhöht die Aufmerksamkeit, wenn ein Preisfehler gefunden wurde."""
  38.     requests.post(url=IP + "/api/rtttl", data=ALARM)
  39.     preisfehler_notification = {
  40.         "text": "Preisfehler",
  41.         "repeat": 1,
  42.         "wakeup": True,
  43.         "rainbow": True,
  44.         "stack": False,
  45.     }
  46.     requests.post(url=IP + "/api/notify", json=preisfehler_notification)
  47.     time.sleep(3)
  48.  
  49.  
  50. last_title = ""
  51. while True:
  52.     now = datetime.datetime.now().strftime("%H:%M:%S")
  53.     print(f"{now}: Rufe Deal-Alarme ab...")
  54.     title = get_alert()
  55.     if title != last_title and not blacklist_match(title):
  56.         print(f"Neuer Deal-Alarm: {title}")
  57.  
  58.         # Zusätzlicher Alarm für Preisfehler
  59.         if "preisfehler" in title.lower():
  60.             print("Preisfehler-Alarm!")
  61.             preisfehler_alarm()
  62.  
  63.         # Benachrichtigung anzeigen
  64.         notification = {
  65.             "text": title,  # Titel als dargestellter Text
  66.             "repeat": 2,  # Wiederholungen der Benachrichtigung
  67.             "icon": 13677,  # Icon muss zuvor auf die Uhr geladen werden
  68.             "wakeup": True,  # Weckt die Uhr auf, wenn das Display ausgeschaltet ist
  69.             "scrollSpeed": 80,  # Scroll-Geschwindigkeit in Prozent
  70.             "stack": False,  # Höchste Priorität für neue Benachrichtigungen
  71.          }
  72.         requests.post(url=IP+"/api/notify", json=notification)
  73.  
  74.         # Titel speichern, um Doppelbenachrichtigungen zu vermeiden
  75.         last_title = title
  76.  
  77.     else:
  78.         print("Kein neuer Deal-Alarm.")
  79.  
  80.     # Oben definierte Zeit warten bis zum nächsten Abruf
  81.     time.sleep(REFRESH_INTERVAL)
  82.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement