Seite 2 von 4

Re: Check MK für die CCU

Verfasst: 07.01.2018, 14:32
von deimos
Hi,

wie auch auf GitHub geschrieben: Bitte mehr Infos über deine Umgebung: Ich konnte es problemlos installieren, auch auf 2.29.23

Viele Grüße
Alex

Re: Check MK für die CCU

Verfasst: 08.01.2018, 09:32
von deimos
Hi,

ich konnte das Problem eingrenzen und habe grade Version 1.3 auf GitHub hochgeladen. Da das Problem rein die Installation betrifft, ist ein Update bei bestehenden Installationen nicht notwendig.

Viele Grüße
Alex

Re: Check MK für die CCU

Verfasst: 08.01.2018, 11:40
von robbyb
Hab's gesehen - vielen Dank.

Der check ist echt klasse und performance-technisch unproblematisch, soweit ich das nach 24 h sagen kann.

Re: Check MK für die CCU

Verfasst: 08.01.2018, 21:30
von -=FuF=-
robbyb hat geschrieben:Der check ist echt klasse und performance-technisch unproblematisch, soweit ich das nach 24 h sagen kann.
Ist hier auf original CCU2 seit Sommer in Betrieb und definitiv kein Problem, außer als Antreiber was gegen die Servicemeldungen zu machen ;)

Re: Check MK für die CCU

Verfasst: 19.09.2018, 15:56
von tbshmpl
Ich habe eine Frage zur Installation. In der Beschreibung steht, dass gepackte Installationpakete dabei sind. Ich kann die in Git aber nicht finden. Auch eine MKP Datei kann ich nicht finden.

Kann mir da jemand weiterhelfen?

Re: Check MK für die CCU

Verfasst: 19.09.2018, 15:59
von deimos
Hi,

Klar sind die auf Github: https://github.com/alexreinert/homemati ... k/releases

Viele Grüße
Alex

Re: Check MK für die CCU

Verfasst: 19.09.2018, 16:12
von tbshmpl
Ahh ok sorry. Ich kenne mich zu schlecht mit Git aus. Ich habe das nicht gefunden.

Vielen Dank!

Re: Check MK für die CCU

Verfasst: 29.01.2019, 23:05
von -=FuF=-
Mit Raspberrymatic 3.41.11.20190126 ersetzt chrony ntp, folgende triviale Änderung dafür in der server.tcl des check_mk_agents repariert dies:

Code: Alles auswählen

# diff server.tcl.1.3.orig  server.tcl
--- server.tcl.orig
+++ server.tcl
@@ -70,6 +70,11 @@
         puts $channelId "<<<ntp>>>"
         puts $channelId "[exec ntpq -np | sed -e 1,2d -e {s/^\(.\)/\1 /} -e {s/^ /%/}]"
     }
+
+    if { [file exists /usr/bin/chronyc] == 1 } {
+        puts $channelId "<<<chrony>>>"
+        puts $channelId "[exec chronyc -n tracking | cat]"
+    }

     puts $channelId "<<<homematic:sep(59)>>>"
     puts $channelId [string trim [get_homematic_check_result]]
Im Original-Agent wird noch ein Fehler unterdrückt, sollte chrony nicht laufen, das habe ich mit meinen miesen tclsh-Kenntnissen nicht nachbauen können, der ||-Operator funktioniert nicht im exec. Das cat im obigen patch ist daher wahrscheinlich auch überflüssig.

Christian

Re: Check MK für die CCU

Verfasst: 08.04.2019, 00:30
von -=FuF=-
Hi Alex,

ich habe noch ein bisschen am check und am agent gebastelt.

Ich habe einen bug report bezüglich Gewerk "Monitored": Meine HM-TC-IT-WM-W-EU im Gewerk "Monitored" werden zwar vom Check übertragen, aber es passiert einfach nichts. Das liegt daran, dass sie nicht den DP HUMIDITY vewenden, sondern ACTUAL_HUMIDITY

Code: Alles auswählen

OMD[fufnet]:/tmp$ diff homematic.orig /opt/omd/sites/fufnet/local/share/check_mk/checks/homematic
69c69,70
<       humidity = data.get('HUMIDITY', None)
---
>       # humidity = data.get('HUMIDITY', None)
>       humidity = data.get('HUMIDITY', data.get('ACTUAL_HUMIDITY', None))
79c80,81
<       humidity = data.get('HUMIDITY', None)
---
>       # humidity = data.get('HUMIDITY', None)
>       humidity = data.get('HUMIDITY', data.get('ACTUAL_HUMIDITY', None))
Ich habe weiterhin ein tclsh-Addon für Nicht-Acknowledged-ALARM-Meldungen und den passenden Check_MK Check dafür und einen Check für "Monitored"-Leistungsmesser, d.h. HM-ES-PMSw1-Pl, aber der ist noch in der Test-Phase.

Wie möchtest Du sowas am liebsten haben. Gitub-Push-Request? Oder einfach hier? Die Code schnippsel sind recht kurz, das ALARM-Addon ist eigentlich fast nur Alchy Code ;)

Falls es jemand direkt haben möchte:

check_mk_agent-Plugin, zu kopieren nach /usr/local/addons/check_mk_agent/plugins/alarm.tcl:

Code: Alles auswählen

#!/bin/tclsh
#
load tclrega.so
load tclrpc.so


proc get_homematic_alarms { } {
  array set result [rega_script {

object oTmpArray = dom.GetObject(ID_SYSTEM_VARIABLES);
string sTmp;
string slist ="";
foreach(sTmp, oTmpArray.EnumIDs())
{
  object oTmp = dom.GetObject(sTmp);
  if ( (oTmp.ValueSubType() == istAlarm) && (oTmp.AlState() == asOncoming) )
  {
    string sTriggerDesc = "keine Beschreibung";
    string sLastTriggerOut= "unbekannt";
    object oLastTriggerDP = dom.GetObject( oTmp.LastTriggerID() );
    if (oLastTriggerDP)
    {
      string sLastTriggerChannel = dom.GetObject(oLastTriggerDP.Channel());
      string sLastTriggerChHssType = dom.GetObject(sLastTriggerChannel).HssType();
      object oLastTriggerDevice = dom.GetObject(sLastTriggerChannel.Device());
      string sLastTriggerDeviceHssType = oLastTriggerDevice.HssType();
      string sLastTriggerDeviceSerial = oLastTriggerDevice.Address();
      ! sLastTriggerOut = sLastTriggerChannel.Name() #" ( Serial: "#sLastTriggerDeviceSerial #" Typ: "  #sLastTriggerDeviceHssType #" )" ;
      sLastTriggerOut = sLastTriggerChannel.Name();
    }
    string sTriggerDesc = oTmp.DPInfo();


    ! oTmp.Name()                                         Wasseralarm
    ! oTmp.AlCounter()                                    # Auslöungen
    ! oTmp.ValueName()                                    ausgelöst, nicht ausgelöst
    ! oTmp.Timestamp().ToString("%d.%m.%y %H:%M Uhr")     letzte Auslösung
    ! sLastTriggerOut                                     Wassermelder Aquarium (HmIP-SWD 001898A9A36CF2:1)
    ! sTriggerDesc                                        DPInfo()

    WriteLine("ALARM_MSG;" # oTmp.Name() # ";" # sLastTriggerOut # ";" # oTmp.ValueName() # ";" # oTmp.Timestamp().ToString("%Y-%m-%d %H:%M:%S")  )

  }
}

  }]
  return $result(STDOUT)
}

puts [string trim [get_homematic_alarms]]
Im Check_MK: der check /opt/omd/sites/<sitename>/local/share/check_mk/checks/homematic_alarms

Code: Alles auswählen

#!/usr/bin/python

def parse_homematic_alarms(info):
  result = { }
  for line in info:
    key = line[0]
    device = result.get(key)
    if key == 'ALARM_MSG':
      if device is None:
        device = []
        result[key] = device
      device.append(line[1:])
  return result

def inventory_homematic_alarms(parsed):
  yield 'ALARM Messages', None

def check_homematic_alarms(item, params, parsed):
  messages = parsed.get('ALARM_MSG', None);

  state = 0
  devices = []

  if messages is not None:
    #with open("/tmp/bla", "aw") as bla:
    #  bla.write(repr(messages))

    for msg,attr in messages.items():
      if item == 'ALARM Messages':
        state = 2
        devices.append(msg + ": " + attr[0] + ", state: " + attr[1] + " (last: " + attr[2] + ")")

  if state == 0:
    return 0, 'No issues reported'

  return state, ', '.join(devices)

check_info['homematic.alarms'] = {
  'check_function':      check_homematic_alarms,
  'inventory_function':  inventory_homematic_alarms,
  'parse_function':      parse_homematic_alarms,
  'service_description': "Homematic %s",
}
Das ergibt dann bei z.B.
alarms_ccu.png
folgenden Check_MK Alarm:
alarms.png
alarms.png (10.65 KiB) 2558 mal betrachtet
-=FuF=-
(Christiian)

Re: Check MK für die CCU

Verfasst: 08.04.2019, 09:18
von deimos
Hi,

mir ist der der Sinn des TCL Addons nicht ganz klar (das mag aber auch meinen rudimentären Kenntnissen der Rega geschuldet sein).
Ich dachte, die Alarmmeldungen kommen als Servicemeldung über "dom.GetObject(ID_SERVICES)" rein und nicht über "dom.GetObject(ID_SYSTEM_VARIABLES)". Und diese werden auch jetzt schon komplett an den check_mk Server übertragen.
Wenn ich mich da irre, dann würde es absolut Sinn machen, dass nicht als Plugin einzubauen, sondern direkt in den Core, alleine schon deswegen, weil das dann keinen zusätzlichen Prozess erzeugt. Die Plugins sind an sich nur für wirklich Benutzerspezifische Sachen gedacht, bei einem Check für Alarmmeldungen bin ich sofort dazu bereit, dass als Teil des Kerns zu betrachten.

Viele Grüße
Alex