man liest öfter mal, dass 1-Wire unbemerkt oder plötzlich nicht mehr läuft. Wie auch immer die Ursache ist, wollte ich eine Lösung schaffen die ein Monitoring ermöglicht (mit Boardmitteln).
Aktuell habe ich 4 Kanäle 1-W aktiv.
Zur Überwachung war mein Gedanken den jeweils letzten Sensor (möglichst schwer z.B. VOC / LF) am Ende des jeweiligen Kanal zu überwachen.
Wenn ein überwachter Sensor länger als 10 Minuten keine Werte liefert, gibt es Alarm - dann "könnte" man von einem Fehler auf dem Kanal ausgehen... Ich aktiviere Nachrichten an:
- das TWS Nachrichtencenter
- an ein Grafana Dashboard
- an eine KNX GA (zur weiteren Auswertung an ein LED-Status Display neben der Haustüre als Beispiel "Status-Bussysteme grün=OK rot=Fehler")
Im TWS Nachrichtencenter sieht man "in der Schaltzentrale gleich, wenn es ein Problem gab mit Datum und Uhrzeit"

Im Grafana-Dashboard hat man eine Historie und sieht, seit wann es ein Problem gab.
Die KNX GA visualisiert wie man wünscht
Die Logik:

Das Grafana-Dashboard (erweitert um die 1-W Überwachung):

Der Logik-Code (Danke an Georg @eib-eg eg und seine KI "Kanon"):
/**
Logik-Name: LE-KI-1-Wire-Health-Monitor V1.1
Beschreibung: Überwachung von 4 1-Wire Kanälen (EOL-Prinzip).
Inklusive Startup-Inhibit (15 Min), um Fehlalarme nach Neustart zu verhindern.
Sendet bei echtem Timeout Alarm an KNX und TWS Nachrichtencenter.
Version: 1.1.0
Autor: KI-Chirurg (Kanon V8.03.16)
Kanon-Referenz: V8.03.16
CHANGELOG:
- 1.0.0: Initialerstellung.
- 1.1.0 (2026-05-12): Startup-Inhibit hinzugefügt (Regel 1.55).
*/
{
"_Meta": {
"Name": "LE-KI-1-Wire-Health-Monitor V1.1",
"Description": "Überwachung von 4 Kanälen mit 15 Min Anlauf-Sperre.",
"Version": "1.1.0",
"Author": "KI-Chirurg",
"Kanon_Version": "V8.03.16"
},
"Level": [
["$I_S1", "float", 0.0],
["$I_S2", "float", 0.0],
["$I_S3", "float", 0.0],
["$I_S4", "float", 0.0],
["$P_Timeout", "float", 600.0],
["$P_Startup_Delay", "float", 900.0], // 15 Minuten Anlauf-Schutz
["$State_T1", "bool", true],
["$State_T2", "bool", true],
["$State_T3", "bool", true],
["$State_T4", "bool", true],
["$Lgc_Startup_Active", "bool", true],
["$Lgc_A1", "bool", false],
["$Lgc_A2", "bool", false],
["$Lgc_A3", "bool", false],
["$Lgc_A4", "bool", false],
["$Lgc_RawAlarm", "bool", false],
["$Lgc_Startup_Finished", "bool", false],
["$Lgc_GlobalAlarm", "bool", false],
["$State_GlobalAlarm_Last", "bool", false],
["$Lgc_SendTrigger", "bool", false],
["$Lgc_Selector_Int", "int", 0],
["$O_Status", "int", 900],
["$O_Sammelalarm", "bool", false],
["$Konst_True", "bool", true],
["$Konst_False", "bool", false],
["$Konst_900", "int", 900],
["$Konst_911", "int", 911],
["$C_Channel", "string", "general"],
["$C_Title", "string", "1-Wire Systemalarm"],
["$C_Message", "string", "ACHTUNG: Timeout an einem 1-Wire Kanal detektiert!"],
["$C_Category", "string", "alarm"],
["$C_Priority", "int", 2]
],
"Module": [
// --- Sektion 0: Startup-Schutz (Der Schild) ---
// Läuft einmalig nach dem Speichern/Boot für 900s
["Monoflop", "$Konst_True", "$Konst_False", "$Lgc_Startup_Active", "$P_Startup_Delay", 0],
["Xor", ["$Lgc_Startup_Active", "$Konst_True"], "$Lgc_Startup_Finished"],
// --- Sektion 1: Watchdogs (EOL-Überwachung) ---
["Monoflop", "$I_S1", "$Konst_False", "$State_T1", "$P_Timeout", 1],
["Monoflop", "$I_S2", "$Konst_False", "$State_T2", "$P_Timeout", 1],
["Monoflop", "$I_S3", "$Konst_False", "$State_T3", "$P_Timeout", 1],
["Monoflop", "$I_S4", "$Konst_False", "$State_T4", "$P_Timeout", 1],
// --- Sektion 2: Alarm-Logik ---
["Xor", ["$State_T1", "$Konst_True"], "$Lgc_A1"],
["Xor", ["$State_T2", "$Konst_True"], "$Lgc_A2"],
["Xor", ["$State_T3", "$Konst_True"], "$Lgc_A3"],
["Xor", ["$State_T4", "$Konst_True"], "$Lgc_A4"],
["Or", ["$Lgc_A1", "$Lgc_A2", "$Lgc_A3", "$Lgc_A4"], "$Lgc_RawAlarm"],
// --- Sektion 3: Verknüpfung mit Startup-Schutz ---
// Alarm wird nur durchgelassen, wenn Startup beendet ist
["And", ["$Lgc_RawAlarm", "$Lgc_Startup_Finished"], "$Lgc_GlobalAlarm"],
// --- Sektion 4: Benachrichtigung ---
["And", ["$Lgc_GlobalAlarm", "-$State_GlobalAlarm_Last"], "$Lgc_SendTrigger"],
["SendToSimple", "-$Lgc_SendTrigger", "$C_Channel", "$C_Title", "$C_Message", "$C_Category", "$C_Priority"],
// --- Sektion 5: Ausgänge ---
["BinaryMultiplexer", ["$Lgc_GlobalAlarm"], "$Lgc_Selector_Int"],
["Multiplexer", ["$Konst_900", "$Konst_911"], "$O_Status", "$Lgc_Selector_Int"],
["Multiplexer", ["$Lgc_GlobalAlarm", "$Lgc_GlobalAlarm"], "$O_Sammelalarm", "$Konst_True"],
// --- Sektion 6: RDS-Sicherung ---
["Latch", "$Lgc_GlobalAlarm", "$State_GlobalAlarm_Last", "$Konst_True", 0]
],
"Input": [
["Sensor 1 PBM01-485-CH-DG", "Referenzsensor Kanal 1", "$I_S1", "a"],
["Sensor 2 PBM01-485-CH2-EG", "Referenzsensor Kanal 2", "$I_S2", "a"],
["Sensor 3 PBM01-485-CH3-OG", "Referenzsensor Kanal 3", "$I_S3", "a"],
["Sensor 4 SBM01-Technik-KNX-Verteiler", "Referenzsensor Kanal 4", "$I_S4", "a"],
["Timeout [_s]", "Standard 600s", "$P_Timeout", "c"],
["Start-Sperre [_s]", "Standard 900s", "$P_Startup_Delay", "c"]
],
"Output": [
["Status-Code", "900=OK, 911=Kritisch", "$O_Status", "c"],
["Alarm Sammel", "Sammelalarm für KNX (1=Fehler)", "$O_Sammelalarm", "c"]
]
}
ACHTUNG: Ganz unten sind zwei [_S] bei "Timeout und "Start-Sperre die müssen durch eines ohne _ ersetzt werden. Da ansonsten hier die Forumssoftware den Text durchstreicht... und nicht anzeigt...
Die Start-Sperre dient dazu, dass keine Fehler gemeldet werden, bevor alles initialisiert ist und zur Vermeidung von Fehl-Alarmen im Nachrichtencenter insbesondere nach TWS- oder Logik-Neustart.
Ich denke dass ist mal ein Anfang zum Monitoring. Insbesondere die Grafana-Historie ist ganz nett, wenn man mal Fehler suchen muss.
Gerne kopieren und nutzen wie möchtet
VG
Oli
