VB-Makro & Zabbix
Subs: Init · Tick · KNXPaket · Alternate
· BoolWechsel · Zeitplan · ShutDown
· Intervall 30 s
Makro
Zabbix
zabbix_get -s HOST -p 10052 -k knx.address.discovery
API / Datenstrukturen (AlterNET nicht in Blazor möglich)
' ============================================================
' BBasic KNX Anlage – VB.NET Makro
'
' AlterNET-Editor (WinForms) ist hier nicht einbindbar
' (Blazor + MAUI-WebView). Diese Datei ist die Referenz.
'
' Pflicht-Subs:
' Sub Init(Anlagenname As String)
' Sub Tick(Anlagenstatus As PlantStatusSnapshot)
' Sub KNXPaket(paket As KnxPacketInfo, Anlagenstatus As PlantStatusSnapshot)
' Sub Alternate(paket As KnxPacketInfo, Anlagenstatus As PlantStatusSnapshot) ' jedes Paket
' Sub BoolWechsel(paket As KnxPacketInfo, alt As Boolean, neu As Boolean, Anlagenstatus As PlantStatusSnapshot)
' Sub Zeitplan(ev As ScheduleEventInfo, Anlagenstatus As PlantStatusSnapshot) ' ev.Setpoint noch änderbar
' Sub MakroBool(ev As MacroBoolEventInfo, Anlagenstatus As PlantStatusSnapshot) ' optional, Makro-Bool gewechselt
' alternativ: Sub MakroBool(name As String, wert As Boolean [, Anlagenstatus As PlantStatusSnapshot])
' (Alias-Name OnMacroBool) · name = Id des Makro-Bools
' Sub ShutDown()
'
' Hilfen:
' Log(msg) Script-Log + Ereignis-Log („Makro Tick: …“) + Journal
' Log(level, msg) level = "info" | "warn" | "error" | "debug"
' warn/error erscheinen als Warnung/Fehler im Ereignis-Log, debug nur Script-Log/Journal
' SendAlarmMail(betreff, text) As Boolean
' Mail über die Alarm-Mail-Einstellungen (SMTP, Empfänger, Absender wie Alarm-Mails),
' Betreff wird zu "[Anlagenname] betreff". Limit: 1 Mail je gleichem Betreff
' pro 60 min, max. 20 Makro-Mails pro Stunde; Unterdrücktes steht im Log.
' True = angenommen (Versand läuft im Hintergrund), False = unterdrückt/kein SMTP.
' Beispiel:
' If Anlagenstatus.TempOutdoor < -15 Then
' Log("warn", "Sehr kalt: " & Anlagenstatus.TempOutdoor.ToString("0.0") & " °C")
' SendAlarmMail("Frostwarnung", "Außentemperatur " & Anlagenstatus.TempOutdoor.ToString("0.0") & " °C")
' End If
' RegisterAddress / RegisterAdress key [, bezeichnung, knxAddress, dpt, einheit, rolle]
' SetValue(key, value) Zabbix knx.address.value[key]
' GetKNXBool("0/1/2") As Boolean letzter Bool aus Cache (GA oder Role)
' GetKNXTemp("0/0/6") As Double letzte Temperatur °C
' GetKNXProzent("0/0/1") As Double letzter Prozentwert
' GetKNXValue("14/1/7") As Object letzter Wert typisiert nach DPT: Boolean (1.x), Double (5.001/9.x/14.x),
' Long (Zähler 5.010/7.x/12.x/13.x), String (16.x), TimeSpan (10.001),
' DateTime (11.001/19.001), Integer (17.001 Szene 1-basiert, 20.x Code);
' DPT fehlt/nicht unterstützt, Länge passt nicht, nichts empfangen: Nothing
' (Rohbytes im Ereignis KNXPaket: paket.Data)
' GetKNXText("14/1/7") As String Anzeige mit Einheit, z. B. "999.68 lx", "Fr 16:24:00", "Ein"; nicht dekodierbar: "*UDEF*"
' Knx.Connected As Boolean
' Knx.WriteBool(roleOderGA, wert)
' Knx.WritePercent(roleOderGA, 0..100)
' Knx.WriteByte(roleOderGA, 0..255)
' Knx.WriteTemp(roleOderGA, celsius)
' Knx.WriteRole(role, wert)
' Knx.WriteAddress(ga, wert, Optional dpt := "1.001")
' Knx.WriteBool("macro:<id>", wert) Makro-Bool setzen → Ziele + Event MakroBool
' GetMakroBool("<id>") As Boolean letzter Makro-Bool-Wert (False wenn unbekannt)
' GetKnxStatus("<GA>") As Double Rückmeldung (Status-GA) zur Schreib-GA: 1/0 bzw. Wert, -1 = unbekannt
' Adressen überall: KNX-GA "0/1/2", "shelly:<id>:switch:0", "url:<id>", "macro:<id>"
' Modbus: GetKNXValue("modbus:<gerät>:<punkt>") lesen, "modbus:<gerät>:<punkt>:alarm" = Alarm 0/1;
' Schreiben (FC06) nur bei Geräte-Freigabe „Schreiben freigeben“ + Punkt bestätigt + schreibbar
'
' ----- PlantStatusSnapshot (Anlagenstatus) -----
' Gesamt: TempOutdoor, OutdoorSourceText, Connected, SeasonMode, SeasonText
' CentralFlowTemp, CentralReturnTemp, MasterPumpOn, HeatDemand
' SolarRoofTemp, SolarActive, StatusText, HeatReason, …
' Listen (flexibel, 0..n):
' Anlagenstatus.Aussensensoren Name, Address, Value, HasValue
' Anlagenstatus.Lueftungsanlagen Name, AirRatio, TempSupplyAfterHeater, HxPercent, …
' Anlagenstatus.Heizkreise Name, TempFlow, RoomAverage, PumpOn, Setpoint, …
' Anlagenstatus.SolarPuffer Name, TempTop, TempBottom, ChargeValve, …
' Anlagenstatus.Heizquellen Name, Active, BurnerTemp, Fault, SourceKind, Online, ThermalPowerKw, ElectricalPowerKw, OperatingState, TempFlow, ...
' Anlagenstatus.Warmwasser Name, TempTop, TempBottom, Charge, Setpoint, …
' Beispiel:
' For Each lv In Anlagenstatus.Lueftungsanlagen
' Log(lv.Name & " Zuluft " & lv.TempSupplyAfterHeater.ToString("0.0"))
' Next
'
' ----- KnxPacketInfo (paket) -----
' Address, Role, Key, Name, Label, DisplayName, Dpt
' AsBool, AsPercent, AsTemperature (Rohdeutung, unabhängig vom DPT)
' ValueText Wert ohne Einheit nach DPT ("21", "1", "Fr 16:24:00"; DPT fehlt/unbekannt/Länge falsch: Hex "0x0C1A")
' Value typisiert wie GetKNXValue (Nothing wenn nicht dekodierbar); Numeric (Double?), Unit ("°C", "lx" …)
' DisplayText mit Einheit/Text ("21 °C", "Ein", "Komfort", nicht dekodierbar "*UDEF*"); DptError <> "" bei falscher Datenlänge
' Data Rohbytes (Payload)
' Source Absender lesbar: "von 1.1.23, Schnittstelle 1" (fremdes Gerät, Schnittstelle n aus der Liste),
' "KNX Control" (eigenes Telegramm), "Router von Schnittstelle 2" (vom Router weitergeleitet),
' "manuell <Benutzer>" (Bool-Schaltfläche); leer = unbekannt. SourceAddress = "1.1.23" (leer = unbekannt)
' gilt auch für BoolWechsel(paket, …) – heißt der Parameter ev, entsprechend ev.Source:
' If paket.Source.StartsWith("von 1.1.23") Then Log("1/1/10 von Taster 1.1.23")
' Label = "Hauptpumpe (0/0/11)" wenn Name bekannt
'
' ----- MacroBoolEventInfo (ev) -----
' Id, Name, Address ("macro:<id>"), Value, OldValue, First (erstes Schreiben seit Start), Time
' Ausgelöst bei Wertwechsel (und erstem Schreiben). Ziele bekommen jeden Schreibvorgang.
' Beispiel:
' Sub MakroBool(ev As MacroBoolEventInfo, Anlagenstatus As PlantStatusSnapshot)
' If ev.Id = "sperre_wp" Then Log("WP-Sperre " & ev.Value)
' End Sub
'
' ----- ScheduleEventInfo (ev) -----
' Kind ("ww"|"heizung"|"lueftung"), Name, CircuitId
' FromId, FromName, ToId, ToName, IsDefault
' Setpoint, SetpointBottom ' noch änderbar
' Apply ' False = Umschaltung verwerfen
' ============================================================Registrierte Adressen (Zabbix LLD)
| Key | Name | Adresse | DPT | Wert | Quelle |
|---|---|---|---|---|---|
modbus:topvex:active_y_seq |
Topvex Büsingen: Aktive Y-Sequenz | modbus:topvex:active_y_seq | 14 | 0 | modbus |
modbus:topvex:alarm_a |
Topvex Büsingen: A-Alarm | modbus:topvex:alarm_a | 1.001 Schalt | Aus | modbus |
modbus:topvex:alarm_a:alarm |
Topvex Büsingen: A-Alarm (Alarm) | modbus:topvex:alarm_a:alarm | 1.005 Alarm | Kein Alarm | modbus |
modbus:topvex:alarm_b |
Topvex Büsingen: B-Alarm | modbus:topvex:alarm_b | 1.001 Schalt | Ein | modbus |
modbus:topvex:alarm_b:alarm |
Topvex Büsingen: B-Alarm (Alarm) | modbus:topvex:alarm_b:alarm | 1.005 Alarm | Alarm | modbus |
modbus:topvex:alarm_c |
Topvex Büsingen: C-Alarm | modbus:topvex:alarm_c | 1.001 Schalt | Ein | modbus |
modbus:topvex:alarm_c:alarm |
Topvex Büsingen: C-Alarm (Alarm) | modbus:topvex:alarm_c:alarm | 1.005 Alarm | Alarm | modbus |
modbus:topvex:alarm_external |
Topvex Büsingen: Externer Alarm | modbus:topvex:alarm_external | 1.001 Schalt | Aus | modbus |
modbus:topvex:alarm_external:alarm |
Topvex Büsingen: Externer Alarm (Alarm) | modbus:topvex:alarm_external:alarm | 1.005 Alarm | Kein Alarm | modbus |
modbus:topvex:alarm_fire |
Topvex Büsingen: Feueralarm | modbus:topvex:alarm_fire | 1.001 Schalt | Aus | modbus |
modbus:topvex:alarm_fire:alarm |
Topvex Büsingen: Feueralarm (Alarm) | modbus:topvex:alarm_fire:alarm | 1.005 Alarm | Kein Alarm | modbus |
modbus:topvex:alarm_smoke |
Topvex Büsingen: Rauchalarm | modbus:topvex:alarm_smoke | 1.001 Schalt | Aus | modbus |
modbus:topvex:alarm_smoke:alarm |
Topvex Büsingen: Rauchalarm (Alarm) | modbus:topvex:alarm_smoke:alarm | 1.005 Alarm | Kein Alarm | modbus |
modbus:topvex:alarm_sum |
Topvex Büsingen: Sammelalarm (A/B/C) | modbus:topvex:alarm_sum | 1.001 Schalt | Ein | modbus |
modbus:topvex:alarm_sum:alarm |
Topvex Büsingen: Sammelalarm (A/B/C) (Alarm) | modbus:topvex:alarm_sum:alarm | 1.005 Alarm | Alarm | modbus |
modbus:topvex:ao_manual_a |
Topvex Büsingen: Hand-Ausgang Sequenz A | modbus:topvex:ao_manual_a | 14 | 0 | modbus |
modbus:topvex:ao_manual_b |
Topvex Büsingen: Hand-Ausgang Sequenz B | modbus:topvex:ao_manual_b | 14 | 0 | modbus |
modbus:topvex:co2 |
Topvex Büsingen: CO2 | modbus:topvex:co2 | 14 | 800 | modbus |
modbus:topvex:energy_fan_power |
Topvex Büsingen: Leistung Ventilatoren | modbus:topvex:energy_fan_power | 14 | 0 | modbus |
modbus:topvex:ext_control |
Topvex Büsingen: Externe Steuerung (Ventilator-Vorgabe) | modbus:topvex:ext_control | 14 | 0 | modbus |
modbus:topvex:ext_run_high |
Topvex Büsingen: Verlängerter Betrieb High (DI) | modbus:topvex:ext_run_high | 1.001 Schalt | Aus | modbus |
modbus:topvex:ext_run_low |
Topvex Büsingen: Verlängerter Betrieb Low (DI) | modbus:topvex:ext_run_low | 1.001 Schalt | Aus | modbus |
modbus:topvex:ext_run_normal |
Topvex Büsingen: Verlängerter Betrieb Normal (DI) | modbus:topvex:ext_run_normal | 1.001 Schalt | Aus | modbus |
modbus:topvex:ext_stop |
Topvex Büsingen: Extern-Stopp (DI) | modbus:topvex:ext_stop | 1.001 Schalt | Aus | modbus |
modbus:topvex:fan_extract_ctrl |
Topvex Büsingen: Ventilator Abluft Stellsignal | modbus:topvex:fan_extract_ctrl | 14 | 0 | modbus |
modbus:topvex:fan_extract_out |
Topvex Büsingen: Ventilator Abluft Ausgang | modbus:topvex:fan_extract_out | 14 | 0 | modbus |
modbus:topvex:fan_extract_run |
Topvex Büsingen: Abluftventilator Betrieb/Motorschutz | modbus:topvex:fan_extract_run | 1.001 Schalt | Aus | modbus |
modbus:topvex:fan_extract_speed |
Topvex Büsingen: Ventilator Abluft Stufe | modbus:topvex:fan_extract_speed | 14 | 0 | modbus |
modbus:topvex:fan_supply_ctrl |
Topvex Büsingen: Ventilator Zuluft Stellsignal | modbus:topvex:fan_supply_ctrl | 14 | 0 | modbus |
modbus:topvex:fan_supply_out |
Topvex Büsingen: Ventilator Zuluft Ausgang | modbus:topvex:fan_supply_out | 14 | 0 | modbus |
modbus:topvex:fan_supply_run |
Topvex Büsingen: Zuluftventilator Betrieb/Motorschutz | modbus:topvex:fan_supply_run | 1.001 Schalt | Aus | modbus |
modbus:topvex:fan_supply_speed |
Topvex Büsingen: Ventilator Zuluft Stufe | modbus:topvex:fan_supply_speed | 14 | 0 | modbus |
modbus:topvex:fan_timechannel |
Topvex Büsingen: Zeitkanal Ventilatorstufe | modbus:topvex:fan_timechannel | 14 | 1 | modbus |
modbus:topvex:flow_exchanger |
Topvex Büsingen: Volumenstrom Tauscher | modbus:topvex:flow_exchanger | 14 | -1 | modbus |
modbus:topvex:flow_extract |
Topvex Büsingen: Volumenstrom Abluft | modbus:topvex:flow_extract | 14 | 0 | modbus |
modbus:topvex:flow_supply |
Topvex Büsingen: Volumenstrom Zuluft | modbus:topvex:flow_supply | 14 | 0 | modbus |
modbus:topvex:freecool_day_limit |
Topvex Büsingen: Freie Kühlung: Außentemp. min Tag | modbus:topvex:freecool_day_limit | 9.001 Temp | 22 °C | modbus |
modbus:topvex:freecool_high_limit |
Topvex Büsingen: Freie Kühlung: Außentemp. max Nacht | modbus:topvex:freecool_high_limit | 9.001 Temp | 18 °C | modbus |
modbus:topvex:freecool_low_limit |
Topvex Büsingen: Freie Kühlung: Außentemp. min Nacht | modbus:topvex:freecool_low_limit | 9.001 Temp | 10 °C | modbus |
modbus:topvex:freecool_room_limit |
Topvex Büsingen: Freie Kühlung: Raumtemp. min | modbus:topvex:freecool_room_limit | 9.001 Temp | 18 °C | modbus |
modbus:topvex:humidity |
Topvex Büsingen: Feuchte Raum | modbus:topvex:humidity | 14 | 0 | modbus |
modbus:topvex:hx_defrost |
Topvex Büsingen: WRG Abtauen | modbus:topvex:hx_defrost | 1.001 Schalt | Aus | modbus |
modbus:topvex:hx_efficiency |
Topvex Büsingen: WRG-Wirkungsgrad | modbus:topvex:hx_efficiency | 14 | 0 | modbus |
modbus:topvex:hx_power |
Topvex Büsingen: WRG Rückgewinnungsleistung | modbus:topvex:hx_power | 14 | 0 | modbus |
modbus:topvex:hx_rotation |
Topvex Büsingen: WRG Rotationswächter | modbus:topvex:hx_rotation | 1.001 Schalt | Aus | modbus |
modbus:topvex:pressure_extract |
Topvex Büsingen: Druck Abluft | modbus:topvex:pressure_extract | 14 | 0 | modbus |
modbus:topvex:pressure_supply |
Topvex Büsingen: Druck Zuluft | modbus:topvex:pressure_supply | 14 | 0 | modbus |
modbus:topvex:runtime_eaf |
Topvex Büsingen: Laufzeit Abluftventilator | modbus:topvex:runtime_eaf | 14 | 0.1 | modbus |
modbus:topvex:runtime_saf |
Topvex Büsingen: Laufzeit Zuluftventilator | modbus:topvex:runtime_saf | 14 | 0.1 | modbus |
modbus:topvex:seq_a_mode |
Topvex Büsingen: Sequenz A Betriebsart | modbus:topvex:seq_a_mode | 14 | 2 | modbus |
modbus:topvex:seq_a_out |
Topvex Büsingen: Sequenz A Ausgang | modbus:topvex:seq_a_out | 14 | 0 | modbus |
modbus:topvex:seq_b_mode |
Topvex Büsingen: Sequenz B Betriebsart | modbus:topvex:seq_b_mode | 14 | 2 | modbus |
modbus:topvex:seq_b_out |
Topvex Büsingen: Sequenz B Ausgang | modbus:topvex:seq_b_out | 14 | 0 | modbus |
modbus:topvex:sp_co2 |
Topvex Büsingen: CO2-Soll | modbus:topvex:sp_co2 | 14 | 1000 | modbus |
modbus:topvex:sp_eaf_pid |
Topvex Büsingen: Soll Abluftventilator-PID | modbus:topvex:sp_eaf_pid | 9.001 Temp | 0 °C | modbus |
modbus:topvex:sp_extract |
Topvex Büsingen: Abluft-Soll | modbus:topvex:sp_extract | 9.001 Temp | 22 °C | modbus |
modbus:topvex:sp_flow_eaf_high |
Topvex Büsingen: Volumenstrom-Soll Abluft High | modbus:topvex:sp_flow_eaf_high | 14 | 17667 | modbus |
modbus:topvex:sp_flow_eaf_low |
Topvex Büsingen: Volumenstrom-Soll Abluft Low | modbus:topvex:sp_flow_eaf_low | 14 | 17455 | modbus |
modbus:topvex:sp_flow_eaf_normal |
Topvex Büsingen: Volumenstrom-Soll Abluft Normal | modbus:topvex:sp_flow_eaf_normal | 14 | 17583 | modbus |
modbus:topvex:sp_flow_saf_high |
Topvex Büsingen: Volumenstrom-Soll Zuluft High | modbus:topvex:sp_flow_saf_high | 14 | 17667 | modbus |
modbus:topvex:sp_flow_saf_low |
Topvex Büsingen: Volumenstrom-Soll Zuluft Low | modbus:topvex:sp_flow_saf_low | 14 | 17455 | modbus |
modbus:topvex:sp_flow_saf_normal |
Topvex Büsingen: Volumenstrom-Soll Zuluft Normal | modbus:topvex:sp_flow_saf_normal | 14 | 17583 | modbus |
modbus:topvex:sp_humidity |
Topvex Büsingen: Feuchte-Soll | modbus:topvex:sp_humidity | 14 | 50 | modbus |
modbus:topvex:sp_pressure_eaf_high |
Topvex Büsingen: Druck-Soll Abluft High | modbus:topvex:sp_pressure_eaf_high | 14 | 750 | modbus |
modbus:topvex:sp_pressure_eaf_low |
Topvex Büsingen: Druck-Soll Abluft Low | modbus:topvex:sp_pressure_eaf_low | 14 | 250 | modbus |
modbus:topvex:sp_pressure_eaf_normal |
Topvex Büsingen: Druck-Soll Abluft Normal | modbus:topvex:sp_pressure_eaf_normal | 14 | 500 | modbus |
modbus:topvex:sp_pressure_saf_high |
Topvex Büsingen: Druck-Soll Zuluft High | modbus:topvex:sp_pressure_saf_high | 14 | 200 | modbus |
modbus:topvex:sp_pressure_saf_low |
Topvex Büsingen: Druck-Soll Zuluft Low | modbus:topvex:sp_pressure_saf_low | 14 | 100 | modbus |
modbus:topvex:sp_pressure_saf_normal |
Topvex Büsingen: Druck-Soll Zuluft Normal | modbus:topvex:sp_pressure_saf_normal | 14 | 200 | modbus |
modbus:topvex:sp_room |
Topvex Büsingen: Raum-Soll | modbus:topvex:sp_room | 9.001 Temp | 21 °C | modbus |
modbus:topvex:sp_saf_pid |
Topvex Büsingen: Soll Zuluftventilator-PID | modbus:topvex:sp_saf_pid | 9.001 Temp | 0 °C | modbus |
modbus:topvex:sp_summer_supply |
Topvex Büsingen: Zuluft-Soll Sommer | modbus:topvex:sp_summer_supply | 9.001 Temp | 24 °C | modbus |
modbus:topvex:sp_supply |
Topvex Büsingen: Zuluft-Soll | modbus:topvex:sp_supply | 9.001 Temp | 24 °C | modbus |
modbus:topvex:sp_supply_calc |
Topvex Büsingen: Zuluft-Soll berechnet | modbus:topvex:sp_supply_calc | 9.001 Temp | 22 °C | modbus |
modbus:topvex:sp_supply_cool |
Topvex Büsingen: Zuluft-Soll Kühlen | modbus:topvex:sp_supply_cool | 9.001 Temp | 22 °C | modbus |
modbus:topvex:sp_supply_heat |
Topvex Büsingen: Zuluft-Soll Heizen | modbus:topvex:sp_supply_heat | 9.001 Temp | 22 °C | modbus |
modbus:topvex:sp_supply_max |
Topvex Büsingen: Zuluft-Soll Max (Kaskade) | modbus:topvex:sp_supply_max | 9.001 Temp | 30 °C | modbus |
modbus:topvex:sp_supply_min |
Topvex Büsingen: Zuluft-Soll Min (Kaskade) | modbus:topvex:sp_supply_min | 9.001 Temp | 14 °C | modbus |
modbus:topvex:summer_mode |
Topvex Büsingen: Sommerbetrieb | modbus:topvex:summer_mode | 1.001 Schalt | Aus | modbus |
modbus:topvex:summer_outdoor |
Topvex Büsingen: Sommer/Winter-Umschaltung Außentemp. | modbus:topvex:summer_outdoor | 9.001 Temp | 13 °C | modbus |
Log
22:29:01 Script kompiliert OK (Init/Tick/KNXPaket/Alternate/BoolWechsel/Zeitplan/MakroBool/ShutDown).