Ich verbringe viel Zeit damit, zu überwachen, zu sichern und zu verstehen, was in meinem Heimnetzwerk passiert. Zwischen der Internetbox, den unbeabsichtigt ausgestellten Geräten und den permanenten Scans aus dem Internet habe ich mich eines Tages gefragt: Ist meine öffentliche IP im Internet als „laut“ oder verdächtig bekannt?
Benutzen böswillige Tools mein Netzwerk (PC, NAS, Router, HA, …)?
So stieß ich auf GreyNoise, ein wirklich interessanter Dienst, mit dem festgestellt werden kann, ob eine IP-Adresse Teil des „Lärms“ des Internets ist, d. h. ob sie bei bösartigen Scan-, Umfrage- oder Traffic-Aktivitäten beobachtet wird.
GreyNoise beschreibt ihren Ansatz gerade als eine Möglichkeit, das Hintergrundrauschen des Internets zu beschreiben und eine beobachtete IP in einen Kontext zu stellen.
Und wie so oft bei mir, nach ein paar Tests, dachte ich mir: „Es wäre doch praktisch, dies direkt im Home Assistant zu haben.“
Anfangs dachte ich daran, mit einer klassischen HTTP-Anfrage etwas sehr Einfaches zu tun. Auf dem Papier sah es trivial aus. In der Praxis hat die offensichtlichste Methode bei mir nicht so funktioniert, wie ich es mir erhofft hatte. Also wechselte ich meinen Ansatz und ging schließlich zu einem Befehlszeilensensor. In diesem Artikel erzähle ich dir alles Schritt für Schritt, wie ich es tatsächlich zu Hause mit den Lovelace-Karten für die endgültige Anzeige eingerichtet habe.

🎯 Mein Ziel
Mein Ziel war einfach: Integration eines Sensors in den Home Assistant, der GreyNoise abfragen kann, um den Status meiner öffentlichen IP zu ermitteln, und anschließend Anzeige des Ergebnisses in einem übersichtlichen und lesbaren Dashboard.
Die Idee war nicht, Home Assistant in ein fortschrittliches Cybersicherheitszentrum umzuwandeln, sondern einen kleinen Kontextindikator hinzuzufügen.
Ein kurzer Blick sollte mir zeigen, ob meine IP als gutartig, unbekannt oder möglicherweise mit einer verdächtigeren Aktivität verbunden angesehen wurde.
GreyNoise legt genau diese Art von Informationen über ihren öffentlichen Prüfpunkt dar.
Ich wollte auch etwas Verständliches für einen Anfänger: ein Sensor, einige nützliche Attribute und schöne Karten, um all dies lesbar zu machen, ohne ein Terminal öffnen zu müssen und natürlich ohne etwas zu abonnieren und ohne mich zu registrieren nein.
🧠 GreyNoise, was ist das?
Wenn man GreyNoise zum ersten Mal entdeckt, kann man sich fragen, wozu genau das gut ist.
In einer sehr einfachen Version beobachtet GreyNoise ständig das Hintergrundrauschen des Internets: automatisierte Scans, IP-Adressumfragen, wiederholte Verbindungsversuche, all diese Verhaltensweisen, die man nicht unbedingt mit bloßem Auge sieht, die aber ständig im globalen Netzwerk existieren.
GreyNoise stellt ihren Dienst gerade als Mittel dar, um die Kerntätigkeit von dem tatsächlich signifikanten Verkehr zu unterscheiden.
Das Interesse von GreyNoise besteht darin, dass es die Kontextualisierung einer IP-Adresse ermöglicht. Grundsätzlich kann man wissen, ob diese IP als an diesem Internet-Rausch beteiligt bekannt ist, ob sie als legitim angesehen wird oder ob sie ihren Systemen einfach nicht bekannt ist. Ihr öffentlicher Verifizierungsdienst gibt diesen Kontext als JSON zurück.
Als ich das herausfand, fand ich die Idee für zu Hause großartig. Wir haben oft eine Internetbox, manchmal Portweiterleitungen, ein VPN, Geräte, auf die aus der Ferne zugegriffen werden kann, und wir wissen nicht immer, wie unsere IP von außen „gesehen“ wird.
Ohne ein umfassendes Sicherheitstool zu sein, gibt GreyNoise einen interessanten Hinweis.
🆓 Kostenlose GreyNoise-Tools

Was mir gut gefallen hat, ist, dass man Dinge bereits kostenlos testen kann, ohne sofort in eine komplizierte Integration einzusteigen.
Das erste praktische Instrument ist ihre Online-Überprüfungsseite. Die Seite wird geöffnet und zeigt direkt an, wie die öffentliche IP-Adresse, die für die Navigation verwendet wird, von GreyNoise angezeigt wird.
Dies ist sehr praktisch, um einen ersten Schnelltest durchzuführen, ohne etwas zu installieren.
Ein weiterer sehr interessanter Punkt ist, dass es eine API gibt, die einfach abzufragen ist. Und genau diese API wollte ich im Home Assistant nutzen. In der Befehlszeile bedeutet dies, dass eine Anfrage wie folgt gestellt wird:
curl -s -H "Accept: application/json" https://check.labs.greynoise.io/api/v1/check
Bei mir sah die Antwort wie folgt aus:
{ "ip": "82.65.xxx.xxx", "status": "not_found", "Klassifikation": null, "noise": false, "common_business_services": false, "trust_level": null, "error": "ip not found" von }
Dieses Format entspricht dem dokumentierten Betrieb des öffentlichen Dienstes GreyNoise, der insbesondere IP, Status, Klassifizierung, Indikator zurückgibt. noise, Indikator common_business_services, das Konfidenzniveau und eine mögliche Fehlermeldung.
Einfach ausgedrückt: Meine IP-Adresse war GreyNoise nicht bekannt, was in diesem Zusammenhang eher beruhigend ist.
🧪 Mein erster Aufsatz in Home Assistant
Wie so oft habe ich mit der Lösung begonnen, die mir am „saubersten“ erschien: Verwenden Sie einen REST-Sensor im Home Assistant.
Grundsätzlich war dies logisch. Ich hatte eine HTTP-URL, die JSON zurückgab, also dachte ich, dass ein REST-Sensor genau das Richtige wäre. Mit der Home Assistant REST-Dokumentation können Sie eine HTTP-Ressource definieren und JSON mit value_template und wiederherstellen von Feldern als Attribute mit json_attributes.
Ich dachte daran, den Status und die Attribute wie IP, Klassifizierung oder Konfidenzniveau direkt abzurufen.
Bei mir hat dieser Ansatz jedoch nicht richtig funktioniert. Der Sensor blieb in einem unbrauchbaren Zustand. Anstatt Zeit mit einer Methode zu verschwenden, die in meiner Anlage kein stabiles Ergebnis lieferte, entschied ich mich für eine andere Lösung.
Und ehrlich gesagt geschieht dies in der Hausautomation oft so: Man beginnt mit einer Idee und passt sich dann dem Realen an.
Warum ich auf command⌨line gegangen bin
Schließlich entschied ich mich für einen Befehlszeilensensor. Dies ist nicht unbedingt die „elegante“ Methode auf dem Papier, aber in meinem Fall war sie viel zuverlässiger.
Der Grundsatz ist einfach: Home Assistant führt einen Befehl aus curl, ruft die JSON-Antwort ab und extrahiert dann den Hauptstatus und mehrere Attribute. Integration command_line Home Assistant unterstützt einen Shell-Befehl, einen value_template und JSON-Attribute.
Das heißt, ich habe einen Test gestartet, der bereits in meinem Terminal funktionierte, und ihn dann einfach in den Home Assistant übertragen.
Dies ist oft eine gute Strategie für Anfänger: Wenn etwas bereits in der Hand läuft, ist es einfacher zu verstehen, was im Home Assistant passiert.
⚙─ Konfiguration im Home Assistant
In meiner Datei Konfiguration.yaml, habe ich zunächst eine spezielle Datei für meine Befehlszeilensensoren aufgenommen:
command_line: !include command_line.yaml
Als nächstes in command_line.yaml, habe ich diesen Sensor hinzugefügt:
- sensor: name: "GreyNoise IP Check" einzigartig_id: greynoise_ip_check icon: mdi:shield-search command: 'curl -s -H "Accept: application/json" https://check.labs.greynoise.io/api/v1/check' command_timeout: 20 scan_interval: 100800 value_template: "{{ value_json['status'] }}" json_attributes: - ip - Klassifikation - noise - common_business_services - trust_level - error
Ich werde dies ganz einfach erläutern:
- command : Dies ist der von Home Assistant tatsächlich ausgeführte Befehl.
- command_timeout : Hier erlaube ich bis zu 20 Sekunden vor der Aufgabe.
- scan_interval : Dies ist die Ausführungshäufigkeit in Sekunden. Hier habe ich 100800 Sekunden gewählt, also alle 28 Stunden.
- value_template : dies stellt den Hauptwert des Sensors wieder her, hier das Feld
statusdes JSON. - json_attributes : Dadurch können weitere nützliche Felder als Sensorattribute gespeichert werden.
Warum 28 Stunden? Ganz einfach, weil ich GreyNoise nicht stündlich befragen musste. Und ich möchte 24 Stunden vermeiden, da viele Sensoren auf 24 sind, also wird es heute 28 Stunden sein. Dies ist keine Tatsache, die sich bei mir zu Hause ständig ändert, daher bevorzuge ich eine Hinrichtung im Abstand.
🧾 Was der Sensor mir sagt

Sobald der Sensor einsatzbereit ist, erhalte ich einen Hauptstatus und mehrere Attribute.
Der Hauptzustand ist das Feld status. Zu Hause z. B. bekomme ich not_found. Dieser Wert wird zum Status des Sensors im Home Assistant. Der öffentliche Endpunkt GreyNoise gibt dieses Statusfeld in seiner JSON-Antwort gut zurück.
Darüber hinaus habe ich mehrere nützliche Attribute:
- ip : die erkannte öffentliche IP-Adresse.
- Klassifizierung : die mögliche Klassifizierung.
- noise : gibt an, ob die IP-Adresse als Teil des Internetlärms angesehen wird.
- common_business_services : gibt an, ob die IP mit bekannten Unternehmensdienstleistungen verbunden ist.
- trust_level : einen zusätzlichen Indikator, wenn er verfügbar ist.
- error : eine Informationsnachricht, z. B. ‚ip not found‘.
📊 Meine Lovelace-Karten
Nachdem ich den Sensor erstellt hatte, wollte ich vor allem eine schöne Anzeige im Dashboard. Also habe ich mir eine kleine dedizierte Seite mit mehreren Karten gemacht, um die Renderings zu testen.
Ich habe sowohl Mushroom als auch Button Card und eine Markdown-Karte verwendet. Dadurch konnte ich einen „nüchterneren“ Stil, einen „visuelleren“ Stil und einen „informativeren“ Stil vergleichen.
🍄 Karte Mushroom

Die erste Karte, die ich erstellt habe, ist eine Mushroom-Karte, die auf dem tatsächlichen Sensor basiert:
Typ: custom:mushroom-template-card entity: sensor.greynoise_ip_check primary: > {% set c = state_attr(entity, 'classification') %} {% if c == 'malicious' %} GreyNoise: böswillige Aktivität {% elif c == 'suspicious' %} GreyNoise: verdächtige Aktivität {% elif c == 'benign' %} GreyNoise: legitimer Dienst {% elif states(entity) in ['not_found', 'unknown', 'unavailable'] %} GreyNoise: keine Aktivität bekannt {% else %} GreyNoise: {{ states(entity) }} {% endif %} secondary: > {% set ip = state_attr(entity, 'ip') or 'IP unbekannt' %} {% set classif = state_attr(entity, 'classification') or 'no' %} {% set noise = state_attr(entity, 'noise') %} {% set cbs = state_attr(entity, 'common_business_services') %} IP: {{ ip }} • Klassifizierung: {{ classif }} • Noise : {{ noise }} • Bekannte Dienste: {{ cbs }} icon: > {% set c = state_attr(entity, 'classification') %} {% if c == 'malicious' %} mdi:shield-alert {% elif c == 'suspicious' %} mdi:shield-search {% elif c == 'benign' %} mdi:shield-check {% else %} mdi:shield-check-outline {% endif %} icon_color: > {% set c = state_attr(entity, 'classification') %} {% if c == 'malicious' %} red {% elif c == 'suspicious' %} orange {% elif c == 'benign' %} teal {% else %} grün {% endif %} multiline_secondary: true fill_container: true tap_action: Maßnahme: more-info
Ich mag diese Karte sehr, weil sie leicht zu lesen ist. Auf einen Blick sehe ich eine klare Botschaft, ein passendes Symbol und eine konsistente Farbe.
🧪 fiktive Karten

Um die Zustände visuell zu vergleichen, habe ich auch einige rein fiktive Karten erstellt. Dies ermöglicht es, zu sehen, wie die verschiedenen Fälle aussehen würden, ohne abzuwarten, bis sie tatsächlich eintreten.
Typ: vertikale Stack-Karten: - Typ: custom:mushroom-template-card primary: Fictif - malicious secondary: "IP: 45.67.89.10 • malicious • noise: true" icon: mdi:shield-alert icon_color: red multiline_secondary: true - Typ: custom:mushroom-template-card primary: Fictif - benign secondary: "IP: 1.1.1.1 • benign • noise: false" icon: mdi:shield-check icon_color: teal multiline_secondary: true - Typ: custom:mushroom-template-card primary: Fictif - nicht found secondary: "IP: 82.65.100.200 • not_found • noise: false" icon: mdi:shield-check-outline icon_color: green multiline_secondary: true
Das ist albern, aber sehr nützlich, wenn man eine Schnittstelle baut: Man kann den Stil wählen, bevor man überhaupt einen wirklichen Fall hat.
🎨 Karte Button Card

Dann wollte ich etwas Visuelleres, fast wie eine Alarmkarte. Daher habe ich die Button Card verwendet.
Typ: custom:button-card entity: sensor.greynoise_ip_check name: | [[ const c = entity?.attributes?.classification; if (c === 'malicious') return 'GreyNoise - bösartige Aktivität'; if (c === 'suspicious') return 'GreyNoise - verdächtige Aktivität'; if (c === 'benign') return 'GreyNoise - legitimer Dienst'; return 'GreyNoise - keine Aktivität bekannt'; ]]] icon: | [[ const c = entity?.attributes?.classification; if (c === 'malicious') return 'mdi:shield-alert'; if (c === 'suspicious') return 'mdi:shield-search'; if (c === 'benign') return 'mdi:shield-check'; return 'mdi:shield-check-outline'; ]]] show_state: true state_display: | [[ return entity?.state || 'unknown'; ]]] Siegel: | [[ const ip = entity?.attributes?.ip || 'IP unbekannt'; const c = entity?.attributes?.classification || 'keine'; const noise = entity?.attributes?.noise; const cbs = entity?.attributes?.common_business_services; return ́IP ${ip} • ${c} • noise: ${noise} • common business: ${cbs}¿; ]]] show_label: true tap_action: Maßnahme: more-info Stile: card: - padding: 18px - border-radius: 20px - color: white - Hintergrund: | [[ const c = entity?.attributes?.classification; if (c === 'malicious') return 'linear-gradient(135deg, #b71c1c 0%, #e53935 100%)'; if (c === 'suspicious') return 'linear-gradient(135deg, #ef6c00 0%, #ffa726 100%)'; if (c === 'benign') return 'linear-gradient(135deg, #00695c 0%, #26a69a 100%)'; return 'linear-gradient(135deg, #2e7d32 0%, #66bb6a 100%)'; ]]] grid: - grid-template-areas: "\"i n\" \"i s\" \"l l\" - grid-template-columns: 60px 1de - grid-template-rows: min-content min-content min-content icon: - width: 42px - color: white name: - justify-self: start - font-size: 18px - font-weight: 700 Staaten: - justify-self: start - font-size: 15px - font-weight: 500 label: - justify-self: center - text-align: center - width: 100% - font-size: 13px - opacity: 0.92
Diese Karte ist sehr schön, vor allem, wenn man etwas will, das ein wenig mehr ins Auge fällt. Im Übrigen habe ich die untere Linie so angepasst, dass sie zentriert ist, was das Rendern wirklich verbessert.
📝 Übersichtskarte Markdown

Schließlich habe ich eine Markdown-Karte hinzugefügt, um alle Informationen leserlich anzuzeigen:
Typ: markdown content: >- {% set e = 'sensor.greynoise_ip_check' %} ## Vollständiger Bericht GreyNoise - **Status**: {{ states(e) }} - **IP**: {{ state_attr(e, 'ip') or 'unbekannt' }} - **Klassifizierung**: {{ state_attr(e, 'classification') or 'non' } - **Internetgeräusch**: {{ state_attr(e, 'noise') }} - **Bekannte Dienste**: {{ state_attr(e, 'common_business_services') }} - **Vertrauensstufe**: {{ state_attr(e, 'trust_level') or '--' }} - **Informationsnachricht**: {{ state_attr(e, 'error') or 'non' }} --- - **Letzte Ausführung der Anfrage**: {{ relative_time(states[e].last_updated) }} - **Zeitstempel der letzten Ausführung**: {{ as_local(states[e].last_updated).strftime('%d/%m/%Y %H:%M:%S') }}
Ich mag diese Karte, weil sie sehr klar ist, vor allem für die Diagnose.
Darüber hinaus habe ich den Begriff der seit der letzten Aktualisierung verstrichenen Zeit hinzugefügt, was praktisch ist, um zu wissen, wann die Abfrage tatsächlich ausgeführt wurde.
Die Eigenschaften last_updated und last_changed in der Vorlagen-Engine Home Assistant für diese Art der Nutzung verfügbar sind.
🧩 Was ich aus dieser Integration gelernt habe
Dieses kleine Projekt hat mich an etwas Wichtiges erinnert: In der Hausautomation ist das Wichtigste nicht immer die theoretisch eleganteste Methode, sondern diejenige, die tatsächlich zu Hause zuverlässig funktioniert.
Am Anfang wollte ich auf REST gehen. Schließlich war es der Befehlszeilensensor, der es mir ermöglichte, ein stabiles, lesbares und pflegeleichtes Ergebnis zu erzielen. Und ehrlich gesagt, für den Heimgebrauch habe ich genau das gesucht.
Mir ist auch klar geworden, dass diese Art der Integration einen echten pädagogischen Wert hat. Wir lernen, JSON abzurufen, einen Home Assistant-Sensor zu erstellen, Attribute zu nutzen, ein Dashboard zu formatieren und rohe Informationen in etwas Visuelles und Verständliches zu verwandeln.
Am Ende habe ich die Mushroom Card in einer kleinen Ecke meines Dashboards verwendet, auf einen Blick werde ich sehen, ob das Symbol rot wird.
Wenn das Herz es mir sagt, kann ich die Statusänderung von sensor.greynoise_ip_check in die Auslöser für mögliche SMS- oder visuelle Benachrichtigungen aufnehmen…
✅ Schlussfolgerung
Zusammen mit GreyNoise habe ich dem Home Assistant einen kleinen Netzwerkkontext hinzugefügt, den ich wirklich interessant finde. Es handelt sich weder um ein Wundermittel noch um einen vollständigen IDS, aber es ist ein guter Indikator dafür, wie meine öffentliche IP von außen wahrgenommen wird.
Zuerst testete ich die Online-Verifizierungsseite, dann die API-Abfrage am Endgerät und dann die Integration in den Home Assistant. Da der REST-Sensor in meinem Fall nicht schlüssig war, ging ich zu command_line, und es war schließlich diese Methode, die den Job gemacht hat. Der beschriebene Ansatz steht im Einklang mit den dokumentierten Fähigkeiten der Integrationen REST und command_line des Home Assistant.
Am Ende erhalte ich einen einfachen Sensor, einige nützliche Attribute und vor allem Lovelace-Karten, die gut zu lesen sind. Für mich ist dies genau die Art von Integration, die ich mag: Ein Thema, das anfangs ein wenig technisch war, aber in etwas Konkretes, Visuelles und Alltägliches verwandelt wurde.

