Going further with the Fluke 289 - Page 1
Forum section: electronics / general

author: elafargue
author_rank: Contributor
timestamp: November 10, 2011, 09:25:29 am
content: Hi all,I have spent a few evenings lately to dig further into the Fluke 289 multimeter and its serial protocol, and I have found quite a lot of fun stuff - remote control of the multimeter, screenshots, recording downloads, DMM configuration, even hints at internal file management. As this community seems to be generally quite knowledgeable on the various tool manufacturers, I am seeking your advice on whether it would be appropriate to release a specs document, so that hobbyists can get creative! IMHO it would be a nice boost for this excellent multimeter, but I do not know whether Fluke takes a hard line on the publication of such specs, or whether they are OK with it? I saw that they have published serial protocol specs for their portable scopes, but not much when it comes to their DMMs...Let me know!

author: Unknown
author_rank: Unknown
timestamp: November 10, 2011, 11:49:33 am
content: The Fluke 89IV/189 protocol is out there somewhere, don't remember if this was the Fluke website or not. The 289 protocol might be similar.

author: Richard W.
author_rank: Regular Contributor
timestamp: November 10, 2011, 07:09:27 pm
content: Maybe i got something helpfulregardsRichard

author: elafargue
author_rank: Contributor
timestamp: November 10, 2011, 10:50:02 pm
content: Sure, this is the (very small) public spec for the 289. It doesn't even explain how to download recordings, which are one of the big features of the meter... The meter supports tons of additional commands. Try a "PRESS BACKLIGHT" command, for instance

author: Unknown
author_rank: Unknown
timestamp: November 10, 2011, 11:14:58 pm
content: Can the FlukeView software turn the backlight on? I wouldn't be surprised if this was not supported, since the remote protocols tend to be geared towards remote data acquisition as opposed to remote control.

author: Wartex
author_rank: Frequent Contributor
timestamp: November 11, 2011, 12:10:50 am
content: Quote from: elafargue on November 10, 2011, 09:25:29 amGuy that wrote memtestx86 did a thorough job reversing it, contact him. For which I believe Fluke forums banned him. Unless it's you.

author: elafargue
author_rank: Contributor
timestamp: November 11, 2011, 07:56:43 am
content: Quote from: Wartex on November 11, 2011, 12:10:50 amYeah, I spoke to him, I think he is busy with other things & was not very interested to help, unfortunately....

author: elafargue
author_rank: Contributor
timestamp: November 13, 2011, 06:11:38 pm
content: This is actually quite fun. It seems that the DMM supports two types of transfer: either a fully ASCII protocol, but also the same protocol with simple binary framing, each packet starting with 0x10 0X02 <DATA> 0x10 0x03 <CRC> though I was not able so far to get the algorithm for the CRC. The meter also supports two sets of commands, some which are only accessible after some sort of authentication (calibration password, it seems, or maybe a developer key?).Interesting commands so far: qemap, which accepts a very large list of arguments:Code:blightValsrsobblvalsmemvalsjackdetectupdateModeacsmoothtempunitdBmRefpwpolhzEdgedcpolcontbeepconbeepostimeFmtdateFmtnumFmtlangrecEventThrsmabltodigitsbeeperapofftoautorangeboltfileModeqtbeeperTestStatesessionTypecalConstantNamecalStatusmodereadingIDattributejackNamejackPositionStatustestPatternlcdModeStateledStatemp_propsmpdev_propsmpq_propsmemSizepowerModebuttonNamepresstypechannelsampleTimerecordTypeisStableFlagtransientStatexaJackNameYou can use the "PRESS" command with one of the 'buttonName' values, for instance. Or you can switch the power button's LED with LEDT - argument matches the result of qemap ledstate - . Or you can (probably) get the LCD's current bitmap with QLCDBM with an offset as argument (0 for instance). I was not able to decode the bitmap so far, but here you go.In order to get the trendlog recordings, you can use the QRSI command (with argument 0 to 8 ) to get a binary structure which includes the ID of each recording, and then download each sample of the recordings with QSRR with ID as argument. I will publish a proper description once I underttand the binary structures properly, I'm nearly there...If someone wants to give me a hand, I would like to put my hands on the log of a DMM firmware update, so that understand how to authenticate to the DMM to get access to the low level commands...

author: jrmpdb
author_rank: Newbie
timestamp: February 19, 2013, 03:00:46 pm
content: elafargue I was wondering if you made any head way on this tool. I have a FLUKE 287 and 289 that I am currently playing with and I found your post very helpful and interesting. I am looking to grab the stored data from the instrument and have found the commands QSLS which will return the number of saved records and QSMR with an argument (0-num of records) that contains the saved data, the saved data is in ASCII format but is unreadable except for the tag (Save 1-n). I know that this is an old post but I thought I'd give it a shot since this is the only helpful reference that I could find on the internet.

author: alecotech
author_rank: Newbie
timestamp: March 13, 2014, 01:35:29 pm
content: Hello,I have found this topic very interesting. I am trying to pull off a couple of logs from the trend capture. I have read some of the above posts, but have had little luck getting the logs downloaded from memory. Has anyone got any updates or hints for the correct commands.I have tried:QSLS to find the names of stored files, and QSMR + stored name.THanks,

author: elafargue
author_rank: Contributor
timestamp: March 13, 2014, 02:02:04 pm
content: I finalized the reverse engineering of the whole protocol about a year ago. The big issue is that Fluke is known for having intimidated people who published that sort of stuff in the past, so I an reluctant to share anything...That said, the protocol is fairly straightforward, all binary packets map to C structures more or less...Ed

author: apelly
author_rank: Unknown
timestamp: March 13, 2014, 02:18:30 pm
content: Give it to me. I'll publish the shit out of it.It's my hardware. I'll do what I bloody well want!Actually, I have flukeview(sp?) but I just don't seem to ever need a connected meter anyway. If I was smarter, or more interested, I'm sure I could achieve the same. If you don't feel comfortable releasing your work, that's more than OK with me.Also, for someone who might have last posted in 2011, you are on the ball man!

author: johnwill
author_rank: Contributor
timestamp: March 17, 2014, 10:13:59 pm
content: I have had the Fluke 289 now for several months, and without question it is the best meter I have ever used. This meter has insane accuracy, a monster array of measurements (including low impedance, ghost voltages) and the ability to act as a data logger for any type of measurement it is able to do. Not the cheapest of meters but well worth the price tag.

author: neslekkim
author_rank: Super Contributor
timestamp: March 19, 2014, 11:57:47 am
content: Quote from: elafargue on March 13, 2014, 02:02:04 pmPlease do... somewhere..

author: ben_r_
author_rank: Frequent Contributor
timestamp: March 23, 2014, 06:48:44 am
content: Oh awesome! Would love to take a look at this! Please someone post it up!

author: Nevereven
author_rank: Contributor
timestamp: May 09, 2014, 03:21:53 am
content: I've managed to figure out some of how to get data out of my 189-II. I'm working on figuring out the data structures associated with QRSI and QSRR.I found some Ruby code which is a good start, but I suspect that the format has changed somewhat with new firmware.If anyone wants to help with this, PM me. I don't want to post the mess I have because it's got big parts which I know are wrong or guesses.Once the data structures are figured out I want to write some python code to dump saved data to a CSV file.

author: neslekkim
author_rank: Super Contributor
timestamp: May 09, 2014, 11:32:29 am
content: seems like Sigrok have some support?http://sigrok.org/wiki/Fluke_287/289

author: Nevereven
author_rank: Contributor
timestamp: May 09, 2014, 11:44:52 am
content: I think they just support the public API which doesn't include the ability to download data with the QRSI and QSRR commands.Quote from: neslekkim on May 09, 2014, 11:32:29 am

author: neslekkim
author_rank: Super Contributor
timestamp: May 09, 2014, 02:12:34 pm
content: ah, ok.did you check this one?https://github.com/fvaleur/dmm_util

author: Nevereven
author_rank: Contributor
timestamp: May 09, 2014, 04:06:54 pm
content: I did see that, and it was very useful. The parsing algorithms don't seem to quite match up with the data I'm seeing. Perhaps there have been some changes with firmware upgrades? If someone who uses Ruby could test it, it would be very helpful as I'm not sure what state it was left in.Quote from: neslekkim on May 09, 2014, 02:12:34 pm

author: mikedanylov
author_rank: Newbie
timestamp: July 11, 2015, 07:59:45 am
content: Hi, I recently wrote this(https://github.com/mikedanylov/Power_Measurements_Fluke289) Python tool for reading current from Fluke 289 and analyze power consumption of a device.It gets measurements from multimeter and plots a graph.

author: nbenm
author_rank: Newbie
timestamp: November 01, 2017, 07:23:38 am
content: @Nevereven, did you succeed in decoding the data ?I have a 287, and I want too to write python code to extract saved data and the plot them.I have seen the Ruby code, but it is completely outdated.I use firmware v1.16I have too found the command qsls which gives the number of:- saved recordings -> then qrsi #- saved min-max -> then qmmsi #- saved peaks -> then qpsi #- saved measurements -> then qsmr #But replies are in binary and not doc is availableqddb seem to be for real time measurementsBTW, the Ruby code is OK for the "set" command. I could change company,contact,operator and site

author: emax
author_rank: Contributor
timestamp: November 07, 2018, 08:10:45 pm
content: Old thread, but current topic.I didn't try yet, but how do you connect to yout PC? Does the IR/USB-adaptor appear just as a serial device?Which platforms you're on? I'm on linux and would try my swiss-army-knife: perl.

author: HKJ
author_rank: Super Contributor
timestamp: November 07, 2018, 08:25:02 pm
content: Quote from: emax on November 07, 2018, 08:10:45 pmThe Fluke adapters uses a virtual COM port and it is possible to find descriptions of the protocol.

author: Pumuckl
author_rank: Newbie
timestamp: January 14, 2019, 10:00:01 am
content: Hey,Has anyone a list of the 28x commands or a way to contact the old posters that figured them out?I am trying to remotely activate min/max and peak functions. I can get around the normal min/max activation by sending the key but for peak I would have to use the menu and this is always different depending on the range I am in.Cheers,Christian.

author: tdjastrzebski
author_rank: Newbie
timestamp: February 18, 2022, 09:21:00 am
content: For those who came across this long running thread.Two open source tools able to read from Fluke 289 I found:1.https://sigrok.org/Usage:sigrok-cli -d fluke-dmm:conn=com6 -C P1 --continuous -O analog- reads current values only2.https://github.com/N0ury/dmm_util-able to read memory-stored recordingsbut has some parsing bugs, e.g. read average values are way too highMaybe someone who has knowledge could help? @elafargue ?Seehttps://github.com/N0ury/dmm_util/issues/3

author: HKJ
author_rank: Super Contributor
timestamp: February 18, 2022, 09:56:30 am
content: Quote from: tdjastrzebski on February 18, 2022, 09:21:00 amThere is also (it is not open source):Forum thread:https://www.eevblog.com/forum/testgear/program-that-can-log-from-many-multimeters/Download:https://lygte-info.dk/project/TestControllerIntro%20UK.htmlWill read from Fluke 289 and more than 400 other devices.It will log, show curves and a lot of other stuff.

author: tdjastrzebski
author_rank: Newbie
timestamp: February 18, 2022, 11:10:42 am
content: I did not mention that but I was particularly interested in reading Fluke 289memory stored recordings.There are other open-source solutions on GitHub, e.g.https://github.com/mikedanylov/meaplot-Fluke289https://github.com/mrtumnus/fluke-clihttps://github.com/wasle/Fluke289but they read current values only.

author: View[+]Finder
author_rank: Unknown
timestamp: March 03, 2022, 10:13:15 pm
content: This is a bunch of simple Python scripts that are useful for accessing data from Fluke 28X meters with the IR remote USB cable.Code:# Created from information provided in Fluke Remote IR documentaton cited in eevblog threads# buy a Remote Interface from Fluke to access this information, Some come with FlukeView--a form# completion application--that is well worth the money for paid work by skilled techniciansimport serialser = serial.Serial()# Setup serial USBser.port = '/dev/cu.usbserial-AC00FZQJ' # Serial port# Serial port setup and openser.baudrate = 115200ser.bytesize = serial.EIGHTBITSser.parity = serial.PARITY_NONEser.stopbits = serial.STOPBITS_ONEser.xonxoff = Trueser.rtscts = Falseser.dsrdtr = Falseser.timeout = 0.1 # secondstry:ser.open()except:print("Cannot open serial port...")exit()######################################################def probe():QRSI() # Put the function you want to probe here, run in IDLE or Thonny, etc.# to read the current measurement datadef QM():ser.write(('qm' + '\r').encode('utf-8'))if ser.read():data = (ser.read(32).decode('utf-8'))for i in range(0 , 4):print ((data.split(',')))# example:# 9.999E0# VDC# NORMAL# NONE# to read the basic meter datadef ID():ser.write(('id' + '\r').encode('utf-8'))if ser.read():data = (ser.read(32).decode('utf-8'))for i in range(0 , 3):print ((data.split(',')))# to read the "present data that is displayed on the LCD" (Source: Fluke Remote Interface)def QDDA():ser.write(('qdda' + '\r').encode('utf-8'))if ser.read():data = (ser.read(999).decode('utf-8'))for i in range(0 , 28):print (str(i) + ' ' + (data.split(',')))# QDDA produces a lot more than the displayed voltage# this is a binary version of QDDAdef QDDB():ser.write(('qddb' + '\r').encode('utf-8'))data = (ser.read(999)) #.decode('utf-8'))for i in range(0 , len(data)):print ( data)# this is the data supporting an automated recording of measurements made by Fluke 28X# the new firmware supports over a dozen 'recordings' each of which has its own identifing number# that is shown in the display when viewing memory on the meter. In QRSI use 0-## with ## representing# the last recording, not the "identifying number" IOW: there are 0 to nn slots holding recordings# that might have YMMV identifiers. Fluke is clever with this.def QRSI():ser.write(('qrsi 14' + '\r').encode('utf-8'))ser.read(2) # the OK 0 and CRdata = (ser.read(999)) #.decode('utf-8'))for i in range(0 , len(data)):print (str(i)+','+str((data)))#print (str((data)))# QSRR is reported to be the function that can access individual "samples" in a recording, presumanbly# with the actual recording identifier obtained frm QRSI. I have not been successful in accessing.def QSRR(): # No meaningful results yet, sorryser.write((('qsrr 5, 0').encode('utf-8')))ser.write(149)ser.write(('\r').encode('utf-8'))if ser.read(2): # the OK 0 and CRdata = (ser.read(999)) #.decode('utf-8'))print (data)for i in range(0 , len(data)):print (str(i)+','+str((data)))#print (((data)))# figure this one out, pleasedef QSLS():ser.write(('qsls' + '\r').encode('utf-8'))if ser.read():data = (ser.read(32).decode('utf-8'))print (data)# this is like 'main' in Cprobe()

author: View[+]Finder
author_rank: Unknown
timestamp: March 03, 2022, 11:52:44 pm
content: For an easy to use measurement print log:https://github.com/dbbotkin/Fluke289_data_access

author: Muessigb
author_rank: Contributor
timestamp: March 27, 2024, 01:20:10 am
content: Seems like it is possible to get screenshots after all...QLCDBM <offset> will give you 1020 bytes of gzip compressed MS bitmap data at a time.Read until you get less than 1020 bytes then re-assemble the data and decompress.The first five bytes of the response + number of digits of the offset have to be dropped at the beginning of each response.Also the last byte of the response (a carriage return) has to be dropped too.An offset of zero has the side-effect of actually capturing and compressing the screenshot, so it is latched in future reads to increasing offsets.There is no provision to indicate how many bytes have to be read and there is no robust framing, so care has to be taken with this.If you read past the end of the current screenshot's data, the read will succeed and return no data, which can be used as a concrete stop marker.Voila, there is your screenshotI found out the above after giving the command pointed out earlier a try and figuring out the details from looking at the responses.Together with the keyboard remote control command, this enables a whole host of new possibilities