[^<\n]+).*?Messwerte[^<\n]+)
attr DEVICE room WHICHROOM
attr DEVICE stateFormat W: wind, H: humidity%rH, T: temperature°C
attr DEVICE model ORF_weather
#Geschwindigkeitsüberwachung, Forum: https://forum.fhem.de/index.php/topic,90014.msg824805.html#msg824805
name:blitzer
filter:TYPE=HTTPMOD
desc: Get info about local velocity controls.
Define a HTTPMOD device like
defmod DEVICE HTTPMOD https://cdn2.atudo.net/api/1.0/vl.php?type=0,1,2,3,4,5,6&box=52.xxxxxx,8.xxxxxx,53.xxxxxx,9.xxxxxx 0
Change city to your needs
Source: Forum
order:A_03a
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr getData getHeader1 getHeader2 getURL reading01DeleteIfUnmatched reading01JSON reading01Name reading01Regex reading02Name reading02RegOpt reading02Regex reading03JSON reading03Name readingEncode requestHeader1 requestHeader2 setParseResponse:0,1
attr DEVICE enableControlSet 1
attr DEVICE extractAllJSON 1
attr DEVICE getHeader1 Content-Type: application/json
attr DEVICE getHeader2 Accept: */*
attr DEVICE readingEncode utf8
attr DEVICE room WHICHROOM
attr DEVICE model blitzer
#homebridge-videodoorbell, Forum: https://forum.fhem.de/index.php/topic,94291.msg870289.html#msg870289
name:homebridge_videodoorbell
filter:TYPE=HTTPMOD
desc: Controll your homebridge-videodoorbell.
Define a HTTPMOD device like
define Video_Doorbell HTTPMOD none 0
Source: Forum
order:A_02c
par:IP_PORT;Enter IP:Port as configured in your doorbell, like 123.456.7.8:5005;{undef }
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE get01Name klingel2homekitget
attr DEVICE get01URL http://IP_PORT/
attr DEVICE get01Data ding=dong&dong=ding
attr DEVICE get01Header02 User-Agent: curl/7.38.0
attr DEVICE get01Header04 Accept: */*
attr DEVICE get01Header06 Content-Type: application/x-www-form-urlencoded
attr DEVICE set01Name klingel2homekitset
attr DEVICE set01URL http://IP_PORT/
attr DEVICE set01Data ding=dong&dong=ding
attr DEVICE set01Header02 User-Agent: curl/7.38.0
attr DEVICE set01Header04 Accept: */*
attr DEVICE set01Header06 Content-Type: application/x-www-form-urlencoded
attr DEVICE set01NoArg 1
attr DEVICE room WHICHROOM
attr DEVICE model homebridge_videodoorbell
# Pihole Statistics, Website: https://wolf-u.li/5987/einbindung-der-pihole-statistiken-in-fhem/
name:pihole_statistics
filter:TYPE=HTTPMOD
desc: Get Statistics from your pihole instance.
Define a HTTPMOD device like
define DEVICE HTTPMOD http://192.168.133.7/admin/api.php 300
Change IP to your needs
Source: Website
order:A_02e
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr getURL
attr DEVICE extractAllJSON 1
attr DEVICE getURL http://dns/admin/api.php
attr DEVICE stateFormat DNS Anfragen: dns_queries_today
Geblockte Seiten: ads_blocked_today (ads_blocked_today_formatted %)
attr DEVICE userReadings ads_blocked_today_formatted {round(ReadingsNum($name,"ads_percentage_today",0),0)}
attr DEVICE room WHICHROOM
attr DEVICE model pihole_statistics
# Pharmacy Emergency Service Germany, Forum: https://forum.fhem.de/index.php?topic=87234.0
name:pharmacy_emergency_service_germany
filter:TYPE=HTTPMOD
desc: Gets the current emergency service of a pharmacy closeby your postal code
Define a HTTPMOD device like
define DEVICE HTTPMOD http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=1337 0
Change the postalcode (1337 in this example) to yours
Define a HTTPMOD device like
defmod DEVICE HTTPMOD http://192.168.5.43/DevMgmt/ProductConfigDyn.xml 3600
Change IP to your needs
Source: Forum
order:B_01a
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict reading03Name reading03XPath-Strict reading04Name reading04XPath-Strict reading05Name reading05XPath-Strict
attr DEVICE httpVersion 1.1
attr DEVICE reading01Name Model
attr DEVICE reading01XPath-Strict //dd:MakeAndModel/text()
attr DEVICE reading02Name Serial_Number
attr DEVICE reading02XPath-Strict //dd:SerialNumber/text()
attr DEVICE reading03Name Firmware_Date
attr DEVICE reading03XPath-Strict //dd:Date/text()
attr DEVICE reading04Name Total_Memory
attr DEVICE reading04XPath-Strict //dd:TotalMemory/text()
attr DEVICE reading05Name Available_Memory
attr DEVICE reading05XPath-Strict //dd:AvailableMemory/text()
attr DEVICE stateFormat Modell: Model SN: Serial_Number
attr DEVICE userReadings Memory_Usage {100-(ReadingsNum("DEVICE","Available_Memory","")/2.56)}
attr DEVICE room WHICHROOM
attr DEVICE model hp_printer_config
# Printer cartridge states
name:hp_printer_cartridge_status
filter:TYPE=HTTPMOD
desc: Get cartridge states of your HP printer.
Define a HTTPMOD device like
defmod DEVICE HTTPMOD http://192.168.5.43/DevMgmt/ConsumableConfigDyn.xml 3600
Change IP to your needs
Source: Forum
order:B_01a1
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict reading03Name reading03XPath-Strict reading04Name reading04XPath-Strict reading05Name reading05XPath-Strict reading06Name reading06XPath-Strict$
attr DEVICE httpVersion 1.1
attr DEVICE reading01Name Cyan
attr DEVICE reading01XPath-Strict //ccdyn:ConsumableInfo[2]/dd:ConsumablePercentageLevelRemaining/text()
attr DEVICE reading02Name Magenta
attr DEVICE reading02XPath-Strict //ccdyn:ConsumableInfo[3]/dd:ConsumablePercentageLevelRemaining/text()
attr DEVICE reading03Name Yellow
attr DEVICE reading03XPath-Strict //ccdyn:ConsumableInfo[4]/dd:ConsumablePercentageLevelRemaining/text()
attr DEVICE reading04Name Black
attr DEVICE reading04XPath-Strict //ccdyn:ConsumableInfo[1]/dd:ConsumablePercentageLevelRemaining/text()
attr DEVICE reading05Name CyanCatridgeModel
attr DEVICE reading05XPath-Strict //ccdyn:ConsumableInfo[3]/dd:ConsumableSelectibilityNumber/text()
attr DEVICE reading06Name MagentaCatridgeModel
attr DEVICE reading06XPath-Strict //ccdyn:ConsumableInfo[2]/dd:ConsumableSelectibilityNumber/text()
attr DEVICE reading07Name YellowCatridgeModel
attr DEVICE reading07XPath-Strict //ccdyn:ConsumableInfo[4]/dd:ConsumableSelectibilityNumber/text()
attr DEVICE reading08Name BlackCatridgeModel
attr DEVICE reading08XPath-Strict //ccdyn:ConsumableInfo[5]/dd:ConsumableSelectibilityNumber/text()
attr DEVICE stateFormat C: Cyan% M: Magenta% Y: Yellow% B: Black%
attr DEVICE room WHICHROOM
attr DEVICE model hp_printer_cartridge_status
# Printer statistics
name:hp_printer_statistics
filter:TYPE=HTTPMOD
desc: Gets various statistics from your HP printer.
Define a HTTPMOD device like
defmod DEVICE HTTPMOD http://192.168.5.43/DevMgmt/ProductUsageDyn.xml 3600
Change IP to your needs
Source: Forum
order:B_01a2
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict reading03Name reading03XPath-Strict reading04Name reading04XPath-Strict reading05Name reading05XPath-Strict reading06Name reading06XPath-Strict reading07Name reading07XPath-Strict reading08Name reading08XPath-Strict reading09Name reading09XPath-Strict reading10Name reading10XPath-Strict reading11Name reading11XPath-Strict reading20Name reading20XPath-Strict reading30Name reading30XPath-Strict reading40Name reading40XPath-Strict reading41Name reading41XPath-Strict reading50Name reading50XPath-Strict reading51Name reading51XPath-Strict
attr DEVICE httpVersion 1.1
attr DEVICE reading01Name Printer_Pages_Total
attr DEVICE reading01XPath-Strict //pudyn:PrinterSubunit/dd:TotalImpressions/text()
attr DEVICE reading02Name Printer_Pages_Monochrome
attr DEVICE reading02XPath-Strict //pudyn:PrinterSubunit/dd:MonochromeImpressions/text()
attr DEVICE reading03Name Printer_Pages_Color
attr DEVICE reading03XPath-Strict //pudyn:PrinterSubunit/dd:ColorImpressions/text()
attr DEVICE reading04Name Printer_Pages_Duplex
attr DEVICE reading04XPath-Strict //pudyn:PrinterSubunit/dd:DuplexSheets/text()
attr DEVICE reading05Name Printer_Jam_Events
attr DEVICE reading05XPath-Strict //pudyn:PrinterSubunit/dd:JamEvents/text()
attr DEVICE reading06Name Printer_Mispick_Events
attr DEVICE reading06XPath-Strict //pudyn:PrinterSubunit/dd:MispickEvents/text()
attr DEVICE reading10Name Scanner_Scans_Total
attr DEVICE reading10XPath-Strict //pudyn:ScannerEngineSubunit/dd:ScanImages/text()
attr DEVICE reading11Name Scanner_Scans_ADF_Image
attr DEVICE reading11XPath-Strict //pudyn:ScannerEngineSubunit/dd:AdfImages/text()
attr DEVICE reading12Name Scanner_Scans_Flatbed_Image
attr DEVICE reading12XPath-Strict //pudyn:ScannerEngineSubunit/dd:FlatbedImages/text()
attr DEVICE reading13Name Scanner_Jam_Events
attr DEVICE reading13XPath-Strict //pudyn:ScannerEngineSubunit/dd:JamEvents/text()
attr DEVICE reading14Name Scanner_Mispick_Events
attr DEVICE reading14XPath-Strict //pudyn:ScannerEngineSubunit/dd:MispickEvents/text()
attr DEVICE reading20Name InkMagentaPagesRemaining
attr DEVICE reading20XPath-Strict //pudyn:Consumable[dd:MarkerColor='Magenta']/dd:EstimatedPagesRemaining/text()
attr DEVICE reading21Name InkMagentaPercentRemaining
attr DEVICE reading21XPath-Strict //pudyn:Consumable[dd:MarkerColor='Magenta']/dd:ConsumableRawPercentageLevelRemaining/text()
attr DEVICE reading30Name InkCyanPagesRemaining
attr DEVICE reading30XPath-Strict //pudyn:Consumable[dd:MarkerColor='Cyan']/dd:EstimatedPagesRemaining/text()
attr DEVICE reading31Name InkCyanPercentRemaining
attr DEVICE reading31XPath-Strict //pudyn:Consumable[dd:MarkerColor='Cyan']/dd:ConsumableRawPercentageLevelRemaining/text()
attr DEVICE reading40Name InkYellowPagesRemaining
attr DEVICE reading40XPath-Strict //pudyn:Consumable[dd:MarkerColor='Yellow']/dd:EstimatedPagesRemaining/text()
attr DEVICE reading41Name InkYellowPercentRemaining
attr DEVICE reading41XPath-Strict //pudyn:Consumable[dd:MarkerColor='Yellow']/dd:ConsumableRawPercentageLevelRemaining/text()
attr DEVICE reading50Name InkBlackPagesRemaining
attr DEVICE reading50XPath-Strict //pudyn:Consumable[dd:MarkerColor='Black']/dd:EstimatedPagesRemaining/text()
attr DEVICE reading51Name InkBlackPercentRemaining
attr DEVICE reading51XPath-Strict //pudyn:Consumable[dd:MarkerColor='Black']/dd:ConsumableRawPercentageLevelRemaining/text()
attr DEVICE stateFormat Total: Printer_Pages_Total Monochrome: Printer_Pages_Monochrome Color: Printer_Pages_Color
attr DEVICE room WHICHROOM
attr DEVICE model hp_printer_statistics
# Printer status
name:hp_printer_status
filter:TYPE=HTTPMOD
desc: Get status of your hp printer.
Define a HTTPMOD device like
defmod DEVICE HTTPMOD http://192.168.5.43/DevMgmt/ProductStatusDyn.xml 60
Change IP to your needs
Source: Forum
order:B_01a3
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01Name reading01XPath-Strict
attr DEVICE httpVersion 1.1
attr DEVICE reading01Name Status
attr DEVICE reading01XPath-Strict //psdyn:LocString[@lang='de']/text()
attr DEVICE stateFormat Status
attr DEVICE room WHICHROOM
attr DEVICE model hp_printer_status
#################################
#Epson Printers
#
# Forum: https://forum.fhem.de/index.php/topic,90601.msg872234.html#msg872234
# Printer cartridge states
name:epson_printer_cartridge_status
filter:TYPE=HTTPMOD
desc: Get cartridge states of your Epson printer.
Define a HTTPMOD device like
defmod DEVICE HTTPMOD http://192.168.188.25/PRESENTATION/HTML/TOP/PRTINFO.HTML 3600
Change IP to your needs
Source: Forum
order:B_01b
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE reading01Name Yellow
attr DEVICE reading01Regex Ink_Y.*?='([\d]+)'
attr DEVICE reading02Name Cyan
attr DEVICE reading02Regex Ink_C.*?='([\d]+)'
attr DEVICE reading03Name Magenta
attr DEVICE reading03Regex Ink_M.*?='([\d]+)'
attr DEVICE reading04Name Black
attr DEVICE reading04Regex Ink_B.*?='([\d]+)'
attr DEVICE stateFormat C: Cyan% M: Magenta% Y: Yellow% B: Black%
attr DEVICE room WHICHROOM
attr DEVICE model epson_printer_cartridge_status
#################################
#Brother Printers
#
# Forum: https://forum.fhem.de/index.php/topic,97483.msg908461.html#msg908461
# Printer cartridge states
name:brother_printer_cartridge_status
filter:TYPE=HTTPMOD
desc: Get cartridge states of your Brother printer.
Define a HTTPMOD device like
defmod DEVICE HTTPMOD http://192.168.178.6/general/information.html 3600
Change IP to your needs
Source: Forum
Tested with MFC-9142CDN, should work with DCP-9015 CDW DCP-9020 HL-3140 CW HL-3150 CDN HL-3170 MFC-9130 MFC-9140 MFC-9330 MFC-9340
order:B_01c
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex
attr DEVICE httpVersion 1.1
attr DEVICE reading01Name Yellow
attr DEVICE reading01Regex \(Y\)\*\*.{9}\((\d{1,3}\.\d{1,2})%\)
attr DEVICE reading02Name Cyan
attr DEVICE reading02Regex \(C\)\*\*.{9}\((\d{1,3}\.\d{1,2})%\)
attr DEVICE reading03Name Magenta
attr DEVICE reading03Regex \(M\)\*\*.{9}\((\d{1,3}\.\d{1,2})%\)
attr DEVICE reading04Name Black
attr DEVICE reading04Regex \(BK\)\*\*.{9}\((\d{1,3}\.\d{1,2})%\)
attr DEVICE room WHICHROOM
attr DEVICE stateFormat C: Cyan% M: Magenta% Y: Yellow% B: Black%
attr DEVICE reading05Name Status
attr DEVICE reading05RegOpt gm
attr DEVICE reading05Regex 1<\/th> | (.*?)<
attr DEVICE model brother_printer_cartridge_status
#################################
#Brother Scanners
# Brother ADS Scanners
name:brother_scanner_ads_status
filter:TYPE=HTTPMOD
desc: Get status of your Brother scanner. Define a HTTPMOD device like defmod DEVICE HTTPMOD http://192.168.133.7/ft/gen_maintenance 3600 Change IP to your needs Source: Website. Tested to work with ADS-1700W, possibly others.
order:B_02a
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict reading03Name reading03XPath-Strict reading04Name reading04XPath-Strict reading05Name reading05XPath-Strict reading06Name reading06XPath-Strict reading07Name reading07XPath-Strict reading08Name reading08XPath reading08XPath-Strict reading09Name reading09XPath-Strict reading10Name reading10XPath-Strict reading11Name reading11XPath-Strict reading12Name reading12XPath-Strict
attr DEVICE httpVersion 1.1
attr DEVICE reading01Name Model
attr DEVICE reading01XPath-Strict //Model_name/text()
attr DEVICE reading02Name Serial_Number
attr DEVICE reading02XPath-Strict //Serial_Number/text()
attr DEVICE reading03Name Firmware_Version
attr DEVICE reading03XPath-Strict //MainVersion/text()
attr DEVICE reading04Name PickupRollerPagesThreshold
attr DEVICE reading04XPath-Strict //RemainingPick/text()
attr DEVICE reading05Name PickupRollerPagesUsed
attr DEVICE reading05XPath-Strict //RemainingPick_current/text()
attr DEVICE reading06Name ScheduledMaintenancePagesThreshold
attr DEVICE reading06XPath-Strict //RemainingScheduled/text()
attr DEVICE reading07Name ScheduledMaintenancePagesUsed
attr DEVICE reading07XPath-Strict //RemainingScheduled_current/text()
attr DEVICE reading08XPath SeparationPadPagesThreshold
attr DEVICE reading08XPath-Strict //RemainingPad_Threshold/text()
attr DEVICE reading09Name SeparationPadPagesUsed
attr DEVICE reading09XPath-Strict //RemainingSeparation_Pad/text()
attr DEVICE reading10Name ScannedPagesTotal
attr DEVICE reading10XPath-Strict //ScanPage/text()
attr DEVICE reading11Name RollerReplacements
attr DEVICE reading11XPath-Strict //RollerReplace/text()
attr DEVICE reading12Name PaperJams
attr DEVICE reading12XPath-Strict //PaperJams/text()
attr DEVICE stateFormat Pages: ScannedPagesTotal Modell: Model SN: Serial_Number
attr DEVICE room WHICHROOM
attr DEVICE model brother_scanner_ads_status
#################################
#RESOL Solaranlage, Forum: https://forum.fhem.de/index.php/topic,86678.0.html
name:resol_solar
filter:TYPE=HTTPMOD
desc: Get data from your RESOL solar installation Define a HTTPMOD device like define Solar HTTPMOD http://192.178.002.112/dl2/live/data 300 Source: Forum
order:C_01a
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex timeout
attr DEVICE group A_Energy
attr DEVICE reading01Name Temperatur_Sensor1
attr DEVICE reading01Regex Temperatur Sensor 1:[^0-9]+([0-9\.]+)
attr DEVICE reading02Name Temperatur_Sensor2
attr DEVICE reading02Regex Temperatur Sensor 2:[^0-9]+([0-9\.]+)
attr DEVICE reading03Name Temperatur_Sensor3
attr DEVICE reading03Regex Temperatur Sensor 3[^0-9]+([0-9\.]+)
attr DEVICE reading04Name Temperatur_Sensor4
attr DEVICE reading04Regex Temperatur Sensor 4[^0-9]+([0-9\.]+)
attr DEVICE reading05Name Drehzahl_Pumpe
attr DEVICE reading05Regex Drehzahl Pumpe 1[^0-9]+([0-9\.]+)
attr DEVICE reading06Name Betriebsstunden
attr DEVICE reading06Regex Betriebsstunden Relais 1[^0-9]+([0-9\.]+)
attr DEVICE room WHICHROOM
attr DEVICE stateFormat Dachtemperatur: Temperatur_Sensor1 Drehzahl Pumpe: Drehzahl_Pumpe Laufzeit Heute: Tageslaufzeit
attr DEVICE timeout 5ercent="([\d\.]+)
attr DEVICE model resol_solar
#################################
#Show updates for CUL_HM devices, Forum: https://forum.fhem.de/index.php/topic,78501.msg972144.html#msg972144
#Contributed by Pfriemler & yersinia, see https://forum.fhem.de/index.php/topic,78501.msg1019327.html#msg1019327
name:homematic_fw_check_v2
filter:TYPE=HTTPMOD
desc: check for homematic firmware updates; based on new link provided by Pfriemler (switch from eq-3.de to update.homematic.com) Define a HTTPMOD device like define hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400 Source: Forum
order:X_01a
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
par:INTERVAL;Actual interval for updating, defaults to one day (86400s); {InternalVal("DEVICE","Interval",86400)}
defmod DEVICE HTTPMOD https://update.homematic.com/firmware/api/firmware/search/\DEVICE INTERVAL
attr DEVICE userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete showNewFWOnly:yes,no
attr DEVICE enableControlSet 1
attr DEVICE icon hm_ccu
attr DEVICE reading01AutoNumLen 2
attr DEVICE reading01Name hmfw-type
attr DEVICE reading01RegOpt g
attr DEVICE reading01Regex (?i)"type":"((?:\w+[-]*){1,})
attr DEVICE reading02AutoNumLen 2
attr DEVICE reading02Name hmfw-version
attr DEVICE reading02RegOpt g
attr DEVICE reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
attr DEVICE readingMaxAge 10
attr DEVICE readingMaxAgeReplacementMode delete
attr DEVICE room WHICHROOM
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE showNewFWOnly yes
attr DEVICE stateFormat { my $ret ="";;;;\
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;;;\
$ret .= '';;;;\
$ret .= 'last homematic-fw-check => '.$lastCheck;;;;\
$ret .= ' ';;;;\
$ret .= "| device | model | cur_fw | new_fw | ";;;;\
$ret .= "------------------------------------------------------------------------------ ";;;;\
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;;;\
if($check eq "no fw-updates needed!") {\
$ret .= '| ';;;;\
$ret .= sprintf("%-74s",$check);;;;\
$ret .= ' |';;;;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '| ';;;;\
$ret .= sprintf("%-74s",$check);;;;\
$ret .= ' |';;;;\
} else {\
my @devices = split(',',$check);;;;\
foreach my $devStr (@devices) {\
my ($dev,$md,$idx,$ofw,$nfw) = $devStr =~ m/([^\s]+)\s[(]([^\s]+)\s[(](\d+)[)]\sofw_([\d\.]+)\s=>\snfw_([\d\.]+)/;;;;\
my $fw_link = "https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=".$md;;;;\
$ret .= '| ';;;;\
$ret .= sprintf("%-30s",$dev);;;;\
$ret .= ' | ';;;;\
$ret .= '';;;;\
$ret .= sprintf("%-23s",$md);;;;\
$ret .= ' | ';;;;\
$ret .= '';;;;\
$ret .= sprintf("%6s",$ofw);;;;\
$ret .= ' | ';;;;\
$ret .= '';;;;\
$ret .= sprintf("%6s",$nfw);;;;\
$ret .= ' | ';;;;\
$ret .= " ";;;;\
}\
}\
$ret .= ' ';;;;\
return $ret;;;;\
}
attr DEVICE userReadings newFwForDevices:MATCHED_READINGS.* {\
my $ret = "";;;;\
my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;;;\
if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\
my @eq3FwList = map { \
sprintf(ReadingsVal($name,"hmfw-type-".$_,"?").":".ReadingsVal($name,"hmfw-version-".$_,"?").":".$_);;;;\
} ReadingsVal($name,"MATCHED_READINGS","?")=~ m/hmfw-version-(\d\d)/g;;;;\
\
foreach my $dev (devspec2array("TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=(virtual|)")) {\
my $md = AttrVal($dev,"model","?");;;;\
my $v = AttrVal($dev,"firmware","0.0");;;;\
my ($h,$l) = split('\.',$v);;;;\
foreach my $newFW (grep m/^${md}:/i,@eq3FwList) {\
my ($fwmd, $fwv, $idx) = $newFW =~ m/([^:]+):(\d+[.]\d+[.]\d+):(\d+)$/;;;;\
my ($fwh, $fwl) = split('\.',$fwv);;;;\
if(($newfwonly eq "no") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\
$ret .= "," if($ret ne "");;;;\
$ret .= $dev." (".$md." (".$idx.") ofw_".$v." => nfw_".$fwv.")";;;;\
}\
}\
}\
} else {\
$ret = "error => no or wrong data from eq3-server!";;;;\
}\
return ($ret eq "")?"no fw-updates needed!":$ret;;;;\
}
attr DEVICE webCmd reread
attr DEVICE model homematic_fw_check_v2
#Contributed by OdfFHEM, see https://forum.fhem.de/index.php/topic,97694.msg992348.html#msg992348
name:tasmota_firmware_updates
filter:TYPE=HTTPMOD
desc: Check Tasmota homepage for available new firmware files Define a HTTPMOD device like define tasmotaupdates HTTPMOD https://github.com/arendst/Tasmota/tags 86400Source: Forum.
order:X_01e
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
par:UPDATABLEDEVICESMODE;Actual mode for updatableDevices, defaults to onlyUpdatable; {AttrVal("DEVICE","updatableDevicesMode","onlyUpdatable")}
par:INTERVAL;Actual interval for updating, defaults to one week; {InternalVal("DEVICE","Interval","604800")}
defmod DEVICE HTTPMOD https://github.com/arendst/Tasmota/tags INTERVAL
attr DEVICE userattr reading01Name reading01Regex reading02Name reading02OExpr reading02Regex updatableDevicesMode:onlyUpdatable,all
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .*
attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr DEVICE handleRedirects 0
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex commit-title">[\w\W]*?[\w\W]*?v(\d*.\d*.\d*)[\w\W]*?
attr DEVICE reading02Name latestDate
attr DEVICE reading02OExpr $val =~ m/^(.{4})-(.{2})-(.{2})$/ ;; "$3.$2.$1"
attr DEVICE reading02Regex relative-time[\w\W]*?datetime="(\d*-\d*-\d*)T\d*:\d*:\d*Z"
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE stateFormat { my $ret ="";;\
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
$ret .= '';;\
$ret .= 'last tasmota-check => '.$lastCheck;;\
$ret .= ' ';;\
$ret .= "| device | current | new | released | ";;\
$ret .= "--------------------------------------------------------------------- ";;\
my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
if($check eq "no updates needed!") {\
$ret .= '| ';;\
$ret .= sprintf("%-65s",$check);;\
$ret .= ' |';;\
} elsif($check eq "error => no or wrong data from server!") {\
$ret .= '| ';;\
$ret .= sprintf("%-65s",$check);;\
$ret .= ' |';;\
} else {\
my @devices = split(',',$check);;\
foreach my $devStr (@devices) {\
my ($dev,$old,$new,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\s]+)\s\|\s([^\)]+)\)$/;;\
$ret .= '| ';;\
$ret .= sprintf("%-32s",$dev);;\
$ret .= ' | ';;\
$ret .= '';;\
$ret .= sprintf("%7s",$old);;\
$ret .= ' | ';;\
$ret .= '';;\
$ret .= '';;\
$ret .= sprintf("%7s",$new);;\
$ret .= ' | ';;\
$ret .= '';;\
$ret .= '';;\
$ret .= sprintf("%-10s",$date);;\
$ret .= '';;\
$ret .= " | ";;\
}\
}\
$ret .= ' ';;\
return $ret;;\
}
attr DEVICE timestamp-on-change-reading .*
attr DEVICE updatableDevicesMode UPDATABLEDEVICESMODE
attr DEVICE userReadings updatableDevices:MATCHED_READINGS.* {\
my $ret = "";;\
if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
$ret = "error => no or wrong data from server!";;\
} else {\
my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
my $DATE = ReadingsVal($name,"latestDate","unknown");;\
foreach my $dev (devspec2array("TYPE=MQTT[2]?_[D]EVICE:FILTER=INFO1_Version!=")) {\
my $version = ReadingsVal($dev,"INFO1_Version","0.0.0");;\
$version =~ m/([0-9.]*).*/;;\
$version = $1;;\
if ( AttrVal($name,"updatableDevicesMode","onlyUpdatable") eq "all" || $version ne $VERSION ) {\
$ret .= "," if($ret ne "");;\
$ret .= $dev." (".$version." | ".$VERSION." | ".$DATE.")";;\
}\
}\
}\
return ($ret eq "")?"no updates needed!":$ret;;\
}
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
attr DEVICE model tasmota_firmware_updates
#Contributed by OdfFHEM, see https://forum.fhem.de/index.php/topic,97694.msg998835.html#msg998835
name:zigbee2mqtt_daemon_updates
filter:TYPE=HTTPMOD
desc: Check zigbee2mqtt homepage for new versions of the deamon software. Define a HTTPMOD device like define zigbee2mqtt_updates HTTPMOD https://github.com/Koenkk/zigbee2mqtt/tags 604800
Source: Forum.
order:X_01e1
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
par:INTERVAL;Actual interval for updating, defaults to one day; {InternalVal("DEVICE","Interval",604800)}
par:UPDATABLEDEVICESMODE;Actual mode for updatableDevices, defaults to onlyUpdatable; {AttrVal("DEVICE","updatableDevicesMode","onlyUpdatable")}
defmod DEVICE HTTPMOD https://github.com/Koenkk/zigbee2mqtt/tags INTERVAL
attr DEVICE userattr reading01Name reading01Regex reading02Name reading02OExpr reading02Regex updatableDevicesMode:onlyUpdatable,all
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .*
attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr DEVICE handleRedirects 0
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex commit-title">[\w\W]*?[\w\W]*?(\d*\.\d*\.\d*)[\w\W]*?
attr DEVICE reading02Name latestDate
attr DEVICE reading02OExpr $val =~ m/^(.{4})-(.{2})-(.{2})$/ ;; "$3.$2.$1"
attr DEVICE reading02Regex relative-time[\w\W]*?datetime="(\d*-\d*-\d*)T\d*:\d*:\d*Z"
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE stateFormat { my $ret ="";;\
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
$ret .= '';;\
$ret .= 'last ZigBee-check => '.$lastCheck;;\
$ret .= ' ';;\
$ret .= "| device | current | new | released | ";;\
$ret .= "--------------------------------------------------------------------- ";;\
my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
if($check eq "no updates needed!") {\
$ret .= '| ';;\
$ret .= sprintf("%-65s",$check);;\
$ret .= ' |';;\
} elsif($check eq "error => no or wrong data from server!") {\
$ret .= '| ';;\
$ret .= sprintf("%-65s",$check);;\
$ret .= ' |';;\
} else {\
my @devices = split(',',$check);;\
foreach my $devStr (@devices) {\
my ($dev,$old,$new,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\s]+)\s\|\s([^\)]+)\)$/;;\
$ret .= '| ';;\
$ret .= sprintf("%-32s",$dev);;\
$ret .= ' | ';;\
$ret .= '';;\
$ret .= sprintf("%7s",$old);;\
$ret .= ' | ';;\
$ret .= '';;\
$ret .= '';;\
$ret .= sprintf("%7s",$new);;\
$ret .= ' | ';;\
$ret .= '';;\
$ret .= '';;\
$ret .= sprintf("%-10s",$date);;\
$ret .= '';;\
$ret .= " | ";;\
}\
}\
$ret .= ' ';;\
return $ret;;\
}
attr DEVICE updatableDevicesMode UPDATABLEDEVICESMODE
attr DEVICE timestamp-on-change-reading .*
attr DEVICE userReadings updatableDevices:MATCHED_READINGS.* {\
my $ret = "";;\
if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
$ret = "error => no or wrong data from server!";;\
} else {\
my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
my $DATE = ReadingsVal($name,"latestDate","unknown");;\
foreach my $dev (devspec2array("TYPE=MQTT[2]?_[D]EVICE:FILTER=permit_join!=")) {\
my $version = ReadingsVal($dev,"version","0.0.0");;\
$version =~ m/([0-9.]*).*/;;\
$version = $1;;\
if (AttrVal($name,"updatableDevicesMode","onlyUpdatable") eq "all" || $version ne $VERSION) {\
$ret .= "," if($ret ne "");;\
$ret .= $dev." (".$version." | ".$VERSION." | ".$DATE.")";;\
}\
}\
}\
return ($ret eq "")?"no updates needed!":$ret;;\
}
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
attr DEVICE model zigbee2mqtt_daemon_updates
#Contributed by yersinia, see https://forum.fhem.de/index.php/topic,97694.msg992432.html#msg992432
name:ESPEasy_firmware_updates
filter:TYPE=HTTPMOD
desc: Check letscontrollit homepage for available new firmware files Define a HTTPMOD device like define ESPEasy_updates HTTPMOD https://github.com/letscontrolit/ESPEasy/releases 86400Source: Forum.
order:X_01f
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01Name reading01Regex
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .*
attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr DEVICE handleRedirects 1
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex Release mega-([\d]{8})
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE stateFormat { my $ret ="";;\
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
$ret .= '';;\
$ret .= 'last ESPEasy version check => '.$lastCheck;;\
$ret .= ' ';;\
$ret .= "| device | current | new | ";;\
$ret .= "---------------------------------------------------------------------- ";;\
my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
if($check eq "no updates needed!") {\
$ret .= '| ';;\
$ret .= sprintf("%-65s",$check);;\
$ret .= ' |';;\
} elsif($check eq "error => no or wrong data from server!") {\
$ret .= '| ';;\
$ret .= sprintf("%-65s",$check);;\
$ret .= ' |';;\
} else {\
my @devices = split(',',$check);;\
foreach my $devStr (@devices) {\
my ($dev,$old,$new) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\)]+)\)$/;;\
$ret .= '| ';;\
$ret .= sprintf("%-44s",$dev);;\
$ret .= ' | ';;\
$ret .= '';;\
$ret .= '';;\
$ret .= sprintf("%7s",$old);;\
$ret .= ' | ';;\
$ret .= '';;\
$ret .= '';;\
$ret .= sprintf("%7s",$new);;\
$ret .= ' | ';;\
}\
}\
$ret .= ' ';;\
return $ret;;\
}
attr DEVICE timestamp-on-change-reading .*
attr DEVICE userReadings updatableDevices:MATCHED_READINGS.* {\
my $ret = "";;\
if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
$ret = "error => no or wrong data from server!";;\
} else {\
my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
foreach my $dev (devspec2array("TYPE=ESPEasy:FILTER=HOST!=bridge")) {\
my $version = InternalVal($dev,"ESP_BUILD_GIT","unknown");;\
$version =~ m/([\d]{8})/;;\
$version = $1;;\
if($version ne $VERSION) {\
$ret .= "," if($ret ne "");;\
$ret .= $dev." (".$version." | ".$VERSION.")";;\
}\
}\
}\
return ($ret eq "")?"no updates needed!":$ret;;\
}
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
attr DEVICE model ESPEasy_firmware_updates
#Contributed by yersinia, see
name:dnscrypt-proxy_updates
filter:TYPE=HTTPMOD
desc: Show updates for DNSCRYPT. Define a HTTPMOD device like defmod dnscrypt_proxy_version HTTPMOD https://api.github.com/repos/jedisct1/dnscrypt-proxy/releases/latest 86400 Source: Forum
order:A_02f
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr userattr myInstalledVersion
attr DEVICE extractAllJSON 1
attr DEVICE extractAllJSONFilter tag_name
attr DEVICE stateFormat {"".ReadingsTimestamp($name,'tag_name','')." Online: ".ReadingsVal($name,'tag_name','')." \
pihole: ".AttrVal($name,'myInstalledVersion','')." "}
attr DEVICE myInstalledVersion 2.0.31
attr DEVICE room WHICHROOM
attr DEVICE enableControlSet 1
attr DEVICE model dnscrypt-proxy_updates
|