Het kan soms handig zijn om het publieke IP op een andere site te weten. Zeker bij providers waar de publieke IP’s meestal dynamisch zijn. Hieronder een manier waar openHAB controleert wat het IP is, en vervolgens doormailt als dit gewijzigd is. Je zou dit ook via rsync/FTP/nfs/… naar een andere server sturen, maar ik probeer zo weinig mogelijk poorten open te stellen naar het internet toe.
Bepalen van het publieke IP
Installeer volgende onder openHAB:
- BINDING: http-binding
Creeer een thing en item met volgende zaken. Je kan dit doen via CLI of GUI.
via CLI
thing:
Thing http:url:wan_ip "Wan IP Adress" [ baseURL="https://api.ipify.org", refresh=86400 ] {
Channels: Type string : address "WANIP" [ stateTransformation="REGEX:(.*?)" ]
}
item:
String WAN_IP "WAN IP address [%s]" {channel="http:url:wan_ip:address"}
Via GUI
Thing:
UID: http:url:11fc6e8a1c
label: wan_ip
thingTypeUID: http:url
configuration:
authMode: BASIC
ignoreSSLErrors: false
baseURL: https://api.ipify.org
refresh: 86400
commandMethod: GET
timeout: 3000
bufferSize: 2048
channels:
- id: WANIP
channelTypeUID: http:string
label: WANIP
description: ""
configuration:
stateTransformation: REGEX:(.*?)
item:

Als alles goed is, zou je server telkens het publieke IP moeten controleren.
Alerting instellen
Installeer volgende onder openHAB:
- BINDING: mail-binding
- TRANSFORMATION: regex Transformation
Creëer nu je mail-server. Ik gebruik persoonlijk meestal sendgrid. Gratis smtp servertje indien je niet veel zaken hoeft te versturen.

Maak een rule aan die getriggerd wordt als het publieke IP wijzigt, en die vervolgens een mailtje stuurt.
rule "Monitor WAN IP"
when
Item WAN_IP changed
then
val currentState = WAN_IP.state
if (currentState == "-") {
logError("MonitorWANIP", "Unable to get WAN IP")
} else {
logInfo("MonitorWANIP", "WAN IP changed to: " + currentState)
val mailActions = getActions("mail","mail:smtp:d39abbad9d")
mailActions.sendMail(
"email@domein.be",
"WAN IP gewijzigd",
"Het publieke IP adres is gewijzigd.\nHet nieuwe IP is nu: " + currentState + "\n")
}
end