# Change XYZ to the UID of your One Wire Bricklet

setup:
	publish '{"identifier": 0, "command": 78}' to tinkerforge/request/one_wire_bricklet/XYZ/write_command  # WRITE SCRATCHPAD
	publish '{"data": 0}' to tinkerforge/request/one_wire_bricklet/XYZ/write  # ALARM H (unused)
	publish '{"data": 0}' to tinkerforge/request/one_wire_bricklet/XYZ/write  # ALARM L (unused)
	publish '{"data": 127}' to tinkerforge/request/one_wire_bricklet/XYZ/write  # CONFIGURATION: 12 bit mode
	
	# Read temperature 10 times
	for i in 0..9:
		publish '{"identifier": 0, "command": 68}' to tinkerforge/request/one_wire_bricklet/XYZ/write_command  # CONVERT T (start temperature conversion)
		wait for 1s  # Wait for conversion to finish
		publish '{"identifier": 0, "command": 190}' to tinkerforge/request/one_wire_bricklet/XYZ/write_command  # READ SCRATCHPAD
		
		subscribe to tinkerforge/response/one_wire_bricklet/XYZ/read # Subscribe to responses for read commands below
            first message is t_low
            second message is t_high
		endsubscribe
		
		publish '' to tinkerforge/request/one_wire_bricklet/XYZ/read # Read t_low
		publish '' to tinkerforge/request/one_wire_bricklet/XYZ/read # Read t_high
		
		set temperature to t_low | (t_high << 8) 
		if temperature > (1 << 12)
            set temperature to temperature - (1 << 16) # Negative 12-bit values are sign-extended to 16-bit two's complement.
        endif
        
        set temperature to temperature / 16 # 12 bit mode measures in units of 1/16°C.
        print temperature
	endfor
